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 index 2f7d914..72d5f07 100644 --- a/app/src/main/java/com/example/tampopo_client/viewmodels/ActivityViewModel.java +++ b/app/src/main/java/com/example/tampopo_client/viewmodels/ActivityViewModel.java @@ -1,21 +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 Retrofit retrofit; private final ActivitiesResource activitiesResource; + private final MutableLiveData> activitiesLiveData; + public ActivityViewModel() { - retrofit = new Retrofit.Builder() + 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; } }