관리자 콘솔

원본 admin/ 을 wvctesol-admin(:3896)으로 옮기는 중입니다. API 서버는 사용자 앱과 공유합니다.

메뉴
13
원본 left_menu.php 기준
옮긴 화면
13 / 13
관리자 API
21
가드레일
31
critical 9

이관 진행도

100%

원본 admin/ 아래 PHP 는 143개지만, 좌측 메뉴가 가리키는 실제 화면은 13개입니다. 나머지는 백업과 폐기된 것입니다.

개발 스펙 (8)

메뉴 13개를 성격이 같은 것끼리 묶어 8개로 적었습니다. 요건 · 규칙 · API · 가드레일 · 구현 계획 · 자바 설계 · 테스트 방법이 들어 있습니다.

상담신청

ADMIN-APPLICATIONSwvctesol-admin/applications완료

이 화면에서 할 수 있어야 하는 것 (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-web
404 APPLY_NOT_FOUND
POST/api/marketing/admin/applies/{id}/flags관리자
상담완료 · 부재중 · SMS 토글.
domains:marketing:marketing-web
400 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)

  1. PollResult 값 객체 — 문항과 답을 짝지어assessment-domain
  2. pollResultOf 포트와 어댑터 (쉼표로 이어 붙인 답을 다시 나눈다)assessment-infrastructure
  3. GET /assessment/admin/applies/{id}/poll-result (관리자 전용)assessment-web
  4. 상담신청 상세의 설문 카드wvctesol-admin
  5. CounselingHistory — 원본 머리말 문구를 글자 그대로marketing-domain
  6. historyOf · updateHistory 포트marketing-domain
  7. 유스케이스 — 지난 이력을 서버가 읽어 병합marketing-app
  8. apply.history 갱신 + mod_id · mod_date · mod_ipmarketing-infrastructure
  9. GET/POST /admin/applies/{id}/historymarketing-web
  10. 상세 화면의 이력 카드 — 새 내용만 받는다wvctesol-admin
  11. ApplyType · ApplyEntry — 모르는 코드도 살린다marketing-domain
  12. AdminApplyUseCasemarketing-app
  13. ApplyRepositoryAdapter — 점수 left join, 플래그 허용 목록marketing-infrastructure
  14. GET/POST /api/marketing/admin/appliesmarketing-web
  15. 목록 · 상세 · 토글 · 담당자wvctesol-admin

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

객체모듈책임 · 지켜야 할 것
ApplyType
enum
marketing-domain
신청 종류.
  • 원본 $_array_apply_stype 그대로 — 여러 코드가 같은 이름을 가리킨다.
  • labelOf() 는 모르는 코드를 코드 그대로 돌려준다. 목록에서 사라지면 안 된다.
ApplyRepositoryAdapter
class
marketing-infrastructure
신청 조회와 상태 변경.
  • 레벨테스트 점수를 left join 으로 함께 읽는다. 안 친 사람은 null.
  • 토글 플래그는 Set 으로 잠근다 — 컬럼 이름이 문자열로 만들어지는 자리다.

테스트 방법 (10)

가드레일종류확인 방법
poll-result-showne2e레벨테스트 유형 신청의 상세에서 문항·답이 보인다
counseling-history-requires-admine2e비로그인·수강생 토큰으로 조회·저장 → 401
counseling-history-server-side-mergee2e요청에 history 를 실어 보내도 그 값이 쓰이지 않는다
counseling-history-prependse2e두 번 저장 후 새 것이 위, 이전 것이 아래에 남는다
counseling-history-stampede2e"날짜 : … , 작성자 : " 와 구분선이 원본 그대로
counseling-history-not-emptye2e빈 문자·공백 → EMPTY_HISTORY
counseling-history-uie2e상세 화면에서 저장 후 본문에 내용과 작성자가 보인다
apply-flag-whitelistintegrationflag 에 SQL 조각을 넣어 전송 → 400 INVALID_FLAG
apply-shows-level-test-scoree2e목록에 "n / 15" 또는 "미응시" 가 보인다
apply-requires-admine2e비로그인 · 수강생 토큰 → 403

정하지 못한 것 · 확인이 필요한 것

  • 상담 이력(ap_history.php)과 설문 결과(ap_poll_result.php)는 아직 없다. 설문 응시 화면이 없어 데이터가 쌓이지 않는다.

운영

메뉴원본원본 줄수옮긴 파일상태
관리자 관리
/admins
admin/admin/ad_list.php443
  • src/app/(console)/admins/page.tsx
완료
회원 관리
/members
admin/member/mb_list.php529
  • src/app/(console)/members/[id]/page.tsx
  • src/app/(console)/members/page.tsx
완료
배너 관리
/banners
admin/banner/banner_list.php187
  • src/app/(console)/banners/page.tsx
완료

게시판

메뉴원본원본 줄수옮긴 파일상태
공지사항
/notices
admin/board/nt_list.php159
  • src/app/(console)/notices/[id]/page.tsx
  • src/app/(console)/notices/new/page.tsx
  • src/app/(console)/notices/page.tsx
완료
수강후기
/reviews
admin/board/sty_list.php169
  • src/app/(console)/reviews/[id]/page.tsx
  • src/app/(console)/reviews/new/page.tsx
  • src/app/(console)/reviews/page.tsx
완료
합격노트
/pass-notes
admin/board/passnote_list.php248
  • src/app/(console)/pass-notes/[id]/page.tsx
  • src/app/(console)/pass-notes/new/page.tsx
  • src/app/(console)/pass-notes/page.tsx
완료
질문답변
/qna
admin/board/qa_list.php190
  • src/app/(console)/qna/[id]/page.tsx
  • src/app/(console)/qna/page.tsx
완료
상담신청
/applications
admin/board/ap_list.php621
  • src/app/(console)/applications/[id]/page.tsx
  • src/app/(console)/applications/page.tsx
완료
자주듣는 질문
/faqs
admin/board/faq_list.php203
  • src/app/(console)/faqs/[id]/page.tsx
  • src/app/(console)/faqs/new/page.tsx
  • src/app/(console)/faqs/page.tsx
완료

수강 · 결제

메뉴원본원본 줄수옮긴 파일상태
결제리스트
/payments
admin/payment/payment_list.php244
  • src/app/(console)/payments/page.tsx
완료
TESOL Unit
/units/tesol
admin/unit/unit_list.php75
  • src/app/(console)/units/tesol/page.tsx
완료
TEC Unit
/units/tec
admin/unit/unit_list_tec.php75
  • src/app/(console)/units/tec/page.tsx
완료
레벨테스트
/level-tests
admin/unit/level_test_list.php92
  • src/app/(console)/level-tests/page.tsx
완료