47 lines
1.7 KiB
Python

from enum import Enum as PyEnum
from sqlalchemy import Column, Integer, VARCHAR, Enum, DateTime, Date, String, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from werkzeug.security import check_password_hash, generate_password_hash
from app.infrastructure.database.models import Base
class UserGenderEnum(PyEnum):
MALE = 'мужской'
FEMALE = 'женский'
NOTHING = 'не указан'
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True, autoincrement=True)
first_name = Column(VARCHAR(150), nullable=False)
last_name = Column(VARCHAR(150), nullable=False)
patronymic = Column(VARCHAR(150))
gender = Column(Enum(UserGenderEnum), nullable=False)
birthday = Column(Date, nullable=False)
registration_date = Column(DateTime, nullable=False, default=func.utcnow)
login = Column(VARCHAR(150), nullable=False, unique=True)
password = Column(String, nullable=False)
email = Column(VARCHAR(200), nullable=False)
role_id = Column(Integer, ForeignKey('roles.id'), nullable=False)
role = relationship('Role', back_populates='users')
appeals = relationship('Appeal', back_populates='user')
owned_courses = relationship('Course', back_populates='owner_user')
enrolled_courses = relationship('CourseStudent', back_populates='user')
notifications = relationship('Notification', back_populates='user')
test_answers = relationship('TestAnswer', back_populates='user')
task_answers = relationship('TaskAnswer', back_populates='user')
def check_password(self, password):
return check_password_hash(self.password, password)
def set_password(self, password):
self.password = generate_password_hash(password)