Push V1 app
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from sqlalchemy import Boolean, Column, DateTime, Enum, Float, ForeignKey, Integer, String, Text
|
||||
from sqlalchemy.orm import relationship
|
||||
|
||||
from database import Base
|
||||
|
||||
import enum
|
||||
|
||||
|
||||
class DrinkCategory(str, enum.Enum):
|
||||
WINE = "wine"
|
||||
BEER = "beer"
|
||||
SPIRIT = "spirit"
|
||||
|
||||
|
||||
class WineColor(str, enum.Enum):
|
||||
RED = "red"
|
||||
WHITE = "white"
|
||||
ROSE = "rose"
|
||||
SPARKLING = "sparkling"
|
||||
|
||||
|
||||
class SpiritType(str, enum.Enum):
|
||||
WHISKY = "whisky"
|
||||
VODKA = "vodka"
|
||||
RUM = "rum"
|
||||
GIN = "gin"
|
||||
TEQUILA = "tequila"
|
||||
COGNAC = "cognac"
|
||||
CALVADOS = "calvados"
|
||||
OTHER = "other"
|
||||
|
||||
|
||||
class BeerStyle(str, enum.Enum):
|
||||
IPA = "ipa"
|
||||
STOUT = "stout"
|
||||
LAGER = "lager"
|
||||
ALE = "ale"
|
||||
WHEAT = "wheat"
|
||||
SOUR = "sour"
|
||||
PILSNER = "pilsner"
|
||||
PORTER = "porter"
|
||||
BELGIAN = "belgian"
|
||||
OTHER = "other"
|
||||
|
||||
|
||||
class User(Base):
|
||||
__tablename__ = "users"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
username = Column(String(100), unique=True, nullable=False, index=True)
|
||||
email = Column(String(255), unique=True, nullable=False, index=True)
|
||||
hashed_password = Column(String(255), nullable=False)
|
||||
is_admin = Column(Boolean, default=False)
|
||||
token_version = Column(Integer, default=0)
|
||||
created_at = Column(DateTime, default=datetime.utcnow)
|
||||
|
||||
drinks = relationship("Drink", back_populates="owner")
|
||||
|
||||
|
||||
class Invitation(Base):
|
||||
__tablename__ = "invitations"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
token = Column(String(64), unique=True, nullable=False, index=True)
|
||||
created_by = Column(Integer, ForeignKey("users.id"), nullable=False)
|
||||
used_by = Column(Integer, ForeignKey("users.id"), nullable=True)
|
||||
created_at = Column(DateTime, default=datetime.utcnow)
|
||||
used_at = Column(DateTime, nullable=True)
|
||||
expires_at = Column(DateTime, nullable=False)
|
||||
|
||||
|
||||
class Drink(Base):
|
||||
__tablename__ = "drinks"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
owner_id = Column(Integer, ForeignKey("users.id"), nullable=False)
|
||||
name = Column(String(255), nullable=False, index=True)
|
||||
category = Column(Enum(DrinkCategory), nullable=False)
|
||||
image_path = Column(String(500), nullable=True)
|
||||
rating = Column(Float, nullable=True)
|
||||
notes = Column(Text, nullable=True)
|
||||
created_at = Column(DateTime, default=datetime.utcnow)
|
||||
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
owner = relationship("User", back_populates="drinks")
|
||||
|
||||
# Wine fields
|
||||
grape_variety = Column(String(255), nullable=True)
|
||||
vintage = Column(Integer, nullable=True)
|
||||
region = Column(String(255), nullable=True)
|
||||
producer = Column(String(255), nullable=True)
|
||||
wine_color = Column(Enum(WineColor), nullable=True)
|
||||
|
||||
# Beer fields
|
||||
brewery = Column(String(255), nullable=True)
|
||||
beer_style = Column(Enum(BeerStyle), nullable=True)
|
||||
ibu = Column(Float, nullable=True)
|
||||
abv = Column(Float, nullable=True)
|
||||
|
||||
# Spirit fields
|
||||
spirit_type = Column(Enum(SpiritType), nullable=True)
|
||||
age_years = Column(Integer, nullable=True)
|
||||
distillery = Column(String(255), nullable=True)
|
||||
country = Column(String(255), nullable=True)
|
||||
Reference in New Issue
Block a user