Seth0330 commited on
Commit
e348197
·
verified ·
1 Parent(s): c2d9a67

Create exam.py

Browse files
Files changed (1) hide show
  1. app/models/exam.py +66 -0
app/models/exam.py ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # app/models/exam.py
2
+ from datetime import datetime, date
3
+ from sqlalchemy import Column, Integer, String, Text, DateTime, Date, DECIMAL, ForeignKey, Boolean, Time
4
+ from sqlalchemy.orm import relationship
5
+ from core.database import Base
6
+
7
+
8
+ class Exam(Base):
9
+ __tablename__ = "exams"
10
+
11
+ id = Column(Integer, primary_key=True, index=True)
12
+ name = Column(String(255), nullable=False)
13
+ exam_date = Column(Date, nullable=False)
14
+ exam_fee = Column(DECIMAL(10, 2), nullable=False)
15
+ registration_deadline = Column(Date, nullable=True)
16
+ stripe_link = Column(Text, nullable=True)
17
+ location = Column(String(255), nullable=True)
18
+ description = Column(Text, nullable=True)
19
+ status = Column(String(50), nullable=False, default="upcoming") # upcoming, completed, cancelled
20
+ created_at = Column(DateTime, default=datetime.utcnow)
21
+ updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
22
+
23
+ # Relationships
24
+ batches = relationship("ExamBatch", back_populates="exam", cascade="all, delete-orphan")
25
+
26
+
27
+ class ExamBatch(Base):
28
+ __tablename__ = "exam_batches"
29
+
30
+ id = Column(Integer, primary_key=True, index=True)
31
+ exam_id = Column(Integer, ForeignKey("exams.id"), nullable=False)
32
+ batch_name = Column(String(255), nullable=False)
33
+ time_from = Column(Time, nullable=False)
34
+ time_to = Column(Time, nullable=False)
35
+ max_students = Column(Integer, nullable=True)
36
+ created_at = Column(DateTime, default=datetime.utcnow)
37
+ updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
38
+
39
+ # Relationships
40
+ exam = relationship("Exam", back_populates="batches")
41
+ registrations = relationship("ExamStudentRegistration", back_populates="batch", cascade="all, delete-orphan")
42
+
43
+
44
+ class ExamStudentRegistration(Base):
45
+ __tablename__ = "exam_student_registrations"
46
+
47
+ id = Column(Integer, primary_key=True, index=True)
48
+ exam_id = Column(Integer, ForeignKey("exams.id"), nullable=False)
49
+ batch_id = Column(Integer, ForeignKey("exam_batches.id"), nullable=False)
50
+ student_id = Column(Integer, ForeignKey("students.id"), nullable=True) # Can be null if student deleted
51
+ student_name = Column(String(255), nullable=False)
52
+ student_email = Column(String(255), nullable=False)
53
+ current_level = Column(String(100), nullable=True)
54
+ target_level = Column(String(100), nullable=True)
55
+ registration_status = Column(String(50), nullable=False, default="invited") # invited, registered, paid, cancelled
56
+ payment_status = Column(String(50), nullable=False, default="pending") # pending, paid, refunded
57
+ notification_sent = Column(Boolean, default=False)
58
+ added_by_ai = Column(Boolean, default=False)
59
+ created_at = Column(DateTime, default=datetime.utcnow)
60
+ updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
61
+
62
+ # Relationships
63
+ exam = relationship("Exam")
64
+ batch = relationship("ExamBatch", back_populates="registrations")
65
+ student = relationship("Student")
66
+