diagram
Data model ERD (Mermaid)
Rendering diagram...
erDiagram
USER {
string userId PK
}
USER_METADATA {
string userId PK
string name
string email
string updatedAt
}
USER_CONTACT {
string userId PK
string email
string updatedAt
}
VENUE {
string id PK
string name
number latitude
number longitude
string address
string phone
string hours
string photo
}
CHECKIN {
string id PK
string userId
string venueId
string gpsStatus
number latitude
number longitude
string checkinType
string createdAt
}
FEEDBACK {
string id PK
string checkinId
string userId
string venueId
string overallRating
string recommendedDish
string additionalNotes
string createdAt
string restaurantReply
string replyAt
string replyBy
string editedAt
}
VOUCHER {
string id PK
string userId
string venueId
string code
string title
string description
string status
string issuedAt
string expiresAt
string redeemedAt
}
SCHEDULED_NOTIFICATION {
string id PK
string checkinId
string userId
string venueId
string scheduledFor
boolean sent
string sentAt
string createdAt
}
PUSH_SUBSCRIPTION {
string id PK
string userId
string endpoint
string p256dh
string auth
string createdAt
}
SCHEDULED_EMAIL_REMINDER {
string id PK
string checkinId
string userId
string venueId
string scheduledFor
string status
number attempts
string lastError
string sentAt
string createdAt
string updatedAt
}
VENUE_REWARD_CONFIG {
string venueId PK
string programName
string updatedAt
}
VENUE_REWARD_PRIZE {
string id PK
string venueId
string code
string title
string description
number checkinCount
string triggerType
boolean enabled
number expirationDays
}
USER ||--o| USER_METADATA : "has"
USER ||--o| USER_CONTACT : "has"
VENUE ||--o{ CHECKIN : "venueId"
USER ||--o{ CHECKIN : "userId"
CHECKIN ||--o| FEEDBACK : "checkinId"
USER ||--o{ FEEDBACK : "userId"
VENUE ||--o{ FEEDBACK : "venueId"
USER ||--o{ VOUCHER : "userId"
VENUE ||--o{ VOUCHER : "venueId"
CHECKIN ||--o{ SCHEDULED_NOTIFICATION : "checkinId"
USER ||--o{ SCHEDULED_NOTIFICATION : "userId"
VENUE ||--o{ SCHEDULED_NOTIFICATION : "venueId"
USER ||--o{ PUSH_SUBSCRIPTION : "userId"
CHECKIN ||--o{ SCHEDULED_EMAIL_REMINDER : "checkinId"
USER ||--o{ SCHEDULED_EMAIL_REMINDER : "userId"
VENUE ||--o{ SCHEDULED_EMAIL_REMINDER : "venueId"
VENUE ||--|| VENUE_REWARD_CONFIG : "config"
VENUE_REWARD_CONFIG ||--o{ VENUE_REWARD_PRIZE : "prizes (embedded)"
Mermaid source
erDiagram
USER {
string userId PK
}
USER_METADATA {
string userId PK
string name
string email
string updatedAt
}
USER_CONTACT {
string userId PK
string email
string updatedAt
}
VENUE {
string id PK
string name
number latitude
number longitude
string address
string phone
string hours
string photo
}
CHECKIN {
string id PK
string userId
string venueId
string gpsStatus
number latitude
number longitude
string checkinType
string createdAt
}
FEEDBACK {
string id PK
string checkinId
string userId
string venueId
string overallRating
string recommendedDish
string additionalNotes
string createdAt
string restaurantReply
string replyAt
string replyBy
string editedAt
}
VOUCHER {
string id PK
string userId
string venueId
string code
string title
string description
string status
string issuedAt
string expiresAt
string redeemedAt
}
SCHEDULED_NOTIFICATION {
string id PK
string checkinId
string userId
string venueId
string scheduledFor
boolean sent
string sentAt
string createdAt
}
PUSH_SUBSCRIPTION {
string id PK
string userId
string endpoint
string p256dh
string auth
string createdAt
}
SCHEDULED_EMAIL_REMINDER {
string id PK
string checkinId
string userId
string venueId
string scheduledFor
string status
number attempts
string lastError
string sentAt
string createdAt
string updatedAt
}
VENUE_REWARD_CONFIG {
string venueId PK
string programName
string updatedAt
}
VENUE_REWARD_PRIZE {
string id PK
string venueId
string code
string title
string description
number checkinCount
string triggerType
boolean enabled
number expirationDays
}
USER ||--o| USER_METADATA : "has"
USER ||--o| USER_CONTACT : "has"
VENUE ||--o{ CHECKIN : "venueId"
USER ||--o{ CHECKIN : "userId"
CHECKIN ||--o| FEEDBACK : "checkinId"
USER ||--o{ FEEDBACK : "userId"
VENUE ||--o{ FEEDBACK : "venueId"
USER ||--o{ VOUCHER : "userId"
VENUE ||--o{ VOUCHER : "venueId"
CHECKIN ||--o{ SCHEDULED_NOTIFICATION : "checkinId"
USER ||--o{ SCHEDULED_NOTIFICATION : "userId"
VENUE ||--o{ SCHEDULED_NOTIFICATION : "venueId"
USER ||--o{ PUSH_SUBSCRIPTION : "userId"
CHECKIN ||--o{ SCHEDULED_EMAIL_REMINDER : "checkinId"
USER ||--o{ SCHEDULED_EMAIL_REMINDER : "userId"
VENUE ||--o{ SCHEDULED_EMAIL_REMINDER : "venueId"
VENUE ||--|| VENUE_REWARD_CONFIG : "config"
VENUE_REWARD_CONFIG ||--o{ VENUE_REWARD_PRIZE : "prizes (embedded)"
diagram (DB real style)
Core (Users/Venues/Check-ins/Feedback/Vouchers)
erDiagram
USERS {
uuid id PK
string email
}
VENUES {
uuid id PK
string name
}
CHECKINS {
uuid id PK
uuid user_id
uuid venue_id
string checkin_type
string gps_status
timestamp created_at
}
FEEDBACKS {
uuid id PK
uuid checkin_id
string overall_rating
timestamp created_at
timestamp updated_at
}
VOUCHERS {
uuid id PK
uuid user_id
uuid awarded_checkin_id
string status
timestamp issued_at
timestamp redeemed_at
}
USERS ||--o{ CHECKINS : user_id
VENUES ||--o{ CHECKINS : venue_id
CHECKINS ||--o| FEEDBACKS : checkin_id
USERS ||--o{ VOUCHERS : user_id
CHECKINS ||--o{ VOUCHERS : awarded_checkin_id
Mermaid source (Core)
erDiagram
USERS {
uuid id PK
string email
}
VENUES {
uuid id PK
string name
}
CHECKINS {
uuid id PK
uuid user_id
uuid venue_id
string checkin_type
string gps_status
timestamp created_at
}
FEEDBACKS {
uuid id PK
uuid checkin_id
string overall_rating
timestamp created_at
timestamp updated_at
}
VOUCHERS {
uuid id PK
uuid user_id
uuid awarded_checkin_id
string status
timestamp issued_at
timestamp redeemed_at
}
USERS ||--o{ CHECKINS : user_id
VENUES ||--o{ CHECKINS : venue_id
CHECKINS ||--o| FEEDBACKS : checkin_id
USERS ||--o{ VOUCHERS : user_id
CHECKINS ||--o{ VOUCHERS : awarded_checkin_id
Rewards (Programs/Prizes)
erDiagram
VENUES {
uuid id PK
string name
}
REWARD_PROGRAMS {
uuid id PK
uuid venue_id
string program_name
}
REWARD_PRIZES {
uuid id PK
uuid reward_program_id
string code
string title
string trigger_type
boolean enabled
int checkin_count
int expiration_days
}
VOUCHERS {
uuid id PK
uuid prize_id
string status
timestamp issued_at
}
VENUES ||--o{ REWARD_PROGRAMS : venue_id
REWARD_PROGRAMS ||--o{ REWARD_PRIZES : reward_program_id
REWARD_PRIZES ||--o{ VOUCHERS : prize_id
Mermaid source (Rewards)
erDiagram
VENUES {
uuid id PK
string name
}
REWARD_PROGRAMS {
uuid id PK
uuid venue_id
string program_name
}
REWARD_PRIZES {
uuid id PK
uuid reward_program_id
string code
string title
string trigger_type
boolean enabled
int checkin_count
int expiration_days
}
VOUCHERS {
uuid id PK
uuid prize_id
string status
timestamp issued_at
}
VENUES ||--o{ REWARD_PROGRAMS : venue_id
REWARD_PROGRAMS ||--o{ REWARD_PRIZES : reward_program_id
REWARD_PRIZES ||--o{ VOUCHERS : prize_id
Comms (Push/Notification log)
erDiagram
USERS {
uuid id PK
string email
}
VENUES {
uuid id PK
string name
}
CHECKINS {
uuid id PK
uuid user_id
uuid venue_id
timestamp created_at
}
PUSH_SUBSCRIPTIONS {
uuid id PK
uuid user_id
string endpoint
timestamp created_at
timestamp updated_at
}
COMMUNICATION_LOG {
uuid id PK
string channel_type
string status
uuid checkin_id
uuid user_id
uuid venue_id
timestamp scheduled_for
int attempts
string last_error
timestamp sent_at
timestamp created_at
timestamp updated_at
}
USERS ||--o{ PUSH_SUBSCRIPTIONS : user_id
USERS ||--o{ COMMUNICATION_LOG : user_id
VENUES ||--o{ COMMUNICATION_LOG : venue_id
CHECKINS ||--o{ COMMUNICATION_LOG : checkin_id
Mermaid source (Comms)
erDiagram
USERS {
uuid id PK
string email
}
VENUES {
uuid id PK
string name
}
CHECKINS {
uuid id PK
uuid user_id
uuid venue_id
timestamp created_at
}
PUSH_SUBSCRIPTIONS {
uuid id PK
uuid user_id
string endpoint
timestamp created_at
timestamp updated_at
}
COMMUNICATION_LOG {
uuid id PK
string channel_type
string status
uuid checkin_id
uuid user_id
uuid venue_id
timestamp scheduled_for
int attempts
string last_error
timestamp sent_at
timestamp created_at
timestamp updated_at
}
USERS ||--o{ PUSH_SUBSCRIPTIONS : user_id
USERS ||--o{ COMMUNICATION_LOG : user_id
VENUES ||--o{ COMMUNICATION_LOG : venue_id
CHECKINS ||--o{ COMMUNICATION_LOG : checkin_id