47 lines
1.7 KiB
Python
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)
|