send-grid-test 모노레포 — Admin(React 19) ↔ elysia-server(Elysia/Bun) 코드 흐름 분석
Monorepo: admin(React 19 + Vite + TanStack Query + Jotai) + elysia-server(Elysia + Bun) + e2e(Playwright). 백엔드는 routes → services → db(Drizzle) 3-layer.
sortField=createdAt + desc → ORDER BY createdAt, id LIMIT n+1. 새 리드 추가 중에도 순서 보장, cursor stack push/pop.offset = (page-1)·size.POST /smart-import/analyze (FormData) → AI가 suggestedMapping 제안POST /smart-import/start (SSE 스트림) — parse → dedup → verify → import 단계별 이벤트ingestLeadsIntoGroup() — leads(UUIDv7) + leadContacts/social/products/sectors + customerGroupMembers INSERT, BullMQ 검증 잡 enqueueconsent_given 감사 로그POST /api/v1/admin/lead-import/upload 도 존재 — consent 근거(legalBasis·source·evidence) 필수, 동일 importLeadsBatch 코어 공유.| Method | 경로 | 인증 | 용도 |
|---|---|---|---|
| GET | /api/v1/leads/search | workspaceAuth LEADS:LIST | 목록 조회 (keyset/offset) |
| GET | /api/v1/leads/{id} | auth | 상세 조회 |
| GET | /api/v1/leads/{id}/full-detail | auth | 상세 + 평가 |
| POST | /api/v1/smart-import/analyze | workspaceAuth | 파일 분석 · 매핑 제안 |
| POST | /api/v1/smart-import/start | workspaceAuth · CSRF | 임포트 파이프라인 (SSE) |
| POST | /api/v1/admin/lead-import/upload | workspaceAuth | 레거시 직접 업로드 (SSE) |
| POST | /api/v1/leads/bulk | auth | CSV 일괄 생성 |
| PUT | /api/v1/leads/{id} | auth | 수정 |
| DEL | /api/v1/admin/leads/bulk | adminAuth | 일괄 삭제 |