diff --git a/src/main/java/com/petlog/docs/PetGroupControllerDocs.java b/src/main/java/com/petlog/docs/PetGroupControllerDocs.java index 0c3fb92..17aeebe 100644 --- a/src/main/java/com/petlog/docs/PetGroupControllerDocs.java +++ b/src/main/java/com/petlog/docs/PetGroupControllerDocs.java @@ -39,7 +39,7 @@ public interface PetGroupControllerDocs { @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "참고사항 조회에 성공하였습니다.") @Operation(summary = "참고사항 조회 API") - ResponseEntity> getNote(@PathVariable final Long groupId); + ResponseEntity> getNote(@Authenticated final Long memberId, @PathVariable final Long groupId); @io.swagger.v3.oas.annotations.responses.ApiResponse(responseCode = "200", description = "참고사항 수정에 성공하였습니다.") @Operation(summary = "참고사항 수정 API") diff --git a/src/main/java/com/petlog/petgroup/controller/PetGroupController.java b/src/main/java/com/petlog/petgroup/controller/PetGroupController.java index 950b001..a1f36ce 100644 --- a/src/main/java/com/petlog/petgroup/controller/PetGroupController.java +++ b/src/main/java/com/petlog/petgroup/controller/PetGroupController.java @@ -13,6 +13,7 @@ import com.petlog.petgroup.service.dto.CreatePetGroupDto; import com.petlog.petgroup.service.dto.GetJoinCodeDto; import com.petlog.petgroup.service.dto.GetMyPetGroupDto; +import com.petlog.petgroup.service.dto.GetNoteDto; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; @@ -103,9 +104,11 @@ public ResponseEntity> getJoinCode( @GetMapping("/{groupId}/note") public ResponseEntity> getNote( + @Authenticated final Long memberId, @PathVariable final Long groupId ) { - final GetNoteResponseDto response = new GetNoteResponseDto("우리 여름이는 엄청 예쁘구~"); + final GetNoteDto dto = petGroupService.getNote(memberId, groupId); + final GetNoteResponseDto response = new GetNoteResponseDto(dto.note()); return ResponseEntity.ok( ApiResponse.successWithData(GET_NOTE, response) diff --git a/src/main/java/com/petlog/petgroup/controller/dto/response/GetNoteResponseDto.java b/src/main/java/com/petlog/petgroup/controller/dto/response/GetNoteResponseDto.java index 05bbb6c..94fd75c 100644 --- a/src/main/java/com/petlog/petgroup/controller/dto/response/GetNoteResponseDto.java +++ b/src/main/java/com/petlog/petgroup/controller/dto/response/GetNoteResponseDto.java @@ -8,8 +8,4 @@ public record GetNoteResponseDto( String note ) { - - public GetNoteResponseDto(final String note) { - this.note = note; - } } diff --git a/src/main/java/com/petlog/petgroup/service/PetGroupService.java b/src/main/java/com/petlog/petgroup/service/PetGroupService.java index 8115abf..1a9134b 100644 --- a/src/main/java/com/petlog/petgroup/service/PetGroupService.java +++ b/src/main/java/com/petlog/petgroup/service/PetGroupService.java @@ -17,6 +17,7 @@ import com.petlog.petgroup.service.dto.CreatePetGroupDto; import com.petlog.petgroup.service.dto.GetJoinCodeDto; import com.petlog.petgroup.service.dto.GetMyPetGroupDto; +import com.petlog.petgroup.service.dto.GetNoteDto; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -83,42 +84,53 @@ private Member getMember(final Long memberId) { @Transactional public void joinPetGroup(final Long memberId, final String joinCode) { - final PetGroup petGroup = getPetGroup(joinCode); final Member member = getMember(memberId); + final PetGroup petGroup = getPetGroupByJoinCode(joinCode); + validateAlreadyMemberInPetGroup(member, petGroup); final PetGroupMember petGroupMember = new PetGroupMember(member, petGroup, false); petGroupMemberRepository.save(petGroupMember); } - private PetGroup getPetGroup(final String joinCode) { + private PetGroup getPetGroupByJoinCode(final String joinCode) { return petGroupRepository.findByJoinCode(joinCode) .orElseThrow(() -> new IllegalArgumentException("존재하지 않는 그룹입니다.")); } + private void validateAlreadyMemberInPetGroup(final Member member, final PetGroup petGroup) { + if(petGroupMemberRepository.existsByMemberAndPetGroup(member, petGroup)) { + throw new IllegalArgumentException("이미 그룹에 참여중인 회원입니다."); + } + } + @Transactional(readOnly = true) public GetMyPetGroupDto getMyPetGroups(final Long memberId) { - validateMemberIsExist(memberId); + getMember(memberId); final List groupIds = petGroupMemberRepository.findPetGroupIdsByMemberId(memberId); return new GetMyPetGroupDto(groupIds); } - private void validateMemberIsExist(final Long memberId) { - memberRepository.findById(memberId) - .orElseThrow(() -> new IllegalArgumentException("존재하지 않는 회원입니다.")); - } - @Transactional public void leavePetGroup(final Long memberId, final Long groupId) { - validateMemberIsExist(memberId); - validatePetGroupIsExist(groupId); + final Member member = getMember(memberId); + final PetGroup petGroup = getPetGroup(groupId); + validateMemberInPetGroup(member, petGroup); + petGroupMemberRepository.deleteByMemberIdAndGroupId(memberId, groupId); } - private void validatePetGroupIsExist(final Long petGroupId) { - petGroupRepository.findById(petGroupId) + private PetGroup getPetGroup(final Long petGroupId) { + return petGroupRepository.findById(petGroupId) .orElseThrow(() -> new IllegalArgumentException("존재하지 않는 그룹입니다.")); } + private void validateMemberInPetGroup(final Member member, final PetGroup petGroup) { + if(!petGroupMemberRepository.existsByMemberAndPetGroup(member, petGroup)) { + throw new IllegalArgumentException("그룹에 존재하지 않는 회원입니다."); + } + } + + @Transactional(readOnly = true) public GetJoinCodeDto getPetGroupJoinCode(final Long memberId, final Long groupId) { final Member member = getMember(memberId); final PetGroup petGroup = getPetGroup(groupId); @@ -127,14 +139,12 @@ public GetJoinCodeDto getPetGroupJoinCode(final Long memberId, final Long groupI return new GetJoinCodeDto(petGroup.getJoinCode()); } - private PetGroup getPetGroup(final Long groupId) { - return petGroupRepository.findById(groupId) - .orElseThrow(() -> new IllegalArgumentException("존재하지 않는 그룹입니다.")); - } + @Transactional(readOnly = true) + public GetNoteDto getNote(final Long memberId, final Long groupId) { + final Member member = getMember(memberId); + final PetGroup petGroup = getPetGroup(groupId); + validateMemberInPetGroup(member, petGroup); - private void validateMemberInPetGroup(final Member member, final PetGroup petGroup) { - if(!petGroupMemberRepository.existsByMemberAndPetGroup(member, petGroup)) { - throw new IllegalArgumentException("그룹에 존재하지 않는 회원입니다."); - } + return new GetNoteDto(petGroup.getNote()); } } diff --git a/src/main/java/com/petlog/petgroup/service/dto/GetNoteDto.java b/src/main/java/com/petlog/petgroup/service/dto/GetNoteDto.java new file mode 100644 index 0000000..0494f4b --- /dev/null +++ b/src/main/java/com/petlog/petgroup/service/dto/GetNoteDto.java @@ -0,0 +1,8 @@ +package com.petlog.petgroup.service.dto; + +public record GetNoteDto( + + String note + +) { +}