Browse Source

model 呈現方式

Mia Cheng 1 year ago
parent
commit
2736a07d64
4 changed files with 214 additions and 111 deletions
  1. 2 1
      app/api/article.py
  2. 83 59
      app/api/classes.py
  3. 3 3
      app/api/registration.py
  4. 126 48
      app/models/models.py

+ 2 - 1
app/api/article.py

@@ -127,6 +127,7 @@ async def insert_article(
     content : str = Form(default=''),
     depiction :str = Form(default=''),
     vedio_url :str = Form(default=''),
+    files : str = Form(default='{}'),
     cover_img_file:UploadFile = File(default=''),
     url : str = Form(default='')
 ):
@@ -159,7 +160,7 @@ async def insert_article(
             click_time = 0,
             is_del = 0,
             url = url ,
-            files = str({})
+            files = files
         )
         
         return {"msg": "success", "code": 200, "new_article": new_article.id}

+ 83 - 59
app/api/classes.py

@@ -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
+from app.models.models import User,Favorite_course,Article_list,Class_date,Attend_record,One_day_class
 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
@@ -70,12 +70,14 @@ async def insert_school(
 async def insert_class_name(
     name: str = Form(default=''),
     location_id: int = Form(default=1),
-    category: str = Form(default=''),
-    introduction: str = Form(default=''),
-    organizer: str = Form(default=''),
+    category: str = Form(default='詳細 請至觀看課程資訊 查看'),
+    introduction: str = Form(default='詳細 請至觀看課程資訊 查看'),
+    organizer: str = Form(default='詳細 請至觀看課程資訊 查看'),
     cover_img_file:UploadFile = File(default=''),
     group_id : int = Form(default=1),
-    group_sort :str = Form(default='')
+    group_sort :str = Form(default='詳細 請至觀看課程資訊 查看'),
+    recommend: int = Form(default=0),
+    special_class_list_name : str = Form(default=None)
 ):    
     try:
         cover_img = ''
@@ -96,7 +98,9 @@ async def insert_class_name(
             organizer=organizer,
             cover_img=cover_img,
             group_id=group_id,
-            group_sort=group_sort
+            group_sort=group_sort,
+            recommend = recommend,
+            special_class_list_name = special_class_list_name
         )
         update_location_time(location_id= location_id)
         return {"msg": "success", "code": 200, "new_class_name_id": new_class_name.id}
@@ -106,21 +110,21 @@ async def insert_class_name(
 @classes.post("/insert_event")
 async def insert_event(
     name_id: int = Form(default=0),
-    event: str = Form(default=''),
+    event: str = Form(default='詳細 請至觀看課程資訊 查看'),
     start_time: datetime = Form(default=datetime.now()),
     end_time: datetime = Form(default=datetime.now()),
-    contact: str = Form(default=''),
-    lecturer: str = Form(default=''),
-    location: str = Form(default=''),
-    content: str = Form(default=''),
-    URL: str = Form(default=''), 
-    people : str = Form(default=''),
-    fee_method: str = Form(default=''),
-    registration_way: str = Form(default=''),
+    contact: str = Form(default='詳細 請至觀看課程資訊 查看'),
+    lecturer: str = Form(default='詳細 請至觀看課程資訊 查看'),
+    location: str = Form(default='詳細 請至觀看課程資訊 查看'),
+    content: str = Form(default='詳細 請至觀看課程資訊 查看'),
+    URL: str = Form(default='詳細 請至觀看課程資訊 查看'), 
+    people : str = Form(default='詳細 請至觀看課程資訊 查看'),
+    fee_method: str = Form(default='詳細 請至觀看課程資訊 查看'),
+    registration_way: 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='')
+    remark : str = Form(default='詳細 請至觀看課程資訊 查看')
 ):    
     try:
 
@@ -197,7 +201,6 @@ async def auto_create_session(
         return {"msg": "success", "code": 200}
     except Exception as e:
         return {"msg": str(e), "code": 500}
-        
 
 @classes.post("/insert_session")
 async def insert_session(
@@ -266,7 +269,10 @@ async def update_class_name(
     organizer: str = Form(default=''),
     cover_img_file:UploadFile = File(default=''),
     group_id : int = Form(default=0),
-    group_sort : str = Form(default='')
+    group_sort : str = Form(default=''),
+    recommend: int = Form(default=None),
+    special_class_list_name : str = Form(default=None)
+
 ):
     try:
         class_name = await Class_name.get(id=class_name_id)
@@ -301,6 +307,12 @@ async def update_class_name(
         if group_sort != '':
             class_name.group_sort = group_sort
 
+        if recommend:
+            class_name.recommend = recommend
+
+        if special_class_list_name:
+            class_name.special_class_list_name = special_class_list_name
+
         await class_name.save()
 
         
@@ -481,6 +493,7 @@ async def check_date_state(
     result = {"reg": "尚未開放報名", "start_class":"課程尚未開始"}
     class_check = True
     reg_check = True
+    data= []
     try:
         for class_obj in class_list:
             if class_check:
@@ -518,13 +531,30 @@ async def search_event(
     event_id : Optional[int] = None
 ):
     try:
-        if event_id :
-            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().order_by("-start_time")
+        try :
+            class_name_obj = await Class_name.get(id=class_name_id)
+        except:
+            return {"msg": "no this class id", "code": 500}
+        
+        special_class_list_name = class_name_obj.special_class_list_name
+
+        Q_word = Q()
+
+        if class_name_id:
+            Q_word = Q_word | Q(name_id = class_name_id)
+        elif event_id:
+            Q_word = Q_word | Q(id = event_id)
         else :
             return {"msg": "please input class_name_id or event_id", "code": 200}
 
+        if special_class_list_name==None:
+            class_list = Class_list.filter(Q_word).all().order_by("-start_time")
+        elif  special_class_list_name=='one_day_class':
+                class_list = One_day_class.filter(Q_word).all().order_by("-start_time")
+                
+        
+        class_list = await class_list.all()
+
         classes = []
         for class_obj in class_list:
             class_name_obj = await Class_name.get(id=class_obj.name_id)
@@ -532,24 +562,10 @@ async def search_event(
 
             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"]
-                }
+
+                class_data = class_obj.show_data()
+                class_data["class_name"] = class_name
+                class_data["state"] = state["result"]
 
                 try:
                     class_date_obj = await Class_date.get(class_list_id=class_obj.id)
@@ -644,33 +660,50 @@ async def get_class_name(
     class_name_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
+    page_amount : Optional[int] = None,
+    recommend : Optional[int] = None
 ):
     try:
         class_name_list = Class_name.all()
+        Q_word = Q()
 
         if group_id:
-            class_name_list = class_name_list.filter(group_id = group_id).all()
+            Q_word = Q_word | Q(group_id = group_id)
 
         if group_sort:
-            class_name_list = class_name_list.filter(group_sort = group_sort).all()
+            Q_word = Q_word | Q(group_sort = group_sort)
         
         if category:
-            class_name_list = class_name_list.filter(Q(category__icontains=category)).all()
-        
+            for tmp_word in category.split(",") :
+                Q_word = Q_word | Q(category__icontains=tmp_word) 
+
         if location_id :
-            class_name_list = class_name_list.filter(school_id = location_id).all()
+            Q_word = Q_word | Q(school_id = location_id)
 
         if class_name_id :
-            class_name_list = class_name_list.filter(id = class_name_id).all()
+            Q_word = Q_word | Q(id = class_name_id)
+
+        if recommend :
+            Q_word = Q_word | Q(recommend = recommend)
+
+        class_name_list = class_name_list.filter(Q_word).all()
+
+        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()
+        
 
         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 = []
 
@@ -686,18 +719,9 @@ async def get_class_name(
             
             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,
-                        "state": state["result"]
-                        }
+                class_data = class_name_obj.show_data()
+                class_data["school"]=school_name  
+                class_data["state"]=state["result"]
             except:
                 class_data = {
                     "msg" : "fail to get data"

+ 3 - 3
app/api/registration.py

@@ -286,12 +286,12 @@ async def input_registration(
 ): 
     try :
         if not user_id :
-            return  {"msg": "please log in", "code": 200}
+            return  {"msg": "please log in", "code": 500}
         
         try:
             await Class_list.get(id = event_id)
         except Exception as e:
-            return {"msg": "no this event", "code": 200}
+            return {"msg": "no this event", "code": 500}
 
         # if check_if_id_exeit(User_information,user_inform_id):
         #     return {"msg": "no user information", "code": 200}
@@ -301,7 +301,7 @@ async def input_registration(
         try:
             await User_information.get(user_id=user_id)
         except:
-            return  {"msg": "no user information", "code": 200}
+            return  {"msg": "no user information", "code": 500}
         
         new_registration = await Registration.get_or_create(
             event_id = event_id,

+ 126 - 48
app/models/models.py

@@ -48,6 +48,16 @@ class Schools(Model):
     address = fields.CharField(max_length=128,description="地址")
     update_time = fields.DatetimeField(description="更新時間")
 
+    def show_data(self):
+        return {
+            "location_id": self.id,
+            "location_name": self.name,
+            "Lng": self.longitude,
+            "Lat": self.latitude,
+            "address": self.address,
+            "update_time":self.update_time
+        }
+
 class Group_name(Model):
     id =  fields.IntField(pk=True)
     group_name = fields.CharField(max_length=45, description="學群名稱")
@@ -57,27 +67,61 @@ class Class_name(Model):
     name = fields.CharField(max_length=45, description="課程名稱")
     school_id = fields.IntField(description="學校ID")
     category = fields.CharField(max_length=45, description="分類")
-    introduction = fields.TextField(description="簡介")
-    organizer = fields.CharField(max_length=45, description="主辦單位")
-    cover_img = fields.CharField(max_length=255, description="封面圖片")
+    introduction = fields.TextField(description="簡介", null=True)
+    organizer = fields.CharField(max_length=45, description="主辦單位", null=True)
+    cover_img = fields.CharField(max_length=255, description="封面圖片", null=True)
     group_id = fields.IntField(description="學群")
     group_sort = fields.CharField(max_length=45, description="學群細分")
+    special_class_list_name = fields.CharField(max_length=45, description="特殊表格", null=True)
+    recommend = fields.IntField(description="是否在首頁")
+
+    def show_data(self):
+        return {
+            "class_name_id": self.id,
+            "name": self.name,
+            "category": self.category,
+            "introduction": self.introduction,
+            "organizer": self.organizer,
+            "group_id": self.group_id,
+            "cover_img": self.cover_img,
+            "group_sort":self.group_sort,
+            "recommend" : self.recommend
+        }
+
 
 class Class_list(Model):
     id = fields.IntField(pk=True)
     name_id = fields.IntField(description="課程名稱ID")
-    event = fields.CharField(max_length=45, description="場次")
-    start_time = fields.DatetimeField(description="開始時間")
-    end_time = fields.DatetimeField(description="結束時間")
-    contact = fields.CharField(max_length=255, description="聯絡方式")
-    lecturer = fields.CharField(max_length=255, description="講師")
-    location = fields.CharField(max_length=255, description="地點詳情")
-    content = fields.TextField(description="內容")
-    URL = fields.TextField(description="連結網址")
-    people = fields.CharField(max_length=255, description="對象")
-    fee_method = fields.CharField(max_length=255, description="收費方式")
-    registration_way = fields.CharField(max_length=255, description="報名方式")
-    remark = fields.TextField(description="備註")
+    event = fields.CharField(max_length=45, description="場次", null=True)
+    start_time = fields.DatetimeField(description="開始時間", null=True)
+    end_time = fields.DatetimeField(description="結束時間", null=True)
+    contact = fields.CharField(max_length=255, description="聯絡方式", null=True)
+    lecturer = fields.CharField(max_length=255, description="講師", null=True)
+    location = fields.CharField(max_length=255, description="地點詳情", null=True)
+    content = fields.TextField(description="內容", null=True)
+    URL = fields.TextField(description="連結網址", null=True)
+    people = fields.CharField(max_length=255, description="對象", null=True)
+    fee_method = fields.CharField(max_length=255, description="收費方式", null=True)
+    registration_way = fields.CharField(max_length=255, description="報名方式", null=True)
+    remark = fields.TextField(description="備註", null=True)
+
+    def show_data(self):
+        return {
+            "event_id": self.id,
+            "name_id": self.name_id,
+            "event": self.event,
+            "start_time": self.start_time,
+            "end_time": self.end_time,
+            "location": self.location,
+            "lecturer": self.lecturer,
+            "contact": self.contact,
+            "content": self.content,
+            "URL": self.URL,
+            "people": self.people,
+            "fee_method": self.fee_method,
+            "registration_way": self.registration_way,
+            "remark": self.remark
+        }
 
 
 class Class_detail(Model):
@@ -86,7 +130,7 @@ class Class_detail(Model):
     start_time = fields.DatetimeField(description="開始時間")
     end_time = fields.DatetimeField(description="結束時間")
     sessions = fields.IntField(description="堂數")
-    content = fields.TextField(description="內容")
+    content = fields.TextField(description="內容", null=True)
 
 class Registration(Model):
     id = fields.IntField(pk=True)
@@ -99,14 +143,14 @@ class Registration(Model):
 class News(Model):
     id = fields.IntField(pk=True)
     title = fields.CharField(max_length=200, description="標題")
-    category = fields.CharField(max_length=45, description="類別")
+    category = fields.CharField(max_length=45, description="類別", null=True)
     create_time = fields.DatetimeField(description="發布時間")
-    click_time = fields.IntField(description="點擊次數")
-    content = fields.TextField(description="內容")
-    files = fields.TextField(description="附加檔案")
-    URL = fields.TextField(description="外部連結")
-    tags = fields.TextField(description="標籤")
-    cover_img = fields.CharField(max_length=255, description="封面圖片")
+    click_time = fields.IntField(description="點擊次數", null=True)
+    content = fields.TextField(description="內容", null=True)
+    files = fields.TextField(description="附加檔案", null=True)
+    URL = fields.TextField(description="外部連結", null=True)
+    tags = fields.TextField(description="標籤", null=True)
+    cover_img = fields.CharField(max_length=255, description="封面圖片", null=True)
 
 class Favorite_course(Model):
     id = fields.IntField(pk=True)
@@ -117,33 +161,33 @@ class Favorite_course(Model):
 class Article_list(Model):
     id = fields.IntField(pk=True)
     title = fields.CharField(max_length=45, description="標題")
-    school_id = fields.IntField(description="學校ID")
-    group_id = fields.IntField(description="學群")
-    group_sort = fields.CharField(max_length=45, description="學群細分")
-    create_user_id = fields.IntField(description="創建使用者ID")
-    create_time = fields.DatetimeField(description="創建時間")
-    latest_update_user_id = fields.IntField(description="最新更新使用者ID")
-    latest_update_time = fields.DatetimeField(description="最新更新時間")
-    tags = fields.TextField(description="標籤")
-    category = fields.CharField(max_length=45, description="類別")
-    depiction = fields.TextField(description="文章描述")
-    cover_img = fields.TextField( description="封面圖片")
-    vedio_url = fields.TextField( description="影片連結")
-    click_time = fields.IntField(description="點擊次數")
-    content = fields.TextField(description="內容")
+    school_id = fields.IntField(description="學校ID", null=True)
+    group_id = fields.IntField(description="學群", null=True)
+    group_sort = fields.CharField(max_length=45, description="學群細分", null=True)
+    create_user_id = fields.IntField(description="創建使用者ID", null=True)
+    create_time = fields.DatetimeField(description="創建時間", null=True)
+    latest_update_user_id = fields.IntField(description="最新更新使用者ID", null=True)
+    latest_update_time = fields.DatetimeField(description="最新更新時間", null=True)
+    tags = fields.TextField(description="標籤", null=True)
+    category = fields.CharField(max_length=45, description="類別", null=True)
+    depiction = fields.TextField(description="文章描述", null=True)
+    cover_img = fields.TextField( description="封面圖片", null=True)
+    vedio_url = fields.TextField( description="影片連結", null=True)
+    click_time = fields.IntField(description="點擊次數", null=True)
+    content = fields.TextField(description="內容", null=True)
     is_del = fields.IntField(description="是否刪除")
-    files = fields.TextField(description="附件")
-    url = fields.TextField(description="文章連結")
+    files = fields.TextField(description="附件", null=True)
+    url = fields.TextField(description="文章連結", null=True)
 
 class Online_course(Model):
     id = fields.IntField(pk=True)
     title = fields.CharField(max_length=45, description="標題")
-    category = fields.CharField(max_length=45, description="類別")
+    category = fields.CharField(max_length=45, description="類別", null=True)
     create_time = fields.DatetimeField(description="發布時間")
-    click_time = fields.IntField(description="點擊次數")
-    content = fields.TextField(description="發布時間")
+    click_time = fields.IntField(description="點擊次數", null=True)
+    content = fields.TextField(description="發布時間", null=True)
     vedio_url = fields.TextField(description="影片連結")
-    group_id = fields.IntField(description="學群")
+    group_id = fields.IntField(description="學群", null=True)
 
 class Guidance_group(Model):
     id = fields.IntField(pk=True)
@@ -173,13 +217,47 @@ class User_information(Model):
 class Class_date(Model):
     id = fields.IntField(pk=True)
     class_list_id = fields.IntField(description="場次ID")
-    registration_start = fields.DatetimeField(description="報名時間開始")
-    registration_end = fields.DatetimeField(description="報名時間結束")
-    number_limit = fields.IntField(description="名額")
-    amount_left = fields.IntField(description="剩餘名額")
+    registration_start = fields.DatetimeField(description="報名時間開始", null=True)
+    registration_end = fields.DatetimeField(description="報名時間結束", null=True)
+    number_limit = fields.IntField(description="名額", null=True)
+    amount_left = fields.IntField(description="剩餘名額", null=True)
 
 class Attend_record(Model):
     id = fields.IntField(pk=True)
     class_detail_id = fields.IntField(description="課堂ID")
     user_id = fields.IntField(description="使用者ID")
-    is_attend = fields.IntField(description="是否已出席(1:是、0:否)")
+    is_attend = fields.IntField(description="是否已出席(1:是、0:否)")
+
+class One_day_class(Model):
+    id = fields.IntField(pk=True)
+    name_id = fields.IntField(description="課程名稱")
+    teacher = fields.CharField(max_length=100, description="老師", null=True)
+    contact = fields.CharField(max_length=100, description="聯絡方式", null=True)
+    start_time = fields.DatetimeField(description="開始時間", null=True)
+    end_time = fields.DatetimeField(description="結束時間", null=True)
+    reg_deadline = fields.DatetimeField(description="報名結束時間", null=True)
+    remark = fields.TextField(description="備註", null=True)
+    people = fields.CharField(max_length=255, description="對象", null=True)
+    way = fields.CharField(max_length=45, description="上課方式", null=True)
+    fee_method = fields.TextField(description="收費方式", null=True)
+    material = fields.TextField(description="材料", null=True)
+    tools = fields.TextField(description="材料", null=True)
+    number_limit = fields.TextField(description="人數限制", null=True)
+
+    def show_data(self):
+        return {
+            "id" : self.id,
+            "name_id": self.name_id,
+            "teacher": self.teacher,
+            "contact": self.contact,
+            "start_time": self.start_time,
+            "end_time": self.end_time,
+            "reg_deadline": self.reg_deadline,
+            "remark": self.remark,
+            "people": self.people,
+            "way": self.way,
+            "material": self.material,
+            "tools": self.tools,
+            "number_limit": self.number_limit
+        }
+