package com.santiparra.yomitrack.api; import com.google.gson.JsonObject; import com.santiparra.yomitrack.db.entities.AnimeEntity; import com.santiparra.yomitrack.db.entities.MangaEntity; import com.santiparra.yomitrack.db.entities.UserEntity; import com.santiparra.yomitrack.model.AniListMedia; import com.santiparra.yomitrack.model.AnimePageResponse; import com.santiparra.yomitrack.model.ApiResponse; import com.santiparra.yomitrack.model.CommentModel; import com.santiparra.yomitrack.model.LoginResponse; import com.santiparra.yomitrack.model.MangaPageResponse; import com.santiparra.yomitrack.model.RegisterResponse; import com.santiparra.yomitrack.model.UserStatsResponse; import com.santiparra.yomitrack.utils.ActivityLog; import java.util.List; import java.util.Map; import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.DELETE; import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.HTTP; import retrofit2.http.POST; import retrofit2.http.PUT; import retrofit2.http.Path; import retrofit2.http.Query; public interface ApiService { // ---------------- Usuario ---------------- @POST("users/register") Call registerUser(@Body UserEntity user); @POST("users/login") Call loginUser(@Body UserEntity user); @FormUrlEncoded @POST("users/forgot-password") Call forgotPassword(@Field("email") String email); @FormUrlEncoded @POST("users/reset-password") Call resetPassword( @Field("email") String email, @Field("token") String token, @Field("newPassword") String newPassword ); // ---------------- Anime ---------------- @POST("anime/add") Call insertAnime(@Body AnimeEntity anime); // Scroll infinito: obtener lista paginada @GET("/anime/list/{userId}") Call getAnimes( @Path("userId") int userId, @Query("page") int page, @Query("size") int size ); @PUT("anime/{id}") Call updateAnime(@Path("id") int animeId, @Body AnimeEntity anime); @DELETE("anime/delete/{id}") Call deleteAnime(@Path("id") int id); // ---------------- Manga ---------------- @POST("manga/add") Call insertManga(@Body MangaEntity manga); @GET("/manga/list/{userId}") Call getMangas( @Path("userId") int userId, @Query("page") int page, @Query("size") int size ); @GET("manga/user/{userId}/status/{status}") Call> getMangaByUserAndStatus( @Path("userId") int userId, @Path("status") String status ); @PUT("manga/{id}") Call updateManga(@Path("id") int mangaId, @Body MangaEntity manga); @DELETE("manga/delete/{id}") Call deleteManga(@Path("id") int id); // ---------------- Activity ------------------- @GET("users/{id}/stats") Call getUserStats(@Path("id") int userId); @GET("api/activity/list/{userId}") Call> getActivityLog(@Path("userId") int userId); @GET("api/activity/comments/{activityId}") Call> getCommentsByActivity(@Path("activityId") int activityId); @GET("/api/activity/like/{userId}/{activityId}") Call checkLike( @Path("userId") int userId, @Path("activityId") int activityId ); @GET("anime/user/{userId}/status/{status}") Call> getAnimeByUserAndStatus( @Path("userId") int userId, @Path("status") String status ); @POST("api/activity/like") Call postLike(@Body JsonObject body); @POST("api/activity/comment") Call postComment(@Body JsonObject body); @POST("api/activity/add") Call postActivity(@Body Map body); @HTTP(method = "DELETE", path = "api/activity/like/remove", hasBody = true) Call deleteLike(@Body JsonObject body); // ---------------- AniList API ---------------- @GET("anilist/search") Call> searchAniList(@Query("query") String query, @Query("type") String type); }