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 db, ACCESS_TOKEN_EXPIRE_MINUTES import json from typing import List from datetime import datetime, timedelta 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): try: url = "https://sandboxapi.ebacsi.com.vn/auth/oauth/check_token" payload = {'token': post_save.token} headers = { 'Authorization': 'Basic RGljdGlvbmFyeU1lZGlob21lOlJ4aXR6ZnZvaWFmZmNtb2l0ZW0=' } response = requests.request( "POST", url, headers=headers, data=payload) data_output = json.loads(response.text) data = data_output.get("user_name", None) if data == None: return JSONResponse(status_code=status.HTTP_401_UNAUTHORIZED, content={"message": "UNAUTHORIZED"}) count = await db["posts"].count_documents({"post_id": post_save.post_id, "username": data}) if count == 0: return f"Post {post_save.post_id} not found" post_save.created_at = datetime.datetime.now(tz=tz) post_save = jsonable_encoder(post_save) del post_save["token"] post_save["username"] = data created_post = await db["post_save"].count_documents({"post_id": post_save["post_id"], "username": data}) if created_post == 1: return {"message": f'Post {post_save["post_id"]} saved'} 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): url = "https://sandboxapi.ebacsi.com.vn/auth/oauth/check_token" payload = {'token': post_save.token} headers = { 'Authorization': 'Basic RGljdGlvbmFyeU1lZGlob21lOlJ4aXR6ZnZvaWFmZmNtb2l0ZW0=' } response = requests.request( "POST", url, headers=headers, data=payload) data_output = json.loads(response.text) data = data_output.get("user_name", None) if data == None: return JSONResponse(status_code=status.HTTP_401_UNAUTHORIZED, content={"message": "UNAUTHORIZED"}) posts = await db["post_save"].find({"username": data}).to_list(1000) print(posts) print(len(posts)) return JSONResponse(status_code=status.HTTP_200_OK, content=posts) @post_save.delete("/delete_save_post", response_description="Delete save post") async def delete_save_post(post_save: SavePost): # delete_result = await db["post_save"].delete_one({"_id": user_id}) try: url = "https://sandboxapi.ebacsi.com.vn/auth/oauth/check_token" payload = {'token': post_save.token} headers = { 'Authorization': 'Basic RGljdGlvbmFyeU1lZGlob21lOlJ4aXR6ZnZvaWFmZmNtb2l0ZW0=' } response = requests.request( "POST", url, headers=headers, data=payload) data_output = json.loads(response.text) data = data_output.get("user_name", None) if data == None: return JSONResponse(status_code=status.HTTP_401_UNAUTHORIZED, content={"message": "UNAUTHORIZED"}) post_save = jsonable_encoder(post_save) delete_result = await db["post_save"].delete_one({"post_id": post_save["post_id"], "username": data}) 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_save["post_id"]} not found') except NameError: return NameError