Browse Source

Merge remote-tracking branch 'origin/master'

zooey 2 years ago
parent
commit
097c59d02a
5 changed files with 398 additions and 36 deletions
  1. 3 2
      app/api/__init__.py
  2. 158 28
      app/api/classes.py
  3. 118 0
      app/api/guidance.py
  4. 98 5
      app/api/news.py
  5. 21 1
      app/models/models.py

+ 3 - 2
app/api/__init__.py

@@ -3,10 +3,11 @@ from fastapi import APIRouter
 from app.api.users import users
 from app.api.users import users
 from app.api.classes import classes
 from app.api.classes import classes
 from app.api.news import news
 from app.api.news import news
+from app.api.guidance import guidance
 
 
 routers = APIRouter()
 routers = APIRouter()
 
 
-
 routers.include_router(users, prefix="/api", tags=["登入/註冊"])
 routers.include_router(users, prefix="/api", tags=["登入/註冊"])
 routers.include_router(classes, prefix="/api", tags=["課程列表"])
 routers.include_router(classes, prefix="/api", tags=["課程列表"])
-routers.include_router(classes, prefix="/api", tags=["最新消息"])
+routers.include_router(news, prefix="/api", tags=["最新消息"])
+routers.include_router(guidance, prefix="/api", tags=["輔導團紀錄"])

+ 158 - 28
app/api/classes.py

@@ -1,10 +1,10 @@
 from fastapi import APIRouter, Form, Depends, HTTPException, File, UploadFile
 from fastapi import APIRouter, Form, Depends, HTTPException, File, UploadFile
-from typing import List
+from typing import List,Optional
 from fastapi.responses import FileResponse
 from fastapi.responses import FileResponse
 from random import randint
 from random import randint
 from fastapi.security import OAuth2PasswordRequestForm
 from fastapi.security import OAuth2PasswordRequestForm
 from app.models.models import User,Favorite_course
 from app.models.models import User,Favorite_course
-from app.models.models import Class_list,Schools,Class_detail,Class_name,Registration,Group_name
+from app.models.models import Class_list,Schools,Class_detail,Class_name,Registration,Group_name,Online_course
 from app.api import deps
 from app.api import deps
 from sqlalchemy.orm import Session
 from sqlalchemy.orm import Session
 from typing import Any, Dict
 from typing import Any, Dict
@@ -36,16 +36,16 @@ async def insert_school(
     location_name: str = Form(default=''),
     location_name: str = Form(default=''),
     Lng: str = Form(default=''),
     Lng: str = Form(default=''),
     Lat: str = Form(default=''),
     Lat: str = Form(default=''),
-    group_id : int = Form(default=1),
-    address : str = Form(default='')
+    address : str = Form(default=''),
+    update_time : datetime = Form(default=datetime.now())
 ):
 ):
     try:
     try:
         new_school = await Schools.create(
         new_school = await Schools.create(
             name=location_name,
             name=location_name,
             longitude=Lng,
             longitude=Lng,
             latitude=Lat,
             latitude=Lat,
-            group_id = group_id,
-            address = address
+            address = address,
+            update_time = update_time
         )
         )
         
         
         return {"msg": "success", "code": 200, "location_id": new_school.id}
         return {"msg": "success", "code": 200, "location_id": new_school.id}
@@ -59,7 +59,8 @@ async def insert_class_name(
     category: str = Form(default=''),
     category: str = Form(default=''),
     introduction: str = Form(default=''),
     introduction: str = Form(default=''),
     organizer: str = Form(default=''),
     organizer: str = Form(default=''),
-    cover_img_file:UploadFile = File(default='')
+    cover_img_file:UploadFile = File(default=''),
+    group_id : int = Form(default=1)
 ):    
 ):    
     try:
     try:
         cover_img = ''
         cover_img = ''
@@ -78,7 +79,8 @@ async def insert_class_name(
             category=category,
             category=category,
             introduction=introduction,
             introduction=introduction,
             organizer=organizer,
             organizer=organizer,
-            cover_img=cover_img
+            cover_img=cover_img,
+            group_id=group_id
         )
         )
         update_location_time(location_id= location_id)
         update_location_time(location_id= location_id)
         return {"msg": "success", "code": 200, "new_class_name_id": new_class_name.id}
         return {"msg": "success", "code": 200, "new_class_name_id": new_class_name.id}
@@ -99,6 +101,7 @@ async def insert_event(
     people : str = Form(default=''),
     people : str = Form(default=''),
     fee_method: str = Form(default=''),
     fee_method: str = Form(default=''),
     registration_way: str = Form(default=''),
     registration_way: str = Form(default=''),
+    registration_day: str = Form(default=''),
     remark : str = Form(default='')
     remark : str = Form(default='')
 ):    
 ):    
     try:
     try:
@@ -121,6 +124,7 @@ async def insert_event(
             people=people,
             people=people,
             fee_method=fee_method,
             fee_method=fee_method,
             registration_way=registration_way,
             registration_way=registration_way,
+            registration_day=registration_day,
             remark=remark
             remark=remark
         )
         )
 
 
@@ -133,15 +137,21 @@ async def insert_session(
     class_event_id : int = Form(default=0),
     class_event_id : int = Form(default=0),
     start_time: datetime = Form(default=datetime.now()),
     start_time: datetime = Form(default=datetime.now()),
     end_time: datetime = Form(default=datetime.now()),
     end_time: datetime = Form(default=datetime.now()),
-    sessions: str = Form(default=0),
     content : str = Form(default='')
     content : str = Form(default='')
 ):
 ):
     try:
     try:
+        session_list = await Class_detail.filter(class_list_id=class_event_id).all()
+        session = 0
+        if session_list != []:
+            for session_obj in session_list:
+                if session < session_obj.sessions:
+                    session = session_obj.sessions
+
         new_session = await Class_detail.create(
         new_session = await Class_detail.create(
             class_list_id=class_event_id,
             class_list_id=class_event_id,
             start_time=start_time,
             start_time=start_time,
             end_time=end_time,
             end_time=end_time,
-            sessions=sessions,
+            sessions=session +1,
             content = content
             content = content
         )
         )
         
         
@@ -155,7 +165,6 @@ async def update_school(
     location_name: str = Form(default=''),
     location_name: str = Form(default=''),
     Lng: str = Form(default=''),
     Lng: str = Form(default=''),
     Lat: str = Form(default=''),
     Lat: str = Form(default=''),
-    group_id : int = Form(default=1),
     address : str = Form(default='')
     address : str = Form(default='')
 ):
 ):
     try:
     try:
@@ -170,9 +179,6 @@ async def update_school(
         if  Lat.strip() != '':
         if  Lat.strip() != '':
             school.latitude =  Lat
             school.latitude =  Lat
 
 
-        if group_id != 1 :
-            school.group_id = group_id
-
         if  address.strip() != '':
         if  address.strip() != '':
             school.address =  address
             school.address =  address
 
 
@@ -187,11 +193,12 @@ async def update_school(
 async def update_class_name(
 async def update_class_name(
     class_name_id: int = Form(default=0),
     class_name_id: int = Form(default=0),
     name: str = Form(default=''),
     name: str = Form(default=''),
-    location_id: int = Form(default=''),
+    location_id: int = Form(default=0),
     category: str = Form(default=''),
     category: str = Form(default=''),
     introduction: str = Form(default=''),
     introduction: str = Form(default=''),
     organizer: str = Form(default=''),
     organizer: str = Form(default=''),
-    cover_img_file:UploadFile = File(default='')
+    cover_img_file:UploadFile = File(default=''),
+    group_id : int = Form(default=0)
 ):
 ):
     try:
     try:
         class_name = await Class_name.get(id=class_name_id)
         class_name = await Class_name.get(id=class_name_id)
@@ -199,8 +206,9 @@ async def update_class_name(
         if name.strip() != '':
         if name.strip() != '':
             class_name.name = name
             class_name.name = name
 
 
-        if location_id != '':
+        if location_id != 0:
             class_name.school_id = location_id
             class_name.school_id = location_id
+            update_location_time(location_id= location_id)
         
         
         if category.strip() != '':
         if category.strip() != '':
             class_name.category = category
             class_name.category = category
@@ -211,6 +219,9 @@ async def update_class_name(
         if organizer.strip() != '':
         if organizer.strip() != '':
             class_name.organizer = organizer
             class_name.organizer = organizer
 
 
+        if group_id != 0 :
+            class_name.group_id = group_id
+
         if cover_img_file != '':
         if cover_img_file != '':
             contents = await cover_img_file.read()
             contents = await cover_img_file.read()
 
 
@@ -222,7 +233,7 @@ async def update_class_name(
 
 
         await class_name.save()
         await class_name.save()
 
 
-        update_location_time(location_id= location_id)
+        
         return {"msg": "success", "code": 200}
         return {"msg": "success", "code": 200}
     except Exception as e:
     except Exception as e:
         return {"msg": str(e), "code": 500}
         return {"msg": str(e), "code": 500}
@@ -241,6 +252,7 @@ async def update_class(
     people : str = Form(default=''),
     people : str = Form(default=''),
     fee_method: str = Form(default=''),
     fee_method: str = Form(default=''),
     registration_way: str = Form(default=''),
     registration_way: str = Form(default=''),
+    registration_day: str = Form(default=''),
     remark : str = Form(default='')
     remark : str = Form(default='')
 ):
 ):
     try:
     try:
@@ -279,6 +291,9 @@ async def update_class(
         if registration_way.strip() != '':
         if registration_way.strip() != '':
             class_obj.registration_way = registration_way
             class_obj.registration_way = registration_way
 
 
+        if registration_day.strip() != '':
+            class_obj.registration_day = registration_day
+
         if remark.strip() != '':
         if remark.strip() != '':
             class_obj.remark = remark
             class_obj.remark = remark
         
         
@@ -350,15 +365,25 @@ async def delete(id: int):
         return {"msg": "success", "code": 200}
         return {"msg": "success", "code": 200}
 
 
 @classes.get("/get_event")
 @classes.get("/get_event")
-async def search_event(name_id: int = 0):
+async def search_event(
+    class_name_id: Optional[int] = None,
+    event_id : Optional[int] = None
+):
     try:
     try:
-        class_list = await Class_list.filter(name_id=name_id).all()
+        if event_id :
+            class_list = await Class_list.filter(id=event_id).all()
+        elif class_name_id:
+            class_list = await Class_list.filter(name_id=class_name_id).all()
+        else :
+            return {"msg": "please input class_name_id or event_id", "code": 200}
 
 
         classes = []
         classes = []
         for class_obj in class_list:
         for class_obj in class_list:
+            class_name_obj = await Class_name.get(id=class_obj.name_id)
+            class_name = class_name_obj.name
+
             class_data = {
             class_data = {
-            "msg": "success",
-            "code": 200,
+            "class_name" : class_name,
             "event_id": class_obj.id,
             "event_id": class_obj.id,
             "name_id": class_obj.name_id,
             "name_id": class_obj.name_id,
             "event": class_obj.event,
             "event": class_obj.event,
@@ -372,6 +397,7 @@ async def search_event(name_id: int = 0):
             "people": class_obj.people,
             "people": class_obj.people,
             "fee_method": class_obj.fee_method,
             "fee_method": class_obj.fee_method,
             "registration_way": class_obj.registration_way,
             "registration_way": class_obj.registration_way,
+            "registration_day": class_obj.registration_day,
             "remark": class_obj.remark
             "remark": class_obj.remark
         }
         }
             classes.append(class_data)
             classes.append(class_data)
@@ -381,9 +407,15 @@ async def search_event(name_id: int = 0):
         return {"msg": str(e), "code": 500}
         return {"msg": str(e), "code": 500}
     
     
 @classes.get("/get_school")
 @classes.get("/get_school")
-async def get_school():
+async def get_school(
+    location_id : Optional[int] = None
+):
     try:
     try:
-        school_list = await Schools.all()
+        if location_id :
+            school_list = await Schools.filter(id = location_id).all()
+        else :
+            school_list = await Schools.all()
+        
         schools = []
         schools = []
         for school_obj in school_list:
         for school_obj in school_list:
             school_data = {
             school_data = {
@@ -391,7 +423,6 @@ async def get_school():
                 "location_name": school_obj.name,
                 "location_name": school_obj.name,
                 "Lng": school_obj.longitude,
                 "Lng": school_obj.longitude,
                 "Lat": school_obj.latitude,
                 "Lat": school_obj.latitude,
-                "group_id": school_obj.group_id,
                 "address": school_obj.address,
                 "address": school_obj.address,
                 "update_time":school_obj.update_time
                 "update_time":school_obj.update_time
             }
             }
@@ -429,14 +460,17 @@ async def get_class_name(
             else :
             else :
                 class_name_list = await Class_name.filter(id = class_name_id).all()
                 class_name_list = await Class_name.filter(id = class_name_id).all()
         else:
         else:
-            class_name_list = await Class_name.filter(school_id = location_id).all()
+            if class_name_id != 0 :
+                class_name_list = await Class_name.filter(school_id = location_id,id = class_name_id).all()
+            else:
+                class_name_list = await Class_name.filter(school_id = location_id).all()
 
 
         classes_name = []
         classes_name = []
         for class_name_obj in class_name_list:
         for class_name_obj in class_name_list:
             school_obj = await Schools.filter(id=class_name_obj.school_id).all()
             school_obj = await Schools.filter(id=class_name_obj.school_id).all()
             school_name = ""
             school_name = ""
             if school_obj == []:
             if school_obj == []:
-                school_name = "未設定據點"
+                school_name = "未設定據點"
             else :
             else :
                 school_obj = await Schools.get(id=class_name_obj.school_id)
                 school_obj = await Schools.get(id=class_name_obj.school_id)
                 school_name = school_obj.name
                 school_name = school_obj.name
@@ -447,6 +481,7 @@ async def get_class_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,
+                "group_id": class_name_obj.group_id,
                 "cover_img": class_name_obj.cover_img
                 "cover_img": class_name_obj.cover_img
             }
             }
             classes_name.append(class_data)
             classes_name.append(class_data)
@@ -458,7 +493,7 @@ async def get_class_name(
     
     
 @classes.get("/get_session")
 @classes.get("/get_session")
 async def get_session(
 async def get_session(
-    event_id : int = 0
+    event_id : Optional[int] = None
 ):
 ):
     try:
     try:
         class_session_list = await Class_detail.filter(class_list_id=event_id).all()
         class_session_list = await Class_detail.filter(class_list_id=event_id).all()
@@ -574,10 +609,13 @@ async def get_favorite_class(
         class_list = await Favorite_course.filter(user_id = user_id).all()
         class_list = await Favorite_course.filter(user_id = user_id).all()
         favorite_courses = []
         favorite_courses = []
         for class_obj in class_list:
         for class_obj in class_list:
+            class_event = await Class_list.get(id = class_obj.class_event_id)
+            class_name = await Class_name.get(id = class_event.name_id)
             class_data = {
             class_data = {
                 "id": class_obj.id,
                 "id": class_obj.id,
                 "user_id": class_obj.user_id,
                 "user_id": class_obj.user_id,
                 "class_event_id":class_obj.class_event_id,
                 "class_event_id":class_obj.class_event_id,
+                "class_name_id" : class_name.id,
                 "time_stemp":class_obj.time_stemp
                 "time_stemp":class_obj.time_stemp
             }
             }
             favorite_courses.append(class_data)
             favorite_courses.append(class_data)
@@ -597,6 +635,98 @@ async def delete_favorite_class(
     except Exception as e:
     except Exception as e:
         return {"msg": str(e), "code": 500}
         return {"msg": str(e), "code": 500}
 
 
+@classes.post("/insert_online_course")
+async def insert_online_course(
+    title : str = Form(default=''),
+    category : str = Form(default=''),
+    create_time :str = Form(default=datetime.now()),
+    content : str = Form(default=''),
+    vedio_url :str = Form(default='')
+):
+    try:
+        new_online_course = await Online_course.create(
+            title=title,
+            create_time=create_time,
+            category=category,
+            content=content,
+            vedio_url=vedio_url,
+            group_id = 8
+        )
+        
+        return {"msg": "success", "code": 200, "online_course_obj": new_online_course.id}
+    except Exception as e:
+        return {"msg": str(e), "code": 500}
+    
+@classes.post("/update_online_course")
+async def update_online_course(
+    id : int = Form(default=0),
+    title : str = Form(default=''),
+    category : str = Form(default=''),
+    create_time :str = Form(default=datetime.now()),
+    content : str = Form(default=''),
+    vedio_url :str = Form(default='')
+):
+    try:
+        online_course_obj = await Online_course.get(id=id)
+
+        if title.strip() != '':
+            online_course_obj.title = title
+        
+        if category.strip() != '':
+            online_course_obj.category = category
+
+        if create_time.strip() != '':
+            online_course_obj.create_time = create_time
+
+        if content.strip() != '':
+            online_course_obj.content = content
+
+        if vedio_url.strip() != '':
+            online_course_obj.vedio_url = vedio_url
+        
+        await online_course_obj.save()
+        
+        return {"msg": "success", "code": 200}
+    except Exception as e:
+        return {"msg": str(e), "code": 500}
+
+@classes.get("/get_online_courese")
+async def get_online_courese(
+    online_courese_id : Optional[int] = None
+):
+    try:
+        if online_courese_id :
+            online_courese_list = await Online_course.filter(id = online_courese_id).all()
+        else :
+            online_courese_list = await Online_course.all()
+        
+        online_coureses = []
+        for online_coures_obj in online_courese_list:
+            online_coures_data = {
+                "id": online_coures_obj.id,
+                "title": online_coures_obj.title,
+                "category":online_coures_obj.category,
+                "create_time": online_coures_obj.create_time,
+                "click_time": online_coures_obj.click_time,
+                "content": online_coures_obj.content,
+                "vedio_url":online_coures_obj.vedio_url
+            }
+            online_coureses.append(online_coures_data)
+
+        return {"msg": "success", "code": 200, "online_coures": online_coureses}
+    except Exception as e:
+        return {"msg": str(e), "code": 500}
+
+@classes.post("/delete_online_course")
+async def delete_online_course(
+    online_course_id : int 
+):
+    try:
+        await Online_course.filter(id=online_course_id).delete()
+        return {"msg": "success", "code": 200}
+    except Exception as e:
+        return {"msg": str(e), "code": 500}
+
 @classes.post("/uploadfiles/")
 @classes.post("/uploadfiles/")
 async def create_upload_files(files: List[UploadFile]):
 async def create_upload_files(files: List[UploadFile]):
     return {"filenames": [file.filename for file in files]}
     return {"filenames": [file.filename for file in files]}

+ 118 - 0
app/api/guidance.py

@@ -0,0 +1,118 @@
+from fastapi import APIRouter, Form, Depends, HTTPException, File, UploadFile
+from typing import List,Optional,Union
+from fastapi.responses import FileResponse
+from random import randint
+from fastapi.security import OAuth2PasswordRequestForm
+from app.models.models import Guidance_group
+from app.api import deps
+from sqlalchemy.orm import Session
+from typing import Any, Dict
+import secrets
+from fastapi_login.exceptions import InvalidCredentialsException
+from fastapi_login import LoginManager
+from datetime import timedelta,datetime
+from jose import jwt
+from emails.template import JinjaTemplate
+from tortoise.queryset import Q
+from fastapi.responses import HTMLResponse
+
+guidance = APIRouter()
+
+@guidance.get("/get_guidance_group")
+async def get_guidance_group(
+    guidance_group_id : Optional[int] = None
+):
+    try:
+        if guidance_group_id :
+            news_list = await Guidance_group.filter(id=guidance_group_id).all()
+        else:    
+            news_list = await Guidance_group.all()
+
+        news_objs = []
+        for news_obj in news_list:
+            news_tmp = {
+            "guidance_group_id": news_obj.id,
+            "name": news_obj.name,
+            "contact_person": news_obj.contact_person,
+            "contact_phone" : news_obj.contact_phone,
+            "line" : news_obj.line,
+            "online_meet" : news_obj.online_meet,
+            "remark" : news_obj.remark
+        }
+            news_objs.append(news_tmp)
+
+        return {"msg": "success", "code": 200, "Guidance groups": news_objs}
+    except Exception as e:
+        return {"msg": str(e), "code": 500}
+
+@guidance.post("/insert_guidance_group")
+async def insert_news(
+    name : str = Form(default=''),
+    contact_person : str = Form(default=''),
+    contact_phone :str = Form(default=''),
+    line : int = Form(default=0),
+    online_meet : int = Form(default=0),
+    remark : str = Form(default='')
+):
+    try:
+
+        new_news = await Guidance_group.create(
+            name=name,
+            contact_person=contact_person,
+            contact_phone=contact_phone,
+            line = line,
+            online_meet = online_meet,
+            remark =remark
+        )
+        
+        return {"msg": "success", "code": 200, "new_Guidance_group": new_news.id}
+    except Exception as e:
+        return {"msg": str(e), "code": 500}
+
+@guidance.post("/update_guidance_group")
+async def update_news(
+    guidance_group_id : int = Form(default=None),
+    name : str = Form(default=''),
+    contact_person : str = Form(default=''),
+    contact_phone :str = Form(default=''),
+    line : int = Form(default=None),
+    online_meet : int = Form(default=None),
+    remark : str = Form(default='')
+):
+    try:
+        if not guidance_group_id :
+            return {"msg": "no ID"}
+        
+        news_obj = await Guidance_group.get(id=guidance_group_id)
+
+        if name.strip() != '':
+            news_obj.name = name
+        
+        if contact_person.strip() != '':
+            news_obj.contact_person = contact_person
+
+        if contact_phone.strip() != '':
+            news_obj.contact_phone = contact_phone
+
+        if line != None:
+            news_obj.line = line
+
+        if online_meet != None:
+            news_obj.online_meet = online_meet
+
+        if remark.strip() != '':
+            news_obj.remark = remark
+        
+        await news_obj.save()
+        
+        return {"msg": "success", "code": 200}
+    except Exception as e:
+        return {"msg": str(e), "code": 500}
+
+@guidance.post("/delete_guidance_group")
+async def delete_guidance_group(guidance_group_id: Optional[int] = None):
+    if guidance_group_id :
+        await Guidance_group.filter(id=guidance_group_id).delete()
+        return {"msg": "success", "code": 200}
+    else :
+        return {"msg": "please input ID", "code": 200}

+ 98 - 5
app/api/news.py

@@ -1,5 +1,5 @@
 from fastapi import APIRouter, Form, Depends, HTTPException, File, UploadFile
 from fastapi import APIRouter, Form, Depends, HTTPException, File, UploadFile
-from typing import List
+from typing import List,Optional,Union
 from fastapi.responses import FileResponse
 from fastapi.responses import FileResponse
 from random import randint
 from random import randint
 from fastapi.security import OAuth2PasswordRequestForm
 from fastapi.security import OAuth2PasswordRequestForm
@@ -18,6 +18,9 @@ from fastapi.responses import HTMLResponse
 
 
 news = APIRouter()
 news = APIRouter()
 
 
+IMAGEDIR = "/var/www/html/ntcri/assets/news_files/"
+IMAGEDIR_short = "assets/news_files/"
+
 @news.get("/get_news")
 @news.get("/get_news")
 async def search_news(
 async def search_news(
     news_id : int = None
     news_id : int = None
@@ -47,8 +50,98 @@ async def search_news(
     except Exception as e:
     except Exception as e:
         return {"msg": str(e), "code": 500}
         return {"msg": str(e), "code": 500}
     
     
-# @news.post("/insert_news")
-# async def insert_news(
 
 
-# ):
-    
+async def create_upload_files(files:Optional[List[UploadFile]] = File(None)):
+    files_url = {}
+    if files :
+        file_num = 1
+        print(file_num)
+        for file in files:
+            contents = await file.read()
+
+            #save the file
+            with open(f"{IMAGEDIR}{file.filename}", "wb") as f:
+                f.write(contents)
+                file_name = "file" + str(file_num)
+                print(file_name)
+                files_url[file_name]=f"{IMAGEDIR_short}{file.filename}"       
+                file_num=file_num+1 
+
+    return files_url
+
+@news.post("/insert_news")
+async def insert_news(
+    title : str = Form(default=''),
+    category : str = Form(default=''),
+    create_time :str = Form(default=datetime.now()),
+    content : str = Form(default=''),
+    URL :str = Form(default=''),
+    tags : str = Form(default=''),
+    files_url = Depends(create_upload_files)
+):
+    try:
+
+        new_news = await News.create(
+            title=title,
+            category=category,
+            create_time=create_time,
+            content=content,
+            files = str(files_url),
+            URL = URL,
+            tags = tags
+        )
+        
+        return {"msg": "success", "code": 200, "new_news": new_news.id}
+    except Exception as e:
+        return {"msg": str(e), "code": 500}
+
+@news.post("/update_news")
+async def update_news(
+    news_id : int = Form(default=0),
+    title : str = Form(default=''),
+    category : str = Form(default=''),
+    create_time :str = Form(default=datetime.now()),
+    content : str = Form(default=''),
+    URL :str = Form(default=''),
+    tags : str = Form(default=''),
+    files_url = Depends(create_upload_files)
+):
+    try:
+        if news_id == 0 :
+            return {"msg": "no ID"}
+        
+        news_obj = await News.get(id=news_id)
+
+        if title.strip() != '':
+            news_obj.title = title
+        
+        if category.strip() != '':
+            news_obj.category = category
+
+        if create_time.strip() != '':
+            news_obj.create_time = create_time
+
+        if content.strip() != '':
+            news_obj.content = content
+
+        if URL.strip() != '':
+            news_obj.URL = URL
+
+        if tags.strip() != '':
+            news_obj.tags = tags
+        
+        news_obj.files = str(files_url)
+        
+        await news_obj.save()
+        
+        return {"msg": "success", "code": 200}
+    except Exception as e:
+        return {"msg": str(e), "code": 500}
+
+@news.post("/delete_news")
+async def delete_news(id: int = 0):
+    if id != 0:
+        await News.filter(id=id).delete()
+        return {"msg": "success", "code": 200}
+    else :
+        return {"msg": "please input ID", "code": 200}

+ 21 - 1
app/models/models.py

@@ -29,7 +29,6 @@ class Schools(Model):
     name = fields.CharField(max_length=45, description="學校名稱")
     name = fields.CharField(max_length=45, description="學校名稱")
     longitude = fields.CharField(max_length=100, description="經度")
     longitude = fields.CharField(max_length=100, description="經度")
     latitude = 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="地址")
     address = fields.CharField(max_length=128,description="地址")
     update_time = fields.DatetimeField(description="更新時間")
     update_time = fields.DatetimeField(description="更新時間")
 
 
@@ -45,6 +44,7 @@ class Class_name(Model):
     introduction = fields.TextField(description="簡介")
     introduction = fields.TextField(description="簡介")
     organizer = fields.CharField(max_length=45, description="主辦單位")
     organizer = fields.CharField(max_length=45, description="主辦單位")
     cover_img = fields.CharField(max_length=255, description="封面圖片")
     cover_img = fields.CharField(max_length=255, description="封面圖片")
+    group_id = fields.IntField(description="學群")
 
 
 
 
 class Class_list(Model):
 class Class_list(Model):
@@ -62,6 +62,7 @@ class Class_list(Model):
     fee_method = fields.CharField(max_length=255, description="收費方式")
     fee_method = fields.CharField(max_length=255, description="收費方式")
     registration_way = fields.CharField(max_length=255, description="報名方式")
     registration_way = fields.CharField(max_length=255, description="報名方式")
     remark = fields.TextField(description="備註")
     remark = fields.TextField(description="備註")
+    registration_day = fields.CharField(max_length=255, description="報名時間")
 
 
 
 
 class Class_detail(Model):
 class Class_detail(Model):
@@ -114,3 +115,22 @@ class Article_list(Model):
     click_time = fields.IntField(description="點擊次數")
     click_time = fields.IntField(description="點擊次數")
     content = fields.TextField(description="內容")
     content = fields.TextField(description="內容")
     is_del = fields.IntField(description="是否刪除")
     is_del = fields.IntField(description="是否刪除")
+
+class Online_course(Model):
+    id = fields.IntField(pk=True)
+    title = fields.CharField(max_length=45, description="標題")
+    category = fields.CharField(max_length=45, description="類別")
+    create_time = fields.DatetimeField(description="發布時間")
+    click_time = fields.IntField(description="點擊次數")
+    content = fields.TextField(description="發布時間")
+    vedio_url = fields.TextField(description="影片連結")
+    group_id = fields.IntField(description="學群")
+
+class Guidance_group(Model):
+    id = fields.IntField(pk=True)
+    name = fields.CharField(max_length=125, description="協會(團體)名稱")
+    contact_person = fields.CharField(max_length=125, description="聯絡人")
+    contact_phone = fields.CharField(max_length=125, description="聯絡電話")
+    line = fields.IntField(description="LINE (0:沒有、1:有)")
+    online_meet = fields.IntField(description="線上會議 (0:沒有、1:有)")
+    remark = fields.TextField(description="備註")