Procházet zdrojové kódy

更新 'app/api/classes.py'

miacheng913 před 1 rokem
rodič
revize
8ae84427f0
1 změnil soubory, kde provedl 114 přidání a 30 odebrání
  1. 114 30
      app/api/classes.py

+ 114 - 30
app/api/classes.py

@@ -49,7 +49,7 @@ async def insert_school(
 async def insert_class(
     id: int = Form(default=0),
     name: str = Form(default=''),
-    school_id: int = Form(default=''),
+    school_id: int = Form(default=1),
     category: str = Form(default=''),
     introduction: str = Form(default=''),
     organizer: str = Form(default=''),
@@ -68,27 +68,42 @@ async def insert_class(
     remark : str = Form(default='')
 ):    
     try:
-        contents = await cover_img_file.read()
+        cover_img = ''
+        if cover_img_file != '':
+            contents = await cover_img_file.read()
 
         #save the file
-        with open(f"{IMAGEDIR}{cover_img_file.filename}", "wb") as f:
-            f.write(contents)
+            with open(f"{IMAGEDIR}{cover_img_file.filename}", "wb") as f:
+                f.write(contents)
+        
+            cover_img = f"{IMAGEDIR_short}{cover_img_file.filename}"
+        else:
+            cover_img = ''
+            
         
-        cover_img = f"{IMAGEDIR_short}{cover_img_file.filename}"
+#        class_obj = '' 
+#        class_obj = await Class_name.get(name=name)
+#        if class_obj != '':
+#            return {"msg": "此課程名稱已被使用", "code": 500}
+        
+            
 
-        new_class_name = await Class_name.create(
-            id=id,
+        new_class_name = await Class_name.get_or_create(
             name=name,
-            school_id =school_id ,
-            category=category,
-            introduction=introduction,
-            organizer=organizer,
-            cover_img=cover_img
+            defaults={
+              'school_id': school_id,
+              'category': category,
+              'introduction': introduction,
+              'organizer': organizer,
+              'cover_img': cover_img
+            }
         )
 
+        class_obj = await Class_name.get(name=name)
+
         new_class = await Class_list.create(
             id=id,
-            name_id=new_class_name.id,
+            name_id=class_obj.id,
             event =event ,
             start_time=start_time,
             end_time=end_time,
@@ -189,7 +204,12 @@ async def update_class_name(
 @classes.post("/update_class")
 async def update_class(
     id: int = Form(default=0),
-    name_id: int = Form(default=''),
+    name: str = Form(default=''),
+    school_id: int = Form(default=''),
+    category: str = Form(default=''),
+    introduction: str = Form(default=''),
+    organizer: str = Form(default=''),
+    cover_img_file:UploadFile = File(default=''),
     event: str = Form(default=''),
     start_time: datetime = Form(default=datetime.now()),
     end_time: datetime = Form(default=datetime.now()),
@@ -205,9 +225,30 @@ async def update_class(
 ):
     try:
         class_obj = await Class_list.get(id=id)
+        class_name = await Class_name.get(id=class_obj.name_id)
+
+        if name != '':
+            class_name.name = name
+
+        if school_id != '':
+            class_name.school_id = school_id
 
-        if name_id != '':
-            class_obj.name_id = name_id
+        if category != '':
+            class_name.category = category
+        
+        if introduction != '':
+            class_name.introduction = introduction
+
+        if organizer != '':
+            class_name.organizer = organizer
+        
+        if cover_img_file != '':
+            contents = await cover_img_file.read()
+
+            with open(f"{IMAGEDIR}{cover_img_file.filename}", "wb") as f:
+                f.write(contents)
+
+            class_name.cover_img = f"{IMAGEDIR_short}{cover_img_file.filename}"
 
         if event.strip() != '':
             class_obj.event = event
@@ -246,6 +287,7 @@ async def update_class(
             class_obj.remark = remark
         
         await class_obj.save()
+        await class_name.save()
         return {"msg": "success", "code": 200}
     except Exception as e:
         return {"msg": str(e), "code": 500}
@@ -381,28 +423,70 @@ async def get_class():
 @classes.get("/search_class_like")
 async def search_class_like(keyword: str):
     try:
-        class_list = await Class_list.filter(
- Q(lecturer__icontains=keyword)
-        ).all()
+        class_list = await Class_list.filter(Q(lecturer__icontains=keyword)).all()
 
         classes = []
         for class_obj in class_list:
+            class_name = await Class_name.get(id=class_obj.name_id)
+            school_obj = await Schools.get(id=class_name.school_id)
             class_data = {
-                "class_id": class_obj.id,
-                "name": class_obj.name,
-                "start_time": class_obj.start_time,
-                "end_time": class_obj.end_time,
-                "location": class_obj.location,
-                "lecturer": class_obj.lecturer,
-                "organizer": class_obj.organizer,
-                "contact": class_obj.contact,
-                "introduction": class_obj.introduction,
-                "content": class_obj.content,
-		 "cover_img": class_obj.cover_img
+                "msg": "success",
+            "code": 200,
+            "class_id": class_obj.id,
+            "name": class_name.name,
+            "school":school_obj.name,
+            "category": class_name.category,
+            "introduction": class_name.introduction,
+            "organizer": class_name.organizer,
+            "cover_img": class_name.cover_img,
+            "event": class_obj.event,
+            "start_time": class_obj.start_time,
+            "end_time": class_obj.end_time,
+            "location": class_obj.location,
+            "lecturer": class_obj.lecturer,
+            "contact": class_obj.contact,
+            "content": class_obj.content,
+            "URL": class_obj.URL,
+            "people": class_obj.people,
+            "fee_method": class_obj.fee_method,
+            "registration_way": class_obj.registration_way,
+            "remark": class_obj.remark
 
             }
             classes.append(class_data)
 
+        class_name_list = await Class_name.filter(Q(name__icontains=keyword)).all()
+
+        for class_name in class_name_list:
+            class_list = await Class_list.filter(name_id=class_name.id).all()
+            for class_obj in class_list:
+                school_obj = await Schools.get(id=class_name.school_id)
+                class_data = {
+                "msg": "success",
+            "code": 200,
+            "class_id": class_obj.id,
+            "name": class_name.name,
+            "school":school_obj.name,
+            "category": class_name.category,
+            "introduction": class_name.introduction,
+            "organizer": class_name.organizer,
+            "cover_img": class_name.cover_img,
+            "event": class_obj.event,
+            "start_time": class_obj.start_time,
+            "end_time": class_obj.end_time,
+            "location": class_obj.location,
+            "lecturer": class_obj.lecturer,
+            "contact": class_obj.contact,
+            "content": class_obj.content,
+            "URL": class_obj.URL,
+            "people": class_obj.people,
+            "fee_method": class_obj.fee_method,
+            "registration_way": class_obj.registration_way,
+            "remark": class_obj.remark
+
+            }
+                classes.append(class_data)
+
         return {"msg": "success", "code": 200, "classes": classes}
     except Exception as e:
         return {"msg": str(e), "code": 500}