-
Notifications
You must be signed in to change notification settings - Fork 0
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
Feat: 시니또용 카테고리별 가이드라인 조회 api 추가 및 기존 api 삭제 (프론트 요청) #114
Changes from 4 commits
c7596e7
f4a8074
d02f1e1
023d10a
170f688
55a3a47
82c7f57
bd2e456
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -14,7 +14,7 @@ | |
|
||
@RestController | ||
@RequestMapping("/api/guardguidelines") | ||
@Tag(name = "보호자용 가이드라인", description = "보호자가 입력하는 시니어별 가이드라인 관련 API") | ||
@Tag(name = "가이드라인", description = "가이드라인 관련 API") | ||
public class GuardGuidelineController { | ||
|
||
private final GuardGuidelineService guardGuidelineService; | ||
|
@@ -30,10 +30,16 @@ public ResponseEntity<String> addGuardGuideline(@MemberId Long memberId, @Reques | |
return ResponseEntity.ok("가이드라인이 추가되었습니다."); | ||
} | ||
|
||
@Operation(summary = "카테고리에 해당하는 모든 가이드라인 조회", description = "시니또용 앱에서 카테고리에 해당하는 모든 가이드라인들을 요청할 때 필요합니다.") | ||
@GetMapping("/{seniorId}/{type}") | ||
public ResponseEntity<List<GuardGuidelineResponse>> getGuardGuidelinesByCategory(@PathVariable Long seniorId, @PathVariable GuardGuideline.Type type) { | ||
return ResponseEntity.ok(guardGuidelineService.readAllGuardGuidelinesByCategory(seniorId, type)); | ||
@Operation(summary = "카테고리에 해당하는 모든 가이드라인 조회(보호자용)", description = "보호자용 앱에서 카테고리에 해당하는 모든 가이드라인들을 요청할 때 필요합니다.") | ||
@GetMapping("/guard/{seniorId}/{type}") | ||
public ResponseEntity<List<GuardGuidelineResponse>> getGuardGuidelinesByCategoryAndSenior(@MemberId Long memberId, @PathVariable Long seniorId, @PathVariable GuardGuideline.Type type) { | ||
return ResponseEntity.ok(guardGuidelineService.readAllGuardGuidelinesByCategoryAndSenior(memberId, seniorId, type)); | ||
} | ||
|
||
@Operation(summary = "카테고리에 해당하는 모든 가이드라인 조회(시니또용)", description = "시니또용 앱에서 카테고리에 해당하는 모든 가이드라인들을 요청할 때 필요합니다.") | ||
@GetMapping("/sinitto/{callbackId}/{type}") | ||
public ResponseEntity<List<GuardGuidelineResponse>> getGuardGuidelinesByCategoryAndCallback(@PathVariable Long callbackId, @PathVariable GuardGuideline.Type type) { | ||
return ResponseEntity.ok(guardGuidelineService.readAllGuardGuidelinesByCategoryAndCallback(callbackId, type)); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Type은 어떤것을 의미하는건가요 ?.? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 카테고리(TAXI, DELEVERY)입니다! |
||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 시니또가 콜백을 수행하면서 보는 가이드라인은 어떤 api를 요청하는건가요? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 와 예리하신데요 ~? 놓친 부분이었어요 감사합니다 👍 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 엇 해당 부분도 필요할 것 같긴 한데, 제가 궁금한 점은 시니또가 콜백을 수행하면서 보는 가이드라인은 waiting 상태가 아니라 진행중상태일 것 같은데 해당 상황에서 가이드라인을 보기 위해 프론트에서 어떤 api를 요청해야할지 해당 controller에서는 찾을 수 없어서 여쭤봤습니다! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 같은 맥락에서 콜백 상태가 waiting인지 검증하는 로직은 어떤 이유로 넣으셨나요? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
수정된 로직에서는 1. 콜백이 대기상태가 아니면서 2. 해당 콜백에 배정된 시니또가 'API 요청한 회원'이 아닌 경우에만 예외처리합니다. 그래서 지호님이 말씀하신 시니또가 콜백을 수행하면서 가이드라인 조회를 요청하는 경우에는 1번 조건에 해당되긴 하지만 2번 조건은 만족하지 않으므로, 예외처리 되지 않고 정상적으로 가이드라인이 조회되게 됩니다! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 추가로 waiting 상태인지 검증하는 이유는 시니또가 가이드라인을 조회하는 순간에 이미 다른 시니또가 콜백을 수락했다면 더 이상 그 콜백의 가이드라인을 확인할 이유가 없기 때문입니다. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 아~ 저는 api 분리로 비슷한 로직을 작성했어서 단순 배정 시니또 검증 로직만 추가한 줄 알았습니다 |
||
|
||
@Operation(summary = "가이드라인 수정", description = "보호자가 특정 가이드라인을 수정할 때 필요합니다.") | ||
|
@@ -50,11 +56,6 @@ public ResponseEntity<List<GuardGuidelineResponse>> getAllGuardGuidelinesBySenio | |
return ResponseEntity.ok(guardGuidelineService.readAllGuardGuidelinesBySenior(memberId, seniorId)); | ||
} | ||
|
||
@Operation(summary = "특정 가이드라인 조회", description = "보호자용 API입니다.") | ||
@GetMapping("/detail") | ||
public ResponseEntity<GuardGuidelineResponse> getGuardGuideline(@RequestParam("callbackId") Long callbackId, @RequestParam("guidelineId") Long guidelineId) { | ||
return ResponseEntity.ok(guardGuidelineService.readGuardGuideline(callbackId, guidelineId)); | ||
} | ||
|
||
@Operation(summary = "특정 가이드라인 삭제", description = "보호자용 API입니다.") | ||
@DeleteMapping("/delete") | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -43,7 +43,29 @@ public void addGuardGuideline(Long memberId, GuardGuidelineRequest guardGuidelin | |
} | ||
|
||
@Transactional(readOnly = true) | ||
public List<GuardGuidelineResponse> readAllGuardGuidelinesByCategory(Long seniorId, Type type) { | ||
public List<GuardGuidelineResponse> readAllGuardGuidelinesByCategoryAndSenior(Long memberId, Long seniorId, Type type) { | ||
List<GuardGuideline> guardGuidelines = guardGuidelineRepository.findBySeniorIdAndType(seniorId, type); | ||
Senior senior = seniorRepository.findById(seniorId).orElseThrow( | ||
() -> new NotFoundException("시니어를 찾을 수 없습니다.") | ||
); | ||
if (senior.isNotGuard(memberId)) { | ||
throw new BadRequestException("해당 Guard의 Senior가 아닙니다."); | ||
} | ||
return guardGuidelines.stream() | ||
.map(m -> new GuardGuidelineResponse(m.getId(), m.getType(), m.getTitle(), m.getContent())) | ||
.toList(); | ||
} | ||
|
||
@Transactional(readOnly = true) | ||
public List<GuardGuidelineResponse> readAllGuardGuidelinesByCategoryAndCallback(Long callbackId, Type type) { | ||
Callback callback = callbackRepository.findById(callbackId) | ||
.orElseThrow(() -> new NotFoundException("존재하지 않는 콜백입니다")); | ||
|
||
if (callback.getStatus() != Callback.Status.WAITING.name()) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 배운점:
https://studywithus.tistory.com/88 |
||
throw new BadRequestException("해당 콜백은 대기 상태가 아닙니다."); | ||
} | ||
; | ||
Long seniorId = callback.getSeniorId(); | ||
List<GuardGuideline> guardGuidelines = guardGuidelineRepository.findBySeniorIdAndType(seniorId, type); | ||
|
||
return guardGuidelines.stream() | ||
|
@@ -92,21 +114,4 @@ public List<GuardGuidelineResponse> readAllGuardGuidelinesBySenior(Long memberId | |
.map(m -> new GuardGuidelineResponse(m.getId(), m.getType(), m.getTitle(), m.getContent())) | ||
.toList(); | ||
} | ||
|
||
@Transactional(readOnly = true) | ||
public GuardGuidelineResponse readGuardGuideline(Long callbackId, Long guidelineId) { | ||
|
||
Callback callback = callbackRepository.findById(callbackId) | ||
.orElseThrow(() -> new NotFoundException("존재하지 않는 콜백입니다")); | ||
|
||
GuardGuideline guardGuideline = guardGuidelineRepository.findById(guidelineId).orElseThrow( | ||
() -> new NotFoundException("해당 가이드라인이 존재하지 않습니다.") | ||
); | ||
|
||
if (!callback.getSenior().equals(guardGuideline.getSenior())) { | ||
throw new BadRequestException("해당 Senior의 가이드라인이 아닙니다."); | ||
} | ||
|
||
return new GuardGuidelineResponse(guardGuideline.getId(), guardGuideline.getType(), guardGuideline.getTitle(), guardGuideline.getContent()); | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이부분이 콜백 요청 수락하기 전에 확인하는 가이드라인 정보 제공하는 용도인거죠?? 헷갈려가지구 남깁니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
네 콜백 수락하기 전에 시니또가 가이드라인 확인하는 용도입니다!