Untitled
Anonymous
plain_text
02/10/2026 8:08 AM
14.9 KB
10
Indexable
package com.vnpay.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.vnpay.common.BaseResponse;
import com.vnpay.common.CommonUtils;
import com.vnpay.common.ErrorCode;
import com.vnpay.dto.PageResponse;
import com.vnpay.dto.facility.FacilitiesSearchResponse;
import com.vnpay.dto.facility.GeneralFacilitySearchRequest;
import com.vnpay.dto.facility.LocationOptionsResponse;
import com.vnpay.dto.request.facility.FacilityDetailRequest;
import com.vnpay.dto.request.facility.FavoriteFacilitySearchRequest;
import com.vnpay.dto.request.facility.LikeFacilityRequest;
import com.vnpay.dto.request.facility.LocationOptionRequest;
import com.vnpay.dto.request.facility.MapFacilitySearchRequest;
import com.vnpay.dto.response.facility.FacilityDetailResponse;
import com.vnpay.pickle.repo.dto.FacilityReviewsResponse;
import com.vnpay.service.CourtService;
import com.vnpay.service.FacilityService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.MDC;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
@Slf4j
@RestController
@RequestMapping(value = "/facility")
@RequiredArgsConstructor
@Tag(name = "Facility Controller", description = "API lấy ra thông tin cụm sân")
public class FacilityController {
private final CourtService courtService;
private final FacilityService facilityService;
private final ObjectMapper objectMapper;
@Operation(
summary = "Tìm kiếm danh sách cụm sân theo tiêu chí",
description = "API tìm kiếm danh sách cụm sân dựa trên vị trí, bán kính và các tiêu chí lọc như sân trống hoặc sự kiện"
)
@ApiResponses(value = {
@ApiResponse(responseCode = "00", description = "Truy vấn thành công"),
@ApiResponse(responseCode = "400", description = "Tham số đầu vào không hợp lệ"),
@ApiResponse(responseCode = "90", description = "Tham số đầu vào không hợp lệ"),
@ApiResponse(responseCode = "99", description = "Exception")
})
@PostMapping("/search")
public BaseResponse<PageResponse<FacilitiesSearchResponse>> searchFacilities(
@RequestHeader(value = "X-Userinfo") String xUser,
@Valid @RequestBody GeneralFacilitySearchRequest request
) {
MDC.put(CommonUtils.TOKEN, request.getRequestId());
long startTime = System.currentTimeMillis();
BaseResponse<PageResponse<FacilitiesSearchResponse>> response =
courtService.searchFacilitiesByCriteria(xUser, request);
log.info(
"Finish search facilities by criteria, requestId={}, code={}, message={}, duration={} ms",
request.getRequestId(),
response.getCode(),
response.getMessage(),
System.currentTimeMillis() - startTime
);
return response;
}
@Operation(
summary = "Thích/ Bỏ thích cụm sân",
description = "User like hoặc unlike một cụm sân"
)
@ApiResponses({
@ApiResponse(responseCode = "00", description = "Thành công"),
@ApiResponse(responseCode = "400", description = "Tham số đầu vào không hợp lệ"),
@ApiResponse(responseCode = "02", description = "Không tìm thấy cụm sân"),
@ApiResponse(responseCode = "99", description = "Exception")
})
@PostMapping("/like")
public BaseResponse<?> likeOrUnlikeFacility(
@RequestHeader(value = "X-Userinfo") String xUser,
@Valid @RequestBody LikeFacilityRequest request
) {
MDC.put(CommonUtils.TOKEN, request.getRequestId());
long startTime = System.currentTimeMillis();
BaseResponse<?> response = courtService.likeOrUnlikeFacility(xUser, request);
log.info("Finish like/unlike facility, requestId={}, code={}, message={}, duration={} ms",
request.getRequestId(),
response.getCode(),
response.getMessage(),
System.currentTimeMillis() - startTime
);
return response;
}
@Operation(
summary = "Lấy danh sách cụm sân yêu thích của người dùng",
description = "User tìm kiếm danh sách các cụm sân đã được đánh dấu yêu thích"
)
@ApiResponses({
@ApiResponse(responseCode = "00", description = "Thành công"),
@ApiResponse(responseCode = "400", description = "Tham số đầu vào không hợp lệ"),
@ApiResponse(responseCode = "99", description = "Exception")
})
@PostMapping("/favorite")
public BaseResponse<PageResponse<FacilitiesSearchResponse>> getFavoriteFacilities(
@RequestHeader(value = "X-Userinfo") String xUser,
@Valid @RequestBody FavoriteFacilitySearchRequest request
) {
MDC.put(CommonUtils.TOKEN, request.getRequestId());
long startTime = System.currentTimeMillis();
BaseResponse<PageResponse<FacilitiesSearchResponse>> response =
courtService.getFavoriteFacilities(xUser, request);
log.info(
"Finish search favorite facilities, requestId={}, code={}, message={}, duration={} ms",
request.getRequestId(),
response.getCode(),
response.getMessage(),
System.currentTimeMillis() - startTime
);
return response;
}
@Operation(
summary = "Lấy danh sách cụm sân gần vị trí người dùng",
description = "User tìm kiếm danh sách các cụm sân xung quanh vị trí hiện tại"
)
@ApiResponses({
@ApiResponse(responseCode = "00", description = "Thành công"),
@ApiResponse(responseCode = "400", description = "Tham số đầu vào không hợp lệ"),
@ApiResponse(responseCode = "99", description = "Exception")
})
@PostMapping("/nearby")
public BaseResponse<List<FacilitiesSearchResponse>> searchFacilitiesNearby(
@RequestHeader(value = "X-Userinfo") String xUser,
@Valid @RequestBody MapFacilitySearchRequest request
) {
MDC.put(CommonUtils.TOKEN, request.getRequestId());
long startTime = System.currentTimeMillis();
BaseResponse<List<FacilitiesSearchResponse>> response =
courtService.searchFacilitiesByLocation(xUser, request);
log.info(
"Finish search facilities nearby, requestId={}, code={}, message={}, duration={} ms",
request.getRequestId(),
response.getCode(),
response.getMessage(),
System.currentTimeMillis() - startTime
);
return response;
}
@Operation(
summary = "Lấy danh sách tỉnh/thành phố, phường/xã",
description = "API dùng để lấy danh sách tỉnh/thành phố và phường/xã phục vụ option select"
)
@ApiResponses({
@ApiResponse(responseCode = "00", description = "Thành công"),
@ApiResponse(responseCode = "400", description = "Tham số đầu vào không hợp lệ"),
@ApiResponse(responseCode = "99", description = "Exception")
})
@PostMapping("/location-options")
public BaseResponse<LocationOptionsResponse> getLocationOptions(
@RequestHeader(value = "X-Userinfo") String xUser,
@Valid @RequestBody LocationOptionRequest request
) {
MDC.put(CommonUtils.TOKEN, request.getRequestId());
long startTime = System.currentTimeMillis();
BaseResponse<LocationOptionsResponse> response =
courtService.getLocationOptions(xUser, request);
log.info(
"Finish get location options, requestId={}, code={}, message={}, duration={} ms",
request.getRequestId(),
response.getCode(),
response.getMessage(),
System.currentTimeMillis() - startTime
);
return response;
}
@Operation(summary = "Api lấy thông tin chi tiết của sân (dịch vụ, thông tin, thư viện)", description = "Trả về thông tin chi tiết sân (dịch vụ, thông tin, thư viện)")
@ApiResponses(value = {
@ApiResponse(responseCode = "00", description = "Thành công"),
@ApiResponse(responseCode = "02", description = "Không tìm thấy cơ sở sân"),
@ApiResponse(responseCode = "99", description = "Hệ thống xảy ra lỗi khi xử lý!"),
})
@GetMapping("/detail")
public BaseResponse<FacilityDetailResponse> getFacilityDetail(
@RequestHeader(value = "X-Userinfo", required = false) String xUser,
@Valid @RequestBody FacilityDetailRequest request) {
long startTime = System.currentTimeMillis();
BaseResponse<FacilityDetailResponse> response = new BaseResponse<>();
try {
log.info("Begin getFacilityDetail req={} ", objectMapper.writeValueAsString(request));
response = facilityService.getDetail(xUser, request);
log.info("End getFacilityDetail, req_id={}, duration={}", request.getRequestId(), System.currentTimeMillis() - startTime);
} catch (Exception ex) {
log.error("Process getCourtDetail Exception, request_id={}, Ex= {}", request.getRequestId(), ex);
response.setCode(ErrorCode.EXCEPTION.getCode());
response.setMessage(ErrorCode.EXCEPTION.getMessage());
}
return response;
}
@Operation(summary = "Api lấy danh sách đánh giá của cơ sở sân", description = "Trả về điểm trung bình, tổng số đánh giá và danh sách đánh giá kèm ảnh")
@ApiResponses(value = {
@ApiResponse(responseCode = "00", description = "Thành công"),
@ApiResponse(responseCode = "02", description = "Không tìm thấy cơ sở sân"),
@ApiResponse(responseCode = "99", description = "Hệ thống xảy ra lỗi khi xử lý!"),
})
@GetMapping("/reviews")
public BaseResponse<FacilityReviewsResponse> getFacilityReviews(
@RequestHeader(value = "X-Userinfo", required = false) String xUser,
@Valid @RequestBody FacilityDetailRequest request) {
long startTime = System.currentTimeMillis();
BaseResponse<FacilityReviewsResponse> response = new BaseResponse<>();
try {
log.info("Begin getFacilityReviews req={} ", objectMapper.writeValueAsString(request));
response = facilityService.getReviews(xUser, request);
log.info("End getFacilityReviews, req_id={}, duration={}", request.getRequestId(), System.currentTimeMillis() - startTime);
} catch (Exception ex) {
log.error("Process getFacilityReviews Exception, request_id={}, Ex= {}", request.getRequestId(), ex);
response.setCode(ErrorCode.EXCEPTION.getCode());
response.setMessage(ErrorCode.EXCEPTION.getMessage());
}
return response;
}
}
Editor is loading...
Leave a Comment