상담신청
APPLICATIONS · /applications
종류
목록
부르는 것
1
lib 함수
가드레일
10
줄
152
로그인 필요게시판
화면
관리자 세션으로 촬영한 실제 화면입니다.

이 화면이 부르는 것
- ·
listApplies()
소스
src/app/(console)/applications/page.tsx같은 규칙을 쓰는 화면
목록 · 작성 · 수정이 한 묶음입니다. 스펙을 세 벌로 적으면 어긋납니다.
개발 스펙
ADMIN-APPLICATIONS완료이 스펙은 2개 화면이 함께 씁니다이 화면에서 할 수 있어야 하는 것 (4)
- 레벨테스트 신청과 상담 신청을 함께 관리한다.
- 목록에서 레벨테스트 점수를 바로 본다 — 상담 전에 수준을 알 수 있다.
- 상담완료 · 부재중을 목록에서 바로 누른다.
- 담당자를 배정한다.
비즈니스 규칙 (4)
- 레벨테스트 신청도 apply 테이블에 type=tfrm 으로 쌓인다(6,782건).근거: leveltest_v_01.php:111
- 점수는 level_test_answer 를 left join 해 가져온다. 안 친 사람은 null 이다.
- 토글할 수 있는 플래그는 complete · absence · sms 셋뿐이다.근거: ap_proc.php:61 이 컬럼 이름을 문자열로 이어 붙인다
- 신청 종류 코드가 9개인데 여러 개가 같은 이름을 가리킨다. 모르는 코드는 코드 그대로 보여 준다.근거: _Env.php:228~238
API (4)
| 메서드 | 경로 | 권한 | 모듈 · 설명 |
|---|---|---|---|
GET | /api/marketing/admin/applies | 관리자 | 신청 목록. type · keyword · completed 로 거른다. 레벨테스트 점수 포함. domains:marketing:marketing-web |
GET | /api/marketing/admin/applies/{id} | 관리자 | 신청 상세. domains:marketing:marketing-web404 APPLY_NOT_FOUND |
POST | /api/marketing/admin/applies/{id}/flags | 관리자 | 상담완료 · 부재중 · SMS 토글. domains:marketing:marketing-web400 INVALID_FLAG |
POST | /api/marketing/admin/applies/{id}/counseling | 관리자 | 담당자 배정. domains:marketing:marketing-web |
가드레일 (10) — id 가 곧 테스트 이름이다
| id | 반드시 만족해야 하는 것 | 등급 |
|---|---|---|
poll-result-shown | 레벨테스트 신청 상세에서 그 사람의 설문 답을 볼 수 있어야 한다. 원본 admin/board/ap_poll_result.php 가 문항과 답을 짝지어 늘어놓던 것이다. | normal |
counseling-history-requires-admin | 상담 이력은 관리자만 보고 쓸 수 있어야 한다. 신청자의 연락처와 상담 내용이 들어 있다. | critical |
counseling-history-server-side-merge | 지난 이력은 서버가 읽어 이어 붙여야 한다. 화면이 보낸 본문을 그대로 쓰면 안 된다. 원본은 큰 textarea 에 지난 이력을 통째로 담아 두고 그것을 그대로 저장했다 — 관리자가 실수로 지우면 지난 이력이 그대로 사라졌다. | critical |
counseling-history-prepends | 새 이력이 위에 쌓이고 지난 것이 남아야 한다. | high |
counseling-history-stamped | 머리말에 날짜와 작성자가 원본 문구 그대로 붙어야 한다. 지난 이력과 같은 모양이라야 이어서 읽힌다(ap_edit_proc.php:16). | high |
counseling-history-not-empty | 빈 내용은 저장하지 않아야 한다. | normal |
counseling-history-ui | 상세 화면에서 이력을 남기면 본문에 쌓여야 한다. | normal |
apply-flag-whitelist | 허용 목록(complete · absence · sms) 밖의 이름은 거부해야 한다. 원본이 컬럼 이름을 문자열로 이어 붙여 SQL 을 만들던 자리다. | critical |
apply-shows-level-test-score | 레벨테스트 신청은 목록에서 점수나 "미응시"가 보여야 한다. | normal |
apply-requires-admin | 신청자의 연락처와 문의 내용이 들어 있어 관리자만 볼 수 있어야 한다. | critical |
구현 계획 (15/15)
- ●PollResult 값 객체 — 문항과 답을 짝지어
assessment-domain - ●pollResultOf 포트와 어댑터 (쉼표로 이어 붙인 답을 다시 나눈다)
assessment-infrastructure - ●GET /assessment/admin/applies/{id}/poll-result (관리자 전용)
assessment-web - ●상담신청 상세의 설문 카드
wvctesol-admin - ●CounselingHistory — 원본 머리말 문구를 글자 그대로
marketing-domain - ●historyOf · updateHistory 포트
marketing-domain - ●유스케이스 — 지난 이력을 서버가 읽어 병합
marketing-app - ●apply.history 갱신 + mod_id · mod_date · mod_ip
marketing-infrastructure - ●GET/POST /admin/applies/{id}/history
marketing-web - ●상세 화면의 이력 카드 — 새 내용만 받는다
wvctesol-admin - ●ApplyType · ApplyEntry — 모르는 코드도 살린다
marketing-domain - ●AdminApplyUseCase
marketing-app - ●ApplyRepositoryAdapter — 점수 left join, 플래그 허용 목록
marketing-infrastructure - ●GET/POST /api/marketing/admin/applies
marketing-web - ●목록 · 상세 · 토글 · 담당자
wvctesol-admin
서버 사이드 구현 계획 — 자바 객체별 요구사항 (2/2)
| 객체 | 모듈 | 책임 · 지켜야 할 것 |
|---|---|---|
● ApplyTypeenum | marketing-domain | 신청 종류.
|
● ApplyRepositoryAdapterclass | marketing-infrastructure | 신청 조회와 상태 변경.
|
테스트 방법 (10)
| 가드레일 | 종류 | 확인 방법 |
|---|---|---|
poll-result-shown | e2e | 레벨테스트 유형 신청의 상세에서 문항·답이 보인다 |
counseling-history-requires-admin | e2e | 비로그인·수강생 토큰으로 조회·저장 → 401 |
counseling-history-server-side-merge | e2e | 요청에 history 를 실어 보내도 그 값이 쓰이지 않는다 |
counseling-history-prepends | e2e | 두 번 저장 후 새 것이 위, 이전 것이 아래에 남는다 |
counseling-history-stamped | e2e | "날짜 : … , 작성자 : " 와 구분선이 원본 그대로 |
counseling-history-not-empty | e2e | 빈 문자·공백 → EMPTY_HISTORY |
counseling-history-ui | e2e | 상세 화면에서 저장 후 본문에 내용과 작성자가 보인다 |
apply-flag-whitelist | integration | flag 에 SQL 조각을 넣어 전송 → 400 INVALID_FLAG |
apply-shows-level-test-score | e2e | 목록에 "n / 15" 또는 "미응시" 가 보인다 |
apply-requires-admin | e2e | 비로그인 · 수강생 토큰 → 403 |
정하지 못한 것 · 확인이 필요한 것
- 상담 이력(ap_history.php)과 설문 결과(ap_poll_result.php)는 아직 없다. 설문 응시 화면이 없어 데이터가 쌓이지 않는다.