Mia Cheng 2 роки тому
батько
коміт
82a17fc654
2 змінених файлів з 104 додано та 27 видалено
  1. 103 27
      app/api/classes.py
  2. 1 0
      app/models/models.py

+ 103 - 27
app/api/classes.py

@@ -49,11 +49,12 @@ 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=''),
     cover_img_file:UploadFile = File(default=''),
+    group_id : int = Form(default=''),
     event: str = Form(default=''),
     start_time: datetime = Form(default=datetime.now()),
     end_time: datetime = Form(default=datetime.now()),
@@ -68,24 +69,30 @@ 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}"
+            cover_img = f"{IMAGEDIR_short}{cover_img_file.filename}"
+        else:
+            cover_img = ''          
 
         new_class_name = await Class_name.create(
-            id=id,
             name=name,
-            school_id =school_id ,
+            school_id=school_id,
             category=category,
             introduction=introduction,
             organizer=organizer,
-            cover_img=cover_img
+            cover_img=cover_img,
+            group_id=group_id
         )
 
+        
+
         new_class = await Class_list.create(
             id=id,
             name_id=new_class_name.id,
@@ -102,7 +109,7 @@ async def insert_class(
             registration_way=registration_way,
             remark=remark
         )
-        return {"msg": "success", "code": 200, "class_id": new_class.id}
+        return {"msg": "success", "code": 200, "new_class_name": new_class_name.id, "class_id": new_class.id}
     except Exception as e:
         return {"msg": str(e), "code": 500}
 
@@ -189,7 +196,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 +217,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 name_id != '':
-            class_obj.name_id = name_id
+        if school_id != '':
+            class_name.school_id = school_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 +279,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 +415,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}
@@ -432,4 +508,4 @@ async def read_image_file():
  
     path = f"{IMAGEDIR}{files[random_index]}"
      
-    return FileResponse(path)
+    return FileResponse(path)

+ 1 - 0
app/models/models.py

@@ -37,6 +37,7 @@ class Class_name(Model):
     introduction = fields.TextField(description="簡介")
     organizer = fields.CharField(max_length=45, description="主辦單位")
     cover_img = fields.CharField(max_length=255, description="封面圖片")
+    group_id = fields.IntField(description="學群")
 
 
 class Class_list(Model):