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)
# last_message_id = Column(Integer, ForeignKey("messages.id"))
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")
birthdate = Column(Integer, default=None)
calcom_link = Column(String, 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",
)
id = Column(Integer, primary_key=True, index=True)
created_at = Column(DateTime, default=datetime.datetime.now)
start_time = Column(DateTime, default=datetime.datetime.now)
end_time = Column(
DateTime, default=lambda: datetime.datetime.now() + datetime.timedelta(hours=12)
)
language = Column(String, default="fr")
users = relationship("User", secondary="user_sessions", back_populates="sessions")
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)
content = Column(String)
user_id = Column(Integer, ForeignKey("users.id"))
session_id = Column(Integer, ForeignKey("sessions.id"))
created_at = Column(DateTime, default=datetime.datetime.now)
id = Column(Integer, primary_key=True, index=True)
message_id = Column(Integer, ForeignKey("messages.id"))
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"), index=True)
created_at = Column(DateTime, default=datetime.datetime.now)
entries = relationship("TestTypingEntry", backref="typing")
class TestTypingEntry(Base):
__tablename__ = "test_typing_entry"
id = Column(Integer, primary_key=True, index=True)
typing_id = Column(Integer, ForeignKey("test_typing.id"), index=True)
exerciceId = Column(Integer)
position = Column(Integer)
downtime = Column(Integer)
uptime = Column(Integer)
keyCode = Column(Integer)
keyValue = Column(String)
class SurveyOption(Base):
__tablename__ = "survey_options"
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
question_id = Column(Integer, ForeignKey("survey_questions.id"))
correct = Column(Boolean)
type = Column(String)
value = Column(String)
class SurveyQuestion(Base):
__tablename__ = "survey_questions"
id = Column(Integer, primary_key=True, index=True)
group_id = Column(Integer, ForeignKey("survey_groups.id"))
title = Column(String)
question_type = Column(String)
question_value = Column(String)
options = relationship("SurveyOption", backref="question")
class SurveyGroup(Base):
__tablename__ = "survey_groups"
id = Column(Integer, primary_key=True, index=True)
survey_id = Column(Integer, ForeignKey("surveys.id"))
title = Column(String)
questions = relationship("SurveyQuestion", backref="group")
class Survey(Base):
__tablename__ = "surveys"
id = Column(Integer, primary_key=True, index=True)
title = Column(String)
groups = relationship("SurveyGroup", backref="survey")
class SurveyResponse(Base):
__tablename__ = "survey_responses"
id = Column(Integer, primary_key=True, index=True)
survey_id = Column(Integer, ForeignKey("surveys.id"))
uuid = Column(String)
created_at = Column(DateTime, default=datetime.datetime.now)
question_id = Column(Integer, ForeignKey("survey_questions.id"))
option_id = Column(Integer, ForeignKey("survey_options.id"))
response_time = Column(Float)