Skip to content
Extraits de code Groupes Projets
models.py 5,24 ko
Newer Older
  • Learn to ignore specific revisions
  • Brieuc Dubois's avatar
    Brieuc Dubois a validé
    from sqlalchemy import (
        Column,
    
        Float,
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
        Integer,
        String,
        Boolean,
        ForeignKey,
        DateTime,
        UniqueConstraint,
    )
    from sqlalchemy.orm import relationship
    
    from enum import Enum
    
    from database import Base
    
    import datetime
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
    from utils import datetime_aware
    
    Dave's avatar
    Dave a validé
    from sqlalchemy.dialects.postgresql import JSON
    
    
    
    class UserType(Enum):
        ADMIN = 0
        TUTOR = 1
        STUDENT = 2
    
    
    
    class Contact(Base):
        __tablename__ = "contacts"
    
        user_id = Column(Integer, ForeignKey("users.id"), primary_key=True, index=True)
        contact_id = Column(Integer, ForeignKey("users.id"), primary_key=True, index=True)
    
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
        UniqueConstraint("user_id", "contact_id", name="unique_contact")
    
    
    class User(Base):
    
        __tablename__ = "users"
    
    
        id = Column(Integer, primary_key=True, index=True)
    
        email = Column(String, unique=True, index=True)
        nickname = Column(String, index=True)
    
        password = Column(String)
        type = Column(Integer, default=UserType.STUDENT.value)
        is_active = Column(Boolean, default=True)
    
    Dave's avatar
    Dave a validé
        bio = Column(String, default="")
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
        ui_language = Column(String, default="fr")
        home_language = Column(String, default="en")
        target_language = Column(String, default="fr")
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
        birthdate = Column(DateTime, default=None)
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
        gender = Column(String, default=None)
    
        calcom_link = Column(String, default="")
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
        last_survey = Column(DateTime, default=None)
    
    Dave's avatar
    Dave a validé
        availabilities = Column(JSON, default=[])
        tutor_list = Column(JSON, default=[])
        my_tutor = Column(String, default="")
        my_slots = Column(JSON, default=[])
    
    
        sessions = relationship(
            "Session", secondary="user_sessions", back_populates="users"
        )
    
        contacts = relationship(
            "User",
            secondary="contacts",
            primaryjoin=(id == Contact.user_id),
            secondaryjoin=(id == Contact.contact_id),
            back_populates="contacts",
        )
    
        contact_of = relationship(
            "User",
            secondary="contacts",
            primaryjoin=(id == Contact.contact_id),
            secondaryjoin=(id == Contact.user_id),
            back_populates="contacts",
        )
    
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
        studies = relationship("Study", secondary="study_users", back_populates="users")
    
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
    class UserSurveyWeekly(Base):
        __tablename__ = "users_survey_weekly"
    
        id = Column(Integer, primary_key=True, index=True)
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
        created_at = Column(DateTime, default=datetime_aware)
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
        user_id = Column(Integer, ForeignKey("users.id"))
        q1 = Column(Float)
        q2 = Column(Float)
        q3 = Column(Float)
        q4 = Column(Float)
    
    
    
    class Session(Base):
    
        __tablename__ = "sessions"
    
    
        id = Column(Integer, primary_key=True, index=True)
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
        created_at = Column(DateTime, default=datetime_aware)
    
        is_active = Column(Boolean, default=True)
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
        start_time = Column(DateTime, default=datetime_aware)
    
        end_time = Column(
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
            DateTime,
            default=lambda: datetime_aware() + datetime.timedelta(hours=12),
    
        language = Column(String, default="fr")
    
        users = relationship("User", secondary="user_sessions", back_populates="sessions")
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
    class SessionSatisfy(Base):
        __tablename__ = "session_satisfy"
    
        id = Column(Integer, primary_key=True, index=True)
        user_id = Column(Integer, ForeignKey("users.id"))
        session_id = Column(Integer, ForeignKey("sessions.id"))
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
        created_at = Column(DateTime, default=datetime_aware)
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
        usefullness = Column(Integer)
        easiness = Column(Integer)
        remarks = Column(String)
    
    
    
    class UserSession(Base):
        __tablename__ = "user_sessions"
    
    
        user_id = Column(Integer, ForeignKey("users.id"), primary_key=True, index=True)
        session_id = Column(String, ForeignKey("sessions.id"), primary_key=True, index=True)
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
    
    
    class Message(Base):
    
        __tablename__ = "messages"
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
    
        id = Column(Integer, primary_key=True, index=True)
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
        message_id = Column(String)
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
        content = Column(String)
    
        user_id = Column(Integer, ForeignKey("users.id"))
        session_id = Column(Integer, ForeignKey("sessions.id"))
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
        created_at = Column(DateTime, default=datetime_aware)
    
        reply_to_message_id = Column(
            Integer, ForeignKey("messages.message_id"), nullable=True
        )
    
        feedbacks = relationship("MessageFeedback", backref="message")
    
        replies = relationship(
            "Message", backref="parent_message", remote_side=[message_id]
        )
    
        def raw(self):
            return [
                self.id,
                self.message_id,
                self.content,
                self.user_id,
                self.session_id,
    
                self.reply_to_message_id,
    
        feedbacks = relationship("MessageFeedback", backref="message")
    
    
    class MessageMetadata(Base):
    
        __tablename__ = "message_metadata"
    
    
        id = Column(Integer, primary_key=True, index=True)
    
        message_id = Column(Integer, ForeignKey("messages.id"))
    
        message = Column(String)
    
        date = Column(Integer)
    
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
        def raw(self):
            return [self.id, self.message_id, self.message, self.date]
    
    
    class MessageFeedback(Base):
        __tablename__ = "message_feedbacks"
    
        id = Column(Integer, primary_key=True, index=True)
        message_id = Column(Integer, ForeignKey("messages.id"))
        start = Column(Integer)
        end = Column(Integer)
        content = Column(String, default="")
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
        date = Column(DateTime, default=datetime_aware)
    
    Brieuc Dubois's avatar
    Brieuc Dubois a validé
        def raw(self):
            return [self.id, self.message_id, self.start, self.end, self.content, self.date]