ba-thesis/backend/models.py

46 lines
1.7 KiB
Python

import enum
from sqlalchemy import Column, ForeignKey, Integer, String, DateTime, Date, Enum, CheckConstraint
from sqlalchemy.sql.functions import now
from sqlalchemy.orm import relationship
from .database import Base
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, autoincrement=True, index=True)
email = Column(String, unique=True, nullable=False)
password = Column(String, nullable=False)
created = Column(DateTime(timezone=True), nullable=False, server_default=now())
updated = Column(DateTime(timezone=True), nullable=False, server_default=now(), onupdate=now())
first_name = Column(String, nullable=False)
last_name = Column(String, nullable=False)
administrator = relationship("Administrator", back_populates="user", uselist=False, cascade="all, delete")
patient = relationship("Patient", back_populates="user", uselist=False, cascade="all, delete")
#patient = Column(Integer, ForeignKey('patients.id'), nullable=True)
#CheckConstraint("(administrator=NULL AND patient!=NULL) OR (administrator!=NULL AND patient=NULL)")
class Administrator(Base):
__tablename__ = "administrators"
user_id = Column(Integer, ForeignKey('users.id', ondelete="CASCADE"), primary_key=True,)
user = relationship("User", back_populates="administrator", uselist=False, cascade="all, delete")
class Gender(enum.Enum):
male = 'm'
female = 'f'
class Patient(Base):
__tablename__ = "patients"
user_id = Column(Integer, ForeignKey('users.id', ondelete="CASCADE"), primary_key=True)
user = relationship("User", back_populates="patient", uselist=False, cascade="all, delete")
date_of_birth = Column(Date, nullable=False)
gender = Column(Enum(Gender), nullable=False)