package com.capstone.foodify.API; import static com.capstone.foodify.Common.TOKEN; import androidx.annotation.NonNull; import com.capstone.foodify.Model.Address; import com.capstone.foodify.Model.Comment; import com.capstone.foodify.Model.Food; import com.capstone.foodify.Model.Order; import com.capstone.foodify.Model.Response.Addresses; import com.capstone.foodify.Model.Response.Comments; import com.capstone.foodify.Model.Response.CustomResponse; import com.capstone.foodify.Model.Response.Foods; import com.capstone.foodify.Model.Response.Orders; import com.capstone.foodify.Model.User; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import java.io.IOException; import java.util.List; import okhttp3.Interceptor; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import retrofit2.Call; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; import retrofit2.http.Body; import retrofit2.http.DELETE; import retrofit2.http.GET; import retrofit2.http.POST; import retrofit2.http.PUT; import retrofit2.http.Path; import retrofit2.http.Query; public interface FoodApiToken { Gson gson = new GsonBuilder().setDateFormat("HH:mm:ss dd-MM-yyyy").setLenient().create(); OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new Interceptor() { @NonNull @Override public Response intercept(@NonNull Chain chain) throws IOException { Request newRequest = chain.request().newBuilder().addHeader("Authorization", "Bearer " + TOKEN).build(); return chain.proceed(newRequest); } }).build(); FoodApiToken apiService = new Retrofit.Builder() .client(client) .baseUrl("https://foodify-backend-production.up.railway.app/api/").addConverterFactory(GsonConverterFactory.create(gson)) .build() .create(FoodApiToken.class); @POST("users/{userId}/loves/{productId}") Call addFoodToFavorite(@Path("userId") int userId, @Path("productId") int productId); @DELETE("users/{userId}/loves/{productId}") Call removeFoodFromFavorite(@Path("userId") int userId, @Path("productId") int productId); @GET("users/email/{userEmail}") Call getUserFromEmail(@Path("userEmail") String userEmail); @GET("users/{userId}/loves") Call getListFavoriteFood(@Path("userId") int userId, @Query("pageNo") int pageNo, @Query("pageSize") int pageSize, @Query("sortBy") String sortBy, @Query("sortDir") String sortDir); @PUT("users/{userId}") Call updateUser(@Path("userId") int userId, @Body User user); @GET("users/{userId}/loves/{productId}") Call checkFoodIsFavorite(@Path("userId") int userId, @Path("productId") int productId); @POST("users/{userId}/addresses") Call createAddressUser(@Path("userId") int userId, @Body Address address); @PUT("users/{userId}/addresses/{addressId}") Call editAddressUser(@Path("userId") int userId, @Path("addressId") int addressId, @Body Address address); @DELETE("users/{userId}/addresses/{addressId}") Call deleteAddressUser(@Path("userId") int userId, @Path("addressId") int addressId); @POST("users/{userId}/orders") Call createOrder(@Path("userId") int userId, @Body Order order); @POST("products/{productId}/comments") Call createComment(@Path("productId") int productId, @Body Comment comment); @DELETE("products/{productId}/comments/{commentId}") Call deleteComment(@Path("productId") int productId, @Path("commentId") int commentId); @PUT("products/{productId}/comments/{commentId}") Call updateComment(@Path("productId") int productId, @Path("commentId") int commentId, @Body Comment comment); @GET("users/{userId}/orders/status/{status}") Call getOrderUser(@Path("userId") int userId, @Path("status") String status, @Query("pageNo") int pageNo, @Query("pageSize") int pageSize, @Query("sortBy") String sortBy, @Query("sortDir") String sortDir); @DELETE("users/{userId}/orders/{orderId}") Call deleteOrder(@Path("userId") int userId, @Path("orderId") int orderId); }