ArtifactSnapshot| 필드 | 타입 | 설명 |
|---|---|---|
| id | TEXT (PK, uuid) | 스냅샷 식별자 |
| domain | TEXT | cafe 등 |
| manifestHash | TEXT UNIQUE | artifact_manifest.json의 해시 |
| version | TEXT | cafe@0.1.0 등 |
| createdAt | DATETIME | 기록 시각 |
주문 레코드에 artifactId를 FK로 연결해서 재현성 확보.
Order| 필드 | 타입 | 제약 |
|---|---|---|
| id | TEXT (PK, uuid) | |
| artifactId | TEXT FK → ArtifactSnapshot(id) | |
| sessionId | TEXT FK → Session(id), NULL | 대화 세션(없어도 됨) |
| orderType | TEXT | TAKE_OUT |
| status | TEXT | PENDING |
| totalPrice | INTEGER | 원 단위(옵션 합산 추정치) |
| currency | TEXT | KRW |
| notes | TEXT | 자유 메모(“시럽 없음” 등) |
| createdAt | DATETIME | |
| updatedAt | DATETIME |
CHECK 제약(SQLite): orderType IN ('TAKE_OUT','DINE_IN'), status IN (...).
OrderItem| 필드 | 타입 | 제약/설명 |
|---|---|---|
| id | TEXT (PK, uuid) | |
| orderId | TEXT FK → Order(id) | |
| sku | TEXT | AMERICANO 등 |
| display | TEXT | “아메리카노” (당시 표시명 Snapshot) |
| qty | INTEGER | >=1 |
| size | TEXT NULL | S/M/L (메뉴가 허용할 때만) |
| temp | TEXT NULL | ICE/HOT |
| ice | TEXT NULL | 권장: less/normal/more (slots.schema.json 기준) |
| shot | INTEGER NULL | >=0 |
| sweetness | TEXT NULL | LESS/REGULAR/MORE |
| milk | TEXT NULL | WHOLE/LOWFAT/NONFAT/SOY/OAT/ALMOND |
| extrasJson | TEXT NULL | JSON blob(향후 옵션 확장용) |
주의: ice 등 enum 표기는 앱의 slots.schema.json과 동일한 토큰으로 맞추세요(예: less|normal|more).
OrderItemSyrup (다대다 옵션용)| 필드 | 타입 | 제약 |
|---|---|---|
| itemId | TEXT FK → OrderItem(id) | 복합 PK( itemId, syrup ) |
| syrup | TEXT | VANILLA/CARAMEL/HAZELNUT/MOCHA |
| amount | INTEGER NULL | (선택) 양 표기(+1, +2 등) |