2022-08-02 14:25:51 +07:00
|
|
|
from os import access
|
|
|
|
|
from urllib import response
|
|
|
|
|
from fastapi import (
|
|
|
|
|
APIRouter,
|
|
|
|
|
Depends,
|
|
|
|
|
status,
|
|
|
|
|
HTTPException
|
|
|
|
|
)
|
|
|
|
|
from fastapi.responses import JSONResponse
|
|
|
|
|
from fastapi.encoders import jsonable_encoder
|
|
|
|
|
from fastapi.security import OAuth2PasswordRequestForm
|
|
|
|
|
from fastapi import File, UploadFile, FastAPI
|
|
|
|
|
from ..models.models import (
|
|
|
|
|
UserModel,
|
|
|
|
|
ShowUserModel,
|
|
|
|
|
UpdateUserModel
|
|
|
|
|
)
|
|
|
|
|
from ..models.save_post import *
|
|
|
|
|
from ..dependecies import (
|
|
|
|
|
get_current_user,
|
|
|
|
|
authenticate_user,
|
|
|
|
|
authenticate_user_oauth2,
|
|
|
|
|
create_access_token,
|
|
|
|
|
get_password_hash
|
|
|
|
|
)
|
2022-08-15 10:53:52 +07:00
|
|
|
from ..settings import *
|
2022-08-02 14:25:51 +07:00
|
|
|
import json
|
|
|
|
|
from typing import List
|
|
|
|
|
from datetime import datetime, timedelta
|
2022-08-19 08:38:43 +07:00
|
|
|
from ..models.models import *
|
2022-08-02 14:25:51 +07:00
|
|
|
import requests
|
|
|
|
|
import re
|
|
|
|
|
from pydantic import BaseModel, Field
|
2022-08-04 14:48:50 +07:00
|
|
|
import pytz
|
|
|
|
|
import datetime
|
|
|
|
|
tz = pytz.timezone('Asia/Ho_Chi_Minh')
|
|
|
|
|
history = APIRouter()
|
2022-08-02 14:25:51 +07:00
|
|
|
|
|
|
|
|
post_save = APIRouter()
|
|
|
|
|
# ============= Creating path operations ==============
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@post_save.post("/save_post", response_description="save new post", response_model=SavePostModel)
|
2022-08-19 08:38:43 +07:00
|
|
|
async def create_post(post_save: SavePost, token: token_test = Depends(get_current_user),
|
|
|
|
|
):
|
2022-08-02 14:25:51 +07:00
|
|
|
try:
|
2022-08-19 08:38:43 +07:00
|
|
|
user_name = token.get("user_name", None)
|
|
|
|
|
|
|
|
|
|
# data_token = await get_current_user(Nonetoken)
|
|
|
|
|
# data = data_token.get("user_name", None)
|
|
|
|
|
# user_type = data_token.get("user_type", None)
|
|
|
|
|
if user_name == None:
|
2022-08-02 14:25:51 +07:00
|
|
|
return JSONResponse(status_code=status.HTTP_401_UNAUTHORIZED, content={"message": "UNAUTHORIZED"})
|
2022-08-19 08:38:43 +07:00
|
|
|
url = URL_OAUTH2_GET_CHECK_TOKEN
|
2022-08-08 10:18:10 +07:00
|
|
|
count = await db["posts"].count_documents({"_id": post_save.post_id})
|
2022-08-04 14:48:50 +07:00
|
|
|
if count == 0:
|
2022-08-08 10:18:10 +07:00
|
|
|
return JSONResponse(status_code=status.HTTP_409_CONFLICT, content={"message": "Bài viết không tồn tại"})
|
2022-08-04 14:48:50 +07:00
|
|
|
post_save.created_at = datetime.datetime.now(tz=tz)
|
2022-08-02 14:25:51 +07:00
|
|
|
post_save = jsonable_encoder(post_save)
|
|
|
|
|
del post_save["token"]
|
2022-08-19 08:38:43 +07:00
|
|
|
post_save["username"] = user_name
|
|
|
|
|
created_post = await db["post_save"].count_documents({"post_id": post_save["post_id"], "username": user_name})
|
2022-08-04 14:48:50 +07:00
|
|
|
if created_post == 1:
|
2022-08-08 10:18:10 +07:00
|
|
|
return JSONResponse(status_code=status.HTTP_409_CONFLICT, content={"message": "Bài viết đã được lưu trước đó"})
|
2022-08-02 14:25:51 +07:00
|
|
|
new_post = await db["post_save"].insert_one(post_save)
|
|
|
|
|
created_post = await db["post_save"].find_one({"_id": new_post.inserted_id})
|
|
|
|
|
return JSONResponse(status_code=status.HTTP_201_CREATED, content=created_post)
|
|
|
|
|
except NameError:
|
|
|
|
|
return NameError
|
|
|
|
|
|
|
|
|
|
|
2022-08-04 14:48:50 +07:00
|
|
|
@post_save.post(
|
2022-08-02 14:25:51 +07:00
|
|
|
"/list_save_post_by_user", response_description="List save posts", response_model=SavePostModel
|
|
|
|
|
)
|
2022-08-19 08:38:43 +07:00
|
|
|
async def list_post(post_save: SavePost, token: token_test = Depends(get_current_user),
|
|
|
|
|
):
|
|
|
|
|
try:
|
|
|
|
|
user_name = token.get("user_name", None)
|
|
|
|
|
|
|
|
|
|
# data_token = await get_current_user(Nonetoken)
|
|
|
|
|
# data = data_token.get("user_name", None)
|
|
|
|
|
# user_type = data_token.get("user_type", None)
|
|
|
|
|
if user_name == None:
|
|
|
|
|
return JSONResponse(status_code=status.HTTP_401_UNAUTHORIZED, content={"message": "UNAUTHORIZED"})
|
|
|
|
|
posts = await db["post_save"].find({"username": user_name}).to_list(20)
|
|
|
|
|
return JSONResponse(status_code=status.HTTP_200_OK, content=posts)
|
|
|
|
|
except NameError:
|
|
|
|
|
return NameError
|
2022-08-04 14:48:50 +07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
@post_save.delete("/delete_save_post", response_description="Delete save post")
|
2022-08-19 08:38:43 +07:00
|
|
|
async def delete_save_post(post_id: str, token: token_test = Depends(get_current_user),
|
|
|
|
|
):
|
2022-08-04 14:48:50 +07:00
|
|
|
try:
|
2022-08-19 08:38:43 +07:00
|
|
|
user_name = token.get("user_name", None)
|
|
|
|
|
|
|
|
|
|
# data_token = await get_current_user(Nonetoken)
|
|
|
|
|
# data = data_token.get("user_name", None)
|
|
|
|
|
# user_type = data_token.get("user_type", None)
|
|
|
|
|
if user_name == None:
|
2022-08-04 14:48:50 +07:00
|
|
|
return JSONResponse(status_code=status.HTTP_401_UNAUTHORIZED, content={"message": "UNAUTHORIZED"})
|
2022-08-19 08:38:43 +07:00
|
|
|
delete_result = await db["post_save"].delete_one({"post_id": post_id, "username": user_name})
|
2022-08-04 14:48:50 +07:00
|
|
|
if delete_result.deleted_count == 1:
|
|
|
|
|
return JSONResponse(status_code=status.HTTP_200_OK, content={"message": "Delete post save successful"})
|
|
|
|
|
raise HTTPException(
|
2022-08-08 10:18:10 +07:00
|
|
|
status_code=404, detail=f'Post save {post_id} not found')
|
2022-08-04 14:48:50 +07:00
|
|
|
except NameError:
|
|
|
|
|
return NameError
|