|
@@ -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,Class_date,Attend_record,One_day_class
|
|
|
+from app.models.models import User,Favorite_course,Article_list,Class_date,Attend_record,One_day_class,Outter_class_list
|
|
|
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
|
|
@@ -531,10 +531,13 @@ async def check_date_state(
|
|
|
|
|
|
if special_class_list_name == "one_day_class":
|
|
|
class_list = await One_day_class.filter(Q_word).all()
|
|
|
+ elif special_class_list_name == "outter_class_list":
|
|
|
+ class_list = await Outter_class_list.filter(Q_word).all()
|
|
|
else :
|
|
|
class_list = await Class_list.filter(Q_word).all()
|
|
|
|
|
|
- result = {"state": "尚未開放報名"}
|
|
|
+
|
|
|
+ result = {"state": "尚未開放報名(詳情請見官網)"}
|
|
|
try:
|
|
|
for class_obj in class_list:
|
|
|
try:
|
|
@@ -621,6 +624,15 @@ async def search_event(
|
|
|
state["result"] = {
|
|
|
"state" : "fail to get data"
|
|
|
}
|
|
|
+ elif special_class_list_name=='outter_class_list':
|
|
|
+ class_list = Outter_class_list.filter(Q_word).all().order_by("-start_time")
|
|
|
+ # model_fields = [attr for attr in dir(One_day_class) if isinstance(getattr(One_day_class, attr), fields.Field)]
|
|
|
+ try:
|
|
|
+ state = await check_date_state(class_name_id=class_name_id,special_class_list_name=special_class_list_name)
|
|
|
+ except:
|
|
|
+ state["result"] = {
|
|
|
+ "state" : "fail to get data"
|
|
|
+ }
|
|
|
|
|
|
|
|
|
class_list = await class_list.all()
|
|
@@ -793,13 +805,11 @@ async def get_class_name(
|
|
|
special_class_list_name = None
|
|
|
|
|
|
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 :
|
|
|
+ try:
|
|
|
school_obj = await Schools.get(id=class_name_obj.school_id)
|
|
|
- school_name = school_obj.name
|
|
|
+ school_obj_id = school_obj.id
|
|
|
+ except:
|
|
|
+ school_obj_id = 0
|
|
|
|
|
|
try:
|
|
|
|
|
@@ -811,7 +821,10 @@ async def get_class_name(
|
|
|
state = await check_date_state(class_name_id=class_name_obj.id)
|
|
|
|
|
|
class_data = class_name_obj.show_data()
|
|
|
- class_data["school"]=school_name
|
|
|
+ if school_obj_id:
|
|
|
+ for key, item in school_obj.show_data().items():
|
|
|
+ class_data[key] = item
|
|
|
+
|
|
|
class_data["state"]=state["result"]["state"]
|
|
|
except Exception as e:
|
|
|
class_data = {
|
|
@@ -853,74 +866,108 @@ async def get_session(
|
|
|
return {"msg": str(e), "code": 500}
|
|
|
|
|
|
@classes.get("/search_class_like")
|
|
|
-async def search_class_like(keyword: str):
|
|
|
+async def search_class_like(
|
|
|
+ keyword: str,
|
|
|
+ location_id : Optional[int] = None ,
|
|
|
+ group_id : Optional[int] = None,
|
|
|
+ group_sort :Optional[str] = None,
|
|
|
+ exclude_word: Optional[str] = None,
|
|
|
+ category :Optional[str] = None,
|
|
|
+ page_num : Optional[int] = None,
|
|
|
+ page_amount : Optional[int] = None,
|
|
|
+ recommend : Optional[int] = None,
|
|
|
+ is_inner : Optional[int] = None,
|
|
|
+ is_check : Optional[int] = None
|
|
|
+):
|
|
|
try:
|
|
|
- class_list = await Class_list.filter(Q(lecturer__icontains=keyword)).all()
|
|
|
+ Q_word = Q()
|
|
|
|
|
|
- classes = []
|
|
|
- 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)
|
|
|
+ if group_id:
|
|
|
+ Q_word = Q_word & Q(group_id = group_id)
|
|
|
+
|
|
|
+ if group_sort:
|
|
|
+ Q_word = Q_word & Q(group_sort = group_sort)
|
|
|
+
|
|
|
+ if category:
|
|
|
+ for tmp_word in category.split(",") :
|
|
|
+ Q_word = Q_word | Q(category__icontains=tmp_word)
|
|
|
+
|
|
|
+ if location_id :
|
|
|
+ Q_word = Q_word & Q(school_id = location_id)
|
|
|
+
|
|
|
+ if recommend :
|
|
|
+ Q_word = Q_word & Q(recommend = recommend)
|
|
|
+
|
|
|
+ if is_inner!=None:
|
|
|
+ Q_word = Q_word & Q(is_inner = is_inner)
|
|
|
+
|
|
|
+ if is_check!=None:
|
|
|
+ Q_word = Q_word & Q(is_check = is_check)
|
|
|
|
|
|
- class_data = {
|
|
|
- "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_id = []
|
|
|
+
|
|
|
+ for class_list in await Class_list.filter(Q(lecturer__icontains=keyword)):
|
|
|
+ class_name_id.append(class_list.name_id)
|
|
|
+
|
|
|
+ for class_list in await One_day_class.filter(Q(teacher__icontains=keyword)):
|
|
|
+ class_name_id.append(class_list.name_id)
|
|
|
+
|
|
|
+ if keyword :
|
|
|
+ Q_word = Q_word & ( Q(name__icontains=keyword)|
|
|
|
+ Q(category__icontains=keyword)|
|
|
|
+ Q(introduction__icontains=keyword)|
|
|
|
+ Q(organizer__icontains=keyword)|
|
|
|
+ Q(group_sort__icontains=keyword) |
|
|
|
+ Q(id__in=class_name_id))
|
|
|
|
|
|
- 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_name_list = Class_name.filter(Q_word).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)
|
|
|
+
|
|
|
+ if exclude_word:
|
|
|
+ for tmp_word in exclude_word.split(",") :
|
|
|
+ # print(tmp_word)
|
|
|
+ class_name_list = class_name_list.exclude(Q(category__icontains=tmp_word)|Q(group_sort__icontains=tmp_word)).all()
|
|
|
+
|
|
|
+ class_name_list = await class_name_list.all().order_by("-id")
|
|
|
+ classes_name = []
|
|
|
+ state = {}
|
|
|
+ special_class_list_name = None
|
|
|
+
|
|
|
+ for class_name_obj in class_name_list:
|
|
|
+ try:
|
|
|
+ school_obj = await Schools.get(id=class_name_obj.school_id)
|
|
|
+ school_obj_id = school_obj.id
|
|
|
+ except:
|
|
|
+ school_obj_id = 0
|
|
|
+
|
|
|
+ try:
|
|
|
+
|
|
|
+ special_class_list_name = class_name_obj.special_class_list_name
|
|
|
+
|
|
|
+ if special_class_list_name:
|
|
|
+ state = await check_date_state(class_name_id=class_name_obj.id,special_class_list_name=special_class_list_name)
|
|
|
+ else:
|
|
|
+ state = await check_date_state(class_name_id=class_name_obj.id)
|
|
|
+
|
|
|
+ class_data = class_name_obj.show_data()
|
|
|
+ if school_obj_id:
|
|
|
+ for key, item in school_obj.show_data().items():
|
|
|
+ class_data[key] = item
|
|
|
+
|
|
|
+ class_data["state"]=state["result"]["state"]
|
|
|
+ except Exception as e:
|
|
|
class_data = {
|
|
|
- "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
|
|
|
+ "msg" : str(e)
|
|
|
+ }
|
|
|
+ classes_name.append(class_data)
|
|
|
|
|
|
- }
|
|
|
- if class_data not in classes:
|
|
|
- classes.append(class_data)
|
|
|
+ return {"msg": "success", "code": 200, "total_num" : count,"classes": classes_name}
|
|
|
|
|
|
- return {"msg": "success", "code": 200, "classes": classes}
|
|
|
except Exception as e:
|
|
|
return {"msg": str(e), "code": 500}
|
|
|
|
|
@@ -969,10 +1016,15 @@ async def get_favorite_class(
|
|
|
}
|
|
|
|
|
|
result = await get_class_name(class_name_id = class_obj.class_name_id)
|
|
|
- class_detail = result["classes"][0]
|
|
|
- for class_tmp in class_detail.items():
|
|
|
- class_data[class_tmp[0]] = class_tmp[1]
|
|
|
- favorite_courses.append(class_data)
|
|
|
+ try:
|
|
|
+ class_detail = result["classes"][0]
|
|
|
+ for key,item in class_detail.items():
|
|
|
+ class_data[key] = item
|
|
|
+ favorite_courses.append(class_data)
|
|
|
+ except:
|
|
|
+ class_data["msg"] = "this class doesn't exit"
|
|
|
+ favorite_courses.append(class_data)
|
|
|
+
|
|
|
|
|
|
return {"msg": "success", "code": 200, "favorite_courses": favorite_courses}
|
|
|
except Exception as e:
|
|
@@ -1154,31 +1206,32 @@ async def get_group_classes_and_articles(
|
|
|
|
|
|
|
|
|
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 :
|
|
|
+ try:
|
|
|
school_obj = await Schools.get(id=class_name_obj.school_id)
|
|
|
- school_name = school_obj.name
|
|
|
+ school_obj_id = school_obj.id
|
|
|
+ except:
|
|
|
+ school_obj_id = 0
|
|
|
+
|
|
|
try:
|
|
|
- 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
|
|
|
- }
|
|
|
+
|
|
|
+ special_class_list_name = class_name_obj.special_class_list_name
|
|
|
+
|
|
|
+ if special_class_list_name:
|
|
|
+ state = await check_date_state(class_name_id=class_name_obj.id,special_class_list_name=special_class_list_name)
|
|
|
+ else:
|
|
|
+ state = await check_date_state(class_name_id=class_name_obj.id)
|
|
|
|
|
|
- except:
|
|
|
- class_data ={
|
|
|
- "msg" : "fail to get data"
|
|
|
+ class_data = class_name_obj.show_data()
|
|
|
+ if school_obj_id:
|
|
|
+ for key, item in school_obj.show_data().items():
|
|
|
+ class_data[key] = item
|
|
|
+
|
|
|
+ class_data["state"]=state["result"]["state"]
|
|
|
+ except Exception as e:
|
|
|
+ class_data = {
|
|
|
+ "msg" : str(e)
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
classes_name.append(class_data)
|
|
|
|
|
|
|