Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GTB-33 [feat] 주점 상세정보 API 구현 #29

Merged
merged 8 commits into from
Jun 2, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import site.gachontable.gachontablebe.domain.pub.presentation.dto.GetPubDetailsResponse;
import site.gachontable.gachontablebe.domain.pub.usecase.PubService;
import site.gachontable.gachontablebe.domain.pub.presentation.dto.GetPubsResponse;
import site.gachontable.gachontablebe.global.error.ErrorResponse;
Expand All @@ -32,4 +32,17 @@ public class PubController {
public ResponseEntity<List<GetPubsResponse>> getPubs() {
return ResponseEntity.ok(pubService.findAllPubs());
}

@Operation(summary = "주점 상세정보", description = "주점의 상세정보를 가져옵니다")
@ApiResponses({
@ApiResponse(responseCode = "200"),
@ApiResponse(responseCode = "400", content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(responseCode = "403", content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(responseCode = "404", content = @Content(schema = @Schema(implementation = ErrorResponse.class))),
@ApiResponse(responseCode = "500", content = @Content(schema = @Schema(implementation = ErrorResponse.class)))
})
@GetMapping("/pub/{pubId}")
jwnnoh marked this conversation as resolved.
Show resolved Hide resolved
public ResponseEntity<GetPubDetailsResponse> getPubDetail(@PathVariable Integer pubId) {
return ResponseEntity.ok(pubService.findPubDetail(pubId));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package site.gachontable.gachontablebe.domain.pub.presentation.dto;

import site.gachontable.gachontablebe.domain.menu.domain.Menu;
import site.gachontable.gachontablebe.domain.pub.domain.Pub;
import site.gachontable.gachontablebe.domain.waiting.domain.Waiting;

import java.util.List;

public record GetPubDetailsResponse(
PubInfo pub,
List<MenuInfo> menu
) {

public static GetPubDetailsResponse of(Pub pub, List<Menu> menuList) {

return new GetPubDetailsResponse(
PubInfo.from(pub),
menuList.stream()
.map(MenuInfo::from)
.toList());
}

public record PubInfo(
Integer pubId,
String imageUrl,
String pubName,
String onLiner,
Boolean studentCard,
String menu,
Integer queueing
) {
public static PubInfo from(Pub pub) {
return new PubInfo(
pub.getPubId(),
pub.getPubThumbnail(),
pub.getPubName(),
pub.getOneLiner(),
pub.getStudentCard(),
pub.getRepresentativeMenu(),
(int) pub.getWaitingQueue()
.stream()
.filter(Waiting::isWaiting)
.count());
}
}


public record MenuInfo(
String menuName,
Integer price,
String oneLiner
) {
public static MenuInfo from(Menu menu) {
return new MenuInfo(
menu.getMenuName(),
menu.getPrice(),
menu.getOneLiner()
);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import site.gachontable.gachontablebe.domain.menu.domain.Menu;
import site.gachontable.gachontablebe.domain.pub.domain.Pub;
import site.gachontable.gachontablebe.domain.pub.domain.repository.PubRepository;
import site.gachontable.gachontablebe.domain.pub.exception.PubNotFoundException;
import site.gachontable.gachontablebe.domain.pub.presentation.dto.GetPubDetailsResponse;
import site.gachontable.gachontablebe.domain.pub.presentation.dto.GetPubsResponse;

import java.util.List;
Expand All @@ -18,4 +21,9 @@ public List<GetPubsResponse> findAllPubs() {

return pubList.stream().map(GetPubsResponse::of).toList();
}
public GetPubDetailsResponse findPubDetail(Integer pubId) {
Pub pub = pubRepository.findByPubId(pubId).orElseThrow(PubNotFoundException::new);
List<Menu> menu = pub.getMenus();
return GetPubDetailsResponse.of(pub,menu);
}
}