작업 이력

작업 이력 — 2026-06-12

종합

오늘 큰 흐름 — 관리자단 목업 6개 화면을 실데이터로 전환. DBA가 운영 MySQL(PMS)에 관리자 콘솔 스키마(002_admin_console.sql)를 적용·검증하고, API에 인증 가드 + 관리자 엔드포인트를 신설하고, admin 6개 페이지를 실 API에 연동한 뒤 두 레포(api·admin)를 배포했다.

1. DBA — 관리자 콘솔 스키마 적용 (malgn-helper-api/migrations/002_admin_console.sql)

운영 MySQL(PMS)에 적용·검증 완료.

  • hp_topic 10행 (토픽: common/service scope)
  • hp_service 6행 (서비스 카탈로그)
  • hp_setting 21행 (ai/safety/cache 설정 묶음)
  • hp_integration 8행 (외부 연동, 시크릿 값은 미저장)

2. API — 인증 가드 + 관리자 엔드포인트 (malgn-helper-api/src/index.ts)

기존엔 /admin/* 등에 라우트별 가드가 없었다(무인증 접근). 이번에 미들웨어 신설 + 관리자 엔드포인트 추가 (+552 라인).

  • requireAuth — 세션/JWT 검증 미들웨어.
  • requireRole(level) — 최소 권한(level) 가드, requireAuth 뒤에 체인. ROLE_LEVEL(agent < developer < admin).
  • 엔드포인트:
    • GET /accounts (admin) — 운영자/개발자/상담사 계정 목록
    • GET/POST/PUT/DELETE /topics (조회 developer / 변경 admin) — soft delete(status=-1)
    • GET/POST/PUT/DELETE /services (조회 developer / 변경 admin)
    • GET /settings/integrations (developer) · PUT /settings/integrations/:key (admin) — 시크릿 값 미포함, secretSet 플래그만
    • GET /settings/:group (developer) · PUT /settings/:group (admin) — ai|safety|cache 묶음 upsert
  • 라우트 등록 순서 주의: 정적 경로 /settings/integrations를 파라미터 경로 /settings/:group보다 먼저 등록.

3. admin — 목업 6개 화면 실데이터화 (malgn-helper-admin/pages/*)

accounts.vue·catalog.vue·settings/{ai,safety,cache,integrations}.vue (+1133 / −515) — 폼 disabled·목업 데이터를 제거하고 위 API에 연동(조회·저장).

검증

  • api 타입체크: 기존 baseline과 동일한 10건(classify.ts·index.ts의 선존 에러, 라인 번호만 이동) — 신규 변경이 타입 에러를 추가하지 않음 확인. wrangler deploy(esbuild)는 정상.
  • api 가드(배포 후): 무인증 GET /topics·/services·/accounts·/settings/integrations·/settings/ai·/auth/me모두 401(가드 정상). 루트 / → 200.
  • admin 빌드: pnpm run build(nuxt build) 통과 — 신규 6개 page chunk(accounts/catalog/ai/cache/integrations/safety) 전부 산출, chunk 46개. 멀티레포 가드: cwd=admin · wrangler.toml name=malgn-helper-admin 일치 확인.
  • admin(배포 후): prod malgn-helper-admin.pages.dev 200 + 마커 <title>홈 · 맑은도우미 Admin</title>. 신규 6개 라우트(/accounts·/catalog·/settings/{ai,safety,cache,integrations}) 모두 200(SSR 셸). 실데이터는 로그인 후 클라이언트가 인증된 API 호출로 채우는 구조 — 무세션이라 풀 데이터 렌더 검증은 범위 밖.

배포

malgn-helper-api → Cloudflare Workers

  • 커밋: 9cefd48 (신규 커밋: yes)
  • 메시지: feat(admin): requireAuth/requireRole guards + accounts/topics/services/settings endpoints
  • Version ID: fc81a5fe-586f-4d21-8c85-66dc16cf34d2
  • URL: https://malgn-helper-api.malgnsoft.workers.dev
  • 검증: 보호 엔드포인트 무인증 401 / 루트 200

malgn-helper-admin → Cloudflare Pages

  • 커밋: 2d1acf9 (신규 커밋: yes)
  • 메시지: feat(admin): wire accounts/catalog/settings pages to real API (replace mockups)
  • 배포: https://64eedc1c.malgn-helper-admin.pages.dev (prod: malgn-helper-admin.pages.dev)
  • 검증: prod 200 + 빌드 마커 / 신규 6 라우트 200

정합

  • 배포 후 두 레포 working tree↔main 일치(각 repo 변경분만 커밋, 무관 파일 미포함). working tree clean.
  • 002_admin_console.sql은 배포 산출물과 무관(운영 MySQL에 이미 적용)하나, 정합을 위해 api 커밋에 함께 포함.

다음 작업 후보

  • admin 신규 화면 로그인 후 실데이터 렌더 E2E 검증(세션 토큰 확보 후 QA).
  • /topics·/services CRUD 쓰기 경로(POST/PUT/DELETE) admin UI 연동 잔여분 점검.
Malgn Helper(고객상담 AI 챗봇) 프로젝트 문서·작업 이력