Files
queueful/backend/app/db/models.py

70 lines
2.1 KiB
Python

from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, DateTime
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship
import uuid
import datetime
from .database import Base
class User(Base):
__tablename__ = "users"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
name = Column(String, index=True)
username = Column(String(length=24), unique=True, index=True)
hashed_password = Column(String)
is_active = Column(Boolean, default=True)
owns_queues = relationship("Queue", backref="owner", lazy="dynamic")
class News(Base):
__tablename__ = "news"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
title = Column(String)
content = Column(String)
created = Column(DateTime, default=datetime.datetime.utcnow)
taps = Column(Integer, default=0)
class AnonymousUser(Base):
__tablename__ = "anonymoususers"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
name = Column(String, index=True)
parts_in_queues = relationship("QueueUser", backref="user", lazy="dynamic")
class Queue(Base):
__tablename__ = "queues"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
created = Column(DateTime, default=datetime.datetime.utcnow)
name = Column(String, index=True)
description = Column(String, index=True)
owner_id = Column(UUID(as_uuid=True), ForeignKey("users.id"))
start_time = Column(DateTime, nullable=True)
users = relationship("QueueUser", backref="queue", lazy="dynamic")
class QueueUser(Base):
__tablename__ = "queueuser"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
user_id = Column(UUID(as_uuid=True), ForeignKey("anonymoususers.id"))
queue_id = Column(UUID(as_uuid=True), ForeignKey("queues.id"))
position = Column(Integer)
passed = Column(Boolean, default=False)
class QueueLog(Base):
__tablename__ = "queuelog"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
action = Column(String)
created = Column(DateTime, default=datetime.datetime.utcnow)