Seth0330 commited on
Commit
c074dbc
·
verified ·
1 Parent(s): d8750a2

Update app/main.py

Browse files
Files changed (1) hide show
  1. app/main.py +135 -4
app/main.py CHANGED
@@ -31,7 +31,7 @@ from models.student import Student
31
  from models.exam import Exam, ExamBatch, ExamStudentRegistration
32
  from models.attendance import Attendance
33
  from models.student_comment import StudentComment
34
- from models.class_ import Class, ClassEnrollment
35
 
36
  # Classes schemas + service
37
  from schemas.class_ import (
@@ -766,7 +766,52 @@ def get_admin_classes(db: Session = Depends(get_db)):
766
  List all classes (most recent first).
767
  """
768
  classes = class_service.get_classes(db)
769
- return classes
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
770
 
771
 
772
  @app.post("/api/admin/classes", response_model=ClassOut, status_code=201)
@@ -778,7 +823,50 @@ def create_admin_class(
778
  Create a new class configuration.
779
  """
780
  db_class = class_service.create_class(db, class_in)
781
- return db_class
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
782
 
783
 
784
  @app.put("/api/admin/classes/{class_id}", response_model=ClassOut)
@@ -793,7 +881,50 @@ def update_admin_class(
793
  db_class = class_service.update_class(db, class_id, class_in)
794
  if not db_class:
795
  raise HTTPException(status_code=404, detail="Class not found")
796
- return db_class
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
797
 
798
 
799
  @app.delete("/api/admin/classes/{class_id}", status_code=204)
 
31
  from models.exam import Exam, ExamBatch, ExamStudentRegistration
32
  from models.attendance import Attendance
33
  from models.student_comment import StudentComment
34
+ from models.class_ import Class, ClassEnrollment, ClassMembershipPlan
35
 
36
  # Classes schemas + service
37
  from schemas.class_ import (
 
766
  List all classes (most recent first).
767
  """
768
  classes = class_service.get_classes(db)
769
+ # Add membership_plan_ids and schedule to each class
770
+ result = []
771
+ for cls in classes:
772
+ # Reconstruct schedule from days_of_week and class_time
773
+ days = cls.days_of_week.split(",") if cls.days_of_week else []
774
+ class_time_parts = cls.class_time.split("-") if cls.class_time and "-" in cls.class_time else [cls.class_time, ""]
775
+ start_time = class_time_parts[0].strip() if len(class_time_parts) > 0 else ""
776
+ end_time = class_time_parts[1].strip() if len(class_time_parts) > 1 else ""
777
+
778
+ schedule = []
779
+ for day in days:
780
+ if day.strip():
781
+ schedule.append({
782
+ "day": day.strip(),
783
+ "start_time": start_time,
784
+ "end_time": end_time,
785
+ "time": f"{start_time}-{end_time}" if start_time and end_time else start_time or "",
786
+ })
787
+
788
+ # If no schedule, create a default one
789
+ if not schedule:
790
+ schedule = [{"day": "Monday", "start_time": "", "end_time": "", "time": ""}]
791
+
792
+ class_dict = {
793
+ "id": cls.id,
794
+ "name": cls.name,
795
+ "description": cls.description,
796
+ "class_time": cls.class_time,
797
+ "days_of_week": days,
798
+ "classes_per_week": cls.classes_per_week,
799
+ "max_students": cls.max_students,
800
+ "is_active": cls.is_active,
801
+ "coach_email": cls.coach_email,
802
+ "location": cls.location,
803
+ "created_at": cls.created_at,
804
+ "updated_at": cls.updated_at,
805
+ "membership_plan_ids": [
806
+ cmp.membership_plan_id
807
+ for cmp in db.query(ClassMembershipPlan)
808
+ .filter(ClassMembershipPlan.class_id == cls.id)
809
+ .all()
810
+ ],
811
+ "schedule": schedule,
812
+ }
813
+ result.append(class_dict)
814
+ return result
815
 
816
 
817
  @app.post("/api/admin/classes", response_model=ClassOut, status_code=201)
 
823
  Create a new class configuration.
824
  """
825
  db_class = class_service.create_class(db, class_in)
826
+ # Get membership_plan_ids for response
827
+ membership_plan_ids = [
828
+ cmp.membership_plan_id
829
+ for cmp in db.query(ClassMembershipPlan)
830
+ .filter(ClassMembershipPlan.class_id == db_class.id)
831
+ .all()
832
+ ]
833
+ # Reconstruct schedule
834
+ days = db_class.days_of_week.split(",") if db_class.days_of_week else []
835
+ class_time_parts = db_class.class_time.split("-") if db_class.class_time and "-" in db_class.class_time else [db_class.class_time, ""]
836
+ start_time = class_time_parts[0].strip() if len(class_time_parts) > 0 else ""
837
+ end_time = class_time_parts[1].strip() if len(class_time_parts) > 1 else ""
838
+
839
+ schedule = []
840
+ for day in days:
841
+ if day.strip():
842
+ schedule.append({
843
+ "day": day.strip(),
844
+ "start_time": start_time,
845
+ "end_time": end_time,
846
+ "time": f"{start_time}-{end_time}" if start_time and end_time else start_time or "",
847
+ })
848
+
849
+ if not schedule:
850
+ schedule = [{"day": "Monday", "start_time": "", "end_time": "", "time": ""}]
851
+
852
+ # Convert to dict for response
853
+ class_dict = {
854
+ "id": db_class.id,
855
+ "name": db_class.name,
856
+ "description": db_class.description,
857
+ "class_time": db_class.class_time,
858
+ "days_of_week": days,
859
+ "classes_per_week": db_class.classes_per_week,
860
+ "max_students": db_class.max_students,
861
+ "is_active": db_class.is_active,
862
+ "coach_email": db_class.coach_email,
863
+ "location": db_class.location,
864
+ "created_at": db_class.created_at,
865
+ "updated_at": db_class.updated_at,
866
+ "membership_plan_ids": membership_plan_ids,
867
+ "schedule": schedule,
868
+ }
869
+ return class_dict
870
 
871
 
872
  @app.put("/api/admin/classes/{class_id}", response_model=ClassOut)
 
881
  db_class = class_service.update_class(db, class_id, class_in)
882
  if not db_class:
883
  raise HTTPException(status_code=404, detail="Class not found")
884
+ # Get membership_plan_ids for response
885
+ membership_plan_ids = [
886
+ cmp.membership_plan_id
887
+ for cmp in db.query(ClassMembershipPlan)
888
+ .filter(ClassMembershipPlan.class_id == class_id)
889
+ .all()
890
+ ]
891
+ # Reconstruct schedule
892
+ days = db_class.days_of_week.split(",") if db_class.days_of_week else []
893
+ class_time_parts = db_class.class_time.split("-") if db_class.class_time and "-" in db_class.class_time else [db_class.class_time, ""]
894
+ start_time = class_time_parts[0].strip() if len(class_time_parts) > 0 else ""
895
+ end_time = class_time_parts[1].strip() if len(class_time_parts) > 1 else ""
896
+
897
+ schedule = []
898
+ for day in days:
899
+ if day.strip():
900
+ schedule.append({
901
+ "day": day.strip(),
902
+ "start_time": start_time,
903
+ "end_time": end_time,
904
+ "time": f"{start_time}-{end_time}" if start_time and end_time else start_time or "",
905
+ })
906
+
907
+ if not schedule:
908
+ schedule = [{"day": "Monday", "start_time": "", "end_time": "", "time": ""}]
909
+
910
+ # Convert to dict for response
911
+ class_dict = {
912
+ "id": db_class.id,
913
+ "name": db_class.name,
914
+ "description": db_class.description,
915
+ "class_time": db_class.class_time,
916
+ "days_of_week": days,
917
+ "classes_per_week": db_class.classes_per_week,
918
+ "max_students": db_class.max_students,
919
+ "is_active": db_class.is_active,
920
+ "coach_email": db_class.coach_email,
921
+ "location": db_class.location,
922
+ "created_at": db_class.created_at,
923
+ "updated_at": db_class.updated_at,
924
+ "membership_plan_ids": membership_plan_ids,
925
+ "schedule": schedule,
926
+ }
927
+ return class_dict
928
 
929
 
930
  @app.delete("/api/admin/classes/{class_id}", status_code=204)