|
@@ -1,11 +1,10 @@
|
|
|
from fastapi import APIRouter, Form, Depends, HTTPException, File, UploadFile
|
|
|
+from typing import List
|
|
|
from fastapi.responses import FileResponse
|
|
|
-import os
|
|
|
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,School_group
|
|
|
+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.api import deps
|
|
|
from sqlalchemy.orm import Session
|
|
|
from typing import Any, Dict
|
|
@@ -16,16 +15,22 @@ from datetime import timedelta,datetime
|
|
|
from app.config import settings
|
|
|
from pathlib import Path
|
|
|
from jose import jwt
|
|
|
-import emails
|
|
|
from emails.template import JinjaTemplate
|
|
|
-import logging
|
|
|
from tortoise.queryset import Q
|
|
|
+from fastapi.responses import HTMLResponse
|
|
|
|
|
|
classes = APIRouter()
|
|
|
|
|
|
IMAGEDIR = "/var/www/html/ntcri/assets/"
|
|
|
IMAGEDIR_short = "assets/"
|
|
|
|
|
|
+async def update_location_time(location_id: int):
|
|
|
+ if location_id:
|
|
|
+ school = await Schools.get(id=location_id)
|
|
|
+ school.update_time = datetime.now()
|
|
|
+ await school.save()
|
|
|
+ return {"msg": "success", "code": 200}
|
|
|
+
|
|
|
@classes.post("/insert_school")
|
|
|
async def insert_school(
|
|
|
location_name: str = Form(default=''),
|
|
@@ -50,7 +55,7 @@ async def insert_school(
|
|
|
@classes.post("/insert_class_name")
|
|
|
async def insert_class_name(
|
|
|
name: str = Form(default=''),
|
|
|
- school_id: int = Form(default=1),
|
|
|
+ location_id: int = Form(default=1),
|
|
|
category: str = Form(default=''),
|
|
|
introduction: str = Form(default=''),
|
|
|
organizer: str = Form(default=''),
|
|
@@ -69,20 +74,20 @@ async def insert_class_name(
|
|
|
|
|
|
new_class_name = await Class_name.create(
|
|
|
name=name,
|
|
|
- school_id=school_id,
|
|
|
+ school_id=location_id,
|
|
|
category=category,
|
|
|
introduction=introduction,
|
|
|
organizer=organizer,
|
|
|
cover_img=cover_img
|
|
|
)
|
|
|
-
|
|
|
+ update_location_time(location_id= location_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(
|
|
|
- name_id: int = Form(default=''),
|
|
|
+ name_id: int = Form(default=0),
|
|
|
event: str = Form(default=''),
|
|
|
start_time: datetime = Form(default=datetime.now()),
|
|
|
end_time: datetime = Form(default=datetime.now()),
|
|
@@ -97,6 +102,12 @@ async def insert_event(
|
|
|
remark : str = Form(default='')
|
|
|
):
|
|
|
try:
|
|
|
+
|
|
|
+ # 檢查是否有該課程
|
|
|
+ class_name_list = await Class_name.filter(id=name_id).all()
|
|
|
+ if class_name_list == []:
|
|
|
+ return {"msg": "沒有此課程", "code": 200}
|
|
|
+
|
|
|
new_class = await Class_list.create(
|
|
|
name_id=name_id,
|
|
|
event =event,
|
|
@@ -112,6 +123,7 @@ async def insert_event(
|
|
|
registration_way=registration_way,
|
|
|
remark=remark
|
|
|
)
|
|
|
+
|
|
|
return {"msg": "success", "code": 200, "class_id": new_class.id}
|
|
|
except Exception as e:
|
|
|
return {"msg": str(e), "code": 500}
|
|
@@ -165,6 +177,8 @@ async def update_school(
|
|
|
school.address = address
|
|
|
|
|
|
await school.save()
|
|
|
+
|
|
|
+ update_location_time(location_id= location_id)
|
|
|
return {"msg": "success", "code": 200}
|
|
|
except Exception as e:
|
|
|
return {"msg": str(e), "code": 500}
|
|
@@ -173,7 +187,7 @@ async def update_school(
|
|
|
async def update_class_name(
|
|
|
class_name_id: int = Form(default=0),
|
|
|
name: str = Form(default=''),
|
|
|
- school_id: int = Form(default=''),
|
|
|
+ location_id: int = Form(default=''),
|
|
|
category: str = Form(default=''),
|
|
|
introduction: str = Form(default=''),
|
|
|
organizer: str = Form(default=''),
|
|
@@ -185,8 +199,8 @@ async def update_class_name(
|
|
|
if name.strip() != '':
|
|
|
class_name.name = name
|
|
|
|
|
|
- if school_id != '':
|
|
|
- class_name.school_id = school_id
|
|
|
+ if location_id != '':
|
|
|
+ class_name.school_id = location_id
|
|
|
|
|
|
if category.strip() != '':
|
|
|
class_name.category = category
|
|
@@ -207,6 +221,8 @@ async def update_class_name(
|
|
|
|
|
|
|
|
|
await class_name.save()
|
|
|
+
|
|
|
+ update_location_time(location_id= location_id)
|
|
|
return {"msg": "success", "code": 200}
|
|
|
except Exception as e:
|
|
|
return {"msg": str(e), "code": 500}
|
|
@@ -303,15 +319,32 @@ async def update_session(
|
|
|
except Exception as e:
|
|
|
return {"msg": str(e), "code": 500}
|
|
|
|
|
|
-@classes.post("/delete_class")
|
|
|
+@classes.post("/delete_school")
|
|
|
+async def delete_school(location_id: int):
|
|
|
+ if location_id:
|
|
|
+ await Schools.filter(id=location_id).delete()
|
|
|
+ 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_event")
|
|
|
async def delete(id: int):
|
|
|
if id:
|
|
|
+ await Class_detail.filter(class_list_id=id).delete()
|
|
|
await Class_list.filter(id=id).delete()
|
|
|
return {"msg": "success", "code": 200}
|
|
|
|
|
|
@classes.post("/delete_class_name")
|
|
|
async def delete(id: int):
|
|
|
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_name.filter(id=id).delete()
|
|
|
return {"msg": "success", "code": 200}
|
|
@@ -359,7 +392,8 @@ async def get_school():
|
|
|
"Lng": school_obj.longitude,
|
|
|
"Lat": school_obj.latitude,
|
|
|
"group_id": school_obj.group_id,
|
|
|
- "address": school_obj.address
|
|
|
+ "address": school_obj.address,
|
|
|
+ "update_time":school_obj.update_time
|
|
|
}
|
|
|
schools.append(school_data)
|
|
|
|
|
@@ -367,10 +401,10 @@ async def get_school():
|
|
|
except Exception as e:
|
|
|
return {"msg": str(e), "code": 500}
|
|
|
|
|
|
-@classes.get("/get_school_group")
|
|
|
+@classes.get("/get_group_name")
|
|
|
async def get_school_group():
|
|
|
try:
|
|
|
- school_group_list = await School_group.all()
|
|
|
+ school_group_list = await Group_name.all()
|
|
|
school_groups = []
|
|
|
for school_obj in school_group_list:
|
|
|
school_data = {
|
|
@@ -385,43 +419,40 @@ async def get_school_group():
|
|
|
|
|
|
@classes.get("/get_class_name")
|
|
|
async def get_class_name(
|
|
|
- school_id : int = 0
|
|
|
+ location_id : int = 0 ,
|
|
|
+ class_name_id : int = 0
|
|
|
):
|
|
|
try:
|
|
|
- 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)
|
|
|
+ if location_id == 0:
|
|
|
+ if class_name_id == 0 :
|
|
|
+ class_name_list = await Class_name.all()
|
|
|
+ else :
|
|
|
+ class_name_list = await Class_name.filter(id = class_name_id).all()
|
|
|
else:
|
|
|
- class_name_list = await Class_name.filter(school_id = school_id).all()
|
|
|
- classes_name = []
|
|
|
- for class_name_obj in class_name_list:
|
|
|
+ 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 = "未設定據點"
|
|
|
+ else :
|
|
|
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)
|
|
|
+ school_name = school_obj.name
|
|
|
+ class_data = {
|
|
|
+ "class_name_id": class_name_obj.id,
|
|
|
+ "name": class_name_obj.name,
|
|
|
+ "school":school_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}
|
|
|
|
|
@@ -517,4 +548,55 @@ async def search_class_like(keyword: str):
|
|
|
|
|
|
return {"msg": "success", "code": 200, "classes": classes}
|
|
|
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,"is exist": not new_favorite_class[1],"id":new_favorite_class[0].id}
|
|
|
+ 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]}
|