Jelajahi Sumber

Merge remote-tracking branch 'origin/master'

zooey 1 tahun lalu
induk
melakukan
815d8104fa
3 mengubah file dengan 130 tambahan dan 19 penghapusan
  1. 53 11
      app/api/guidance.py
  2. 61 8
      app/api/news.py
  3. 16 0
      app/models/models.py

+ 53 - 11
app/api/guidance.py

@@ -36,12 +36,18 @@ async def get_guidance_group(
             "contact_person": news_obj.contact_person,
             "contact_phone" : news_obj.contact_phone,
             "line" : news_obj.line,
-            "online_meet" : news_obj.online_meet,
-            "remark" : news_obj.remark
+            "remark" : news_obj.remark,
+            "address" : news_obj.address,
+            "email" : news_obj.email,
+            "information" : news_obj.information,
+            "request" : news_obj.request,
+            "schedule": news_obj.schedule,
+            "result" : news_obj.result,
+            "person" : news_obj.person
         }
             news_objs.append(news_tmp)
 
-        return {"msg": "success", "code": 200, "Guidance groups": news_objs}
+        return {"msg": "success", "code": 200, "Guidance_groups": news_objs}
     except Exception as e:
         return {"msg": str(e), "code": 500}
 
@@ -51,8 +57,14 @@ async def insert_news(
     contact_person : str = Form(default=''),
     contact_phone :str = Form(default=''),
     line : int = Form(default=0),
-    online_meet : int = Form(default=0),
-    remark : str = Form(default='')
+    remark : str = Form(default=''),
+    address : str = Form(default=''),
+    email : str = Form(default=''),
+    information : str = Form(default=''),
+    request : str = Form(default=''),
+    schedule : str = Form(default=''),
+    result : str = Form(default=''),
+    person : str = Form(default='')
 ):
     try:
 
@@ -61,8 +73,14 @@ async def insert_news(
             contact_person=contact_person,
             contact_phone=contact_phone,
             line = line,
-            online_meet = online_meet,
-            remark =remark
+            email = email,
+            remark =remark,
+            address = address,
+            information = information,
+            request = request,
+            schedule = schedule ,
+            result = result,
+            person = person
         )
         
         return {"msg": "success", "code": 200, "new_Guidance_group": new_news.id}
@@ -76,8 +94,14 @@ async def update_news(
     contact_person : str = Form(default=''),
     contact_phone :str = Form(default=''),
     line : int = Form(default=None),
-    online_meet : int = Form(default=None),
-    remark : str = Form(default='')
+    remark : str = Form(default=''),
+    address : str = Form(default=''),
+    email : str = Form(default=''),
+    information : str = Form(default=''),
+    request : str = Form(default=''),
+    schedule : str = Form(default=''),
+    result : str = Form(default=''),
+    person : str = Form(default='')
 ):
     try:
         if not guidance_group_id :
@@ -97,11 +121,29 @@ async def update_news(
         if line != None:
             news_obj.line = line
 
-        if online_meet != None:
-            news_obj.online_meet = online_meet
+        if email != None:
+            news_obj.email = email
+
+        if information != None:
+            news_obj.information = information
+
+        if request != None:
+            news_obj.request = request
+
+        if schedule != None:
+            news_obj.schedule = schedule
+
+        if result != None:
+            news_obj.result = result
+
+        if person != None:
+            news_obj.person = person
 
         if remark.strip() != '':
             news_obj.remark = remark
+
+        if address.strip() != '':
+            news_obj.address = address
         
         await news_obj.save()
         

+ 61 - 8
app/api/news.py

@@ -42,7 +42,8 @@ async def search_news(
             "content" : news_obj.content,
             "files" : news_obj.files,
             "URL" : news_obj.URL,
-            "tags" : news_obj.tags
+            "tags" : news_obj.tags,
+            "cover_img": news_obj.cover_img
         }
             news_objs.append(news_tmp)
 
@@ -76,10 +77,20 @@ async def insert_news(
     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)
+    tags : str = Form(default='[]'),
+    files_url = Depends(create_upload_files),
+    cover_img_file:UploadFile = File(default='')
 ):
     try:
+        cover_img = ''
+        if cover_img_file != '':
+            contents = await cover_img_file.read()
+
+        #save the file
+            with open(f"{IMAGEDIR}{cover_img_file.filename}", "wb") as f:
+                f.write(contents)
+        
+            cover_img = f"{IMAGEDIR_short}{cover_img_file.filename}"
 
         new_news = await News.create(
             title=title,
@@ -88,7 +99,8 @@ async def insert_news(
             content=content,
             files = str(files_url),
             URL = URL,
-            tags = tags
+            tags = tags,
+            cover_img = cover_img
         )
         
         return {"msg": "success", "code": 200, "new_news": new_news.id}
@@ -103,8 +115,9 @@ async def update_news(
     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)
+    tags : str = Form(default='[]'),
+    files_url = Depends(create_upload_files),
+    cover_img_file:UploadFile = File(default=''),
 ):
     try:
         if news_id == 0 :
@@ -127,8 +140,17 @@ async def update_news(
         if URL.strip() != '':
             news_obj.URL = URL
 
-        if tags.strip() != '':
+        if tags != '[]':
             news_obj.tags = tags
+
+        
+        if cover_img_file != '':
+            contents = await cover_img_file.read()
+
+            with open(f"{IMAGEDIR}{cover_img_file.filename}", "wb") as f:
+                f.write(contents)
+        
+            news_obj.cover_img = f"{IMAGEDIR_short}{cover_img_file.filename}"
         
         news_obj.files = str(files_url)
         
@@ -144,4 +166,35 @@ async def delete_news(id: int = 0):
         await News.filter(id=id).delete()
         return {"msg": "success", "code": 200}
     else :
-        return {"msg": "please input ID", "code": 200}
+        return {"msg": "please input ID", "code": 200}
+    
+@news.get("/search_news_like")
+async def search_class_like(keyword: str):
+    try:
+        news_list = await News.filter(
+            Q(title__icontains=keyword)|
+            Q(category__icontains=keyword)|
+            Q(content__icontains=keyword)|
+            Q(tags__icontains=keyword)
+                ).all()
+        
+        news_objs = []
+        for news_obj in news_list:
+            news_tmp = {
+            "news_id": news_obj.id,
+            "title": news_obj.title,
+            "category": news_obj.category,
+            "create_time" : news_obj.create_time,
+            "click_time" : news_obj.click_time,
+            "content" : news_obj.content,
+            "files" : news_obj.files,
+            "URL" : news_obj.URL,
+            "tags" : news_obj.tags,
+            "cover_img": news_obj.cover_img
+        }
+            news_objs.append(news_tmp)
+
+        return {"msg": "success", "code": 200, "news": news_objs}
+    except Exception as e:
+        return {"msg": str(e), "code": 500}
+    

+ 16 - 0
app/models/models.py

@@ -2,6 +2,10 @@ from tortoise import fields
 from tortoise.models import Model
 from pydantic import BaseModel
 from datetime import datetime
+from tortoise import fields
+from tortoise.models import Model
+from pydantic import BaseModel
+from datetime import datetime
 class User(Model):
     id = fields.IntField(pk=True)
     username = fields.CharField(max_length=30, unique=True, description="帳號")
@@ -12,6 +16,18 @@ class User(Model):
     is_gmail = fields.IntField(description="是否使用gmail登入")
     token = fields.CharField(max_length=200)
 
+class UserPydantic(BaseModel):
+    id: int
+    username: str
+    password: str
+    email: str
+    points: int
+    is_superuser: int
+    is_gmail: int
+    token: str
+    class Config:
+        orm_mode = True
+
 class UserPydantic(BaseModel):
     id: int
     username: str