diff --git a/src/main/java/org/guzzing/studayserver/domain/academy/controller/AcademyController.java b/src/main/java/org/guzzing/studayserver/domain/academy/controller/AcademyController.java index 13ccdeb1..a8b94dbd 100644 --- a/src/main/java/org/guzzing/studayserver/domain/academy/controller/AcademyController.java +++ b/src/main/java/org/guzzing/studayserver/domain/academy/controller/AcademyController.java @@ -7,6 +7,7 @@ import org.guzzing.studayserver.domain.academy.controller.dto.request.AcademyFilterWithScrollRequest; import org.guzzing.studayserver.domain.academy.controller.dto.response.*; import org.guzzing.studayserver.domain.academy.facade.AcademyFacade; +import org.guzzing.studayserver.domain.academy.facade.dto.AcademiesByLocationFacadeResults; import org.guzzing.studayserver.domain.academy.facade.dto.AcademyDetailFacadeParam; import org.guzzing.studayserver.domain.academy.facade.dto.AcademyDetailFacadeResult; import org.guzzing.studayserver.domain.academy.service.AcademyService; @@ -69,12 +70,26 @@ public ResponseEntity findByLocationWithCu @MemberId Long memberId ) { AcademyByLocationWithCursorResults academiesByLocationWithCursor - = academyService.findAcademiesByLocationWithCursor(request.to(memberId)); + = academyService.findAcademiesByLocationWithCursor(request.toAcademyByLocationWithCursorParam(memberId)); return ResponseEntity.status(HttpStatus.OK) .body(AcademyByLocationWithCursorResponses.from(academiesByLocationWithCursor)); } + @GetMapping( + path = "/complexes-notLike", + produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity findByLocationWithCursorNotLike( + @ModelAttribute @Valid AcademyByLocationWithCursorRequest request, + @MemberId Long memberId + ) { + AcademiesByLocationFacadeResults academiesByLocation + = academyFacade.getAcademiesByLocation(request.toAcademiesByLocationFacadeParam(memberId)); + + return ResponseEntity.status(HttpStatus.OK) + .body(AcademyByLocationWithCursorResponses.from(academiesByLocation)); + } + @GetMapping( path = "/search", produces = MediaType.APPLICATION_JSON_VALUE) diff --git a/src/main/java/org/guzzing/studayserver/domain/academy/controller/dto/request/AcademyByLocationWithCursorRequest.java b/src/main/java/org/guzzing/studayserver/domain/academy/controller/dto/request/AcademyByLocationWithCursorRequest.java index 654ad8a1..73ceaebb 100644 --- a/src/main/java/org/guzzing/studayserver/domain/academy/controller/dto/request/AcademyByLocationWithCursorRequest.java +++ b/src/main/java/org/guzzing/studayserver/domain/academy/controller/dto/request/AcademyByLocationWithCursorRequest.java @@ -3,6 +3,7 @@ import jakarta.validation.constraints.DecimalMin; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.PositiveOrZero; +import org.guzzing.studayserver.domain.academy.facade.dto.AcademiesByLocationFacadeParam; import org.guzzing.studayserver.domain.academy.service.dto.param.AcademyByLocationWithCursorParam; import org.guzzing.studayserver.domain.academy.util.Latitude; import org.guzzing.studayserver.domain.academy.util.Longitude; @@ -20,7 +21,7 @@ public record AcademyByLocationWithCursorRequest( Long lastAcademyId ) { - public AcademyByLocationWithCursorParam to(Long memberId) { + public AcademyByLocationWithCursorParam toAcademyByLocationWithCursorParam(Long memberId) { return new AcademyByLocationWithCursorParam( Latitude.of(lat), Longitude.of(lng), @@ -28,4 +29,13 @@ public AcademyByLocationWithCursorParam to(Long memberId) { lastAcademyId ); } + + public AcademiesByLocationFacadeParam toAcademiesByLocationFacadeParam(Long memberId) { + return new AcademiesByLocationFacadeParam( + Latitude.of(lat), + Longitude.of(lng), + memberId, + lastAcademyId + ); + } } diff --git a/src/main/java/org/guzzing/studayserver/domain/academy/controller/dto/response/AcademyByLocationWithCursorResponses.java b/src/main/java/org/guzzing/studayserver/domain/academy/controller/dto/response/AcademyByLocationWithCursorResponses.java index 9e75fb1c..1bd56749 100644 --- a/src/main/java/org/guzzing/studayserver/domain/academy/controller/dto/response/AcademyByLocationWithCursorResponses.java +++ b/src/main/java/org/guzzing/studayserver/domain/academy/controller/dto/response/AcademyByLocationWithCursorResponses.java @@ -1,5 +1,6 @@ package org.guzzing.studayserver.domain.academy.controller.dto.response; +import org.guzzing.studayserver.domain.academy.facade.dto.AcademiesByLocationFacadeResults; import org.guzzing.studayserver.domain.academy.service.dto.result.AcademiesByLocationWithScrollResults; import org.guzzing.studayserver.domain.academy.service.dto.result.AcademyByLocationWithCursorResults; @@ -21,6 +22,17 @@ public static AcademyByLocationWithCursorResponses from(AcademyByLocationWithCur ); } + public static AcademyByLocationWithCursorResponses from(AcademiesByLocationFacadeResults results) { + return new AcademyByLocationWithCursorResponses( + results.academiesByLocationFacadeResults() + .stream() + .map(AcademyByLocationWithCursorResponse::from) + .toList(), + results.lastAcademyId(), + results.hasNext() + ); + } + public record AcademyByLocationWithCursorResponse( Long academyId, String academyName, @@ -47,6 +59,21 @@ public static AcademyByLocationWithCursorResponse from( result.isLiked() ); } + + public static AcademyByLocationWithCursorResponse from( + AcademiesByLocationFacadeResults.AcademiesByLocationFacadeResult result) { + return new AcademyByLocationWithCursorResponse( + result.academyId(), + result.academyName(), + result.address(), + result.contact(), + result.categories(), + result.latitude(), + result.longitude(), + result.shuttleAvailable(), + result.isLiked() + ); + } } }