Newer
Older
Integer,
String,
Boolean,
ForeignKey,
DateTime,
UniqueConstraint,
)
from sqlalchemy.orm import relationship
from enum import Enum
from database import Base
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)
UniqueConstraint("user_id", "contact_id", name="unique_contact")
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)
ui_language = Column(String, default="fr")
home_language = Column(String, default="en")
target_language = Column(String, default="fr")
calcom_link = Column(String, default="")
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",
)
studies = relationship("Study", secondary="study_users", back_populates="users")
class UserSurveyWeekly(Base):
__tablename__ = "users_survey_weekly"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"))
q1 = Column(Float)
q2 = Column(Float)
q3 = Column(Float)
q4 = Column(Float)
id = Column(Integer, primary_key=True, index=True)
DateTime,
default=lambda: datetime_aware() + datetime.timedelta(hours=12),
language = Column(String, default="fr")
users = relationship("User", secondary="user_sessions", back_populates="sessions")
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"))
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)
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"))
session_id = Column(Integer, ForeignKey("sessions.id"))
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,
feedbacks = relationship("MessageFeedback", backref="message")
id = Column(Integer, primary_key=True, index=True)
message_id = Column(Integer, ForeignKey("messages.id"))
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="")
def raw(self):
return [self.id, self.message_id, self.start, self.end, self.content, self.date]