RatingController.java
package com.learning.yasminishop.rating;
import com.learning.yasminishop.common.dto.APIResponse;
import com.learning.yasminishop.common.dto.PaginationResponse;
import com.learning.yasminishop.common.exception.AppException;
import com.learning.yasminishop.common.exception.ErrorCode;
import com.learning.yasminishop.rating.dto.request.RatingRequest;
import com.learning.yasminishop.rating.dto.response.RatingResponse;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/rating")
@RequiredArgsConstructor
@Slf4j
public class RatingController {
private final RatingService ratingService;
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public APIResponse<RatingResponse> createRating(@Valid @RequestBody RatingRequest ratingRequest) {
RatingResponse ratingResponse = ratingService.create(ratingRequest);
return APIResponse.<RatingResponse>builder()
.result(ratingResponse)
.build();
}
@GetMapping
@ResponseStatus(HttpStatus.OK)
public APIResponse<PaginationResponse<RatingResponse>> getRatings(
@RequestParam String productId,
@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer itemsPerPage
) {
if(page < 1 || itemsPerPage < 1) {
throw new AppException(ErrorCode.INVALID_PAGEABLE);
}
Pageable pageable = PageRequest.of(page - 1, itemsPerPage);
var ratings = ratingService.getRatings(productId, pageable);
return APIResponse.<PaginationResponse<RatingResponse>>builder()
.result(ratings)
.build();
}
}