Bläddra i källkod

最新消息、線上工藝、報名時間

Mia Cheng 2 år sedan
förälder
incheckning
16a7d0500d
4 ändrade filer med 199 tillägg och 33 borttagningar
  1. 1 2
      app/api/__init__.py
  2. 121 7
      app/api/classes.py
  3. 66 24
      app/api/news.py
  4. 11 0
      app/models/models.py

+ 1 - 2
app/api/__init__.py

@@ -6,7 +6,6 @@ from app.api.news import news
 
 routers = APIRouter()
 
-
 routers.include_router(users, prefix="/api", tags=["登入/註冊"])
 routers.include_router(classes, prefix="/api", tags=["課程列表"])
-routers.include_router(classes, prefix="/api", tags=["最新消息"])
+routers.include_router(news, prefix="/api", tags=["最新消息"])

+ 121 - 7
app/api/classes.py

@@ -1,10 +1,10 @@
 from fastapi import APIRouter, Form, Depends, HTTPException, File, UploadFile
-from typing import List
+from typing import List,Optional
 from fastapi.responses import FileResponse
 from random import randint
 from fastapi.security import OAuth2PasswordRequestForm
 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 sqlalchemy.orm import Session
 from typing import Any, Dict
@@ -99,6 +99,7 @@ async def insert_event(
     people : str = Form(default=''),
     fee_method: str = Form(default=''),
     registration_way: str = Form(default=''),
+    registration_day: str = Form(default=''),
     remark : str = Form(default='')
 ):    
     try:
@@ -121,6 +122,7 @@ async def insert_event(
             people=people,
             fee_method=fee_method,
             registration_way=registration_way,
+            registration_day=registration_day,
             remark=remark
         )
 
@@ -133,10 +135,16 @@ 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:
+        session_list = await Class_detail.filter(class_list_id=class_event_id).all()
+        session = 1
+        if session_list != []:
+            for session_obj in session_list:
+                if session <= session_obj.sessions:
+                    session = session_obj.sessions
+
         new_session = await Class_detail.create(
             class_list_id=class_event_id,
             start_time=start_time,
@@ -241,6 +249,7 @@ async def update_class(
     people : str = Form(default=''),
     fee_method: str = Form(default=''),
     registration_way: str = Form(default=''),
+    registration_day: str = Form(default=''),
     remark : str = Form(default='')
 ):
     try:
@@ -279,6 +288,9 @@ async def update_class(
         if registration_way.strip() != '':
             class_obj.registration_way = registration_way
 
+        if registration_day.strip() != '':
+            class_obj.registration_day = registration_day
+
         if remark.strip() != '':
             class_obj.remark = remark
         
@@ -372,6 +384,7 @@ async def search_event(class_name_id: int = 0):
             "people": class_obj.people,
             "fee_method": class_obj.fee_method,
             "registration_way": class_obj.registration_way,
+            "registration_day": class_obj.registration_day,
             "remark": class_obj.remark
         }
             classes.append(class_data)
@@ -381,9 +394,15 @@ async def search_event(class_name_id: int = 0):
         return {"msg": str(e), "code": 500}
     
 @classes.get("/get_school")
-async def get_school():
+async def get_school(
+    location_id : Optional[int] = None
+):
     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 = []
         for school_obj in school_list:
             school_data = {
@@ -429,14 +448,17 @@ async def get_class_name(
             else :
                 class_name_list = await Class_name.filter(id = class_name_id).all()
         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 = []
         for class_name_obj in class_name_list:
             school_obj = await Schools.filter(id=class_name_obj.school_id).all()
             school_name = ""
             if school_obj == []:
-                school_name = "未設定據點"
+                school_name = "未設定據點"
             else :
                 school_obj = await Schools.get(id=class_name_obj.school_id)
                 school_name = school_obj.name
@@ -600,6 +622,98 @@ async def delete_favorite_class(
     except Exception as e:
         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/")
 async def create_upload_files(files: List[UploadFile]):
     return {"filenames": [file.filename for file in files]}

+ 66 - 24
app/api/news.py

@@ -1,5 +1,5 @@
 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 random import randint
 from fastapi.security import OAuth2PasswordRequestForm
@@ -18,8 +18,8 @@ from fastapi.responses import HTMLResponse
 
 news = APIRouter()
 
-IMAGEDIR = "/var/www/html/ntcri/assets/"
-IMAGEDIR_short = "assets/"
+IMAGEDIR = "/var/www/html/ntcri/assets/news_files/"
+IMAGEDIR_short = "assets/news_files/"
 
 @news.get("/get_news")
 async def search_news(
@@ -51,24 +51,23 @@ async def search_news(
         return {"msg": str(e), "code": 500}
     
 
-async def create_upload_files(files: List[UploadFile]):
-    return {"filenames": [file.filename for file in files]}
-    # 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}"       
-    #             i=i+1 
-
-    # return files_url
+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(
@@ -96,10 +95,53 @@ async def insert_news(
     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):
-    if id:
+async def delete_news(id: int = 0):
+    if id != 0:
         await News.filter(id=id).delete()
-        return {"msg": "success", "code": 200}
+        return {"msg": "success", "code": 200}
+    else :
+        return {"msg": "please input ID", "code": 200}

+ 11 - 0
app/models/models.py

@@ -50,6 +50,7 @@ class Class_list(Model):
     fee_method = fields.CharField(max_length=255, description="收費方式")
     registration_way = fields.CharField(max_length=255, description="報名方式")
     remark = fields.TextField(description="備註")
+    registration_day = fields.CharField(max_length=255, description="報名時間")
 
 
 class Class_detail(Model):
@@ -102,3 +103,13 @@ class Article_list(Model):
     click_time = fields.IntField(description="點擊次數")
     content = fields.TextField(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="學群")