package com.alorma.github.sdk.services.issues; import com.alorma.github.sdk.bean.dto.request.CommentRequest; import com.alorma.github.sdk.bean.dto.request.CreateMilestoneRequestDTO; import com.alorma.github.sdk.bean.dto.request.EditIssueRequestDTO; import com.alorma.github.sdk.bean.dto.request.IssueRequest; import com.alorma.github.sdk.bean.dto.response.GithubComment; import com.alorma.github.sdk.bean.dto.response.GithubEvent; import com.alorma.github.sdk.bean.dto.response.Issue; import com.alorma.github.sdk.bean.dto.response.Label; import com.alorma.github.sdk.bean.dto.response.Milestone; import com.alorma.github.sdk.bean.dto.response.User; import java.util.List; import java.util.Map; import retrofit.Callback; import retrofit.client.Response; import retrofit.http.Body; import retrofit.http.DELETE; import retrofit.http.GET; import retrofit.http.PATCH; import retrofit.http.POST; import retrofit.http.Path; import retrofit.http.Query; import retrofit.http.QueryMap; import rx.Observable; public interface IssuesService { //Async @GET("/repos/{owner}/{name}/issues?sort=updated") void issues(@Path("owner") String owner, @Path("name") String repo, @QueryMap Map<String, String> filter, Callback<List<Issue>> callback); @GET("/repos/{owner}/{name}/issues?sort=updated") void issues(@Path("owner") String owner, @Path("name") String repo, @QueryMap Map<String, String> filter, @Query("page") int page, Callback<List<Issue>> callback); @GET("/issues") void issues(@QueryMap Map<String, String> filter, Callback<List<Issue>> callback); @GET("/issues") void issues(@QueryMap Map<String, String> filter, @Query("page") int page, Callback<List<Issue>> callback); @GET("/issues") void userIssues(Callback<List<Issue>> callback); @GET("/issues") void userIssues(@Query("page") int page, Callback<List<Issue>> callback); @GET("/repos/{owner}/{name}/issues/{num}/comments") void comments(@Path("owner") String owner, @Path("name") String repo, @Path("num") int num, Callback<List<GithubComment>> callback); @GET("/repos/{owner}/{name}/issues/{num}/comments") void comments(@Path("owner") String owner, @Path("name") String repo, @Path("num") int num, @Query("page") int page, Callback<List<GithubComment>> callback); @GET("/repos/{owner}/{name}/issues/{num}/events") void events(@Path("owner") String owner, @Path("name") String repo, @Path("num") int num, Callback<List<GithubEvent>> callback); @GET("/repos/{owner}/{name}/issues/{num}/events") void events(@Path("owner") String owner, @Path("name") String repo, @Path("num") int num, @Query("page") int page, Callback<List<GithubEvent>> callback); @GET("/repos/{owner}/{name}/milestones") //State can be open, closed and all void milestones(@Path("owner") String owner, @Path("name") String repo, @Query("state") String state, Callback<List<Milestone>> callback); @GET("/repos/{owner}/{name}/milestones") //State can be open, closed and all void milestones(@Path("owner") String owner, @Path("name") String repo, @Query("state") String state, @Query("page") int page, Callback<List<Milestone>> callback); @GET("/repos/{owner}/{name}/labels") void labels(@Path("owner") String owner, @Path("name") String repo, Callback<List<Label>> callback); @GET("/repos/{owner}/{name}/labels") void labels(@Path("owner") String owner, @Path("name") String repo, @Query("page") int page, Callback<List<Label>> callback); @GET("/repos/{owner}/{name}/assignees") void assignees(@Path("owner") String owner, @Path("name") String repo, Callback<List<User>> callback); @GET("/repos/{owner}/{name}/assignees") void assignees(@Path("owner") String owner, @Path("name") String repo, @Query("page") int page, Callback<List<User>> callback); //Sync @GET("/repos/{owner}/{name}/issues?sort=updated") List<Issue> issues(@Path("owner") String owner, @Path("name") String repo, @QueryMap Map<String, String> filter); @GET("/repos/{owner}/{name}/issues?sort=updated") List<Issue> issues(@Path("owner") String owner, @Path("name") String repo, @QueryMap Map<String, String> filter, @Query("page") int page); @GET("/issues") List<Issue> issues(@QueryMap Map<String, String> filter); @GET("/issues") List<Issue> issues(@QueryMap Map<String, String> filter, @Query("page") int page); @POST("/repos/{owner}/{name}/issues") Observable<Issue> create(@Path("owner") String owner, @Path("name") String repo, @Body IssueRequest issue); @GET("/repos/{owner}/{name}/issues/{num}") Observable<Issue> detail(@Path("owner") String owner, @Path("name") String repo, @Path("num") int num); @GET("/repos/{owner}/{name}/issues/{num}/comments") List<GithubComment> comments(@Path("owner") String owner, @Path("name") String repo, @Path("num") int num); @GET("/repos/{owner}/{name}/issues/{num}/comments") List<GithubComment> comments(@Path("owner") String owner, @Path("name") String repo, @Path("num") int num, @Query("page") int page); @GET("/repos/{owner}/{name}/issues/{num}/events") List<GithubEvent> events(@Path("owner") String owner, @Path("name") String repo, @Path("num") int num); @GET("/repos/{owner}/{name}/issues/{num}/events") List<GithubEvent> events(@Path("owner") String owner, @Path("name") String repo, @Path("num") int num, @Query("page") int page); @PATCH("/repos/{owner}/{name}/issues/{num}") Observable<Issue> closeIssue(@Path("owner") String owner, @Path("name") String repo, @Path("num") int num, @Body IssueRequest issueRequest); @POST("/repos/{owner}/{name}/issues/{num}/comments") Observable<GithubComment> addComment(@Path("owner") String owner, @Path("name") String repo, @Path("num") int num, @Body GithubComment comment); @GET("/repos/{owner}/{name}/labels") List<Label> labels(@Path("owner") String owner, @Path("name") String repo); @GET("/repos/{owner}/{name}/labels") List<Label> labels(@Path("owner") String owner, @Path("name") String repo, @Query("page") int page); @POST("/repos/{owner}/{name}/milestones") Observable<Milestone> createMilestone(@Path("owner") String owner, @Path("name") String repo, @Body CreateMilestoneRequestDTO createMilestoneRequestDTO); @PATCH("/repos/{owner}/{name}/issues/{number}") Observable<Issue> editIssue(@Path("owner") String owner, @Path("name") String repo, @Path("number") int number, @Body EditIssueRequestDTO editIssueRequestDTO); @DELETE("/repos/{owner}/{name}/issues/comments/{id}") Observable<Response> deleteComment(@Path("owner") String owner, @Path("name") String name, @Path("id") String id); @PATCH("/repos/{owner}/{name}/issues/comments/{id}") Observable<GithubComment> editComment(@Path("owner") String owner, @Path("name") String name, @Path("id") String id, @Body CommentRequest body); }