29 lines
1.0 KiB
Markdown
29 lines
1.0 KiB
Markdown
# MirrorMatch Data Model (MVP)
|
||
|
||
## Terms
|
||
|
||
- **Group**: invite-only membership boundary (family, friends, etc.).
|
||
- **Set**: a “round” containing **2–10 Photos** and **2–4 Options** (names/labels).
|
||
- **Option**: a label to guess (e.g., “Dad”, “Me”, “Twin A”, “Twin B”).
|
||
- **Photo**: an uploaded image in MinIO plus its secret `correctOptionId` and `points`.
|
||
- **Guess**: a user’s choice for a specific photo (one guess per user per photo).
|
||
- **Invite**: admin-created email invite with a token, used to join a Group.
|
||
|
||
## Constraints (enforced by app)
|
||
|
||
- Set has **2–10 photos**.
|
||
- Set has **2–4 options**.
|
||
- Photo `points` is **1–10**.
|
||
- A user can guess **at most once per photo**.
|
||
- A photo uploader **cannot** guess their own photo for points.
|
||
|
||
## Prisma models
|
||
|
||
See `prisma/schema.prisma`.
|
||
|
||
## “Same set, different groups”
|
||
|
||
If you want the same photos/options for multiple Groups, create multiple Sets (one per Group). Photos can reuse the same MinIO objects by reusing the same `storageKey` if desired.
|
||
|
||
|