합격수기

PASS · /pass-note

실제 화면 열기 ↗
기능
6
API 호출
1
가드레일
1
id 가 테스트 이름
구현 단계
5 / 5
완료커뮤니티wvctesol-api :8080서버 컴포넌트67

개발 스펙

이 화면에서 할 수 있어야 하는 것 (2)

  • 합격수기 목록을 본다(544건).
  • 대표/베스트 수기가 강조된다.

비즈니스 규칙 (3)

  • show 플래그로 노출을 제어한다.
  • main · best 플래그로 대표 · 베스트를 구분한다.
  • 썸네일 이미지(image)가 있다.

API (1)

메서드경로권한모듈 · 설명
GET/api/community/pass-notes공개
합격수기 목록.
domains:community:community-web

가드레일 (1) — id 가 곧 테스트 이름이다

id반드시 만족해야 하는 것등급
passnote-hidden-not-exposed
show 가 꺼진 수기는 목록에도 상세에도 나오면 안 된다.
high

구현 계획 (5/5)

  1. BoardType · BoardSort · BoardPost · BoardRepositorycommunity-domain
  2. BoardQueryUseCase — 목록·상세 공용community-app
  3. BoardTable · BoardRepositoryAdaptercommunity-infrastructure
  4. /api/community/pass-notes 구현community-web
  5. Next.js 를 BFF 로 전환 — Prisma 직접 접근 제거wvctesol

서버 사이드 구현 계획 — 자바 객체별 요구사항 (5/5)

객체모듈책임 · 지켜야 할 것
BoardType
enum
community-domain
게시판 종류.
  • 경로로 받은 문자열은 이 열거형으로만 해석한다 — 임의 값이 테이블 이름이 되지 않는다.
  • 알 수 없는 값은 400 INVALID_BOARD.
BoardSort
enum
community-domain
정렬 기준. 열거형이 곧 화이트리스트다.
  • 원본은 정렬 문자열을 order by 에 그대로 붙였다. 여기서는 문자열이 SQL 로 흘러갈 길 자체를 없앤다.
  • 알 수 없는 값은 오류가 아니라 조용히 기본 정렬로 되돌린다.
BoardTable
record
community-infrastructure
게시판별 테이블·컬럼 차이를 모아 둔 곳.
  • 노출 플래그 이름이 제각각이고 값도 대소문자가 섞여 있다(pass_note 는 Y/N, faq 는 y/n) — upper() 로 맞춘다.
  • 공지만 고정 컬럼이, 수기·후기만 이미지가, Q&A 만 답변이 있다.
  • SQL 에 들어가는 식별자는 이 레코드가 정한 값뿐이다.
BoardRepositoryAdapter
class
community-infrastructure
다섯 테이블을 하나의 포트로 조회.
  • 구조가 거의 같아 엔티티를 다섯 벌 만들지 않고 네이티브 쿼리로 묶었다.
  • 검색어는 반드시 바인딩 파라미터로 넘긴다. 문자열 이어붙이기 금지.
  • 숨긴 글은 목록과 상세 양쪽에서 제외한다 — 상세만 빠뜨리면 id 로 뚫린다.
BoardQueryUseCase
service
community-app
목록·상세 조회.
  • PageRequest 가 page 0·음수·과대를 다듬는다. 오류를 내지 않는다.
  • 상세는 조회수를 정확히 1 올린다.

테스트 방법 (1)

가드레일종류확인 방법
passnote-hidden-not-exposede2e숨긴 수기가 목록에 없음

스냅샷

PASS 스냅샷

기능 목록 (6)

데이터
  • ·API 조회/api/community/pass-notes
  • ·조회 조건page, keyword, orderby
입력
  • ·1개
  • ·제출 버튼1개
  • ·입력 필드1개
미디어
  • ·YouTube 영상

화면 이동

← 이 화면으로 오는 곳
이 화면에서 가는 곳 →

연결

API
  • /api/community/pass-notes
소스
src/app/pass-note/page.tsx