문의하기

QNA-QA-LIST-WRITE · /qna/qa-list/write

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

개발 스펙

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

  • 로그인한 회원이 분류 · 제목 · 내용을 넣어 문의를 남긴다.
  • 분류 선택지는 서버에서 받아 온다 — 화면이 하드코딩하지 않는다.
  • 등록하면 목록으로 돌아가고 방금 쓴 글이 보인다.

비즈니스 규칙 (5)

  • 비로그인은 작성할 수 없다.
    근거: qna/qa_proc.php:5 login_check()
  • 분류는 join(가입문의) · tesol(테솔문의) 둘뿐이다.
    근거: _lib/_Env.php:247~249
  • status=apply · regtype=M 으로 저장된다. 관리자가 답을 달면 end 가 된다.
    근거: qa_proc.php:79~80
  • 작성자 이름은 토큰에서, regid 는 저장 시 member 에서 끌어온다. 요청으로 받지 않는다.
  • 제목 · 내용 · 분류가 비면 등록되지 않는다.
    근거: qa_proc.php:29~31 fieldCheck

API (2)

메서드경로권한모듈 · 설명
GET/api/community/qna/categories공개
분류 선택지.
domains:community:community-web
POST/api/community/qna수강생
문의 등록 → { id }.
domains:community:community-web
401 UNAUTHORIZED
400 INVALID_CATEGORY
400 INVALID_INPUT

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

id반드시 만족해야 하는 것등급
qna-write-requires-login
비로그인 상태로 작성 화면에 머무를 수 없고, API 직접 호출도 거부돼야 한다.
원본 qa_proc.php 가 login_check() 로 시작한다.
critical
qna-writer-from-token
작성자를 요청 본문으로 지정할 수 없어야 한다.
받으면 남의 이름으로 문의를 낼 수 있다.
critical
qna-category-whitelist
분류는 join · tesol 둘뿐이다. 임의 문자열이 저장되면 안 된다.
목록 필터에 영영 걸리지 않는 글이 된다.
high

구현 계획 (5/5)

  1. QnaCategory · NewQnaPost — 분류를 열거형으로 잠근다community-domain
  2. WriteQnaUseCase — 로그인 확인 후 토큰 주인으로 등록community-app
  3. createQna — NOT NULL 컬럼을 채우고 regid 는 member 에서community-infrastructure
  4. POST /api/community/qna · GET /qna/categoriescommunity-web
  5. /qna/qa-list/write 화면과 서버 액션wvctesol

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

객체모듈책임 · 지켜야 할 것
QnaCategory
enum
community-domain
문의 분류.
  • JOIN · TESOL 둘뿐이다. 원본 $_array_qna_category 그대로다.
  • from() 이 알 수 없는 값에 DomainException 을 던진다.
WriteQnaUseCase
service
community-app
문의 등록.
  • Actor 가 null 이면 UnauthorizedException — 원본 login_check() 에 해당한다.
  • 작성자를 Command 로 받지 않는다. actor.id · actor.name 만 쓴다.

테스트 방법 (3)

가드레일종류확인 방법
qna-write-requires-logine2e비로그인 접근 → 로그인 화면, API 직접 호출 → 401
qna-writer-from-tokene2e요청에 name·regid 를 실어 등록 → 저장된 작성자가 토큰 주인이다
qna-category-whiteliste2ecategory 에 임의 문자열 → 400 INVALID_CATEGORY

스냅샷

스냅샷이 없습니다. node scripts/snapshot.mjs 로 촬영하세요.

기능 목록 (5)

입력
  • ·1개
  • ·제출 버튼1개
  • ·입력 필드1개
액션
  • ·서버 액션submitQna
인증
  • ·세션 확인

화면 이동

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

연결

API

직접 호출하는 API 가 없습니다

소스
src/app/qna/qa-list/write/page.tsx