-
Notifications
You must be signed in to change notification settings - Fork 1
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 추가 #641
feat: 스터디 공지 생성,수정,삭제 API 추가 #641
Conversation
…into feature/580-notification-create-update-delete
Walkthrough이번 변경 사항은 멘토 스터디 관리 시스템에 스터디 공지 및 알림 기능을 추가합니다. 사용자는 스터디와 관련된 알림과 공지를 생성, 수정 및 삭제할 수 있는 API 엔드포인트를 통해 효과적으로 관리할 수 있습니다. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant Controller
participant Service
participant NotificationRepository
User->>Controller: POST /{studyId}/notifications
Controller->>Service: createStudyNotification(studyId, request)
Service->>NotificationRepository: save(notification)
NotificationRepository-->>Service: confirmation
Service-->>Controller: notification created
Controller-->>User: 201 Created
sequenceDiagram
participant User
participant Controller
participant Service
participant NotificationRepository
User->>Controller: PATCH /notifications/{studyNotificationId}
Controller->>Service: updateStudyNotification(studyNotificationId, request)
Service->>NotificationRepository: findById(studyNotificationId)
NotificationRepository-->>Service: notification
Service->>NotificationRepository: save(updatedNotification)
NotificationRepository-->>Service: confirmation
Service-->>Controller: notification updated
Controller-->>User: 200 OK
sequenceDiagram
participant User
participant Controller
participant Service
participant NotificationRepository
User->>Controller: DELETE /notifications/{studyNotificationId}
Controller->>Service: deleteStudyNotification(studyNotificationId)
Service->>NotificationRepository: delete(studyNotificationId)
NotificationRepository-->>Service: confirmation
Service-->>Controller: notification deleted
Controller-->>User: 204 No Content
Assessment against linked issues
Poem
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (invoked as PR comments)
Additionally, you can add CodeRabbit Configuration File (
|
Job Summary for GradleCheck Style and Test to Develop :: build-test
|
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.
Actionable comments posted: 0
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (7)
- src/main/java/com/gdschongik/gdsc/domain/study/api/MentorStudyController.java (2 hunks)
- src/main/java/com/gdschongik/gdsc/domain/study/application/MentorStudyService.java (2 hunks)
- src/main/java/com/gdschongik/gdsc/domain/study/dao/StudyNotificationRepository.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/domain/study/dao/StudyRepository.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/domain/study/domain/StudyNotification.java (2 hunks)
- src/main/java/com/gdschongik/gdsc/domain/study/dto/request/StudyNotificationRequest.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java (1 hunks)
Additional comments not posted (13)
src/main/java/com/gdschongik/gdsc/domain/study/dto/request/StudyNotificationRequest.java (1)
6-8
: 잘 작성된 DTO입니다.
StudyNotificationRequest
는 공지 제목과 링크를 포함하는 간단한 DTO로,@NotBlank
와@Schema
어노테이션을 적절하게 사용하여 유효성 검사와 API 문서화를 지원합니다.src/main/java/com/gdschongik/gdsc/domain/study/dao/StudyNotificationRepository.java (1)
11-13
:getById
메서드의 예외 처리
getById
메서드는findById
를 사용하여 엔티티를 검색하고, 찾지 못할 경우CustomException
을 던지는 방식으로 예외를 처리합니다. 이는 엔티티가 없을 때 명확한 예외를 제공하는 좋은 접근 방식입니다.src/main/java/com/gdschongik/gdsc/domain/study/dao/StudyRepository.java (1)
13-15
:getById
메서드 추가
getById
메서드는Study
엔티티를 검색할 때 명확한 예외를 제공하여 코드의 안정성을 높입니다.STUDY_NOT_FOUND
예외 코드를 사용하여 적절한 에러 처리를 구현했습니다.src/main/java/com/gdschongik/gdsc/domain/study/domain/StudyNotification.java (3)
36-41
: Builder 패턴 추가
@Builder
어노테이션을 사용하여StudyNotification
객체의 인스턴스화를 보다 제어된 방식으로 수행할 수 있게 되었습니다. 이는 객체 생성 로직을 캡슐화하고 코드 가독성을 향상시킵니다.
43-45
: 정적 팩토리 메서드 추가
createStudyNotification
메서드를 통해StudyNotification
인스턴스를 생성할 수 있습니다. 이는 빌더 패턴의 사용을 촉진하며 객체 생성의 편의성을 제공합니다.
47-50
: 업데이트 메서드 추가
update
메서드를 통해StudyNotification
객체의title
및link
필드를 수정할 수 있습니다. 이는 객체의 상태를 명확하게 변경할 수 있는 방법을 제공합니다.src/main/java/com/gdschongik/gdsc/domain/study/api/MentorStudyController.java (3)
44-50
: 스터디 공지 생성 엔드포인트 추가새로운
POST
엔드포인트를 통해 특정 스터디에 대한 공지를 생성할 수 있습니다. 요청 객체는 유효성 검사를 거친 후 서비스 계층에서 처리됩니다.
52-58
: 스터디 공지 수정 엔드포인트 추가
PATCH
엔드포인트를 통해 기존 공지를 수정할 수 있습니다. 요청 객체는 유효성 검사를 거친 후 서비스 계층에서 처리됩니다.
60-65
: 스터디 공지 삭제 엔드포인트 추가
DELETE
엔드포인트를 통해 공지를 삭제할 수 있습니다. 공지 ID를 기반으로 삭제 작업이 수행됩니다.src/main/java/com/gdschongik/gdsc/domain/study/application/MentorStudyService.java (3)
53-65
: 스터디 공지 생성 메서드 추가
createStudyNotification
메서드는 새로운 스터디 공지를 생성합니다. 멘토 권한을 확인한 후 공지를 생성하고 저장합니다. 성공 시 로그가 생성됩니다.
67-79
: 스터디 공지 수정 메서드 추가
updateStudyNotification
메서드는 기존 스터디 공지를 수정합니다. 공지를 ID로 조회한 후 멘토 권한을 확인하고 공지를 업데이트합니다. 성공 시 로그가 생성됩니다.
81-92
: 스터디 공지 삭제 메서드 추가
deleteStudyNotification
메서드는 특정 스터디 공지를 삭제합니다. 멘토 권한을 확인한 후 공지를 삭제하고 성공 시 로그가 생성됩니다.src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java (1)
127-127
: 새로운 오류 코드 추가 확인.
STUDY_NOTIFICATION_NOT_FOUND
오류 코드는HttpStatus.NOT_FOUND
와 함께 사용되며, "존재하지 않는 스터디 공지입니다."라는 메시지를 제공합니다. 이는 스터디 공지와 관련된 오류 응답의 명확성을 높여줍니다.
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.
공지사항의 경우 notification보다 announcement가 더 적절한 워딩일 것 같습니다
src/main/java/com/gdschongik/gdsc/domain/study/api/MentorStudyController.java
Outdated
Show resolved
Hide resolved
src/main/java/com/gdschongik/gdsc/domain/study/api/MentorStudyController.java
Outdated
Show resolved
Hide resolved
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.
스터디 공지사항은 별다른 검증 조건이 없나용??
테스트도 작성해주세요~
Job Summary for GradleCheck Style and Test to Develop :: build-test
|
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.
lgtm
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.
Actionable comments posted: 0
Outside diff range, codebase verification and nitpick comments (3)
src/main/java/com/gdschongik/gdsc/domain/study/api/MentorStudyController.java (1)
61-65
: 스터디 공지 삭제 API 추가스터디 공지 삭제 기능이 추가되었습니다. 삭제 요청은 일반적으로 성공 시 204 No Content 상태 코드를 반환하는 것이 일반적입니다. 현재는 200 OK를 반환하고 있으므로, 필요에 따라 상태 코드를 조정할 수 있습니다.
- return ResponseEntity.ok().build(); + return ResponseEntity.noContent().build();src/main/java/com/gdschongik/gdsc/domain/study/application/MentorStudyService.java (2)
67-79
:StudyAnnouncement.update
메서드에 유효성 검사 추가 필요현재
update
메서드는 단순히title
과link
값을 할당하고 있습니다. 데이터 무결성을 보장하기 위해 유효성 검사를 추가하는 것이 좋습니다.
StudyAnnouncement
클래스의update
메서드에서title
과link
에 대한 유효성 검사를 추가하세요. 예를 들어, null 또는 빈 문자열을 허용하지 않는 등의 검사를 고려할 수 있습니다.Analysis chain
코드 변경 사항이 적절합니다.
스터디 공지 수정 메서드는 멘토 권한을 확인하고 로그를 남기는 등 올바르게 동작합니다.
다만,
StudyAnnouncement.update
메서드가 필요한 모든 유효성 검사를 수행하는지 확인하세요.Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify the implementation of `update` method in `StudyAnnouncement` class. # Test: Search for the method implementation. Expect: Proper validation logic. ast-grep --lang java --pattern $'class StudyAnnouncement { $$$ public void update($_, $_) { $$$ } $$$ }'Length of output: 117
Script:
#!/bin/bash # Description: Use rg to search for the `update` method in the `StudyAnnouncement` class. # Test: Search for the `update` method in the `StudyAnnouncement` class. rg 'class StudyAnnouncement' -A 20 | rg 'public void update'Length of output: 62
Script:
#!/bin/bash # Description: Search for all methods in the `StudyAnnouncement` class to verify its implementation. # Test: Search for the `StudyAnnouncement` class and list all its methods. rg 'class StudyAnnouncement' -A 50 | rg 'public 'Length of output: 636
Script:
#!/bin/bash # Description: Extract the full implementation of the `update` method in the `StudyAnnouncement` class. # Test: Extract the `update` method implementation to verify validation logic. rg 'public void update' -A 10 src/main/java/com/gdschongik/gdsc/domain/study/domain/StudyAnnouncement.javaLength of output: 222
53-65
:createStudyAnnouncement
메서드에 유효성 검사가 필요합니다.현재
createStudyAnnouncement
메서드는 입력값에 대한 유효성 검사를 수행하지 않고StudyAnnouncement
객체를 생성합니다. 입력값의 유효성을 확인하는 로직을 추가하는 것이 좋습니다. 예를 들어,title
과link
가 null이 아니고 비어 있지 않은지 확인하는 검사를 추가할 수 있습니다.
- 파일:
src/main/java/com/gdschongik/gdsc/domain/study/domain/StudyAnnouncement.java
Analysis chain
코드 변경 사항이 적절합니다.
스터디 공지 생성 메서드는 멘토 권한을 확인하고 로그를 남기는 등 올바르게 동작합니다.
다만,
StudyAnnouncement.createStudyAnnouncement
메서드가 필요한 모든 유효성 검사를 수행하는지 확인하세요.Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify the implementation of `createStudyAnnouncement` method in `StudyAnnouncement` class. # Test: Search for the method implementation. Expect: Proper validation logic. ast-grep --lang java --pattern $'class StudyAnnouncement { $$$ public static StudyAnnouncement createStudyAnnouncement($_, $_, $_) { $$$ } $$$ }'Length of output: 158
Script:
#!/bin/bash # Description: Search for the `StudyAnnouncement` class and list its methods. # Step 1: Find the `StudyAnnouncement` class. ast-grep --lang java --pattern 'class StudyAnnouncement { $$$ }' # Step 2: Search for all method declarations within `StudyAnnouncement`. ast-grep --lang java --pattern 'class StudyAnnouncement { $$$ public $_ $_($_) { $$$ } $$$ }'Length of output: 162
Script:
#!/bin/bash # Description: Locate the `StudyAnnouncement` class file in the codebase. # Use `fd` to search for files containing `StudyAnnouncement` class definition. rg --files-with-matches --fixed-strings 'class StudyAnnouncement' --glob '*.java'Length of output: 160
Script:
#!/bin/bash # Description: Verify the implementation of `createStudyAnnouncement` method in `StudyAnnouncement.java`. # Search for the `createStudyAnnouncement` method within the `StudyAnnouncement.java` file. rg 'public static StudyAnnouncement createStudyAnnouncement' -A 10 src/main/java/com/gdschongik/gdsc/domain/study/domain/StudyAnnouncement.javaLength of output: 457
Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Files selected for processing (9)
- src/main/java/com/gdschongik/gdsc/domain/study/api/MentorStudyController.java (2 hunks)
- src/main/java/com/gdschongik/gdsc/domain/study/api/StudentStudyController.java (2 hunks)
- src/main/java/com/gdschongik/gdsc/domain/study/application/MentorStudyService.java (2 hunks)
- src/main/java/com/gdschongik/gdsc/domain/study/application/StudentStudyService.java (2 hunks)
- src/main/java/com/gdschongik/gdsc/domain/study/dao/StudyAnnouncementRepository.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/domain/study/domain/StudyAnnouncement.java (2 hunks)
- src/main/java/com/gdschongik/gdsc/domain/study/dto/request/StudyAnnouncementCreateUpdateRequest.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/domain/study/dto/request/StudyAttendCreateRequest.java (1 hunks)
- src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java (1 hunks)
Files skipped from review due to trivial changes (1)
- src/main/java/com/gdschongik/gdsc/domain/study/dto/request/StudyAttendCreateRequest.java
Files skipped from review as they are similar to previous changes (1)
- src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java
Additional comments not posted (8)
src/main/java/com/gdschongik/gdsc/domain/study/dto/request/StudyAnnouncementCreateUpdateRequest.java (1)
6-8
: 코드가 적절합니다.
title
필드에 대한@NotBlank
유효성 검사가 적절하게 사용되었습니다.link
필드에 대한 추가적인 유효성 검사가 필요한지 검토해 보세요.src/main/java/com/gdschongik/gdsc/domain/study/dao/StudyAnnouncementRepository.java (1)
9-13
: 코드가 적절합니다.
getById
메서드는 엔티티를 편리하게 조회할 수 있도록 구현되었습니다.CustomException
이 애플리케이션에서 적절히 처리되는지 확인하세요.src/main/java/com/gdschongik/gdsc/domain/study/domain/StudyAnnouncement.java (1)
Line range hint
20-50
: 코드가 적절합니다.
StudyAnnouncement
클래스는 빌더 패턴과 정적 팩토리 메서드를 사용하여 객체 생성의 명확성을 높였습니다.update
메서드를 통해 엔티티의 필드를 쉽게 수정할 수 있습니다. 애플리케이션에서update
메서드가 적절히 사용되는지 확인하세요.src/main/java/com/gdschongik/gdsc/domain/study/api/StudentStudyController.java (1)
4-4
: DTO 변경 확인 필요
StudyAttendRequest
에서StudyAttendCreateRequest
로 변경되었습니다. 이 변경 사항이 시스템 전반에 걸쳐 일관되게 반영되었는지 확인이 필요합니다. 특히, 이 DTO를 사용하는 다른 부분에서의 호환성을 검토해야 합니다.Also applies to: 52-54
Verification successful
DTO 변경이 일관되게 적용되었습니다
StudyAttendCreateRequest
가StudentStudyService
와StudentStudyController
에서 사용되고 있으며,StudyAttendRequest
의 잔여 사용 흔적이 없습니다. 이로 인해 변경 사항이 시스템 전반에 걸쳐 일관되게 반영된 것으로 보입니다.Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify all references to `StudyAttendCreateRequest` in the codebase. # Test: Search for the usage of `StudyAttendCreateRequest`. Expect: Consistent usage across the codebase. rg --type java 'StudyAttendCreateRequest'Length of output: 833
src/main/java/com/gdschongik/gdsc/domain/study/api/MentorStudyController.java (2)
4-4
: 스터디 공지 생성 API 추가스터디 공지 생성 기능이 추가되었습니다.
StudyAnnouncementCreateUpdateRequest
DTO의 유효성 검사가 필요하며, 서비스 계층에서의 처리 로직이 적절한지 확인해야 합니다.Also applies to: 45-50
53-58
: 스터디 공지 수정 API 추가스터디 공지 수정 기능이 추가되었습니다. 수정 시 전체 리소스를 업데이트하는 것이므로 PUT 메서드 사용이 적절합니다. DTO 네이밍 컨벤션을 준수했는지 확인하세요.
src/main/java/com/gdschongik/gdsc/domain/study/application/StudentStudyService.java (1)
13-13
: DTO 변경에 따른 서비스 로직 확인 필요
attend
메서드가StudyAttendCreateRequest
를 사용하도록 변경되었습니다. 이 변경이 서비스 로직에 미치는 영향을 검토하고, 다른 관련 메서드와의 호환성을 확인해야 합니다.Also applies to: 76-78
Verification successful
서비스 로직 호환성 확인 완료
attend
메서드가StudyAttendCreateRequest
를 사용하는 변경 사항이StudentStudyController
에서 적절히 반영되었습니다. 코드베이스 내 다른 관련 메서드와의 호환성 문제는 발견되지 않았습니다.Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify all references to `attend` method in the codebase to ensure compatibility. # Test: Search for the usage of `attend` method. Expect: Consistent usage with the new DTO. rg --type java 'attend\(.*StudyAttendCreateRequest'Length of output: 216
Script:
#!/bin/bash # Search for all calls to the `attend` method in the codebase to verify compatibility with the new DTO. rg --type java 'attend\(' -A 2Length of output: 1116
src/main/java/com/gdschongik/gdsc/domain/study/application/MentorStudyService.java (1)
81-92
: 코드 변경 사항이 적절합니다.스터디 공지 삭제 메서드는 멘토 권한을 확인하고 로그를 남기는 등 올바르게 동작합니다.
다만,
studyAnnouncementRepository.delete
메서드가 예외를 적절히 처리하는지 확인하세요.Verification successful
delete
메서드의 예외 처리 확인
StudyAnnouncementRepository
는JpaRepository
를 상속받는 인터페이스입니다.JpaRepository
는 Spring Data JPA의 일부로, 예외 처리를 내부적으로 처리하여 일관된 예외 변환을 제공합니다. 따라서delete
메서드는 이미 적절한 예외 처리를 수행하고 있을 가능성이 높습니다. 추가적인 코드 변경은 필요하지 않습니다.Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify the delete method handling in `StudyAnnouncementRepository`. # Test: Search for the delete method usage. Expect: Proper exception handling. rg --type java -A 3 $'studyAnnouncementRepository.delete'Length of output: 564
Script:
#!/bin/bash # Locate the implementation of the delete method in StudyAnnouncementRepository to verify exception handling. ast-grep --lang java --pattern $'class StudyAnnouncementRepository { $$$ void delete(StudyAnnouncement $_) { $$$ } $$$ }'Length of output: 134
Script:
#!/bin/bash # Locate the definition of StudyAnnouncementRepository to understand its structure and any inherited methods. rg --type java 'class StudyAnnouncementRepository' -A 10 rg --type java 'interface StudyAnnouncementRepository' -A 10Length of output: 875
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.
lgtm
🌱 관련 이슈
📌 작업 내용 및 특이사항
📝 참고사항
📚 기타
Summary by CodeRabbit
새로운 기능
StudyNotificationRequest
및 스터디 공지 생성/업데이트를 위한StudyAnnouncementCreateUpdateRequest
정의.버그 수정
문서화