From f43eb684c83c7b812773b084b508abe03da3767b Mon Sep 17 00:00:00 2001 From: Negue Date: Thu, 20 Apr 2017 20:04:31 +0200 Subject: [PATCH] Create / Update / Delete Challenge API-Routes --- .../android/habitica/ApiClientImpl.java | 17 ++++++++++ .../habitica/data/ChallengeRepository.java | 12 +++++++ .../ChallengeRepositoryImpl.java | 32 +++++++++++++++++++ .../habitica/modules/RepositoryModule.java | 10 ++++++ .../habitrpgwrapper/lib/api/ApiClient.java | 5 +++ .../habitrpgwrapper/lib/api/ApiService.java | 11 +++++++ .../lib/models/PostChallenge.java | 25 +++++++++++++++ 7 files changed, 112 insertions(+) create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/data/ChallengeRepository.java create mode 100644 Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ChallengeRepositoryImpl.java create mode 100644 Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/PostChallenge.java diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ApiClientImpl.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ApiClientImpl.java index a01d208ad..91b34a6f1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ApiClientImpl.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ApiClientImpl.java @@ -25,6 +25,7 @@ import com.magicmicky.habitrpgwrapper.lib.models.Group; import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; import com.magicmicky.habitrpgwrapper.lib.models.Items; import com.magicmicky.habitrpgwrapper.lib.models.LeaveChallengeBody; +import com.magicmicky.habitrpgwrapper.lib.models.PostChallenge; import com.magicmicky.habitrpgwrapper.lib.models.PostChatMessageResult; import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationRequest; import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationResult; @@ -811,6 +812,22 @@ public class ApiClientImpl implements Action1, ApiClient { return apiService.leaveChallenge(challengeId, body).compose(configureApiCallObserver()); } + + @Override + public Observable createChallenge(PostChallenge challenge){ + return apiService.createChallenge(challenge).compose(configureApiCallObserver()); + } + + @Override + public Observable updateChallenge(PostChallenge challenge){ + return apiService.updateChallenge(challenge.id, challenge).compose(configureApiCallObserver()); + } + + @Override + public Observable deleteChallenge(String challengeId){ + return apiService.deleteChallenge(challengeId).compose(configureApiCallObserver()); + } + @Override public Observable debugAddTenGems() { return apiService.debugAddTenGems().compose(configureApiCallObserver()); diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ChallengeRepository.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ChallengeRepository.java new file mode 100644 index 000000000..f67a7796f --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ChallengeRepository.java @@ -0,0 +1,12 @@ +package com.habitrpg.android.habitica.data; + +import com.magicmicky.habitrpgwrapper.lib.models.Challenge; +import com.magicmicky.habitrpgwrapper.lib.models.PostChallenge; + +import rx.Observable; + +public interface ChallengeRepository extends BaseRepository { + Observable createChallenge(PostChallenge challenge); + Observable updateChallenge(PostChallenge challenge); + Observable deleteChallenge(String challengeId); +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ChallengeRepositoryImpl.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ChallengeRepositoryImpl.java new file mode 100644 index 000000000..6db933420 --- /dev/null +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ChallengeRepositoryImpl.java @@ -0,0 +1,32 @@ +package com.habitrpg.android.habitica.data.implementation; + +import com.habitrpg.android.habitica.data.ChallengeRepository; +import com.habitrpg.android.habitica.data.local.ChallengeLocalRepository; +import com.magicmicky.habitrpgwrapper.lib.api.ApiClient; +import com.magicmicky.habitrpgwrapper.lib.models.Challenge; +import com.magicmicky.habitrpgwrapper.lib.models.PostChallenge; + +import rx.Observable; + + +public class ChallengeRepositoryImpl extends BaseRepositoryImpl implements ChallengeRepository { + + public ChallengeRepositoryImpl(ChallengeLocalRepository localRepository, ApiClient apiClient) { + super(localRepository, apiClient); + } + + @Override + public Observable createChallenge(PostChallenge challenge) { + return apiClient.createChallenge(challenge); + } + + @Override + public Observable updateChallenge(PostChallenge challenge) { + return apiClient.updateChallenge(challenge); + } + + @Override + public Observable deleteChallenge(String challengeId) { + return apiClient.deleteChallenge(challengeId); + } +} diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.java b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.java index 1d426b88f..63e7338b1 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.java +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/modules/RepositoryModule.java @@ -1,9 +1,11 @@ package com.habitrpg.android.habitica.modules; +import com.habitrpg.android.habitica.data.ChallengeRepository; import com.habitrpg.android.habitica.data.SetupCustomizationRepository; import com.habitrpg.android.habitica.data.TagRepository; import com.habitrpg.android.habitica.data.TaskRepository; +import com.habitrpg.android.habitica.data.implementation.ChallengeRepositoryImpl; import com.habitrpg.android.habitica.data.implementation.SetupCustomizationRepositoryImpl; import com.habitrpg.android.habitica.data.implementation.TagRepositoryImpl; import com.habitrpg.android.habitica.data.implementation.TaskRepositoryImpl; @@ -32,6 +34,7 @@ public class RepositoryModule { } @Provides + @Singleton ChallengeLocalRepository provideChallengeLocalRepository(){ return new DbFlowChallengeLocalRepository(); } @@ -47,6 +50,13 @@ public class RepositoryModule { return new TaskRepositoryImpl(localRepository, apiClient); } + @Provides + @Singleton + ChallengeRepository providesChallengeRepository(ChallengeLocalRepository localRepository, ApiClient apiClient) { + return new ChallengeRepositoryImpl(localRepository, apiClient); + } + + @Provides TagLocalRepository providesTagLocalRepository() { return new TagLocalRepositoryImpl(); diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiClient.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiClient.java index 3ee885371..5e0ce48a5 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiClient.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiClient.java @@ -11,6 +11,7 @@ import com.magicmicky.habitrpgwrapper.lib.models.Group; import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; import com.magicmicky.habitrpgwrapper.lib.models.Items; import com.magicmicky.habitrpgwrapper.lib.models.LeaveChallengeBody; +import com.magicmicky.habitrpgwrapper.lib.models.PostChallenge; import com.magicmicky.habitrpgwrapper.lib.models.PostChatMessageResult; import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationRequest; import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationResult; @@ -200,6 +201,10 @@ public interface ApiClient { Observable leaveChallenge(String challengeId, LeaveChallengeBody body); + Observable createChallenge(PostChallenge challenge); + Observable updateChallenge(PostChallenge challenge); + Observable deleteChallenge(String challengeId); + //DEBUG: These calls only work on a local development server Observable debugAddTenGems(); diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java index b7fc47b8a..f738e5714 100644 --- a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/api/ApiService.java @@ -8,6 +8,7 @@ import com.magicmicky.habitrpgwrapper.lib.models.Group; import com.magicmicky.habitrpgwrapper.lib.models.HabitRPGUser; import com.magicmicky.habitrpgwrapper.lib.models.Items; import com.magicmicky.habitrpgwrapper.lib.models.LeaveChallengeBody; +import com.magicmicky.habitrpgwrapper.lib.models.PostChallenge; import com.magicmicky.habitrpgwrapper.lib.models.PostChatMessageResult; import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationRequest; import com.magicmicky.habitrpgwrapper.lib.models.PurchaseValidationResult; @@ -287,6 +288,16 @@ public interface ApiService { @POST("challenges/{challengeId}/leave") Observable> leaveChallenge(@Path("challengeId") String challengeId, @Body LeaveChallengeBody body); + @POST("challenges") + Observable> createChallenge(@Body PostChallenge challenge); + + @PUT("challenges/{challengeId}") + Observable> updateChallenge(@Path("challengeId") String challengeId, @Body PostChallenge challenge); + + @DELETE("challenges/{challengeId}") + Observable> deleteChallenge(@Path("challengeId") String challengeId); + + //DEBUG: These calls only work on a local development server @POST("debug/add-ten-gems") diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/PostChallenge.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/PostChallenge.java new file mode 100644 index 000000000..25accfd46 --- /dev/null +++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/PostChallenge.java @@ -0,0 +1,25 @@ +package com.magicmicky.habitrpgwrapper.lib.models; + +import com.magicmicky.habitrpgwrapper.lib.models.tasks.TasksOrder; + +/** + * Needs to be a separate Class, the normal Challenge has the group as Object + * The Challenge for adding/updating just has the group as id + */ +public class PostChallenge { + public String id; + + public String name; + + public String shortName; + + public String description; + + public String leaderName; + + public String group; + + public int prize; + + public TasksOrder tasksOrder; +}