| | from typing import Optional |
| | from sqlmodel import SQLModel, Field, Relationship |
| | from datetime import datetime |
| |
|
| | class User(SQLModel, table=True): |
| | id: Optional[int] = Field(default=None, primary_key=True) |
| | address: str = Field(index=True, unique=True) |
| | created_at: datetime = Field(default_factory=datetime.utcnow) |
| | visits: list["Visit"] = Relationship(back_populates="user") |
| | balances: list["TokenBalance"] = Relationship(back_populates="user") |
| |
|
| | class Venue(SQLModel, table=True): |
| | id: Optional[int] = Field(default=None, primary_key=True) |
| | name: str |
| | slug: str = Field(index=True, unique=True) |
| | created_at: datetime = Field(default_factory=datetime.utcnow) |
| |
|
| | class CheckinSession(SQLModel, table=True): |
| | id: Optional[int] = Field(default=None, primary_key=True) |
| | session_id: str = Field(index=True, unique=True) |
| | venue_id: int = Field(foreign_key="venue.id") |
| | nonce: str |
| | expires_at: datetime |
| | used: bool = Field(default=False) |
| |
|
| | class Visit(SQLModel, table=True): |
| | id: Optional[int] = Field(default=None, primary_key=True) |
| | user_id: int = Field(foreign_key="user.id") |
| | venue_id: int = Field(foreign_key="venue.id") |
| | session_id: int = Field(foreign_key="checkinsession.id") |
| | created_at: datetime = Field(default_factory=datetime.utcnow, index=True) |
| | user: User = Relationship(back_populates="visits") |
| |
|
| | class TokenBalance(SQLModel, table=True): |
| | id: Optional[int] = Field(default=None, primary_key=True) |
| | user_id: int = Field(foreign_key="user.id") |
| | symbol: str = Field(default="POINT") |
| | amount: int = Field(default=0) |
| | user: User = Relationship(back_populates="balances") |
| |
|
| | class RewardLog(SQLModel, table=True): |
| | id: Optional[int] = Field(default=None, primary_key=True) |
| | user_id: int = Field(foreign_key="user.id") |
| | venue_id: int = Field(foreign_key="venue.id") |
| | points: int |
| | created_at: datetime = Field(default_factory=datetime.utcnow) |
| |
|