package it.niedermann.nextcloud.deck.remote.api; import com.nextcloud.android.sso.api.EmptyResponse; 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.enums.EAttachmentType; 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; /** * @link Deck REST API */ public interface DeckAPI { String MODIFIED_SINCE_HEADER = "If-Modified-Since"; String IF_NONE_MATCH = "If-None-Match"; // Boards @POST("v1.0/boards") Observable createBoard(@Body Board board); @GET("v1.0/boards/{id}") Observable getBoard(@Path("id") long id, @Header(MODIFIED_SINCE_HEADER) String lastSync); @PUT("v1.0/boards/{id}") Observable updateBoard(@Path("id") long id, @Body Board board); @DELETE("v1.0/boards/{id}") Observable deleteBoard(@Path("id") long id); @DELETE("v1.0/boards/{id}/undo_delete") Observable restoreBoard(@Path("id") long id); @GET("v1.0/boards") Observable>> getBoards(@Query("details") boolean verbose, @Header(MODIFIED_SINCE_HEADER) String lastSync, @Header(IF_NONE_MATCH) String eTag); @GET("v1.0/boards") Observable>> getBoards(@Query("details") boolean verbose, @Header(MODIFIED_SINCE_HEADER) String lastSync); // Stacks @POST("v1.0/boards/{boardId}/stacks") Observable createStack(@Path("boardId") long boardId, @Body Stack stack); @PUT("v1.0/boards/{boardId}/stacks/{stackId}") Observable updateStack(@Path("boardId") long boardId, @Path("stackId") long id, @Body Stack stack); @DELETE("v1.0/boards/{boardId}/stacks/{stackId}") Observable deleteStack(@Path("boardId") long boardId, @Path("stackId") long id); @GET("v1.0/boards/{boardId}/stacks/{stackId}") Observable getStack(@Path("boardId") long boardId, @Path("stackId") long id, @Header(MODIFIED_SINCE_HEADER) String lastSync); @GET("v1.0/boards/{boardId}/stacks") Observable> getStacks(@Path("boardId") long boardId, @Header(MODIFIED_SINCE_HEADER) String lastSync); @GET("v1.0/boards/{boardId}/stacks/archived") Observable> getArchivedStacks(@Path("boardId") long boardId, @Header(MODIFIED_SINCE_HEADER) String lastSync); // Cards @POST("v1.0/boards/{boardId}/stacks/{stackId}/cards") Observable createCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Body Card card); @PUT("v1.0/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("v1.0/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("v1.0/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("v1.0/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("v1.0/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("v1.0/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("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}") Observable deleteCard(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId); /** * @see This endpoint does only return {@link Attachment}s of type {@link EAttachmentType.DECK_FILE} */ @SuppressWarnings("JavadocReference") @GET("v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}") Observable getCard_1_0(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Header(MODIFIED_SINCE_HEADER) String lastSync); @GET("v1.1/boards/{boardId}/stacks/{stackId}/cards/{cardId}") Observable getCard_1_1(@Path("boardId") long boardId, @Path("stackId") long stackId, @Path("cardId") long cardId, @Header(MODIFIED_SINCE_HEADER) String lastSync); // Labels @GET("v1.0/boards/{boardId}/labels/{labelId}") Observable