Bläddra i källkod

Merge remote-tracking branch 'origin/master'

zooey 1 år sedan
förälder
incheckning
1f3df4e930
2 ändrade filer med 307 tillägg och 229 borttagningar
  1. 242 157
      app/api/classes.py
  2. 65 72
      app/models/models.py

+ 242 - 157
app/api/classes.py

@@ -5,7 +5,7 @@ from random import randint
 import uuid
 from fastapi.security import OAuth2PasswordRequestForm
 from app.models.models import User
-from app.models.models import Class_list,Schools,Class_detail,Class_name,Registration
+from app.models.models import Class_list,Schools,Class_detail,Class_name,Registration,School_group
 from app.api import deps
 from sqlalchemy.orm import Session
 from typing import Any, Dict
@@ -28,87 +28,60 @@ IMAGEDIR_short = "assets/"
 
 @classes.post("/insert_school")
 async def insert_school(
-    id: int = Form(default=0),
-    name: str = Form(default=''),
-    longitude: str = Form(default=''),
-    latitude: str = Form(default='')
+    location_name: str = Form(default=''),
+    Lng: str = Form(default=''),
+    Lat: str = Form(default=''),
+    group_id : int = Form(default=1),
+    address : str = Form(default='')
 ):
     try:
         new_school = await Schools.create(
-            id=id,
-            name=name,
-            longitude=longitude,
-            latitude=latitude
+            name=location_name,
+            longitude=Lng,
+            latitude=Lat,
+            group_id = group_id,
+            address = address
         )
         
-        return {"msg": "success", "code": 200, "class_id": new_school.id}
+        return {"msg": "success", "code": 200, "location_id": new_school.id}
     except Exception as e:
         return {"msg": str(e), "code": 500}
 
-@classes.post("/insert_class")
-async def insert_class(
-    id: int = Form(default=0),
+@classes.post("/insert_class_name")
+async def insert_class_name(
     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=''),
-    event: str = Form(default=''),
-    start_time: datetime = Form(default=datetime.now()),
-    end_time: datetime = Form(default=datetime.now()),
-    contact: str = Form(default=''),
-    lecturer: str = Form(default=''),
-    location: str = Form(default=''),
-    content: str = Form(default=''),
-    URL: str = Form(default=''), 
-    people : str = Form(default=''),
-    fee_method: str = Form(default=''),
-    registration_way: str = Form(default=''),
-    remark : str = Form(default='')
+    cover_img_file:UploadFile = File(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}"        
 
         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
         )
 
-        new_class = await Class_list.create(
-            id=id,
-            name_id=new_class_name.id,
-            event =event ,
-            start_time=start_time,
-            end_time=end_time,
-            contact=contact,
-            lecturer=lecturer,
-            location=location,
-            content=content,
-            URL=URL,
-            people=people,
-            fee_method=fee_method,
-            registration_way=registration_way,
-            remark=remark
-        )
-        return {"msg": "success", "code": 200, "class_id": new_class.id}
+        return {"msg": "success", "code": 200, "new_class_name_id": new_class_name.id}
     except Exception as e:
         return {"msg": str(e), "code": 500}
 
 @classes.post("/insert_event")
 async def insert_event(
-    id: int = Form(default=0),
     name_id: int = Form(default=''),
     event: str = Form(default=''),
     start_time: datetime = Form(default=datetime.now()),
@@ -125,7 +98,6 @@ async def insert_event(
 ):    
     try:
         new_class = await Class_list.create(
-            id=id,
             name_id=name_id,
             event =event,
             start_time=start_time,
@@ -143,10 +115,63 @@ async def insert_event(
         return {"msg": "success", "code": 200, "class_id": new_class.id}
     except Exception as e:
         return {"msg": str(e), "code": 500}
+    
+@classes.post("/insert_session")
+async def insert_session(
+    class_event_id : int = Form(default=0),
+    start_time: datetime = Form(default=datetime.now()),
+    end_time: datetime = Form(default=datetime.now()),
+    sessions: str = Form(default=0),
+    content : str = Form(default='')
+):
+    try:
+        new_session = await Class_detail.create(
+            class_list_id=class_event_id,
+            start_time=start_time,
+            end_time=end_time,
+            sessions=sessions,
+            content = content
+        )
+        
+        return {"msg": "success", "code": 200, "new_session_id": new_session.id}
+    except Exception as e:
+        return {"msg": str(e), "code": 500}
+
+@classes.post("/update_school")
+async def update_school(
+    location_id: int = Form(default=0),
+    location_name: str = Form(default=''),
+    Lng: str = Form(default=''),
+    Lat: str = Form(default=''),
+    group_id : int = Form(default=1),
+    address : str = Form(default='')
+):
+    try:
+        school = await Schools.get(id=location_id)
+
+        if location_name.strip() != '':
+            school.name = location_name
+
+        if Lng != '':
+            school.longitude = Lng
+        
+        if  Lat.strip() != '':
+            school.latitude =  Lat
+
+        if group_id != 1 :
+            school.group_id = group_id
+
+        if  address.strip() != '':
+            school.address =  address
+
+        await school.save()
+        return {"msg": "success", "code": 200}
+    except Exception as e:
+        return {"msg": str(e), "code": 500}
 
 @classes.post("/update_class_name")
 async def update_class_name(
-    id: int = Form(default=0),
+    class_name_id: int = Form(default=0),
     name: str = Form(default=''),
     school_id: int = Form(default=''),
     category: str = Form(default=''),
@@ -155,7 +180,7 @@ async def update_class_name(
     cover_img_file:UploadFile = File(default='')
 ):
     try:
-        class_name = await Class_name.get(id=id)
+        class_name = await Class_name.get(id=class_name_id)
 
         if name.strip() != '':
             class_name.name = name
@@ -186,16 +211,15 @@ async def update_class_name(
     except Exception as e:
         return {"msg": str(e), "code": 500}
     
-@classes.post("/update_class")
+@classes.post("/update_event")
 async def update_class(
     id: int = Form(default=0),
-    name_id: int = Form(default=''),
+    name_id: str = Form(default=0),
     event: str = Form(default=''),
     start_time: datetime = Form(default=datetime.now()),
     end_time: datetime = Form(default=datetime.now()),
     contact: str = Form(default=''),
     lecturer: str = Form(default=''),
-    location: str = Form(default=''),
     content: str = Form(default=''),
     URL: str = Form(default=''), 
     people : str = Form(default=''),
@@ -206,7 +230,7 @@ async def update_class(
     try:
         class_obj = await Class_list.get(id=id)
 
-        if name_id != '':
+        if name_id != 0:
             class_obj.name_id = name_id
 
         if event.strip() != '':
@@ -218,9 +242,6 @@ async def update_class(
         if end_time:
             class_obj.end_time = end_time
 
-        if location.strip() != '':
-            class_obj.location = location
-
         if lecturer.strip() != '':
             class_obj.lecturer = lecturer
 
@@ -250,6 +271,38 @@ async def update_class(
     except Exception as e:
         return {"msg": str(e), "code": 500}
 
+@classes.post("/update_session")
+async def update_session(
+    session_id : int = Form(default=0),
+    class_event_id : int = Form(default=0),
+    start_time: datetime = Form(default=datetime.now()),
+    end_time: datetime = Form(default=datetime.now()),
+    sessions: str = Form(default=0),
+    content : str = Form(default='')
+):
+    try:
+        class_session_obj = await Class_detail.get(id=session_id)
+        
+        if class_event_id != 0:
+            class_session_obj.class_list_id = class_event_id
+
+        if start_time != '':
+            class_session_obj.start_time = start_time
+
+        if end_time != '':
+            class_session_obj.end_time = end_time
+        
+        if sessions.strip() != '':
+            class_session_obj.sessions = sessions
+
+        if content.strip() != '':
+            class_session_obj.content = content
+        
+        await class_session_obj.save()
+        return {"msg": "success", "code": 200}
+    except Exception as e:
+        return {"msg": str(e), "code": 500}
+
 @classes.post("/delete_class")
 async def delete(id: int):
     if id:
@@ -263,23 +316,18 @@ async def delete(id: int):
         await Class_name.filter(id=id).delete()
         return {"msg": "success", "code": 200}
 
-
-@classes.get("/search_class")
-async def search_class(id: int):
+@classes.get("/get_event")
+async def search_event(name_id: int = 0):
     try:
-        class_obj = await Class_list.get(id=id)
-        class_name = await Class_name.get(id=class_obj.name_id)
-        school_obj = await Schools.get(id=class_name.school_id)
-        return {
+        class_list = await Class_list.filter(name_id=name_id).all()
+
+        classes = []
+        for class_obj in class_list:
+            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_id": class_obj.id,
+            "name_id": class_obj.name_id,
             "event": class_obj.event,
             "start_time": class_obj.start_time,
             "end_time": class_obj.end_time,
@@ -293,9 +341,12 @@ async def search_class(id: int):
             "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}
-
+    
 @classes.get("/get_school")
 async def get_school():
     try:
@@ -303,54 +354,111 @@ async def get_school():
         schools = []
         for school_obj in school_list:
             school_data = {
-                "school_id": school_obj.id,
-                "name": school_obj.name,
-                "longitude": school_obj.longitude,
-                "latitude": school_obj.latitude,
+                "location_id": school_obj.id,
+                "location_name": school_obj.name,
+                "Lng": school_obj.longitude,
+                "Lat": school_obj.latitude,
+                "group_id": school_obj.group_id,
+                "address": school_obj.address
             }
             schools.append(school_data)
 
         return {"msg": "success", "code": 200, "schools": schools}
     except Exception as e:
         return {"msg": str(e), "code": 500}
+    
+@classes.get("/get_school_group")
+async def get_school_group():
+    try:
+        school_group_list = await School_group.all()
+        school_groups = []
+        for school_obj in school_group_list:
+            school_data = {
+                "group_id": school_obj.id,
+                "group_name": school_obj.group_name
+            }
+            school_groups.append(school_data)
+
+        return {"msg": "success", "code": 200, "school_groups": school_groups}
+    except Exception as e:
+        return {"msg": str(e), "code": 500}
 
 @classes.get("/get_class_name")
-async def get_class_name():
+async def get_class_name(
+    school_id : int = 0
+):
     try:
-        class_name_list = await Class_name.all()
-        classes_name = []
-        for class_name_obj in class_name_list:
-            school_obj = await Schools.get(id=class_name_obj.school_id)
-            class_data = {
-            "msg": "success",
-            "code": 200,
-            "id": class_name_obj.id,
-            "name": class_name_obj.name,
-            "school":school_obj.name,
-            "category": class_name_obj.category,
-            "introduction": class_name_obj.introduction,
-            "organizer": class_name_obj.organizer,
-            "cover_img": class_name_obj.cover_img,
-        }
-            classes_name.append(class_data)
+        if school_id == 0:
+            class_name_list = await Class_name.all()
+            classes_name = []
+            for class_name_obj in class_name_list:
+                school_obj = await Schools.get(id=class_name_obj.school_id)
+                class_data = {
+                    "class_name_id": class_name_obj.id,
+                    "name": class_name_obj.name,
+                    "school":school_obj.name,
+                    "category": class_name_obj.category,
+                    "introduction": class_name_obj.introduction,
+                    "organizer": class_name_obj.organizer,
+                    "cover_img": class_name_obj.cover_img
+                }
+                classes_name.append(class_data)
+        else:
+            class_name_list = await Class_name.filter(school_id = school_id).all()
+            classes_name = []
+            for class_name_obj in class_name_list:
+                school_obj = await Schools.get(id=class_name_obj.school_id)
+                class_data = {
+                    "msg": "success",
+                    "code": 200,
+                    "class_name_id": class_name_obj.id,
+                    "name": class_name_obj.name,
+                    "school":school_obj.name,
+                    "category": class_name_obj.category,
+                    "introduction": class_name_obj.introduction,
+                    "organizer": class_name_obj.organizer,
+                    "cover_img": class_name_obj.cover_img
+                }
+                classes_name.append(class_data)
 
         return {"msg": "success", "code": 200, "classes": classes_name}
     except Exception as e:
         return {"msg": str(e), "code": 500}    
+    
+@classes.get("/get_session")
+async def get_session(
+    event_id : int = 0
+):
+    try:
+        class_session_list = await Class_detail.filter(class_list_id=event_id).all()
+        
+        classe_sessions = []
+        for class_session_obj in class_session_list:
+            class_session_data = {
+            "session_id": class_session_obj.id,
+            "class_event_id": class_session_obj.class_list_id,
+            "start_time": class_session_obj.start_time,
+            "end_time": class_session_obj.end_time,
+            "sessions": class_session_obj.sessions,
+            "content": class_session_obj.content
+        }
+            classe_sessions.append(class_session_data)
 
+        return {"msg": "success", "code": 200, "classe_sessions": classe_sessions}
+    except Exception as e:
+        return {"msg": str(e), "code": 500}
 
-@classes.get("/get_class")
-async def get_class():
+@classes.get("/search_class_like")
+async def search_class_like(keyword: str):
     try:
-        class_list = await Class_list.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)
-            print(class_obj.name_id)
-            print(class_name.school_id)
             school_obj = await Schools.get(id=class_name.school_id)
             class_data = {
-            "msg": "success",
+                "msg": "success",
             "code": 200,
             "class_id": class_obj.id,
             "name": class_name.name,
@@ -371,65 +479,42 @@ async def get_class():
             "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}
-    
-@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_name_list = await Class_name.filter(Q(name__icontains=keyword)).all()
 
-        classes = []
-        for class_obj in class_list:
-            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
+        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)
+                classes.append(class_data)
 
         return {"msg": "success", "code": 200, "classes": classes}
     except Exception as e:
-        return {"msg": str(e), "code": 500}
-
-
-
-
-@classes.post("/upload/")
-async def create_upload_file(file: UploadFile = File(...)):
- 
-    #file.filename = f"{uuid.uuid4()}.jpeg"
-    contents = await file.read()
- 
-    #save the file
-    with open(f"{IMAGEDIR}{file.filename}", "wb") as f:
-        f.write(contents)
- 
-    return {"filename": file.filename}
- #"/var/www/ntcri/app/api/images/test.jpeg"
- 
-
-async def read_image_file():
- 
-    # get random file from the image directory
-    files = os.listdir(IMAGEDIR)
-    random_index = randint(0, len(files) - 1)
- 
-    path = f"{IMAGEDIR}{files[random_index]}"
-     
-    return FileResponse(path)
+        return {"msg": str(e), "code": 500}

+ 65 - 72
app/models/models.py

@@ -1,73 +1,66 @@
-from tortoise import fields
-from tortoise.models import Model
-from pydantic import BaseModel
-from datetime import datetime
-class User(Model):
-    id = fields.IntField(pk=True)
-    username = fields.CharField(max_length=30, unique=True, description="帳號")
-    password = fields.CharField(max_length=128, description="密碼")
-    email = fields.CharField(max_length=128, description="信箱")
-    points = fields.IntField(description="點數")
-
-# class Class_list(Model):
-#     id = fields.IntField(pk=True)
-#     name = fields.CharField(max_length=255, description="活動名稱")
-#     start_time = fields.DatetimeField(description="開始時間")
-#     end_time = fields.DatetimeField(description="結束時間")
-#     location = fields.CharField(max_length=255, description="地點")
-#     lecturer = fields.CharField(max_length=255, description="講師")
-#     organizer = fields.CharField(max_length=255, description="主辦單位")
-#     contact = fields.CharField(max_length=255, description="聯絡資訊")
-#     introduction = fields.TextField(description="簡介")
-#     content = fields.TextField(description="內容")
-#     cover_img = fields.CharField(max_length=255, description="封面圖片")
-
-#學校
-class Schools(Model):
-    id = fields.IntField(pk=True)
-    name = fields.CharField(max_length=45, description="學校名稱")
-    longitude = fields.CharField(max_length=100, description="經度")
-    latitude = fields.CharField(max_length=100, description="緯度")
-
-class Class_name(Model):
-    id = fields.IntField(pk=True)
-    name = fields.CharField(max_length=45, description="課程名稱")
-    school_id = fields.IntField(description="學校ID")
-    category = fields.CharField(max_length=45, description="分類")
-    introduction = fields.TextField(description="簡介")
-    organizer = fields.CharField(max_length=45, description="主辦單位")
-    cover_img = fields.CharField(max_length=255, description="封面圖片")
-
-
-class Class_list(Model):
-    id = fields.IntField(pk=True)
-    name_id = fields.IntField(description="課程名稱ID")
-    event = fields.CharField(max_length=45, description="場次")
-    start_time = fields.DatetimeField(description="開始時間")
-    end_time = fields.DatetimeField(description="結束時間")
-    contact = fields.CharField(max_length=255, description="聯絡方式")
-    lecturer = fields.CharField(max_length=255, description="講師")
-    location = fields.CharField(max_length=255, description="地點詳情")
-    content = fields.TextField(description="內容")
-    URL = fields.TextField(description="連結網址")
-    people = fields.CharField(max_length=255, description="對象")
-    fee_method = fields.CharField(max_length=255, description="收費方式")
-    registration_way = fields.CharField(max_length=255, description="報名方式")
-    remark = fields.TextField(description="備註")
-
-
-class Class_detail(Model):
-    id = fields.IntField(pk=True)
-    class_list_id = fields.IntField(description="課程ID")
-    start_time = fields.DatetimeField(description="開始時間")
-    end_time = fields.DatetimeField(description="結束時間")
-    sessions = fields.IntField(description="堂數")
-    content = fields.TextField(description="內容")
-
-class Registration(Model):
-    id = fields.IntField(pk=True)
-    class_id = fields.IntField(description="課程ID")
-    user_id = fields.IntField(description="使用者ID")
-    reg_confirm = fields.CharField(max_length=255, description="報名確認(1:報名成功 0:單純報名)")
-    is_del = fields.CharField(max_length=255, description="是否取消(1:yes ,0:no)")
+from tortoise import fields
+from tortoise.models import Model
+from pydantic import BaseModel
+from datetime import datetime
+class User(Model):
+    id = fields.IntField(pk=True)
+    username = fields.CharField(max_length=30, unique=True, description="帳號")
+    password = fields.CharField(max_length=128, description="密碼")
+    email = fields.CharField(max_length=128, description="信箱")
+    points = fields.IntField(description="點數")
+
+#學校
+class Schools(Model):
+    id = fields.IntField(pk=True)
+    name = fields.CharField(max_length=45, description="學校名稱")
+    longitude = fields.CharField(max_length=100, description="經度")
+    latitude = fields.CharField(max_length=100, description="緯度")
+    group_id = fields.IntField(description="學群")
+    address = fields.CharField(max_length=128,description="地址")
+
+class School_group(Model):
+    id =  fields.IntField(pk=True)
+    group_name = fields.CharField(max_length=45, description="學群名稱")
+
+class Class_name(Model):
+    id = fields.IntField(pk=True)
+    name = fields.CharField(max_length=45, description="課程名稱")
+    school_id = fields.IntField(description="學校ID")
+    category = fields.CharField(max_length=45, description="分類")
+    introduction = fields.TextField(description="簡介")
+    organizer = fields.CharField(max_length=45, description="主辦單位")
+    cover_img = fields.CharField(max_length=255, description="封面圖片")
+
+
+class Class_list(Model):
+    id = fields.IntField(pk=True)
+    name_id = fields.IntField(description="課程名稱ID")
+    event = fields.CharField(max_length=45, description="場次")
+    start_time = fields.DatetimeField(description="開始時間")
+    end_time = fields.DatetimeField(description="結束時間")
+    contact = fields.CharField(max_length=255, description="聯絡方式")
+    lecturer = fields.CharField(max_length=255, description="講師")
+    location = fields.CharField(max_length=255, description="地點詳情")
+    content = fields.TextField(description="內容")
+    URL = fields.TextField(description="連結網址")
+    people = fields.CharField(max_length=255, description="對象")
+    fee_method = fields.CharField(max_length=255, description="收費方式")
+    registration_way = fields.CharField(max_length=255, description="報名方式")
+    remark = fields.TextField(description="備註")
+
+
+class Class_detail(Model):
+    id = fields.IntField(pk=True)
+    class_list_id = fields.IntField(description="課程ID")
+    start_time = fields.DatetimeField(description="開始時間")
+    end_time = fields.DatetimeField(description="結束時間")
+    sessions = fields.IntField(description="堂數")
+    content = fields.TextField(description="內容")
+
+class Registration(Model):
+    id = fields.IntField(pk=True)
+    class_id = fields.IntField(description="課程ID")
+    user_id = fields.IntField(description="使用者ID")
+    reg_confirm = fields.CharField(max_length=255, description="報名確認(1:報名成功 0:單純報名)")
+    is_del = fields.CharField(max_length=255, description="是否取消(1:yes ,0:no)")
     create_time = fields.DatetimeField(description="創建時間")