Conversation
Updated README.md to include additional authors and API information.
fix: 이벤트 상세 수정 API에서 필드명 불일치 문제 수정
문의, 문의 답변, 관리자 기능 구현
|
Caution Review failedThe pull request is closed. Note
|
| Cohort / File(s) | Summary |
|---|---|
Database Schema sql/init.sql |
admin, inquiry, inquiry_image_file, inquiry_answer 테이블 추가. 관리자-사용자 1:1 관계, 문의-사용자 M:1 관계, 문의답변-관리자 M:1 및 문의-답변 1:1 관계 정의. |
Admin Domain Layer src/main/java/im/toduck/domain/admin/persistence/entity/Admin.java, ...repository/AdminRepository.java, ...repository/querydsl/AdminRepositoryCustom.java, ...repository/querydsl/AdminRepositoryCustomImpl.java, ...domain/service/AdminService.java, ...domain/usecase/AdminUseCase.java |
관리자 엔티티, 저장소, 커스텀 QueryDSL 쿼리, 서비스(조회/생성/수정/삭제), 유스케이스(역할 승격/강등) 구현. |
Admin Presentation Layer src/main/java/im/toduck/domain/admin/presentation/api/AdminApi.java, ...controller/AdminController.java, ...common/mapper/AdminMapper.java, ...dto/request/AdminCreateRequest.java, ...dto/request/AdminUpdateRequest.java, ...dto/response/AdminResponse.java, ...dto/response/AdminListResponse.java |
관리자 REST API, 컨트롤러, 매퍼, 요청/응답 DTO 정의. ROLE_ADMIN 권한 제한 적용. |
Inquiry Domain Layer src/main/java/im/toduck/domain/inquiry/persistence/entity/Inquiry.java, ...entity/InquiryImage.java, ...entity/InquiryAnswer.java, ...entity/Type.java, ...entity/Status.java, ...repository/InquiryRepository.java, ...repository/InquiryImgRepository.java, ...repository/InquiryAnswerRepository.java, ...repository/querydsl/InquiryRepositoryCustom.java, ...repository/querydsl/InquiryRepositoryCustomImpl.java, ...domain/service/InquiryService.java, ...domain/service/InquiryAnswerService.java, ...domain/usecase/InquiryUseCase.java, ...domain/usecase/InquiryAnswerUseCase.java |
문의/문의답변 엔티티, Type/Status 열거형, 저장소, 커스텀 쿼리, 서비스(CRUD/답변 관리), 유스케이스 구현. |
Inquiry Presentation Layer src/main/java/im/toduck/domain/inquiry/presentation/api/InquiryApi.java, ...api/InquiryAnswerApi.java, ...controller/InquiryController.java, ...controller/InquiryAnswerController.java, ...common/mapper/InquiryMapper.java, ...common/mapper/InquiryImgMapper.java, ...dto/request/InquiryCreateRequest.java, ...dto/request/InquiryUpdateRequest.java, ...dto/request/InquiryAnswerCreateRequest.java, ...dto/request/InquiryAnswerUpdateRequest.java, ...dto/response/InquiryResponse.java, ...dto/response/InquiryListResponse.java |
문의/문의답변 REST API, 컨트롤러, 매퍼, 요청/응답 DTO. 사용자 소유권 검증 및 ADMIN 역할 제한 적용. |
Supporting Domain Changes src/main/java/im/toduck/domain/diary/persistence/entity/Diary.java, ...persistence/entity/DiaryImage.java, ...domain/service/DiaryService.java, ...domain/usecase/DiaryUseCase.java |
Diary.diaryImages에서 orphanRemoval=true 제거. DiaryImage의 Hibernate soft-delete 어노테이션 삭제. 이미지 soft-delete를 유스케이스에서 명시적으로 관리. |
Events Detail Domain Changes src/main/java/im/toduck/domain/events/detail/persistence/entity/EventsDetail.java, ...persistence/entity/EventsDetailImg.java, ...domain/service/EventsDetailService.java, ...domain/usecase/EventsDetailUseCase.java, ...presentation/api/EventsDetailApi.java, ...presentation/dto/request/EventsDetailCreateRequest.java, ...presentation/dto/response/EventsDetailResponse.java |
EventsDetail.eventsDetailImgs에서 orphanRemoval=true 제거. EventsDetailImg의 soft-delete 어노테이션 삭제 및 softDelete() 메서드 추가. 메서드명 오타 수정(addEventsDetailImges → addEventsDetailImages). API 문서화 개선. |
Global Exceptions & User Domain src/main/java/im/toduck/global/exception/ExceptionCode.java, ...domain/user/persistence/entity/User.java, ...domain/mypage/domain/usecase/MyPageUseCase.java |
문의/관리자 관련 6개 새 예외 코드 추가. User에 promoteToAdmin() / demoteToUser() 메서드 추가. 계정 삭제 시 관리자 데이터 함께 삭제. |
Test Classes src/test/java/im/toduck/domain/admin/presentation/controller/AdminControllerTest.java, ...inquiry/presentation/controller/InquiryControllerTest.java, ...inquiry/presentation/controller/InquiryAnswerControllerTest.java, ...events/detail/domain/usecase/EventsDetailUseCaseTest.java |
관리자 CRUD, 문의/문의답변 생성/수정/삭제, soft-delete 동작, 권한 검증, 상태 전이 통합 테스트 추가. |
Sequence Diagram(s)
sequenceDiagram
actor User
participant InquiryController
participant InquiryUseCase
participant UserService
participant InquiryService
participant InquiryRepository
User->>InquiryController: POST /v1/inquiries (InquiryCreateRequest)
InquiryController->>InquiryUseCase: createInquiry(request, userId)
InquiryUseCase->>UserService: getUser(userId)
UserService-->>InquiryUseCase: User
InquiryUseCase->>InquiryService: createInquiry(request, user)
InquiryService->>InquiryRepository: save(inquiry)
InquiryRepository-->>InquiryService: saved Inquiry
InquiryUseCase->>InquiryService: addInquiryImages(inquiry, imgUrls)
InquiryService->>InquiryRepository: saveAll(inquiryImages)
InquiryRepository-->>InquiryService: saved Images
InquiryUseCase-->>InquiryController: Inquiry
InquiryController-->>User: 201 Created
sequenceDiagram
actor Admin
participant InquiryAnswerController
participant InquiryAnswerUseCase
participant UserService
participant AdminService
participant InquiryAnswerService
participant InquiryService
participant InquiryRepository
Admin->>InquiryAnswerController: POST /v1/inquiry-answers (InquiryAnswerCreateRequest)
InquiryAnswerController->>InquiryAnswerUseCase: createInquiryAnswer(request, adminUserId)
InquiryAnswerUseCase->>UserService: getUser(adminUserId)
UserService-->>InquiryAnswerUseCase: User
InquiryAnswerUseCase->>AdminService: getAdminBySameUser(userId)
AdminService-->>InquiryAnswerUseCase: Admin
InquiryAnswerUseCase->>InquiryAnswerService: createInquiryAnswer(request, admin)
InquiryAnswerService->>InquiryService: getInquiryById(inquiryId)
InquiryService-->>InquiryAnswerService: Inquiry
InquiryAnswerService->>InquiryRepository: findAnyByInquiryIdIncludingDeleted()
InquiryRepository-->>InquiryAnswerService: Optional(existing answer)
alt Answer exists (not deleted)
InquiryAnswerService-->>InquiryAnswerUseCase: CommonException(ALREADY_ANSWERED)
else Answer deleted or not exists
InquiryAnswerService->>InquiryAnswerService: createInquiryAnswer entity
InquiryAnswerService->>InquiryRepository: save(inquiry with answer)
InquiryRepository-->>InquiryAnswerService: saved
end
InquiryAnswerUseCase-->>InquiryAnswerController: InquiryAnswer
InquiryAnswerController-->>Admin: 200 OK
sequenceDiagram
actor User
participant InquiryController
participant InquiryUseCase
participant UserService
participant InquiryService
participant InquiryRepository
User->>InquiryController: PATCH /v1/inquiries/{inquiryId} (InquiryUpdateRequest)
InquiryController->>InquiryUseCase: updateInquiry(inquiryId, request, userId)
InquiryUseCase->>UserService: getUser(userId)
UserService-->>InquiryUseCase: User
InquiryUseCase->>InquiryService: getInquiryById(inquiryId)
InquiryService-->>InquiryUseCase: Inquiry
alt User owns inquiry and no answer exists
InquiryUseCase->>InquiryService: updateInquiry(request, inquiry)
InquiryService->>InquiryRepository: delete(old images)
InquiryService->>InquiryRepository: saveAll(new images)
InquiryRepository-->>InquiryService: saved
InquiryService-->>InquiryUseCase: void
else Unauthorized or already answered
InquiryUseCase-->>InquiryController: CommonException
end
InquiryUseCase-->>InquiryController: Inquiry
InquiryController-->>User: 200 OK
Estimated code review effort
🎯 4 (Complex) | ⏱️ ~50 minutes
Possibly related PRs
- PR
#166: 동일한 관리자 및 문의 기능을 구현하며, 동일한 데이터베이스 테이블(admin,inquiry,inquiry_image_file,inquiry_answer)과 대응하는 Java 아티팩트(엔티티, 저장소, 서비스, 유스케이스, 컨트롤러)를 추가합니다. - PR
#142: 이벤트 상세 도메인의 동일한 코드를 수정하며,EventsDetailService,EventsDetailUseCase,EventsDetailImg/EventsDetail엔티티 매핑 및 이미지 처리 메서드를 변경합니다. - PR
#141: 동일한 핵심 파일(User.java,ExceptionCode)을 수정하며, 사용자 역할/관리자 메서드와 새 예외 코드를 추가합니다.
Suggested labels
✨ Feature
Suggested reviewers
- wafla
- kang20
- Junad-Park
Poem
🐰 관리자가 나타나고 문의가 날아오네,
데이터베이스에 네 테이블이 춤을 춘다네,
CRUD의 환희, 권한의 검증,
이제 토덕은 더욱 똑똑해졌네!
날개짓하며 기뻐하는 우리 토끼 🐇✨
✨ Finishing Touches
📝 Generate docstrings
- Create stacked PR
- Commit on current branch
🧪 Generate unit tests (beta)
- Create PR with unit tests
- Commit unit tests in branch
develop
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.
Comment @coderabbitai help to get the list of available commands and usage tips.
Summary by CodeRabbit
릴리스 노트
새로운 기능
개선 사항