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 ) from ..settings import * import json from typing import List from datetime import datetime, timedelta from ..models.models import * import requests import re from pydantic import BaseModel, Field import pytz import datetime tz = pytz.timezone('Asia/Ho_Chi_Minh') history = APIRouter() post_save = APIRouter() # ============= Creating path operations ============== @post_save.post("/save_post", response_description="save new post", response_model=SavePostModel) async def create_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"}) url = URL_OAUTH2_GET_CHECK_TOKEN count = await db["posts"].count_documents({"_id": post_save.post_id}) if count == 0: return JSONResponse(status_code=status.HTTP_409_CONFLICT, content={"message": "Bài viết không tồn tại"}) post_save.created_at = datetime.datetime.now(tz=tz) post_save = jsonable_encoder(post_save) del post_save["token"] post_save["username"] = user_name created_post = await db["post_save"].count_documents({"post_id": post_save["post_id"], "username": user_name}) if created_post == 1: return JSONResponse(status_code=status.HTTP_409_CONFLICT, content={"message": "Bài viết đã được lưu trước đó"}) 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 @post_save.post( "/list_save_post_by_user", response_description="List save posts", response_model=SavePostModel ) 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 @post_save.delete("/delete_save_post", response_description="Delete save post") async def delete_save_post(post_id: str, 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"}) delete_result = await db["post_save"].delete_one({"post_id": post_id, "username": user_name}) if delete_result.deleted_count == 1: return JSONResponse(status_code=status.HTTP_200_OK, content={"message": "Delete post save successful"}) raise HTTPException( status_code=404, detail=f'Post save {post_id} not found') except NameError: return NameError