Tickets_Backend/app/models.py

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)