diff --git a/app/src/main/java/com/example/tampopo_client/models/User.java b/app/src/main/java/com/example/tampopo_client/models/User.java new file mode 100644 index 0000000..c5092a1 --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/models/User.java @@ -0,0 +1,54 @@ +package com.example.tampopo_client.models; + +public class User { + + private Integer id; //ユーザーID + private String name; //ニックネーム + private String email; //メールアドレス + private String icon; //アイコン + private String token; //トークン + + + //コンストラクタ + public User(String name, String email, String icon) { + this.name = name; + this.email = email; + this.icon = icon; + } + + + public Integer getId() { + return id; + } + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + public void setName(String name){ + this.name = name; + } + + public String getEmail() { + return email; + } + public void setEmail(String email) { + this.email = email; + } + + public String getIcon() { + return icon; + } + public void setIcon(String icon){ + this.icon = icon; + } + + public String getToken() { + return token; + } + public void setToken(String token){ + this.token = token; + } +} diff --git a/app/src/main/java/com/example/tampopo_client/resources/UserResource.java b/app/src/main/java/com/example/tampopo_client/resources/UserResource.java new file mode 100644 index 0000000..7db852b --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/resources/UserResource.java @@ -0,0 +1,130 @@ +package com.example.tampopo_client.resources; +import com.example.tampopo_client.models.User; +import com.example.tampopo_client.models.FriendPair; +import java.util.List; + +import retrofit2.Call; +import retrofit2.http.DELETE; +import retrofit2.http.Field; +import retrofit2.http.FormUrlEncoded; +import retrofit2.http.GET; +import retrofit2.http.POST; +import retrofit2.http.PUT; +import retrofit2.http.Path; +import retrofit2.http.Query; + +public interface UserResource { + + + // 全ユーザ取得 + @GET("users") + Call> getUsers(); + + // 新規アカウントを作る + @FormUrlEncoded + @POST("users") + Call createUser( + @Field("user-id") String userId, + @Field("password") String password + ); + + + // 単一アカウントの情報を返す + @GET("users/{user-id}") + Call getUser(@Path("user-id") String userId); + + // ユーザ削除 + @DELETE("users/{user-id}") + Call deleteUser( + @Path("user-id") String userId, + @Query("token") String token + ); + + + //ログイン + @FormUrlEncoded + @POST("users/{user-id}/login") + Call login( + @Path("user-id") String userId, + @Field("password") String password + ); + + //アカウントのニックネームの取得 + @GET("users/{user-id}/name") + Call getName(@Path("user-id") String userId); + + //ニックネームの変更 + @FormUrlEncoded + @PUT("users/{user-id}/name") + Call updateName( + @Path("user-id") String userId, + @Field("new-name") String newName, + @Field("token") String token + ); + + // 単一アカウントのパスワードの取得 + @GET("users/{user-id}/password") + Call getPassword( + @Path("user-id") String userId, + @Query("token") String token + ); + + //指定されたIDのパスワードを変更する + @FormUrlEncoded + @PUT("users/{user-id}/password") + Call updatePassword( + @Path("user-id") String userId, + @Field("new-password") String newPassword + ); + + //単一アカウントのemailの取得 + @GET("users/{user-id}/email") + Call getEmail(@Path("user-id") String userId); + + //指定されたIDのemailを変更する + @FormUrlEncoded + @PUT("users/{user-id}/email") + Call updateEmail( + @Path("user-id") String userId, + @Field("new-email") String newEmail, + @Field("token") String token + ); + + //指定されたIDのアイコンを返す + @GET("users/{user-id}/icon") + Call getIcon(@Path("user-id") String userId); + + //アイコンを変更する + @FormUrlEncoded + @PUT("users/{user-id}/icon") + Call updateIcon( + @Path("user-id") String userId, + @Field("new-icon") String newIcon, + @Field("token") String token + ); + + //フレンド関連だがuserに置いておく + //フレンド相手の情報の取得 + @GET("users/{user-id}/friends") + Call> getFriends( + @Path("user-id") String userId, + @Query("token") String token + ); + + //自分のペアのpid一覧(JSON)の取得 + @GET("users/{user-id}/friends/{pair-id}") + Call getFriendPair( + @Path("user-id") String userId, + @Path("pair-id") int pairId, + @Query("token") String token + ); + + //ペアの削除 + @DELETE("users/{user-id}/friends/{pair-id}") + Call deleteFriendPair( + @Path("user-id") String userId, + @Path("pair-id") int pairId, + @Query("token") String token + ); + +} diff --git a/app/src/main/java/com/example/tampopo_client/viewmodels/UserViewModel.java b/app/src/main/java/com/example/tampopo_client/viewmodels/UserViewModel.java new file mode 100644 index 0000000..effcf58 --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/viewmodels/UserViewModel.java @@ -0,0 +1,72 @@ +package com.example.tampopo_client.viewmodels; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +import com.example.tampopo_client.models.User; +import com.example.tampopo_client.resources.UserResource; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; + +/*userだけなのでサーバーから情報を取ってくることは名前の変更 +viewModelはviewからrequestをもらってmodelに流す +88行目にviewからviewmodelをとる +viewmodelのインスタンスは1個しかなし +128 観測するという宣言をする +observeは2つ引数をもち、一つ目は固定、2つ目は 無名クラスで長い new observerとあるがこれはインスタンスを作っているわけではないここでしかない使わないローカルなクラス +observerの子クラスである。 observerの無名子クラスと生成するのとインスタンスを作成する 画面の変更をlistenしている + +viewModel側  +viewModelからsetValueで値を変えていく +updateUserName、updateEmail、login、createUserもある。それらを書いていく。viewから必要なものを出していく +*/ + +public class UserViewModel extends ViewModel { + + private final Retrofit retrofit; + private final UserResource userResource; + private final MutableLiveData user = new MutableLiveData<>(); + private final MutableLiveData token = new MutableLiveData<>(); + private final MutableLiveDataloading = new MutableLiveData<>(false); + private final MutableLiveData error = new MutableLiveData<>(); + + //コンストラクタ + public UserViewModel(){ + this.retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/tampopo-server/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + this.userResource = retrofit.create(UserResource.class); + } + + public LiveData getUser() { return user; } + public LiveData getToken() { return token; } + public LiveDataisLoading() { return loading;} + public LiveData getError() { return error; } + + //新規登録 + public void createUser(String id, String password) { + loading.setValue(true); + userResource.createUser(id, password).enqueue(new Callback() { + @Override public void onResponse(Call c, Response res) { + loading.setValue(false); + if (res.isSuccessful()) { + user.setValue(res.body()); + } else { + error.setValue("登録失敗: " + res.code()); + } + } + @Override public void onFailure(Call c, Throwable t) { + loading.setValue(false); + error.setValue("ネットワークエラー: " + t.getMessage()); + } + }); + } + + //viewModelのところでを呼び出すがフレンド系は西村さんの方で管理する +}