Skip to content

[Feat] 프롬프트 상세 조회 및 댓글 CRUD API 계약 및 Swagger 명세 작성#30

Merged
Hanharam merged 6 commits into
developfrom
feat/#29-prompt-comment-api
Jul 25, 2026
Merged

[Feat] 프롬프트 상세 조회 및 댓글 CRUD API 계약 및 Swagger 명세 작성#30
Hanharam merged 6 commits into
developfrom
feat/#29-prompt-comment-api

Conversation

@KunHeeLee7

@KunHeeLee7 KunHeeLee7 commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

변경 사항

  • 프롬프트 상세 조회와 댓글 조회·작성·수정·삭제 및 대댓글 작성 등 6개 API 골격을 추가했습니다.
  • 프론트엔드 선행 개발을 위한 Request/Response DTO와 Bean Validation을 정의했습니다.
  • Swagger에 요청·응답 Schema, 주요 오류 응답 및 댓글·대댓글 예시를 추가했습니다.
  • 공통 오류 응답 Schema와 400, 401, 403, 404 상태별 예시를 정의했습니다.
  • 미구현 비즈니스 로직은 가짜 성공 응답 대신 501 Not Implemented를 반환합니다.
  • posts.author_tip 컬럼은 실제 용도에 맞게 description으로 변경했으며, 관련 엔티티·도메인·응답 DTO의 필드명도 함께 통일했습니다.

프롬프트 상세

  • 비회원에게는 promptBody를 빈 문자열로 반환하도록 명세했습니다.
  • 로그인 사용자는 FREE 콘텐츠의 원문 전체를 조회할 수 있습니다.
  • PREMIUM 미결제 사용자에게는 원문의 앞부분 10%, 최대 200자만 반환하도록 명세했습니다.
  • PREMIUM 결제 완료 사용자와 작성자는 원문 전체를 조회할 수 있습니다.
  • access.locked, access.reason으로 로그인 또는 결제 필요 여부를 전달합니다.
  • 이번 API 계약에서는 FREE, PREMIUM 콘텐츠 타입만 노출합니다.

이미지 및 태그

  • 워터마크 처리가 완료된 이미지의 Presigned URL만 반환하도록 명세했습니다.
  • 원본 이미지 URL, S3 Key 및 버킷 경로는 응답에 포함하지 않습니다.
  • 썸네일은 별도 URL이 아닌 images[].thumbnail 값으로 구분합니다.
  • 이미지와 태그는 목록 형태로 반환합니다.

댓글

  • 댓글은 페이지네이션 없이 전체 목록을 한 번에 반환합니다.
  • 댓글과 대댓글은 작성 시간 내림차순으로 정렬합니다.
  • 대댓글은 부모 댓글의 replies에 포함합니다.
  • 최상위 댓글에는 대댓글을 작성할 수 있지만, 대댓글에는 추가 대댓글을 작성할 수 없습니다.
  • 댓글 응답에 작성자 이름, 프로필 이미지 및 본인 댓글 여부인 mine을 포함합니다.
  • 댓글 작성자 본인만 댓글을 수정하거나 삭제할 수 있도록 명세했습니다.
  • 댓글 삭제는 논리 삭제하며 성공 시 200 OK를 반환합니다.

Swagger 예시

  • 댓글 목록 조회 성공 예시에 최상위 댓글 2개와 대댓글 1개를 포함했습니다.
  • 부모 댓글은 parentCommentId: null, 대댓글은 부모 댓글 ID를 반환합니다.
  • 대댓글 전용 DTO를 분리하여 replies가 문자열로 표시되지 않도록 했습니다.
  • 공통 오류 Schema를 사용하면서 상태 코드별 오류 코드와 메시지를 구분했습니다.

범위 제외

  • Application/UseCase 및 영속성 구현
  • 결제 완료 여부와 프롬프트 접근 권한 판별
  • 워터마크 처리 및 Presigned URL 실제 발급
  • 비회원 조회 허용을 위한 Security 설정
  • Controller 계약 테스트 신규 작성
  • authorTipdescription 도메인 명칭 정리
  • DB 스키마 변경

테스트

  • ./gradlew compileJava
  • ./gradlew test
  • 전체 기존 테스트 통과
  • git diff --check 통과

Closes #29

@KunHeeLee7 KunHeeLee7 self-assigned this Jul 23, 2026

@Hanharam Hanharam left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

global/response에 추가된 ApiErrorResponse, ApiErrorExamples 대신에 기존 ApiResponseCommonErrorCode를 사용해 문서화하면 좋을 것 같습니다!

Long userId,

@Schema(description = "작성자 이름", example = "프롬프트장인")
String displayName,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

displayName도 좋지만 필드명을 저는 nickname으로 하는 것이 더 명확하고 프론트 분들도 알기 쉬울 것 같습니다!

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수정하였습니다!

List<PromptTagResponse> tags,

@Schema(description = "공개 통계")
PromptStatisticsResponse statistics,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

로그인 사용자가 자신이 좋아요나 북마크를 눌렀는 지 확인할 수 있도록 viewerInteraction(liked, bookmarked) 같은 상태를 응답해야할 것 같습니다!

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인 감사합니다! 로그인 사용자의 좋아요·북마크 여부가 누락되어 있어, 상세 응답에 viewerInteraction(liked, bookmarked)을 추가했습니다. 비로그인 사용자는 두 값 모두 false로 명세했습니다.

CommentStatus status,

@Schema(description = "현재 로그인 사용자가 작성한 댓글인지 여부", example = "true")
boolean mine,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Figma 댓글 컴포넌트에는 프롬프트 작성자의 댓글임을 나타내는 “작성자” 배지가 있고 mine은 로그인 사용자 본인의 댓글인지만 나타내고 있습니다.
그래서 boolean 형식의 필드를 추가해서 작성자 댓글인 것을 나타내면 좋을 것 같습니다!
아니면 상세 응답의 prompt.author.userIdcomment.author.userId를 프론트가 비교하는 방식으로 처리할지, 댓글 응답에 promptAuthor boolean을 제공할지 정하는 것도 좋을 것 같습니다!

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

프론트에서 작성자 ID를 비교하는 방식도 가능하지만, 댓글 API만으로 UI 상태를 명확히 판단할 수 있도록 백엔드에서 제공하는 방향으로 반영했습니다. 기존 mine은 로그인 사용자 본인의 댓글 여부로 유지하고, 프롬프트 작성자의 댓글 여부를 나타내는 promptAuthor 필드를 댓글 및 대댓글 응답에 추가했습니다. 놓쳤던 세부 사항까지 꼼꼼하게 확인해 주셔서 감사합니다!

@Hanharam
Hanharam merged commit d3c8eda into develop Jul 25, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants