|
@@ -3,7 +3,7 @@ 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,Article_list
|
|
|
+from app.models.models import User,Favorite_course,Article_list,Class_date,Attend_record
|
|
|
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
|
|
@@ -20,6 +20,7 @@ from tortoise.queryset import Q
|
|
|
from fastapi.responses import HTMLResponse
|
|
|
import requests
|
|
|
import json
|
|
|
+from itertools import chain
|
|
|
|
|
|
classes = APIRouter()
|
|
|
|
|
@@ -35,7 +36,7 @@ async def check_token(access_token: str):
|
|
|
|
|
|
return user_id
|
|
|
|
|
|
-IMAGEDIR = "/var/www/ntcri/ntcri/assets/"
|
|
|
+IMAGEDIR = "/var/www/ntcri/assets/"
|
|
|
IMAGEDIR_short = "assets/"
|
|
|
|
|
|
async def update_location_time(location_id: int):
|
|
@@ -50,8 +51,7 @@ async def insert_school(
|
|
|
location_name: str = Form(default=''),
|
|
|
Lng: str = Form(default=''),
|
|
|
Lat: str = Form(default=''),
|
|
|
- address : str = Form(default=''),
|
|
|
- update_time : datetime = Form(default=datetime.now())
|
|
|
+ address : str = Form(default='')
|
|
|
):
|
|
|
try:
|
|
|
new_school = await Schools.create(
|
|
@@ -59,7 +59,7 @@ async def insert_school(
|
|
|
longitude=Lng,
|
|
|
latitude=Lat,
|
|
|
address = address,
|
|
|
- update_time = update_time
|
|
|
+ update_time = datetime.now()
|
|
|
)
|
|
|
|
|
|
return {"msg": "success", "code": 200, "location_id": new_school.id}
|
|
@@ -82,7 +82,7 @@ async def insert_class_name(
|
|
|
if cover_img_file != '':
|
|
|
contents = await cover_img_file.read()
|
|
|
|
|
|
- #save the file
|
|
|
+ #save the file
|
|
|
with open(f"{IMAGEDIR}{cover_img_file.filename}", "wb") as f:
|
|
|
f.write(contents)
|
|
|
|
|
@@ -117,7 +117,9 @@ async def insert_event(
|
|
|
people : str = Form(default=''),
|
|
|
fee_method: str = Form(default=''),
|
|
|
registration_way: str = Form(default=''),
|
|
|
- registration_day: str = Form(default=''),
|
|
|
+ registration_start: datetime = Form(default=datetime.now()),
|
|
|
+ registration_end: datetime = Form(default=datetime.now()),
|
|
|
+ number_limit: int = Form(default=0),
|
|
|
remark : str = Form(default='')
|
|
|
):
|
|
|
try:
|
|
@@ -140,14 +142,63 @@ async def insert_event(
|
|
|
people=people,
|
|
|
fee_method=fee_method,
|
|
|
registration_way=registration_way,
|
|
|
- registration_day=registration_day,
|
|
|
remark=remark
|
|
|
)
|
|
|
|
|
|
+ await Class_date.create(
|
|
|
+ class_list_id = new_class.id,
|
|
|
+ registration_start = registration_start,
|
|
|
+ registration_end = registration_end,
|
|
|
+ number_limit = number_limit,
|
|
|
+ amount_left = number_limit
|
|
|
+ )
|
|
|
+
|
|
|
return {"msg": "success", "code": 200, "class_id": new_class.id}
|
|
|
except Exception as e:
|
|
|
return {"msg": str(e), "code": 500}
|
|
|
-
|
|
|
+
|
|
|
+@classes.post("/auto_create_session")
|
|
|
+async def auto_create_session(
|
|
|
+ class_event_id : int = Form(default=0),
|
|
|
+ week_day_str : str = Form(default="[]")
|
|
|
+):
|
|
|
+ try:
|
|
|
+ week_day = eval(week_day_str)
|
|
|
+
|
|
|
+ #print(week_day)
|
|
|
+
|
|
|
+ class_obj = await Class_list.get(id = class_event_id)
|
|
|
+ time_stemp = class_obj.start_time
|
|
|
+
|
|
|
+ while time_stemp <= class_obj.end_time:
|
|
|
+ if week_day[time_stemp.weekday()]:
|
|
|
+ time_del = class_obj.end_time.hour - time_stemp.hour
|
|
|
+ time_del_minutes = class_obj.end_time.minute - time_stemp.minute
|
|
|
+ time_end = time_stemp + timedelta(hours=time_del,minutes=time_del_minutes)
|
|
|
+ #print(time_end,class_obj.end_time.hour)
|
|
|
+
|
|
|
+ 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(
|
|
|
+ class_list_id=class_event_id,
|
|
|
+ start_time=time_stemp,
|
|
|
+ end_time=time_end,
|
|
|
+ sessions=session +1,
|
|
|
+ content = ""
|
|
|
+ )
|
|
|
+
|
|
|
+ time_stemp = time_stemp + timedelta(days=1)
|
|
|
+
|
|
|
+ return {"msg": "success", "code": 200}
|
|
|
+ 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),
|
|
@@ -272,7 +323,9 @@ async def update_event(
|
|
|
people : str = Form(default=''),
|
|
|
fee_method: str = Form(default=''),
|
|
|
registration_way: str = Form(default=''),
|
|
|
- registration_day: str = Form(default=''),
|
|
|
+ registration_start: datetime = Form(default=datetime.now()),
|
|
|
+ registration_end: datetime = Form(default=datetime.now()),
|
|
|
+ number_limit: int = Form(default=0),
|
|
|
remark : str = Form(default='')
|
|
|
):
|
|
|
try:
|
|
@@ -314,13 +367,36 @@ async def update_event(
|
|
|
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
|
|
|
+
|
|
|
+ try :
|
|
|
+ class_date_obj = await Class_date.get(class_list_id=id)
|
|
|
+
|
|
|
+ if registration_start != datetime.now():
|
|
|
+ class_date_obj.registration_start = registration_start
|
|
|
+
|
|
|
+ if registration_end != datetime.now():
|
|
|
+ class_date_obj.registration_end = registration_end
|
|
|
+
|
|
|
+ if number_limit != 0:
|
|
|
+ class_date_obj.number_limit = number_limit
|
|
|
+
|
|
|
+ await class_date_obj.save()
|
|
|
+
|
|
|
+ except:
|
|
|
+ await Class_date.create(
|
|
|
+ class_list_id = id,
|
|
|
+ registration_start = registration_start,
|
|
|
+ registration_end = registration_end,
|
|
|
+ number_limit = number_limit,
|
|
|
+ amount_left = number_limit
|
|
|
+ )
|
|
|
+
|
|
|
|
|
|
await class_obj.save()
|
|
|
+
|
|
|
+
|
|
|
return {"msg": "success", "code": 200}
|
|
|
except Exception as e:
|
|
|
return {"msg": str(e), "code": 500}
|
|
@@ -374,6 +450,7 @@ async def delete(id: int):
|
|
|
if id:
|
|
|
await Class_detail.filter(class_list_id=id).delete()
|
|
|
await Class_list.filter(id=id).delete()
|
|
|
+ await Class_date.filter(class_list_id=id).delete()
|
|
|
return {"msg": "success", "code": 200}
|
|
|
|
|
|
@classes.post("/delete_class_name")
|
|
@@ -382,11 +459,59 @@ async def delete(id: int):
|
|
|
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_date.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}
|
|
|
|
|
|
+@classes.get("/get_class_state")
|
|
|
+async def check_date_state(
|
|
|
+ class_name_id : Optional[int] = None,
|
|
|
+ class_event_id : Optional[int] = None
|
|
|
+):
|
|
|
+ if class_name_id:
|
|
|
+ class_list = await Class_list.filter(name_id=class_name_id).all()
|
|
|
+ elif class_event_id:
|
|
|
+ class_list = await Class_list.filter(id=class_event_id).all()
|
|
|
+ else:
|
|
|
+ return {"msg": 'please input ID', "code": 500}
|
|
|
+
|
|
|
+ result = {"reg": "尚未開放報名", "start_class":"課程尚未開始"}
|
|
|
+ class_check = True
|
|
|
+ reg_check = True
|
|
|
+ try:
|
|
|
+ for class_obj in class_list:
|
|
|
+ if class_check:
|
|
|
+ try:
|
|
|
+ if class_obj.start_time.replace(tzinfo=None) <= datetime.now() and class_obj.end_time.replace(tzinfo=None) >= datetime.now():
|
|
|
+ result["start_class"] = "開課中"
|
|
|
+ class_check = False
|
|
|
+ elif class_obj.end_time.replace(tzinfo=None) < datetime.now():
|
|
|
+ result["start_class"] = "課程已結束"
|
|
|
+ except Exception as e:
|
|
|
+ result["start_class"] = "尚未確認開課時間"
|
|
|
+
|
|
|
+ if reg_check:
|
|
|
+ try:
|
|
|
+ class_date_obj = await Class_date.get(class_list_id=class_obj.id)
|
|
|
+ if class_date_obj.registration_start.replace(tzinfo=None) <= datetime.now() and class_date_obj.registration_end.replace(tzinfo=None) >= datetime.now() :
|
|
|
+ if class_date_obj.amount_left == 0:
|
|
|
+ result["reg"] = "報名已額滿"
|
|
|
+ else:
|
|
|
+ result["reg"] = "開放報名中"
|
|
|
+
|
|
|
+ reg_check = False
|
|
|
+ elif class_date_obj.registration_end.replace(tzinfo=None) < datetime.now():
|
|
|
+ result["reg"] = "報名已結束"
|
|
|
+ except Exception as e:
|
|
|
+ result["reg"] = "尚未確認報名時間"
|
|
|
+
|
|
|
+ return {"msg": "success", "code": 200, "result": result}
|
|
|
+ except Exception as e:
|
|
|
+ return {"msg": str(e), "code": 500}
|
|
|
+
|
|
|
@classes.get("/get_event")
|
|
|
async def search_event(
|
|
|
class_name_id: Optional[int] = None,
|
|
@@ -394,9 +519,9 @@ async def search_event(
|
|
|
):
|
|
|
try:
|
|
|
if event_id :
|
|
|
- class_list = await Class_list.filter(id=event_id).all()
|
|
|
+ class_list = await Class_list.filter(id=event_id).all().order_by("-start_time")
|
|
|
elif class_name_id:
|
|
|
- class_list = await Class_list.filter(name_id=class_name_id).all()
|
|
|
+ class_list = await Class_list.filter(name_id=class_name_id).all().order_by("-start_time")
|
|
|
else :
|
|
|
return {"msg": "please input class_name_id or event_id", "code": 200}
|
|
|
|
|
@@ -405,24 +530,42 @@ async def search_event(
|
|
|
class_name_obj = await Class_name.get(id=class_obj.name_id)
|
|
|
class_name = class_name_obj.name
|
|
|
|
|
|
- class_data = {
|
|
|
- "class_name" : class_name,
|
|
|
- "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,
|
|
|
- "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,
|
|
|
- "registration_day": class_obj.registration_day,
|
|
|
- "remark": class_obj.remark
|
|
|
- }
|
|
|
+ try :
|
|
|
+ state = await check_date_state(class_event_id=class_obj.id)
|
|
|
+ class_data = {
|
|
|
+ "class_name" : class_name,
|
|
|
+ "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,
|
|
|
+ "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,
|
|
|
+ "state": state["result"]
|
|
|
+ }
|
|
|
+
|
|
|
+ try:
|
|
|
+ class_date_obj = await Class_date.get(class_list_id=class_obj.id)
|
|
|
+ class_data["registration_start"] = class_date_obj.registration_start
|
|
|
+ class_data["registration_end"] = class_date_obj.registration_end
|
|
|
+ class_data["number_limit"] = class_date_obj.number_limit
|
|
|
+ class_data["amount_left"] = class_date_obj.amount_left
|
|
|
+
|
|
|
+ except:
|
|
|
+ pass
|
|
|
+
|
|
|
+ except:
|
|
|
+ class_data = {
|
|
|
+ "msg" : "fail to get data"
|
|
|
+ }
|
|
|
+
|
|
|
classes.append(class_data)
|
|
|
|
|
|
return {"msg": "success", "code": 200, "classes": classes}
|
|
@@ -431,27 +574,51 @@ async def search_event(
|
|
|
|
|
|
@classes.get("/get_school")
|
|
|
async def get_school(
|
|
|
- location_id : Optional[int] = None
|
|
|
+ location_id : Optional[int] = None,
|
|
|
+ keyword : Optional[str] = None,
|
|
|
+ location_keyword : Optional[str] = None,
|
|
|
+ page_num : Optional[int] = None,
|
|
|
+ page_amount : Optional[int] = None
|
|
|
):
|
|
|
try:
|
|
|
+ school_list = Schools.all()
|
|
|
+
|
|
|
if location_id :
|
|
|
- school_list = await Schools.filter(id = location_id).all()
|
|
|
- else :
|
|
|
- school_list = await Schools.all()
|
|
|
+ school_list = school_list.filter(id = location_id).all()
|
|
|
+
|
|
|
+ if keyword :
|
|
|
+ school_list = school_list.filter(Q(name__icontains=keyword)).all()
|
|
|
+
|
|
|
+ if location_keyword :
|
|
|
+ school_list = school_list.filter(Q(address__icontains=location_keyword)).all()
|
|
|
+
|
|
|
+ count = await school_list.all().count()
|
|
|
+
|
|
|
+ if page_num and page_amount:
|
|
|
+ school_list = school_list.offset((page_num-1)*page_amount).limit(page_amount)
|
|
|
+
|
|
|
+ school_list = await school_list.all().order_by("-update_time")
|
|
|
|
|
|
schools = []
|
|
|
+
|
|
|
for school_obj in school_list:
|
|
|
- school_data = {
|
|
|
- "location_id": school_obj.id,
|
|
|
- "location_name": school_obj.name,
|
|
|
- "Lng": school_obj.longitude,
|
|
|
- "Lat": school_obj.latitude,
|
|
|
- "address": school_obj.address,
|
|
|
- "update_time":school_obj.update_time
|
|
|
- }
|
|
|
- schools.append(school_data)
|
|
|
+ try :
|
|
|
+ school_data = {
|
|
|
+ "location_id": school_obj.id,
|
|
|
+ "location_name": school_obj.name,
|
|
|
+ "Lng": school_obj.longitude,
|
|
|
+ "Lat": school_obj.latitude,
|
|
|
+ "address": school_obj.address,
|
|
|
+ "update_time":school_obj.update_time
|
|
|
+ }
|
|
|
+
|
|
|
+ schools.append(school_data)
|
|
|
+
|
|
|
+ except:
|
|
|
+ schools.append({"msg : data wrong"})
|
|
|
+
|
|
|
|
|
|
- return {"msg": "success", "code": 200, "schools": schools}
|
|
|
+ return {"msg": "success", "code": 200, "total_num" : count,"schools": schools}
|
|
|
except Exception as e:
|
|
|
return {"msg": str(e), "code": 500}
|
|
|
|
|
@@ -484,6 +651,9 @@ async def get_class_name(
|
|
|
try:
|
|
|
class_name_list = Class_name.all()
|
|
|
|
|
|
+ if group_id:
|
|
|
+ class_name_list = class_name_list.filter(group_id = group_id).all()
|
|
|
+
|
|
|
if group_sort:
|
|
|
class_name_list = class_name_list.filter(group_sort = group_sort).all()
|
|
|
|
|
@@ -496,10 +666,15 @@ async def get_class_name(
|
|
|
if class_name_id :
|
|
|
class_name_list = class_name_list.filter(id = class_name_id).all()
|
|
|
|
|
|
- class_name_list = await class_name_list.all()
|
|
|
+ count = await class_name_list.all().count()
|
|
|
+
|
|
|
+ if page_num and page_amount:
|
|
|
+ class_name_list = class_name_list.offset((page_num-1)*page_amount).limit(page_amount)
|
|
|
+
|
|
|
+ class_name_list = await class_name_list.all().order_by("-id")
|
|
|
classes_name = []
|
|
|
|
|
|
- count = 0
|
|
|
+
|
|
|
for class_name_obj in class_name_list:
|
|
|
school_obj = await Schools.filter(id=class_name_obj.school_id).all()
|
|
|
school_name = ""
|
|
@@ -508,27 +683,28 @@ async def get_class_name(
|
|
|
else :
|
|
|
school_obj = await Schools.get(id=class_name_obj.school_id)
|
|
|
school_name = school_obj.name
|
|
|
- if not group_id or class_name_obj.group_id==group_id:
|
|
|
+
|
|
|
+ try:
|
|
|
+ state = await check_date_state(class_name_id=class_name_obj.id)
|
|
|
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,
|
|
|
- "group_id": class_name_obj.group_id,
|
|
|
- "cover_img": class_name_obj.cover_img,
|
|
|
- "group_sort":class_name_obj.group_sort
|
|
|
- }
|
|
|
- if page_num and page_amount:
|
|
|
- if count < page_num*page_amount and count >= (page_num-1)*page_amount :
|
|
|
- classes_name.append(class_data)
|
|
|
- count += 1
|
|
|
- elif count >= page_num*page_amount: count += 1
|
|
|
- else : count += 1
|
|
|
- else :
|
|
|
- classes_name.append(class_data)
|
|
|
- count += 1
|
|
|
+ "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,
|
|
|
+ "group_id": class_name_obj.group_id,
|
|
|
+ "cover_img": class_name_obj.cover_img,
|
|
|
+ "group_sort":class_name_obj.group_sort,
|
|
|
+ "state": state["result"]
|
|
|
+ }
|
|
|
+ except:
|
|
|
+ class_data = {
|
|
|
+ "msg" : "fail to get data"
|
|
|
+ }
|
|
|
+
|
|
|
+ classes_name.append(class_data)
|
|
|
+
|
|
|
|
|
|
return {"msg": "success", "code": 200,"total_num" : count,"classes": classes_name}
|
|
|
|
|
@@ -540,7 +716,10 @@ async def get_session(
|
|
|
event_id : Optional[int] = None
|
|
|
):
|
|
|
try:
|
|
|
- class_session_list = await Class_detail.filter(class_list_id=event_id).all()
|
|
|
+ if not event_id:
|
|
|
+ return {"msg": "please input event_id", "code": 500}
|
|
|
+
|
|
|
+ class_session_list = await Class_detail.filter(class_list_id=event_id).all().order_by("start_time")
|
|
|
|
|
|
classe_sessions = []
|
|
|
for class_session_obj in class_session_list:
|
|
@@ -567,63 +746,64 @@ async def search_class_like(keyword: str):
|
|
|
for class_obj in class_list:
|
|
|
class_name = await Class_name.get(id=class_obj.name_id)
|
|
|
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
|
|
|
-
|
|
|
+ "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)
|
|
|
|
|
|
- class_name_list = await Class_name.filter(Q(name__icontains=keyword)|Q(group_sort__icontains=keyword)).all()
|
|
|
+ class_name_list = await Class_name.filter(
|
|
|
+ Q(name__icontains=keyword)|
|
|
|
+ Q(group_sort__icontains=keyword)|
|
|
|
+ Q(category__icontains=keyword)|
|
|
|
+ Q(organizer__icontains=keyword)).all()
|
|
|
|
|
|
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
|
|
|
+ "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)
|
|
|
+ }
|
|
|
+ if class_data not in classes:
|
|
|
+ classes.append(class_data)
|
|
|
|
|
|
return {"msg": "success", "code": 200, "classes": classes}
|
|
|
except Exception as e:
|
|
@@ -793,41 +973,51 @@ async def get_group_classes_and_articles(
|
|
|
page_amount : Optional[int] = None
|
|
|
):
|
|
|
try:
|
|
|
- class_name_list = await Class_name.filter(group_id = group_id).all()
|
|
|
- article_list = await Article_list.filter(group_id = group_id).all()
|
|
|
+ class_name_list = Class_name.filter(group_id = group_id).all().order_by("-id")
|
|
|
+ article_list = Article_list.filter(group_id = group_id).all().order_by("-id")
|
|
|
+
|
|
|
+ class_count = await class_name_list.all().count()
|
|
|
+ article_count = await article_list.all().count()
|
|
|
+
|
|
|
+ if page_num and page_amount:
|
|
|
+ class_name_list = class_name_list.offset((page_num-1)*page_amount).limit(page_amount)
|
|
|
+ article_list = article_list.offset((page_num-1)*page_amount).limit(page_amount)
|
|
|
+
|
|
|
+
|
|
|
+ class_name_list = await class_name_list.all()
|
|
|
+ article_list = await article_list.all()
|
|
|
|
|
|
article_objs = []
|
|
|
- article_count = 0
|
|
|
+
|
|
|
for article_obj in article_list:
|
|
|
- article_tmp = {
|
|
|
- "article_id": article_obj.id,
|
|
|
- "title": article_obj.title,
|
|
|
- "school_id" :article_obj.school_id,
|
|
|
- "group_sort" :article_obj.group_sort,
|
|
|
- "group_id" :article_obj.group_id,
|
|
|
- "category": article_obj.category,
|
|
|
- "create_time" : article_obj.create_time,
|
|
|
- "click_time" : article_obj.click_time,
|
|
|
- "depiction" : article_obj.depiction,
|
|
|
- "content" : article_obj.content,
|
|
|
- "files" : article_obj.files,
|
|
|
- "vedio_url" : article_obj.vedio_url,
|
|
|
- "tags" : article_obj.tags,
|
|
|
- "cover_img": article_obj.cover_img
|
|
|
- }
|
|
|
- if page_num and page_amount:
|
|
|
- if article_count < page_num*page_amount and article_count >= (page_num-1)*page_amount :
|
|
|
- article_objs.append(article_tmp)
|
|
|
- article_count += 1
|
|
|
- elif article_count >= page_num*page_amount: article_count += 1
|
|
|
- else : article_count += 1
|
|
|
- else :
|
|
|
- article_objs.append(article_tmp)
|
|
|
- article_count += 1
|
|
|
+ try :
|
|
|
+ article_tmp = {
|
|
|
+ "article_id": article_obj.id,
|
|
|
+ "title": article_obj.title,
|
|
|
+ "school_id" :article_obj.school_id,
|
|
|
+ "group_sort" :article_obj.group_sort,
|
|
|
+ "group_id" :article_obj.group_id,
|
|
|
+ "category": article_obj.category,
|
|
|
+ "create_time" : article_obj.create_time,
|
|
|
+ "click_time" : article_obj.click_time,
|
|
|
+ "depiction" : article_obj.depiction,
|
|
|
+ "content" : article_obj.content,
|
|
|
+ "files" : article_obj.files,
|
|
|
+ "vedio_url" : article_obj.vedio_url,
|
|
|
+ "tags" : article_obj.tags,
|
|
|
+ "cover_img": article_obj.cover_img
|
|
|
+ }
|
|
|
+ except:
|
|
|
+ article_tmp = {
|
|
|
+ "msg" : "fail to get data"
|
|
|
+ }
|
|
|
+
|
|
|
+ article_objs.append(article_tmp)
|
|
|
+
|
|
|
|
|
|
classes_name = []
|
|
|
|
|
|
- class_count = 0
|
|
|
+
|
|
|
for class_name_obj in class_name_list:
|
|
|
school_obj = await Schools.filter(id=class_name_obj.school_id).all()
|
|
|
school_name = ""
|
|
@@ -836,7 +1026,7 @@ async def get_group_classes_and_articles(
|
|
|
else :
|
|
|
school_obj = await Schools.get(id=class_name_obj.school_id)
|
|
|
school_name = school_obj.name
|
|
|
- if not group_id or class_name_obj.group_id==group_id:
|
|
|
+ try:
|
|
|
class_data = {
|
|
|
"class_name_id": class_name_obj.id,
|
|
|
"name": class_name_obj.name,
|
|
@@ -848,17 +1038,128 @@ async def get_group_classes_and_articles(
|
|
|
"cover_img": class_name_obj.cover_img,
|
|
|
"group_sort":class_name_obj.group_sort
|
|
|
}
|
|
|
- if page_num and page_amount:
|
|
|
- if class_count < page_num*page_amount and class_count >= (page_num-1)*page_amount :
|
|
|
- classes_name.append(class_data)
|
|
|
- class_count += 1
|
|
|
- elif class_count >= page_num*page_amount: class_count += 1
|
|
|
- else : class_count += 1
|
|
|
- else :
|
|
|
- classes_name.append(class_data)
|
|
|
- class_count += 1
|
|
|
+
|
|
|
+ except:
|
|
|
+ class_data ={
|
|
|
+ "msg" : "fail to get data"
|
|
|
+ }
|
|
|
+
|
|
|
+ classes_name.append(class_data)
|
|
|
+
|
|
|
|
|
|
return {"msg": "success", "code": 200,"class_num" : class_count,"classes": classes_name,"article_num":article_count,"articles": article_objs}
|
|
|
|
|
|
except Exception as e:
|
|
|
- return {"msg": str(e), "code": 500}
|
|
|
+ return {"msg": str(e), "code": 500}
|
|
|
+
|
|
|
+@classes.post("/add_attend_record")
|
|
|
+async def add_attend_record(
|
|
|
+ class_detail_id : int = Form(default=0),
|
|
|
+ user_id : int = Form(default=0),
|
|
|
+ is_attend : int = Form(default=0)
|
|
|
+):
|
|
|
+ try:
|
|
|
+ if not class_detail_id or not user_id:
|
|
|
+ return {"msg": "Please input right ","code":500}
|
|
|
+
|
|
|
+ try:
|
|
|
+ class_detail_obj = await Class_detail.filter(id = class_detail_id).all()
|
|
|
+ if not class_detail_obj:
|
|
|
+ return {"msg": "no this class_detail_id","code":500}
|
|
|
+ except:
|
|
|
+ return {"msg": "get class_detail_id error","code":500}
|
|
|
+
|
|
|
+ new_record = await Attend_record.get_or_create(
|
|
|
+ class_detail_id = class_detail_id,
|
|
|
+ user_id = user_id,
|
|
|
+ defaults = {
|
|
|
+ "is_attend" : is_attend
|
|
|
+ }
|
|
|
+ )
|
|
|
+
|
|
|
+ return {"msg": "success", "code": 200,"new_record_id":new_record[0].id}
|
|
|
+
|
|
|
+ except Exception as e:
|
|
|
+ return {"msg": str(e), "code": 500}
|
|
|
+
|
|
|
+@classes.post("/delete_attend_record")
|
|
|
+async def delete_attend_record(
|
|
|
+ id : int = 0
|
|
|
+):
|
|
|
+ try :
|
|
|
+ await Attend_record.filter(id=id).delete()
|
|
|
+ return {"msg": "success", "code": 200}
|
|
|
+ except Exception as e:
|
|
|
+ return {"msg": str(e), "code": 500}
|
|
|
+
|
|
|
+@classes.get("/update_attend_record")
|
|
|
+async def update_attend_record(
|
|
|
+ id : int = 0,
|
|
|
+ class_detail_id : Optional[int] = None,
|
|
|
+ user_id : Optional[int] = None,
|
|
|
+ is_attend : Optional[int] = None
|
|
|
+):
|
|
|
+ if not id :
|
|
|
+ return {"msg":"please input id"}
|
|
|
+
|
|
|
+ try :
|
|
|
+ tmp = await Attend_record.get(id=id)
|
|
|
+
|
|
|
+ if class_detail_id!=None:
|
|
|
+ tmp.class_detail_id = class_detail_id
|
|
|
+
|
|
|
+ if user_id!=None:
|
|
|
+ tmp.user_id = user_id
|
|
|
+
|
|
|
+ if is_attend!=None:
|
|
|
+ tmp.is_attend = is_attend
|
|
|
+
|
|
|
+ await tmp.save()
|
|
|
+
|
|
|
+ return {"msg": "success", "code": 200}
|
|
|
+ except Exception as e:
|
|
|
+ return {"msg": str(e), "code": 500}
|
|
|
+
|
|
|
+
|
|
|
+@classes.get("/get_attend_record")
|
|
|
+async def get_attend_record(
|
|
|
+ class_event_id : Optional[int] = None,
|
|
|
+ class_detail_id : Optional[int] = None,
|
|
|
+ user_id : Optional[int] = None,
|
|
|
+ is_attend : Optional[int] = None
|
|
|
+):
|
|
|
+ try:
|
|
|
+ attend_record_list = Attend_record.all()
|
|
|
+
|
|
|
+ if class_event_id:
|
|
|
+ id_list = []
|
|
|
+ class_detail_list = await Class_detail.filter(class_list_id = class_event_id)
|
|
|
+ for tmp in class_detail_list :
|
|
|
+ id_list.append(tmp.id)
|
|
|
+ attend_record_list = Attend_record.filter(class_detail_id__in=id_list)
|
|
|
+
|
|
|
+
|
|
|
+ if class_detail_id:
|
|
|
+ attend_record_list = attend_record_list.filter(class_detail_id = class_detail_id)
|
|
|
+
|
|
|
+ if user_id :
|
|
|
+ attend_record_list = attend_record_list.filter(user_id = user_id)
|
|
|
+
|
|
|
+ if is_attend :
|
|
|
+ attend_record_list = attend_record_list.filter(is_attend = is_attend)
|
|
|
+
|
|
|
+ attend_record_list = await attend_record_list.all()
|
|
|
+ attend_records = []
|
|
|
+
|
|
|
+ for obj in attend_record_list:
|
|
|
+ data = {
|
|
|
+ "id" :obj.id,
|
|
|
+ "class_detail_id" :obj.class_detail_id,
|
|
|
+ "user_id" :obj.user_id,
|
|
|
+ "is_attend" :obj.is_attend
|
|
|
+ }
|
|
|
+ attend_records.append(data)
|
|
|
+
|
|
|
+ return {"msg": "success", "code": 200,"attend_record_list":attend_records}
|
|
|
+ except Exception as e:
|
|
|
+ return {"msg": str(e), "code": 500}
|