Phase 1 foundation: Prisma + /api/meetings CRUD (#1)

* feat(phase-1): Prisma 연동 + 회의록 CRUD API

Phase 1 foundation (ROADMAP #1~#3):

- src/lib/db.ts: Prisma 클라이언트 싱글톤 (dev hot-reload 대응)
- Meeting 스키마 확장: attendees/tags (String[]), template/depth/
  summaryMode/customPrompt (향후 참조 복원용), createdAt 인덱스
- 첫 마이그레이션 `20260421104750_init` 생성
- /api/meetings (GET 목록 + POST 생성)
  - q 파라미터로 제목/transcript/markdown 부분 검색
  - limit (max 100), offset 페이지네이션
  - attendees/tags 배열 타입 정규화
- /api/meetings/[id] (GET/PUT/DELETE)
  - PUT은 markdownMinutes/title/attendees/tags만 편집 허용
  - 존재하지 않는 id에 대해 404
- docker-compose.yml: tools 프로필에 migrate 서비스 추가
  (app 컨테이너 bloat 없이 마이그레이션 실행)
- Prisma mock 기반 API 테스트 14개 신규 (총 71 tests)

* docs: migrate 실행 단계 추가, ROADMAP의 #1/#2 완료 체크

* docs: PR 본문 드래프트 추가
This commit is contained in:
2026-04-28 16:38:09 +09:00
committed by GitHub
parent 78e0caac0b
commit cf6613bb94
11 changed files with 615 additions and 15 deletions
+11 -11
View File
@@ -51,17 +51,17 @@
노션의 **Meeting Database** 수준. 생성한 회의록을 저장하고 다시 찾아볼 수 있게 함.
### Issues
- [ ] **#1 Prisma 연결 + 마이그레이션 파이프라인**
- `src/lib/db.ts` 싱글톤 Prisma 클라이언트
- 첫 마이그레이션 생성 (`prisma migrate dev`)
- Dockerfile에 `prisma migrate deploy` 추가
- Meeting 스키마`attendees` (String[]), `tags` (String[]) 필드 추가
- [ ] **#2 회의 저장 API**
- `POST /api/meetings` — transcript + markdown 저장
- `GET /api/meetings` — 목록 조회 (최신순, 페이지네이션)
- `GET /api/meetings/[id]` — 상세
- `PUT /api/meetings/[id]` — markdown 편집 저장
- `DELETE /api/meetings/[id]`
- [x] **#1 Prisma 연결 + 마이그레이션 파이프라인** — PR `feat/phase-1-foundation`
- [x] `src/lib/db.ts` 싱글톤 Prisma 클라이언트
- [x] 첫 마이그레이션 생성 (`prisma migrate dev`)
- [x] docker-compose `tools` 프로필에 `migrate` 서비스 추가
- [x] Meeting 스키마 확장 (attendees/tags/template/depth/summaryMode/customPrompt)
- [x] **#2 회의 저장 API** — PR `feat/phase-1-foundation`
- [x] `POST /api/meetings` — transcript + markdown 저장
- [x] `GET /api/meetings` — 목록 조회 (최신순, 페이지네이션, q 부분검색)
- [x] `GET /api/meetings/[id]` — 상세
- [x] `PUT /api/meetings/[id]` — markdown/title/attendees/tags 편집
- [x] `DELETE /api/meetings/[id]`
- [ ] **#3 MinutesViewer에 "저장" 버튼**
- 생성된 회의록 현재 세션에서 저장 → 토스트 알림
- 저장 성공 시 `/meetings/[id]` 링크 제공