93 lines
2.0 KiB
Python
93 lines
2.0 KiB
Python
from pydantic import BaseModel, EmailStr
|
|
import databases
|
|
import sqlalchemy
|
|
import ormantic as orm
|
|
from os import environ
|
|
|
|
database = databases.Database(environ.get(
|
|
"DATABASE_URL", "sqlite:///memes.sqlite"))
|
|
metadata = sqlalchemy.MetaData()
|
|
|
|
|
|
class Token(BaseModel):
|
|
access_token: str
|
|
token_type: str
|
|
|
|
|
|
class TokenData(BaseModel):
|
|
username: str = None
|
|
|
|
|
|
class User(orm.Model):
|
|
username: orm.String(max_length=100, unique=True)
|
|
email: orm.String(max_length=100)
|
|
full_name: orm.String(max_length=100)
|
|
disabled: orm.Boolean() = False
|
|
|
|
|
|
class UserInDB(User):
|
|
hashed_password: orm.String(max_length=100)
|
|
id: orm.Integer(primary_key=True) = None
|
|
|
|
class Mapping:
|
|
table_name = "User"
|
|
metadata = metadata
|
|
database = database
|
|
|
|
|
|
class TicketCollection(orm.Model):
|
|
name: orm.String(max_length=100)
|
|
price: orm.Integer() = 0
|
|
description: orm.String(max_length=1000) = ""
|
|
requires_student: orm.Boolean() = False
|
|
id: orm.Integer(primary_key=True) = None
|
|
|
|
|
|
class TicketCollectionDB(TicketCollection):
|
|
user: orm.ForeignKey(UserInDB)
|
|
|
|
class Mapping:
|
|
table_name = "TicketCollection"
|
|
metadata = metadata
|
|
database = database
|
|
|
|
|
|
class Ticket(orm.Model):
|
|
id: orm.Integer(primary_key=True) = None
|
|
owner: orm.String(max_length=100)
|
|
email: orm.String(max_length=100, allow_null=True) = None
|
|
validated: orm.Boolean() = False
|
|
|
|
|
|
class TicketDB(Ticket):
|
|
collection: orm.ForeignKey(TicketCollectionDB)
|
|
|
|
class Mapping:
|
|
table_name = "Tickets"
|
|
metadata = metadata
|
|
database = database
|
|
|
|
|
|
class NewTicket(BaseModel):
|
|
owner: str
|
|
email: EmailStr = None
|
|
|
|
|
|
class NewCollection(BaseModel):
|
|
name: str
|
|
price: float
|
|
description: str = ""
|
|
requires_student: bool = False
|
|
|
|
|
|
class NewUser(BaseModel):
|
|
username: str
|
|
password: str
|
|
email: EmailStr
|
|
name: str
|
|
|
|
|
|
# Create the database
|
|
engine = sqlalchemy.create_engine(str(database.url))
|
|
metadata.create_all(engine)
|