개발 내용 README.md 파일에 반영
This commit is contained in:
@@ -19,14 +19,19 @@ chocomae(mouse-typing) 서비스의 관리자 기능을 독립 Next.js 서비스
|
||||
|
||||
## 구현된 기능
|
||||
|
||||
- 관리자 로그인 (기존 `admin` 테이블 / MariaDB `PASSWORD()` 호환)
|
||||
- 관리자 로그인 (기존 `admin` 테이블 / MariaDB `PASSWORD()` 호환, 로그인 실패 5회 → 15분 잠금)
|
||||
- 마에스트로 전체 목록 — 검색(이름·이메일·ID), 상태/계정유형 필터, 페이지네이션
|
||||
- 마에스트로 상세 보기 — 기본 정보, 연장/업그레이드 이력, 처리 로그
|
||||
- 연장 신청 목록 — 승인 / 취소 (트랜잭션 + `maestro_log`)
|
||||
- 업그레이드 신청 목록 — 승인 / 거절 (트랜잭션 + `maestro_log`)
|
||||
- 마에스트로 정보 수정 — 이름, 이메일, 상태, 계정유형, 만료일, 엔터코드 허용 여부 (`PATCH /api/maestros/[id]`)
|
||||
- 마에스트로 암호 초기화 — 관리자가 `123456`으로 초기화 (트랜잭션 + `maestro_log`)
|
||||
- 수강생 목록 — 서버사이드 페이지네이션 (`GET /api/maestros/[id]/students`)
|
||||
- 연장 신청 목록 — 승인 / 취소 (트랜잭션 + `maestro_log` + 이메일 발송)
|
||||
- 업그레이드 신청 목록 — 승인 / 거절 (트랜잭션 + `maestro_log` + 이메일 발송)
|
||||
- 관리자 주도 연장/업그레이드 신청 등록 — 마에스트로 상세 화면에서 직접 등록 (이메일 미발송)
|
||||
- 비인증 접근 차단 (`proxy.ts`, API route `auth()` 검사)
|
||||
- 구조화 로깅 — API 처리 시간·결과, DB 쿼리 pretty 출력, slow query 감지, 비밀번호 컬럼 마스킹 (`Password`)
|
||||
- 동시 승인 방지 — 연장/업그레이드 승인·취소·거절 시 조건부 원자 UPDATE로 이중 처리 차단
|
||||
- 이메일 자동 발송 — 연장/업그레이드 승인 후 Nodemailer로 발송, 실패 시 UI 경고 표시
|
||||
|
||||
## 개발 환경 설정
|
||||
|
||||
@@ -92,10 +97,15 @@ pnpm dev
|
||||
## 배포 (Synology NAS Docker)
|
||||
|
||||
```bash
|
||||
# 이미지 빌드 및 컨테이너 시작
|
||||
docker compose up -d --build
|
||||
# 스테이지 배포
|
||||
bash scripts/deploy-stage.sh
|
||||
|
||||
# 운영 배포 (yes 입력 확인 필요)
|
||||
bash scripts/deploy-production.sh
|
||||
```
|
||||
|
||||
각 스크립트는 `git pull` → `proxy-network` 확인 → `docker compose up -d --build --remove-orphans` → `docker exec npm nginx -s reload` 순으로 실행된다.
|
||||
|
||||
`docker-compose.yml`의 `environment` 섹션에 위 환경변수를 설정한다. `TZ: Asia/Seoul`은 두 compose 파일에 이미 포함되어 있다. 상세 절차는 [`docs/deployment.md`](docs/deployment.md)를 참고한다.
|
||||
|
||||
## 프로젝트 구조
|
||||
@@ -109,6 +119,12 @@ chocoadmin/
|
||||
│ │ ├── extension-requests/
|
||||
│ │ └── upgrade-requests/
|
||||
│ └── api/ # API routes
|
||||
│ └── maestros/[id]/
|
||||
│ ├── route.ts # PATCH — 마에스트로 정보 수정
|
||||
│ ├── students/route.ts # GET — 수강생 목록 (페이지네이션)
|
||||
│ ├── extension-requests/ # POST — 관리자 주도 연장 신청
|
||||
│ ├── upgrade-requests/ # POST — 관리자 주도 업그레이드 신청
|
||||
│ └── reset-password/ # POST — 암호 초기화
|
||||
├── components/
|
||||
│ ├── data-table/ # TanStack Table 기반 테이블
|
||||
│ ├── forms/
|
||||
@@ -118,10 +134,14 @@ chocoadmin/
|
||||
│ ├── logger.ts # 공통 로거 (debug/info/warn/error)
|
||||
│ ├── errors.ts # ApiError 공통 에러 클래스
|
||||
│ ├── api-handler.ts # API route 래퍼 (auth, 타이밍, 에러 처리)
|
||||
│ ├── mail.ts # Nodemailer 이메일 발송
|
||||
│ ├── constants.ts # 상태값 상수
|
||||
│ ├── maestros.ts # 마에스트로 DB 쿼리
|
||||
│ ├── extension-requests.ts
|
||||
│ └── upgrade-requests.ts
|
||||
├── scripts/
|
||||
│ ├── deploy-stage.sh # 스테이지 배포 스크립트
|
||||
│ └── deploy-production.sh # 운영 배포 스크립트
|
||||
├── prisma/
|
||||
│ └── schema.prisma # DB introspection 결과
|
||||
├── docs/
|
||||
|
||||
Reference in New Issue
Block a user