package it.niedermann.nextcloud.deck.api; import com.nextcloud.android.sso.api.ParsedResponse; import java.util.List; import io.reactivex.Observable; import it.niedermann.nextcloud.deck.model.AccessControl; import it.niedermann.nextcloud.deck.model.Attachment; import it.niedermann.nextcloud.deck.model.Board; import it.niedermann.nextcloud.deck.model.Card; import it.niedermann.nextcloud.deck.model.Label; import it.niedermann.nextcloud.deck.model.Stack; import it.niedermann.nextcloud.deck.model.full.FullBoard; import it.niedermann.nextcloud.deck.model.full.FullCard; import it.niedermann.nextcloud.deck.model.full.FullStack; import it.niedermann.nextcloud.deck.model.propagation.CardUpdate; import it.niedermann.nextcloud.deck.model.propagation.Reorder; import okhttp3.MultipartBody; import okhttp3.ResponseBody; import retrofit2.http.Body; import retrofit2.http.DELETE; import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.Header; import retrofit2.http.Multipart; import retrofit2.http.POST; import retrofit2.http.PUT; import retrofit2.http.Part; import retrofit2.http.Path; import retrofit2.http.Query; public interface DeckAPI { String MODIFIED_SINCE_HEADER = "If-Modified-Since"; String IF_NONE_MATCH = "If-None-Match"; // ### BOARDS @POST("boards") Observable createBoard(@Body Board board); @GET("boards/{id}") Observable getBoard(@Path("id") long id, @Header(MODIFIED_SINCE_HEADER) String lastSync); @PUT("boards/{id}") Observable updateBoard(@Path("id") long id, @Body Board board); @DELETE("boards/{id}") Observable deleteBoard(@Path("id") long id); @DELETE("boards/{id}/undo_delete") Observable restoreBoard(@Path("id") long id); @GET("boards") Observable>> getBoards(@Query ("details") boolean verbose, @Header(MODIFIED_SINCE_HEADER) String lastSync, @Header(IF_NONE_MATCH) String eTag); // ### Stacks @POST("boards/{boardId}/stacks") Observable createStack(@Path("boardId") long boardId, @Body Stack stack); @PUT("boards/{boardId}/stacks/{stackId}") Observable updateStack(@Path("boardId") long boardId, @Path("stackId") long id, @Body Stack stack); @DELETE("boards/{boardId}/stacks/{stackId}") Observable deleteStack(@Path("boardId") long boardId, @Path("stackId") long id); @GET("boards/{boardId}/stacks/{stackId}") Observable getStack(@Path("boardId") long boardId, @Path("stackId") long id, @Header(MODIFIED_SINCE_HEADER) String lastSync); @GET("boards/{boardId}/stacks") Observable> getStacks(@Path("boardId") long boardId, @Header(MODIFIED_SINCE_HEADER) String lastSync); @GET("boards/{boardId}/stacks/archived") Observable> getArchivedStacks(@Path("boardId") long boardId, @Header(MODIFIED_SINCE_HEADER) String lastSync); // ### Cards @POST("boards/{boardId}/stacks/{stackId}/cards") Observable createCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Body Card card); @PUT("boards/{boardId}/stacks/{stackId}/cards/{cardId}") Observable updateCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Body CardUpdate card); @FormUrlEncoded @PUT("boards/{boardId}/stacks/{stackId}/cards/{cardId}/assignLabel") Observable assignLabelToCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Field("labelId") long labelId); @FormUrlEncoded @PUT("boards/{boardId}/stacks/{stackId}/cards/{cardId}/removeLabel") Observable unassignLabelFromCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Field("labelId") long labelId); @FormUrlEncoded @PUT("boards/{boardId}/stacks/{stackId}/cards/{cardId}/assignUser") Observable assignUserToCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Field("userId") String userUID); @FormUrlEncoded @PUT("boards/{boardId}/stacks/{stackId}/cards/{cardId}/unassignUser") Observable unassignUserFromCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Field("userId") String userUID); @PUT("boards/{boardId}/stacks/{stackId}/cards/{cardId}/reorder") Observable> moveCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Body Reorder reorder); @DELETE("boards/{boardId}/stacks/{stackId}/cards/{cardId}") Observable deleteCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId); @GET("boards/{boardId}/stacks/{stackId}/cards/{cardId}") Observable getCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Header(MODIFIED_SINCE_HEADER) String lastSync); // ### LABELS @GET("boards/{boardId}/labels/{labelId}") Observable