diff --git a/app/src/main/java/com/example/tampopo_client/models/Activity.java b/app/src/main/java/com/example/tampopo_client/models/Activity.java new file mode 100644 index 0000000..7c3d626 --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/models/Activity.java @@ -0,0 +1,47 @@ +package com.example.tampopo_client.models; + +public class Activity { + private String userId; + private String activityId; + private String text; + private String updateTime; + + public Activity(String userId, String activityId, String text, String updateTime) { + this.userId = userId; + this.activityId = activityId; + this.text = text; + this.updateTime = updateTime; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getActivityId() { + return activityId; + } + + public void setActivityId(String activityId) { + this.activityId = activityId; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } +} diff --git a/app/src/main/java/com/example/tampopo_client/resources/ActivitiesResource.java b/app/src/main/java/com/example/tampopo_client/resources/ActivitiesResource.java new file mode 100644 index 0000000..7df8292 --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/resources/ActivitiesResource.java @@ -0,0 +1,38 @@ +package com.example.tampopo_client.resources; + +import com.example.tampopo_client.models.Activity; + +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.Path; +import retrofit2.http.Query; + +public interface ActivitiesResource { + @GET("users/{user_id}/activities") + Call> getActivities(@Path("user_id") String userId, @Query("filter") String filter); + + @POST("users/{user_id}/activities") + @FormUrlEncoded + Call addActivity(@Path("user_id") String userId, @Field("token") String token, @Field("new-activity") String newActivity); // FIXME: We need to rename new-activity to new_activity + + @GET("users/{user_id}/activities/{activity_id}") + Call getActivity(@Path("user_id") String userId, @Path("activity_id") String activityId); + + @DELETE("users/{user_id}/activities/{activity_id}") + Call deleteActivity(@Path("user_id") String userId, @Path("activity_id") String activityId, @Query("token") String token); + + @GET("users/{user_id}/activities/{activity_id}/text") + Call getText(@Path("user_id") String userId, @Path("activity_id") String activityId); + + @GET("users/{user_id}/activities/{activity_id}/updated-time") + Call getUpdatedTime(@Path("user_id") String userId, @Path("activity_id") String activityId); + + @GET("users/{user_id}/activities/last-updated-time") + Call getLastUpdatedTime(@Path("user_id") String userId, @Path("activity_id") String activityId); +} diff --git a/app/src/main/java/com/example/tampopo_client/viewmodels/ActivityViewModel.java b/app/src/main/java/com/example/tampopo_client/viewmodels/ActivityViewModel.java new file mode 100644 index 0000000..72d5f07 --- /dev/null +++ b/app/src/main/java/com/example/tampopo_client/viewmodels/ActivityViewModel.java @@ -0,0 +1,84 @@ +package com.example.tampopo_client.viewmodels; + +import android.util.Log; + +import androidx.annotation.NonNull; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +import com.example.tampopo_client.models.Activity; +import com.example.tampopo_client.resources.ActivitiesResource; + +import java.util.ArrayList; +import java.util.List; + +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; +import retrofit2.converter.jackson.JacksonConverterFactory; + +/** + * アクティビティを扱うためのViewModel + * + * @author Shohei Yamagiwa + * @implNote Repositoryは作成せずに、すべてViewModelで処理する + */ +public class ActivityViewModel extends ViewModel { + private final ActivitiesResource activitiesResource; + + private final MutableLiveData> activitiesLiveData; + + public ActivityViewModel() { + final Retrofit retrofit = new Retrofit.Builder() + .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/tampopo-server/") + .addConverterFactory(JacksonConverterFactory.create()) + .build(); + activitiesResource = retrofit.create(ActivitiesResource.class); + + activitiesLiveData = new MutableLiveData<>(List.of()); + } + + public void createActivity(String userId, String token, String newActivity) { + Call createActivityCall = activitiesResource.addActivity(userId, token, newActivity); + createActivityCall.enqueue(new Callback() { + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) { + if (response.isSuccessful()) { + String createdActivityId = response.body(); + + // TODO: 仮作成なので改善必須 + Call getActivityCall = activitiesResource.getActivity(userId, createdActivityId); + getActivityCall.enqueue(new Callback() { + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) { + List activities = activitiesLiveData.getValue(); + if (activities == null) { + activities = new ArrayList<>(); + } + Activity createdActivity = response.body(); + activities.add(createdActivity); + activitiesLiveData.postValue(activities); + } + + @Override + public void onFailure(@NonNull Call call, @NonNull Throwable t) { + Log.e(ActivityViewModel.class.getSimpleName(), "An error has occurred.", t); + } + }); + } else { + Log.e(ActivityViewModel.class.getSimpleName(), response.code() + " " + response.message()); + } + } + + @Override + public void onFailure(@NonNull Call call, @NonNull Throwable t) { + Log.e(ActivityViewModel.class.getSimpleName(), "An error has occurred.", t); + } + }); + } + + public MutableLiveData> getActivitiesLiveData() { + return activitiesLiveData; + } +}