MIA 2 år sedan
förälder
incheckning
7bec714727
2 ändrade filer med 95 tillägg och 6 borttagningar
  1. 76 4
      app/api/classes.py
  2. 19 2
      app/models/models.py

+ 76 - 4
app/api/classes.py

@@ -1,10 +1,11 @@
 from fastapi import APIRouter, Form, Depends, HTTPException, File, UploadFile
 from fastapi import APIRouter, Form, Depends, HTTPException, File, UploadFile
+from typing import List
 from fastapi.responses import FileResponse
 from fastapi.responses import FileResponse
 import os
 import os
 from random import randint
 from random import randint
 import uuid
 import uuid
 from fastapi.security import OAuth2PasswordRequestForm
 from fastapi.security import OAuth2PasswordRequestForm
-from app.models.models import User
+from app.models.models import User,Favorite_course
 from app.models.models import Class_list,Schools,Class_detail,Class_name,Registration,School_group
 from app.models.models import Class_list,Schools,Class_detail,Class_name,Registration,School_group
 from app.api import deps
 from app.api import deps
 from sqlalchemy.orm import Session
 from sqlalchemy.orm import Session
@@ -20,6 +21,7 @@ import emails
 from emails.template import JinjaTemplate
 from emails.template import JinjaTemplate
 import logging
 import logging
 from tortoise.queryset import Q
 from tortoise.queryset import Q
+from fastapi.responses import HTMLResponse
 
 
 classes = APIRouter()
 classes = APIRouter()
 
 
@@ -320,15 +322,26 @@ async def delete_school(location_id: int):
         await Schools.filter(id=location_id).delete()
         await Schools.filter(id=location_id).delete()
         return {"msg": "success", "code": 200}
         return {"msg": "success", "code": 200}
 
 
+@classes.post("/delete_session")
+async def delete_session(id: int):
+    if id:
+        await Class_detail.filter(id=id).delete()
+        return {"msg": "success", "code": 200}
+
 @classes.post("/delete_class")
 @classes.post("/delete_class")
 async def delete(id: int):
 async def delete(id: int):
     if id:
     if id:
+        await Class_detail.filter(class_list_id=id).delete()
         await Class_list.filter(id=id).delete()
         await Class_list.filter(id=id).delete()
         return {"msg": "success", "code": 200}
         return {"msg": "success", "code": 200}
     
     
 @classes.post("/delete_class_name")
 @classes.post("/delete_class_name")
 async def delete(id: int):
 async def delete(id: int):
     if id:
     if id:
+        class_event_list = await Class_list.filter(name_id=id).all()
+        for class_event_obj in class_event_list:
+            await Class_detail.filter(class_list_id=class_event_obj.id).delete()
+
         await Class_list.filter(name_id=id).delete()
         await Class_list.filter(name_id=id).delete()
         await Class_name.filter(id=id).delete()
         await Class_name.filter(id=id).delete()
         return {"msg": "success", "code": 200}
         return {"msg": "success", "code": 200}
@@ -417,11 +430,17 @@ async def get_class_name(
 
 
         classes_name = []
         classes_name = []
         for class_name_obj in class_name_list:
         for class_name_obj in class_name_list:
-            school_obj = await Schools.get(id=class_name_obj.school_id)
+            school_obj = await Schools.filter(id=class_name_obj.school_id).all()
+            school_name = ""
+            if school_obj == []:
+                school_name = "未設定據點"
+            else :
+                school_obj = await Schools.get(id=class_name_obj.school_id)
+                school_name = school_obj.name
             class_data = {
             class_data = {
                 "class_name_id": class_name_obj.id,
                 "class_name_id": class_name_obj.id,
                 "name": class_name_obj.name,
                 "name": class_name_obj.name,
-                "school":school_obj.name,
+                "school":school_name,
                 "category": class_name_obj.category,
                 "category": class_name_obj.category,
                 "introduction": class_name_obj.introduction,
                 "introduction": class_name_obj.introduction,
                 "organizer": class_name_obj.organizer,
                 "organizer": class_name_obj.organizer,
@@ -526,4 +545,57 @@ async def search_class_like(keyword: str):
 
 
         return {"msg": "success", "code": 200, "classes": classes}
         return {"msg": "success", "code": 200, "classes": classes}
     except Exception as e:
     except Exception as e:
-        return {"msg": str(e), "code": 500}
+        return {"msg": str(e), "code": 500}
+
+@classes.post("/add_favorite_class")
+async def add_favorite_class(
+        class_event_id: int, 
+        user_id : int,
+        time_stemp: datetime = datetime.now()
+):
+    try:
+        new_favorite_class = await Favorite_course.get_or_create(
+            class_event_id=class_event_id,
+            user_id=user_id,
+            defaults={'time_stemp': time_stemp}
+        )
+        return {"msg": "success", "code": 200,"id":new_favorite_class}
+    except Exception as e:
+        return {"msg": str(e), "code": 500}
+
+@classes.get("get_favorite_class")
+async def get_favorite_class( 
+        user_id : int
+):
+    try:
+        class_list = await Favorite_course.filter(user_id = user_id).all()
+        favorite_courses = []
+        for class_obj in class_list:
+            class_data = {
+                "id": class_obj.id,
+                "user_id": class_obj.user_id,
+                "class_event_id":class_obj.class_event_id,
+                "time_stemp":class_obj.time_stemp
+            }
+            favorite_courses.append(class_data)
+
+        return {"msg": "success", "code": 200, "school_groups": favorite_courses}
+    except Exception as e:
+        return {"msg": str(e), "code": 500}
+    
+    
+
+@classes.post("/delete_favorite_class")
+async def delete_favorite_class(
+        class_event_id: int, 
+        user_id : int
+):
+    try:
+        await Favorite_course.filter(class_event_id=class_event_id,user_id=user_id).delete()
+        return {"msg": "success", "code": 200}
+    except Exception as e:
+        return {"msg": str(e), "code": 500}
+
+@classes.post("/uploadfiles/")
+async def create_upload_files(files: List[UploadFile]):
+    return {"filenames": [file.filename for file in files]}

+ 19 - 2
app/models/models.py

@@ -52,7 +52,7 @@ class Class_list(Model):
 
 
 class Class_detail(Model):
 class Class_detail(Model):
     id = fields.IntField(pk=True)
     id = fields.IntField(pk=True)
-    class_list_id = fields.IntField(description="課程ID")
+    class_list_id = fields.IntField(description="課程場次ID")
     start_time = fields.DatetimeField(description="開始時間")
     start_time = fields.DatetimeField(description="開始時間")
     end_time = fields.DatetimeField(description="結束時間")
     end_time = fields.DatetimeField(description="結束時間")
     sessions = fields.IntField(description="堂數")
     sessions = fields.IntField(description="堂數")
@@ -64,4 +64,21 @@ class Registration(Model):
     user_id = fields.IntField(description="使用者ID")
     user_id = fields.IntField(description="使用者ID")
     reg_confirm = fields.CharField(max_length=255, description="報名確認(1:報名成功 0:單純報名)")
     reg_confirm = fields.CharField(max_length=255, description="報名確認(1:報名成功 0:單純報名)")
     is_del = fields.CharField(max_length=255, description="是否取消(1:yes ,0:no)")
     is_del = fields.CharField(max_length=255, description="是否取消(1:yes ,0:no)")
-    create_time = fields.DatetimeField(description="創建時間")
+    create_time = fields.DatetimeField(description="創建時間")
+
+class News(Model):
+    id = fields.IntField(pk=True)
+    title = fields.CharField(max_length=200, description="標題")
+    category = fields.CharField(max_length=45, description="類別")
+    create_time = fields.DatetimeField(description="發布時間")
+    click_time = fields.IntField(description="點擊次數")
+    content = fields.TextField(description="內容")
+    files = fields.TextField(description="附加檔案")
+    URL = fields.TextField(description="外部連結")
+    tags = fields.TextField(description="標籤")
+
+class Favorite_course(Model):
+    id = fields.IntField(pk=True)
+    user_id = fields.IntField(description="使用者ID")
+    class_event_id = fields.IntField(description="課程場次ID")
+    time_stemp = fields.DatetimeField(description="時間")