save
This commit is contained in:
@@ -9,8 +9,9 @@ from fastapi.staticfiles import StaticFiles
|
|||||||
from src.dependecies import authenticate_user
|
from src.dependecies import authenticate_user
|
||||||
from src.routers.routers import router
|
from src.routers.routers import router
|
||||||
from src.routers.post import post
|
from src.routers.post import post
|
||||||
from src.routers.history_find import history
|
from src.routers.history_find import history_find
|
||||||
from src.routers.post_save import post_save
|
from src.routers.post_save import post_save
|
||||||
|
from src.routers.history import history
|
||||||
|
|
||||||
import base64
|
import base64
|
||||||
import binascii
|
import binascii
|
||||||
@@ -61,5 +62,6 @@ async def authenticate(request: Request, call_next):
|
|||||||
# ================= Routers inclusion from src directory ===============
|
# ================= Routers inclusion from src directory ===============
|
||||||
app.include_router(post)
|
app.include_router(post)
|
||||||
app.include_router(router)
|
app.include_router(router)
|
||||||
app.include_router(history)
|
app.include_router(history_find)
|
||||||
app.include_router(post_save)
|
app.include_router(post_save)
|
||||||
|
app.include_router(history)
|
||||||
|
|||||||
@@ -27,3 +27,4 @@ python-multipart==0.0.5
|
|||||||
aiofiles==0.8.0
|
aiofiles==0.8.0
|
||||||
jinja2==3.1.0
|
jinja2==3.1.0
|
||||||
requests==2.28.1
|
requests==2.28.1
|
||||||
|
pytz==2019.3
|
||||||
109
app/src/models/history.py
Normal file
109
app/src/models/history.py
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
import json
|
||||||
|
from bson import ObjectId
|
||||||
|
from pydantic import BaseModel, Field
|
||||||
|
from typing import List, Optional, Union
|
||||||
|
from ..models.post import (
|
||||||
|
PostModel,
|
||||||
|
UpdatePostModel,
|
||||||
|
ShowPostModel
|
||||||
|
)
|
||||||
|
from datetime import datetime, time, timedelta
|
||||||
|
|
||||||
|
|
||||||
|
class PyObjectId(ObjectId):
|
||||||
|
@classmethod
|
||||||
|
def __get_validators__(cls):
|
||||||
|
yield cls.validate
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def validate(cls, v):
|
||||||
|
if not ObjectId.is_valid(v):
|
||||||
|
raise ValueError("Invalid objectid")
|
||||||
|
return ObjectId(v)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def __modify_schema__(cls, field_schema):
|
||||||
|
field_schema.update(type="string")
|
||||||
|
|
||||||
|
|
||||||
|
class HistoryModel(BaseModel):
|
||||||
|
id: PyObjectId = Field(default_factory=PyObjectId, alias="_id")
|
||||||
|
token: str = None
|
||||||
|
created_at: Optional[datetime] = None
|
||||||
|
status: str = None
|
||||||
|
note: str = None
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
orm_mode = True
|
||||||
|
case_sensitive = True
|
||||||
|
allow_population_by_field_name = True
|
||||||
|
arbitrary_types_allowed = True
|
||||||
|
json_encoders = {ObjectId: str}
|
||||||
|
schema_extra = {
|
||||||
|
"example": {
|
||||||
|
"token": "",
|
||||||
|
"status": "",
|
||||||
|
"note": ""
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class HistoryByUserModel(BaseModel):
|
||||||
|
id: PyObjectId = Field(default_factory=PyObjectId, alias="_id")
|
||||||
|
user_name: Union[str, None] = None
|
||||||
|
created_at: Optional[datetime] = None
|
||||||
|
status: str = None
|
||||||
|
note: str = None
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
orm_mode = True
|
||||||
|
case_sensitive = True
|
||||||
|
allow_population_by_field_name = True
|
||||||
|
arbitrary_types_allowed = True
|
||||||
|
json_encoders = {ObjectId: str}
|
||||||
|
schema_extra = {
|
||||||
|
"example": {
|
||||||
|
"user_name": "",
|
||||||
|
"status": "",
|
||||||
|
"note": ""
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# class UpdateHistoryFindModel(BaseModel):
|
||||||
|
# full_name: str
|
||||||
|
# age: int
|
||||||
|
# sick : List[str]
|
||||||
|
# created_at: Optional[str] = None
|
||||||
|
# post_id : str
|
||||||
|
# key_find : strfalse
|
||||||
|
|
||||||
|
# class Config:
|
||||||
|
# arbitrary_types_allowed = True
|
||||||
|
# json_encoders = {ObjectId: str}
|
||||||
|
# schema_extra = {
|
||||||
|
# "example": {
|
||||||
|
# "full_name": "John",
|
||||||
|
# "age": 20,false
|
||||||
|
|
||||||
|
# class ShowPostModel(BaseModel):
|
||||||
|
# id: PyObjectId = Field(default_factory=PyObjectId, alias="_id")
|
||||||
|
# full_name: str
|
||||||
|
# age: int
|
||||||
|
# sick : List[str]
|
||||||
|
# created_at: Optional[str] = None
|
||||||
|
# post_id : str
|
||||||
|
# key_find : str
|
||||||
|
|
||||||
|
# class Config:
|
||||||
|
# arbitrary_types_allowed = True
|
||||||
|
# json_encoders = {ObjectId: str}
|
||||||
|
# schema_extra = {
|
||||||
|
# "example": {
|
||||||
|
# "full_name": "John",
|
||||||
|
# "age": 20,
|
||||||
|
# "sick": "simple mortal",
|
||||||
|
# "key_find": "datetime"
|
||||||
|
# }
|
||||||
|
# }
|
||||||
@@ -7,6 +7,7 @@ from ..models.post import (
|
|||||||
UpdatePostModel,
|
UpdatePostModel,
|
||||||
ShowPostModel
|
ShowPostModel
|
||||||
)
|
)
|
||||||
|
from datetime import datetime, time, timedelta
|
||||||
|
|
||||||
|
|
||||||
class PyObjectId(ObjectId):
|
class PyObjectId(ObjectId):
|
||||||
@@ -30,7 +31,7 @@ class HistoryFindModel(BaseModel):
|
|||||||
token: str = None
|
token: str = None
|
||||||
sick: List[str] = None
|
sick: List[str] = None
|
||||||
authorities: List[str] = None
|
authorities: List[str] = None
|
||||||
created_at: Optional[str] = None
|
created_at: Optional[datetime] = None
|
||||||
post_id: str = None
|
post_id: str = None
|
||||||
key_find: str = None
|
key_find: str = None
|
||||||
|
|
||||||
@@ -57,7 +58,7 @@ class HistoryFindByUserModel(BaseModel):
|
|||||||
user_name: Union[str, None] = None
|
user_name: Union[str, None] = None
|
||||||
sick: List[str] = None
|
sick: List[str] = None
|
||||||
authorities: List[str] = None
|
authorities: List[str] = None
|
||||||
created_at: Optional[str] = None
|
created_at: Optional[datetime] = None
|
||||||
post_id: str
|
post_id: str
|
||||||
key_find: str
|
key_find: str
|
||||||
|
|
||||||
|
|||||||
@@ -84,3 +84,13 @@ class ShowUserModel(BaseModel):
|
|||||||
exp: int
|
exp: int
|
||||||
authorities: List[str]
|
authorities: List[str]
|
||||||
client_id: str
|
client_id: str
|
||||||
|
|
||||||
|
|
||||||
|
class token_test(BaseModel):
|
||||||
|
access_token: str
|
||||||
|
token_type: str
|
||||||
|
refresh_token: str
|
||||||
|
expires_in: int
|
||||||
|
scope: str
|
||||||
|
user_type: str
|
||||||
|
user_key: str
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import json
|
|||||||
from bson import ObjectId
|
from bson import ObjectId
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
from typing import List, Optional, Union
|
from typing import List, Optional, Union
|
||||||
|
from datetime import datetime, time, timedelta
|
||||||
|
|
||||||
|
|
||||||
class PyObjectId(ObjectId):
|
class PyObjectId(ObjectId):
|
||||||
@@ -52,7 +53,8 @@ class PostModel(BaseModel):
|
|||||||
translation_post: Union[str, None] = None
|
translation_post: Union[str, None] = None
|
||||||
link: Union[str, None] = None
|
link: Union[str, None] = None
|
||||||
is_active: bool
|
is_active: bool
|
||||||
created_at: Optional[str] = None
|
created_at: Optional[datetime] = None
|
||||||
|
updated_at: Optional[datetime] = None
|
||||||
specialist: str
|
specialist: str
|
||||||
summary: str = None
|
summary: str = None
|
||||||
data: List[DataPost]
|
data: List[DataPost]
|
||||||
@@ -114,7 +116,8 @@ class UpdatePostModel(BaseModel):
|
|||||||
translation_post: Union[str, None] = None
|
translation_post: Union[str, None] = None
|
||||||
link: Union[str, None] = None
|
link: Union[str, None] = None
|
||||||
is_active: bool
|
is_active: bool
|
||||||
created_at: Optional[str] = None
|
created_at: Optional[datetime] = None
|
||||||
|
updated_at: Optional[datetime] = None
|
||||||
specialist: str
|
specialist: str
|
||||||
summary: str = None
|
summary: str = None
|
||||||
data: List[DataPost]
|
data: List[DataPost]
|
||||||
@@ -129,7 +132,6 @@ class UpdatePostModel(BaseModel):
|
|||||||
"translation_post": "Doe11111",
|
"translation_post": "Doe11111",
|
||||||
"link": "simple mortal111",
|
"link": "simple mortal111",
|
||||||
"is_active": False,
|
"is_active": False,
|
||||||
"created_at": "07/20/22 02: 26: 54",
|
|
||||||
"specialist": "",
|
"specialist": "",
|
||||||
"summary": "",
|
"summary": "",
|
||||||
"data": [
|
"data": [
|
||||||
@@ -188,7 +190,6 @@ class ShowPostModel(BaseModel):
|
|||||||
"translation_post": "Doe11111",
|
"translation_post": "Doe11111",
|
||||||
"link": "simple mortal111",
|
"link": "simple mortal111",
|
||||||
"is_active": False,
|
"is_active": False,
|
||||||
"created_at": "07/20/22 02: 26: 54",
|
|
||||||
"specialist": "",
|
"specialist": "",
|
||||||
"summary": "",
|
"summary": "",
|
||||||
"data": [
|
"data": [
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ from ..models.post import (
|
|||||||
UpdatePostModel,
|
UpdatePostModel,
|
||||||
ShowPostModel
|
ShowPostModel
|
||||||
)
|
)
|
||||||
|
from datetime import datetime, time, timedelta
|
||||||
|
|
||||||
|
|
||||||
class PyObjectId(ObjectId):
|
class PyObjectId(ObjectId):
|
||||||
@@ -28,8 +29,8 @@ class PyObjectId(ObjectId):
|
|||||||
class SavePostModel(BaseModel):
|
class SavePostModel(BaseModel):
|
||||||
id: PyObjectId = Field(default_factory=PyObjectId, alias="_id")
|
id: PyObjectId = Field(default_factory=PyObjectId, alias="_id")
|
||||||
user_name: str = None
|
user_name: str = None
|
||||||
is_active: str = None
|
# is_active: str = None
|
||||||
created_at: Optional[str] = None
|
created_at: Optional[datetime] = None
|
||||||
post_id: str = None
|
post_id: str = None
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
@@ -41,7 +42,6 @@ class SavePostModel(BaseModel):
|
|||||||
schema_extra = {
|
schema_extra = {
|
||||||
"example": {
|
"example": {
|
||||||
"user_name": "",
|
"user_name": "",
|
||||||
"is_active": "true",
|
|
||||||
"post_id": ""
|
"post_id": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -50,8 +50,8 @@ class SavePostModel(BaseModel):
|
|||||||
class SavePost(BaseModel):
|
class SavePost(BaseModel):
|
||||||
id: PyObjectId = Field(default_factory=PyObjectId, alias="_id")
|
id: PyObjectId = Field(default_factory=PyObjectId, alias="_id")
|
||||||
token: str = None
|
token: str = None
|
||||||
is_active: str = None
|
# is_active: str = None
|
||||||
created_at: Optional[str] = None
|
created_at: Optional[datetime] = None
|
||||||
post_id: str = None
|
post_id: str = None
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
@@ -63,7 +63,6 @@ class SavePost(BaseModel):
|
|||||||
schema_extra = {
|
schema_extra = {
|
||||||
"example": {
|
"example": {
|
||||||
"token": "",
|
"token": "",
|
||||||
"is_active": "true",
|
|
||||||
"post_id": ""
|
"post_id": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
70
app/src/routers/history.py
Normal file
70
app/src/routers/history.py
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
from fastapi import (
|
||||||
|
APIRouter,
|
||||||
|
Depends,
|
||||||
|
status,
|
||||||
|
HTTPException
|
||||||
|
)
|
||||||
|
from fastapi.responses import JSONResponse
|
||||||
|
from fastapi.encoders import jsonable_encoder
|
||||||
|
from fastapi.security import OAuth2PasswordRequestForm
|
||||||
|
from src.settings import db, ACCESS_TOKEN_EXPIRE_MINUTES
|
||||||
|
# from ..models.history_find import *
|
||||||
|
from ..models.history import *
|
||||||
|
from typing import List
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
from ..models.post import (
|
||||||
|
PostModel,
|
||||||
|
UpdatePostModel,
|
||||||
|
ShowPostModel
|
||||||
|
)
|
||||||
|
from ..models.models import (
|
||||||
|
UserModel,
|
||||||
|
ShowUserModel,
|
||||||
|
UpdateUserModel
|
||||||
|
)
|
||||||
|
from ..dependecies import (
|
||||||
|
get_current_user,
|
||||||
|
authenticate_user,
|
||||||
|
create_access_token,
|
||||||
|
get_password_hash
|
||||||
|
)
|
||||||
|
import re
|
||||||
|
import pytz
|
||||||
|
import datetime
|
||||||
|
tz = pytz.timezone('Asia/Ho_Chi_Minh')
|
||||||
|
history = APIRouter()
|
||||||
|
##############################POST###############################################
|
||||||
|
|
||||||
|
|
||||||
|
@history.post("/create_history", response_description="history", response_model=HistoryByUserModel)
|
||||||
|
async def create_history(username: str, status: str, note: str, history: HistoryByUserModel = None):
|
||||||
|
history.created_at = datetime.datetime.now(tz=tz)
|
||||||
|
history = jsonable_encoder(history)
|
||||||
|
history["user_name"] = username
|
||||||
|
history["status"] = status
|
||||||
|
history["note"] = note
|
||||||
|
print(history)
|
||||||
|
history_new = await db["history"].insert_one(history)
|
||||||
|
create_history = await db["history"].find_one({"_id": history_new.inserted_id})
|
||||||
|
create_history = jsonable_encoder(create_history)
|
||||||
|
print(type(create_history))
|
||||||
|
# return JSONResponse(status_code=status.HTTP_201_CREATED, content=create_history)
|
||||||
|
return create_history
|
||||||
|
|
||||||
|
|
||||||
|
@history.get(
|
||||||
|
"/list_history", response_description="List all posts", response_model=List[HistoryByUserModel]
|
||||||
|
)
|
||||||
|
async def list_post():
|
||||||
|
history_find = await db["history"].find().to_list(1000)
|
||||||
|
return history_find
|
||||||
|
|
||||||
|
|
||||||
|
@ history.get("/user_history", response_description="Get list Posts viewed")
|
||||||
|
async def get_list_post_view_by_username(token: str):
|
||||||
|
data_token = await get_current_user(token)
|
||||||
|
user_name = data_token.get("user_name", None)
|
||||||
|
if user_name == None:
|
||||||
|
return JSONResponse(status_code=status.HTTP_401_UNAUTHORIZED, content={"message": "UNAUTHORIZED"})
|
||||||
|
history_find = await db["history"].find({"user_name": user_name}).to_list(100)
|
||||||
|
return history_find
|
||||||
@@ -28,30 +28,31 @@ from ..dependecies import (
|
|||||||
get_password_hash
|
get_password_hash
|
||||||
)
|
)
|
||||||
import re
|
import re
|
||||||
|
import pytz
|
||||||
history = APIRouter()
|
import datetime
|
||||||
|
tz = pytz.timezone('Asia/Ho_Chi_Minh')
|
||||||
|
history_find = APIRouter()
|
||||||
##############################POST###############################################
|
##############################POST###############################################
|
||||||
|
|
||||||
|
|
||||||
@history.post("/create_history", response_description="history", response_model=HistoryFindModel)
|
@history_find.post("/create_history_find", response_description="history", response_model=HistoryFindModel)
|
||||||
async def create_history(history: HistoryFindModel):
|
async def create_history_find(history: HistoryFindModel):
|
||||||
datetime_now = datetime.now()
|
post.created_at = datetime.datetime.now(tz=tz)
|
||||||
post.created_at = datetime_now.strftime("%m/%d/%y %H:%M:%S")
|
|
||||||
post = jsonable_encoder(post)
|
post = jsonable_encoder(post)
|
||||||
new_post = await db["history_find"].insert_one(post)
|
new_post = await db["history_find"].insert_one(post)
|
||||||
created = await db["history_find"].find_one({"_id": new_post.inserted_id})
|
created = await db["history_find"].find_one({"_id": new_post.inserted_id})
|
||||||
return JSONResponse(status_code=status.HTTP_201_CREATED, content=created)
|
return JSONResponse(status_code=status.HTTP_201_CREATED, content=created)
|
||||||
|
|
||||||
|
|
||||||
@history.get(
|
@history_find.get(
|
||||||
"/list_history", response_description="List all posts", response_model=List[HistoryFindModel]
|
"/list_history_find", response_description="List all posts", response_model=List[HistoryFindModel]
|
||||||
)
|
)
|
||||||
async def list_post():
|
async def list_post_in_history_find():
|
||||||
history_find = await db["history_find"].find().to_list(1000)
|
history_find = await db["history_find"].find().to_list(1000)
|
||||||
return history_find
|
return history_find
|
||||||
|
|
||||||
|
|
||||||
@ history.get("/list_history_by_user", response_description="Get list Posts viewed", response_model=List[HistoryFindModel])
|
@ history_find.get("/list_history_by_user_find", response_description="Get list Posts viewed", response_model=List[HistoryFindModel])
|
||||||
async def get_list_post_view_by_username(username: str, current_user: ShowUserModel = Depends(get_current_user)):
|
async def get_list_post_view_by_username(username: str, current_user: ShowUserModel = Depends(get_current_user)):
|
||||||
history_find = await db["history_find"].find({"username": current_user["username"]}).to_list(10)
|
history_find = await db["history_find"].find({"username": current_user["username"]}).to_list(10)
|
||||||
return history_find
|
return history_find
|
||||||
@@ -68,7 +69,7 @@ async def get_list_post_view_by_username(username: str, current_user: ShowUserMo
|
|||||||
# return post_view
|
# return post_view
|
||||||
|
|
||||||
|
|
||||||
@history.get("/list_post_by_user", response_description="Get list Posts viewed", response_model=List[HistoryFindByUserModel])
|
@history_find.get("/list_post_by_user", response_description="Get list Posts viewed", response_model=List[HistoryFindByUserModel])
|
||||||
async def get_list_post_view_by_username(current_user: ShowUserModel = Depends(get_current_user)):
|
async def get_list_post_view_by_username(current_user: ShowUserModel = Depends(get_current_user)):
|
||||||
history_find = await db["history_find"].find({"username": current_user["username"]}).to_list(10)
|
history_find = await db["history_find"].find({"username": current_user["username"]}).to_list(10)
|
||||||
post_view = []
|
post_view = []
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
from email.policy import default
|
from email.policy import default
|
||||||
|
import imp
|
||||||
from fastapi import APIRouter, Depends, status, HTTPException, UploadFile, File, Header, Request
|
from fastapi import APIRouter, Depends, status, HTTPException, UploadFile, File, Header, Request
|
||||||
from fastapi.responses import JSONResponse, FileResponse, StreamingResponse
|
from fastapi.responses import JSONResponse, FileResponse, StreamingResponse
|
||||||
from fastapi.encoders import jsonable_encoder
|
from fastapi.encoders import jsonable_encoder
|
||||||
@@ -17,6 +18,7 @@ from ..models.post import (
|
|||||||
UpdatePostModel,
|
UpdatePostModel,
|
||||||
ShowPostModel
|
ShowPostModel
|
||||||
)
|
)
|
||||||
|
from ..routers.history import *
|
||||||
from ..models.models import (
|
from ..models.models import (
|
||||||
UserModel,
|
UserModel,
|
||||||
ShowUserModel,
|
ShowUserModel,
|
||||||
@@ -28,15 +30,21 @@ from ..dependecies import (
|
|||||||
create_access_token,
|
create_access_token,
|
||||||
get_password_hash
|
get_password_hash
|
||||||
)
|
)
|
||||||
|
# from history import *
|
||||||
|
from ..settings import *
|
||||||
from ..models.history_find import *
|
from ..models.history_find import *
|
||||||
|
from ..routers.routers import *
|
||||||
from typing import List
|
from typing import List
|
||||||
from datetime import datetime
|
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import codecs
|
import codecs
|
||||||
from fastapi.templating import Jinja2Templates
|
from fastapi.templating import Jinja2Templates
|
||||||
from fastapi.responses import HTMLResponse
|
from fastapi.responses import HTMLResponse
|
||||||
|
import pytz
|
||||||
|
import datetime
|
||||||
|
tz = pytz.timezone('Asia/Ho_Chi_Minh')
|
||||||
|
|
||||||
post = APIRouter()
|
post = APIRouter()
|
||||||
|
|
||||||
##############################POST###############################################
|
##############################POST###############################################
|
||||||
@@ -51,13 +59,17 @@ async def post_html(content: str, request: Request):
|
|||||||
@post.post("/create_post", response_description="Add new post", response_model=PostModel)
|
@post.post("/create_post", response_description="Add new post", response_model=PostModel)
|
||||||
async def create_post(post: PostModel,
|
async def create_post(post: PostModel,
|
||||||
# current_user: UserModel = Depends(get_current_user)
|
# current_user: UserModel = Depends(get_current_user)
|
||||||
|
# token: TokenModel
|
||||||
):
|
):
|
||||||
try:
|
try:
|
||||||
print(post)
|
# print(post)
|
||||||
# if current_user["role"] == "user":
|
# data_token = await get_current_user(token)
|
||||||
# return JSONResponse(content="Role User không được phép tạo bài viết")
|
# data = data_token.get("user_name", None)
|
||||||
datetime_now = datetime.now()
|
# user_type = data_token.get("user_type", None)
|
||||||
post.created_at = datetime_now.strftime("%m/%d/%y %H:%M:%S")
|
# if data == None:
|
||||||
|
# return JSONResponse(status_code=status.HTTP_401_UNAUTHORIZED, content={"message": "UNAUTHORIZED"})
|
||||||
|
|
||||||
|
post.created_at = datetime.datetime.now(tz=tz)
|
||||||
post = jsonable_encoder(post)
|
post = jsonable_encoder(post)
|
||||||
if(post.get("point", None) == None):
|
if(post.get("point", None) == None):
|
||||||
post["point"] = {
|
post["point"] = {
|
||||||
@@ -70,27 +82,60 @@ async def create_post(post: PostModel,
|
|||||||
"bigger60": 0,
|
"bigger60": 0,
|
||||||
"total": 0
|
"total": 0
|
||||||
}
|
}
|
||||||
|
# create_history()
|
||||||
new_post = await db["posts"].insert_one(post)
|
new_post = await db["posts"].insert_one(post)
|
||||||
created_post = await db["posts"].find_one({"_id": new_post.inserted_id})
|
created_post = await db["posts"].find_one({"_id": new_post.inserted_id})
|
||||||
|
# aaa = create_history(username=data, status="tạo bài viết",
|
||||||
|
# note=new_post.inserted_id, history=None)
|
||||||
return JSONResponse(status_code=status.HTTP_201_CREATED, content=created_post)
|
return JSONResponse(status_code=status.HTTP_201_CREATED, content=created_post)
|
||||||
except NameError:
|
except NameError:
|
||||||
return NameError
|
return NameError
|
||||||
|
|
||||||
|
|
||||||
@post.get(
|
@ post.post(
|
||||||
"/list_post", response_description="List all posts"
|
"/list_post", response_description="List all posts"
|
||||||
)
|
)
|
||||||
async def list_post():
|
async def list_post(
|
||||||
|
token: TokenModel = None
|
||||||
|
):
|
||||||
posts = await db["posts"].find().to_list(1000)
|
posts = await db["posts"].find().to_list(1000)
|
||||||
print(posts)
|
output = []
|
||||||
print(len(posts))
|
if token.token != None:
|
||||||
return posts
|
posts = jsonable_encoder(posts)
|
||||||
|
for post in posts:
|
||||||
|
url = "https://sandboxapi.ebacsi.com.vn/auth/oauth/check_token"
|
||||||
|
|
||||||
|
payload = {'token': token.token}
|
||||||
|
|
||||||
|
headers = {
|
||||||
|
'Authorization': 'Basic RGljdGlvbmFyeU1lZGlob21lOlJ4aXR6ZnZvaWFmZmNtb2l0ZW0='
|
||||||
|
}
|
||||||
|
|
||||||
|
response = requests.request(
|
||||||
|
"POST", url, headers=headers, data=payload)
|
||||||
|
data_token = json.loads(response.text)
|
||||||
|
|
||||||
|
data = data_token.get("user_name", None)
|
||||||
|
user_type = data_token.get("user_type", None)
|
||||||
|
if data == None:
|
||||||
|
return JSONResponse(status_code=status.HTTP_401_UNAUTHORIZED, content={"message": "UNAUTHORIZED"})
|
||||||
|
post = jsonable_encoder(post)
|
||||||
|
|
||||||
|
count = await db["post_save"].count_documents({"post_id": post["_id"], "username": data})
|
||||||
|
if count != 0:
|
||||||
|
post["post_save"] = True
|
||||||
|
else:
|
||||||
|
post["post_save"] = False
|
||||||
|
output.append(post)
|
||||||
|
return output
|
||||||
|
else:
|
||||||
|
return posts
|
||||||
|
|
||||||
|
|
||||||
@post.post(
|
@ post.post(
|
||||||
"/find_list_post", response_description="search list posts", response_model=List[ShowPostModel]
|
"/find_list_post", response_description="search list posts"
|
||||||
)
|
)
|
||||||
async def list_post(key_find: str, data: str = None):
|
async def list_post(key_find: str, token: TokenModel = None):
|
||||||
|
|
||||||
# point_data = ["point.less10",
|
# point_data = ["point.less10",
|
||||||
# "point.form10to20",
|
# "point.form10to20",
|
||||||
@@ -106,28 +151,55 @@ async def list_post(key_find: str, data: str = None):
|
|||||||
# age_sort = "point.bigger60"
|
# age_sort = "point.bigger60"
|
||||||
# else:
|
# else:
|
||||||
# age_sort = point_data[history.get("age")//10]
|
# age_sort = point_data[history.get("age")//10]
|
||||||
posts = await db["posts"].find({"translation_post": {"$regex": key_find}}).sort(age_sort, -1).to_list(100)
|
# posts = await db["posts"].find("$or": [
|
||||||
|
# {"translation_post": {"$regex": key_find}},
|
||||||
|
# {"translation_post": {"$regex": key_find}},
|
||||||
|
|
||||||
print(posts)
|
# ]).sort(age_sort, -1).to_list(100)
|
||||||
return posts
|
|
||||||
|
posts = await db["posts"].find({
|
||||||
|
"$or": [
|
||||||
|
{"translation_post": {"$regex": key_find, "$options": 'i'}},
|
||||||
|
{"data.content": {"$regex": key_find, "$options": 'i'}},
|
||||||
|
{"original_post": {"$regex": key_find, "$options": 'i'}},
|
||||||
|
{"summary": {"$regex": key_find, "$options": 'i'}},
|
||||||
|
]
|
||||||
|
}).sort(age_sort, -1).to_list(100)
|
||||||
|
output = []
|
||||||
|
if token.token != None:
|
||||||
|
posts = jsonable_encoder(posts)
|
||||||
|
for post in posts:
|
||||||
|
data_token = await get_current_user(token.token)
|
||||||
|
data = data_token.get("user_name", None)
|
||||||
|
user_type = data_token.get("user_type", None)
|
||||||
|
if data == None:
|
||||||
|
return JSONResponse(status_code=status.HTTP_401_UNAUTHORIZED, content={"message": "UNAUTHORIZED"})
|
||||||
|
post = jsonable_encoder(post)
|
||||||
|
|
||||||
|
count = await db["post_save"].count_documents({"post_id": post["_id"], "username": data})
|
||||||
|
if count != 0:
|
||||||
|
post["post_save"] = True
|
||||||
|
else:
|
||||||
|
post["post_save"] = False
|
||||||
|
output.append(post)
|
||||||
|
return output
|
||||||
|
|
||||||
|
|
||||||
@post.post(
|
@ post.post(
|
||||||
"/get_post_by_name"
|
"/get_post_by_name"
|
||||||
# , response_description="Get a single post", response_model=PostModel
|
# , response_description="Get a single post", response_model=PostModel
|
||||||
)
|
)
|
||||||
async def get_post_by_name(history: HistoryFindModel):
|
async def get_post_by_name(history: HistoryFindModel):
|
||||||
try:
|
try:
|
||||||
|
history.created_at = datetime.datetime.now(tz=tz)
|
||||||
history = jsonable_encoder(history)
|
history = jsonable_encoder(history)
|
||||||
token = history.get("token", None)
|
token = history.get("token", None)
|
||||||
if token == '':
|
if token == '':
|
||||||
datetime_now = datetime.now()
|
|
||||||
history["created_at"] = datetime_now.strftime("%m/%d/%y %H:%M:%S")
|
|
||||||
post = await db["posts"].find_one({"_id": history["post_id"]})
|
post = await db["posts"].find_one({"_id": history["post_id"]})
|
||||||
print(post)
|
|
||||||
for dt in post["data"]:
|
for dt in post["data"]:
|
||||||
if dt["level"] != ["*"]:
|
if not ROLE_PUBLIC in dt["level"]:
|
||||||
dt["content"] = "Bạn không có quyền xem nội dung này, vui lòng sử dụng tải khoản được cấp quyền để xem nội dung"
|
if dt["level"] != ["*"]:
|
||||||
|
post["data"].remove(dt)
|
||||||
history = jsonable_encoder(history)
|
history = jsonable_encoder(history)
|
||||||
new_his = await db["history_find"].insert_one(history)
|
new_his = await db["history_find"].insert_one(history)
|
||||||
created = await db["history_find"].find_one({"_id": new_his.inserted_id})
|
created = await db["history_find"].find_one({"_id": new_his.inserted_id})
|
||||||
@@ -138,22 +210,22 @@ async def get_post_by_name(history: HistoryFindModel):
|
|||||||
status_code=status.HTTP_400_BAD_REQUEST,
|
status_code=status.HTTP_400_BAD_REQUEST,
|
||||||
content={'message': "Bài viết không tồn tại"}
|
content={'message': "Bài viết không tồn tại"}
|
||||||
)
|
)
|
||||||
data_token = await get_current_user(history["token"])
|
data_token = await get_current_user(token)
|
||||||
data = data_token.get("user_name", None)
|
data = data_token.get("user_name", None)
|
||||||
user_type = data_token.get("user_type", None)
|
user_type = data_token.get("user_type", None)
|
||||||
if data == None:
|
if data == None:
|
||||||
return JSONResponse(status_code=status.HTTP_401_UNAUTHORIZED, content={"message": "UNAUTHORIZED"})
|
return JSONResponse(status_code=status.HTTP_401_UNAUTHORIZED, content={"message": "UNAUTHORIZED"})
|
||||||
else:
|
else:
|
||||||
datetime_now = datetime.now()
|
|
||||||
history["created_at"] = datetime_now.strftime("%m/%d/%y %H:%M:%S")
|
|
||||||
post = await db["posts"].find_one({"_id": history["post_id"]})
|
post = await db["posts"].find_one({"_id": history["post_id"]})
|
||||||
for dt in post["data"]:
|
for dt in post["data"]:
|
||||||
if dt["level"] != ["*"]:
|
if dt["level"] != ["*"]:
|
||||||
if not user_type in dt["level"]:
|
if not ROLE_PUBLIC in dt["level"]:
|
||||||
dt["content"] = "Bạn không có quyền xem nội dung này, vui lòng sử dụng tải khoản được cấp quyền để xem nội dung"
|
if not user_type in dt["level"]:
|
||||||
|
post["data"].remove(dt)
|
||||||
history = jsonable_encoder(history)
|
history = jsonable_encoder(history)
|
||||||
new_his = await db["history_find"].insert_one(history)
|
new_his = await db["history_find"].insert_one(history)
|
||||||
created = await db["history_find"].find_one({"_id": new_his.inserted_id})
|
created = await db["history_find"].find_one({"_id": new_his.inserted_id})
|
||||||
|
print(post)
|
||||||
if post is not None:
|
if post is not None:
|
||||||
return post
|
return post
|
||||||
else:
|
else:
|
||||||
@@ -173,9 +245,8 @@ async def get_post_by_name(history: HistoryFindModel):
|
|||||||
)
|
)
|
||||||
async def get_post_edit(history: HistoryFindModel):
|
async def get_post_edit(history: HistoryFindModel):
|
||||||
try:
|
try:
|
||||||
datetime_now = datetime.now()
|
history.created_at = datetime.datetime.now(tz=tz)
|
||||||
history = jsonable_encoder(history)
|
history = jsonable_encoder(history)
|
||||||
history["created_at"] = datetime_now.strftime("%m/%d/%y %H:%M:%S")
|
|
||||||
post = await db["posts"].find_one({"_id": history["post_id"]})
|
post = await db["posts"].find_one({"_id": history["post_id"]})
|
||||||
new_his = await db["history_find"].insert_one(history)
|
new_his = await db["history_find"].insert_one(history)
|
||||||
created = await db["history_find"].find_one({"_id": new_his.inserted_id})
|
created = await db["history_find"].find_one({"_id": new_his.inserted_id})
|
||||||
@@ -210,7 +281,6 @@ async def score_all_post(
|
|||||||
posts = await db["posts"].find().to_list(1000)
|
posts = await db["posts"].find().to_list(1000)
|
||||||
|
|
||||||
for dt_post in posts:
|
for dt_post in posts:
|
||||||
print(dt_post)
|
|
||||||
data_old = dt_post
|
data_old = dt_post
|
||||||
dt_post["point"]["less10"] = await db["history_find"].count_documents({"post_id": dt_post["_id"],
|
dt_post["point"]["less10"] = await db["history_find"].count_documents({"post_id": dt_post["_id"],
|
||||||
"age": {
|
"age": {
|
||||||
@@ -268,8 +338,7 @@ async def create_upload_files(
|
|||||||
i = 0
|
i = 0
|
||||||
file_location = f"../media/"
|
file_location = f"../media/"
|
||||||
for file in files:
|
for file in files:
|
||||||
now = datetime.now()
|
current_time = datetime.datetime.now(tz=tz)
|
||||||
current_time = now.strftime("%H:%M:%S_%d-%m-%Y_")
|
|
||||||
file_save = file_location + current_time + str(i) + file.filename
|
file_save = file_location + current_time + str(i) + file.filename
|
||||||
file_name.append(current_time + str(i) + file.filename)
|
file_name.append(current_time + str(i) + file.filename)
|
||||||
i = i + 1
|
i = i + 1
|
||||||
@@ -293,7 +362,7 @@ async def create_upload_post(
|
|||||||
|
|
||||||
file_name = []
|
file_name = []
|
||||||
i = 0
|
i = 0
|
||||||
now = datetime.now()
|
now = datetime.datetime.now(tz=tz)
|
||||||
current_time = now.strftime("%H_%M_%S_%d-%m-%Y_")
|
current_time = now.strftime("%H_%M_%S_%d-%m-%Y_")
|
||||||
folder_save = f"./post/" + current_time + str(i)
|
folder_save = f"./post/" + current_time + str(i)
|
||||||
Path(folder_save).mkdir(parents=True)
|
Path(folder_save).mkdir(parents=True)
|
||||||
@@ -366,13 +435,15 @@ async def video_endpoint(video_name
|
|||||||
@post.post("/edit_post/{id}", response_description="score all post", response_model=UpdatePostModel)
|
@post.post("/edit_post/{id}", response_description="score all post", response_model=UpdatePostModel)
|
||||||
async def edit_post(id: str, post: UpdatePostModel):
|
async def edit_post(id: str, post: UpdatePostModel):
|
||||||
try:
|
try:
|
||||||
|
post.updated_at = datetime.datetime.now(tz=tz)
|
||||||
post = jsonable_encoder(post)
|
post = jsonable_encoder(post)
|
||||||
|
created_post = await db["posts"].find_one({"_id": id})
|
||||||
|
post["created_at"] = created_post["created_at"]
|
||||||
await db["posts"].update_one({"_id": id}, {"$set":
|
await db["posts"].update_one({"_id": id}, {"$set":
|
||||||
post
|
post
|
||||||
})
|
})
|
||||||
created_post = await db["posts"].find_one({"_id": id})
|
|
||||||
|
|
||||||
return JSONResponse(status_code=status.HTTP_200_OK, content=created_post)
|
return JSONResponse(status_code=status.HTTP_200_OK, content=post)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return JSONResponse(
|
return JSONResponse(
|
||||||
status_code=status.HTTP_400_BAD_REQUEST,
|
status_code=status.HTTP_400_BAD_REQUEST,
|
||||||
|
|||||||
@@ -31,7 +31,10 @@ from datetime import datetime, timedelta
|
|||||||
import requests
|
import requests
|
||||||
import re
|
import re
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
|
import pytz
|
||||||
|
import datetime
|
||||||
|
tz = pytz.timezone('Asia/Ho_Chi_Minh')
|
||||||
|
history = APIRouter()
|
||||||
|
|
||||||
post_save = APIRouter()
|
post_save = APIRouter()
|
||||||
# ============= Creating path operations ==============
|
# ============= Creating path operations ==============
|
||||||
@@ -51,12 +54,16 @@ async def create_post(post_save: SavePost):
|
|||||||
data = data_output.get("user_name", None)
|
data = data_output.get("user_name", None)
|
||||||
if data == None:
|
if data == None:
|
||||||
return JSONResponse(status_code=status.HTTP_401_UNAUTHORIZED, content={"message": "UNAUTHORIZED"})
|
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})
|
||||||
datetime_now = datetime.now()
|
if count == 0:
|
||||||
post_save.created_at = datetime_now.strftime("%m/%d/%y %H:%M:%S")
|
return f"Post {post_save.post_id} not found"
|
||||||
|
post_save.created_at = datetime.datetime.now(tz=tz)
|
||||||
post_save = jsonable_encoder(post_save)
|
post_save = jsonable_encoder(post_save)
|
||||||
del post_save["token"]
|
del post_save["token"]
|
||||||
post_save["username"] = data
|
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)
|
new_post = await db["post_save"].insert_one(post_save)
|
||||||
created_post = await db["post_save"].find_one({"_id": new_post.inserted_id})
|
created_post = await db["post_save"].find_one({"_id": new_post.inserted_id})
|
||||||
return JSONResponse(status_code=status.HTTP_201_CREATED, content=created_post)
|
return JSONResponse(status_code=status.HTTP_201_CREATED, content=created_post)
|
||||||
@@ -64,7 +71,7 @@ async def create_post(post_save: SavePost):
|
|||||||
return NameError
|
return NameError
|
||||||
|
|
||||||
|
|
||||||
@post_save.get(
|
@post_save.post(
|
||||||
"/list_save_post_by_user", response_description="List save posts", response_model=SavePostModel
|
"/list_save_post_by_user", response_description="List save posts", response_model=SavePostModel
|
||||||
)
|
)
|
||||||
async def list_post(post_save: SavePost):
|
async def list_post(post_save: SavePost):
|
||||||
@@ -79,7 +86,34 @@ async def list_post(post_save: SavePost):
|
|||||||
data = data_output.get("user_name", None)
|
data = data_output.get("user_name", None)
|
||||||
if data == None:
|
if data == None:
|
||||||
return JSONResponse(status_code=status.HTTP_401_UNAUTHORIZED, content={"message": "UNAUTHORIZED"})
|
return JSONResponse(status_code=status.HTTP_401_UNAUTHORIZED, content={"message": "UNAUTHORIZED"})
|
||||||
posts = await db["post_save"].find({"username": data, "is_active": "true"}).to_list(1000)
|
posts = await db["post_save"].find({"username": data}).to_list(1000)
|
||||||
print(posts)
|
print(posts)
|
||||||
print(len(posts))
|
print(len(posts))
|
||||||
return 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
|
||||||
|
|||||||
@@ -13,8 +13,10 @@ from fastapi import File, UploadFile, FastAPI
|
|||||||
from ..models.models import (
|
from ..models.models import (
|
||||||
UserModel,
|
UserModel,
|
||||||
ShowUserModel,
|
ShowUserModel,
|
||||||
UpdateUserModel
|
UpdateUserModel,
|
||||||
|
token_test
|
||||||
)
|
)
|
||||||
|
from ..models.post import *
|
||||||
from ..dependecies import (
|
from ..dependecies import (
|
||||||
get_current_user,
|
get_current_user,
|
||||||
authenticate_user,
|
authenticate_user,
|
||||||
@@ -132,40 +134,30 @@ async def login_for_access_token(body: LoginRequest):
|
|||||||
@router.post("/token")
|
@router.post("/token")
|
||||||
async def login_for_access_token_2(body: OAuth2PasswordRequestForm = Depends()):
|
async def login_for_access_token_2(body: OAuth2PasswordRequestForm = Depends()):
|
||||||
user = await authenticate_user_oauth2(body.username, body.password)
|
user = await authenticate_user_oauth2(body.username, body.password)
|
||||||
print(body)
|
|
||||||
if not user:
|
if not user:
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||||
detail="Incorect ID or password",
|
detail="Incorect ID or password",
|
||||||
headers={"WWW-Authenticate": "Bearer"},
|
headers={"WWW-Authenticate": "Bearer"},
|
||||||
)
|
)
|
||||||
# access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)
|
|
||||||
# access_token = create_access_token(
|
|
||||||
# data={"sub": user["username"]}, expires_delta=access_token_expires
|
|
||||||
# )
|
|
||||||
# await db["users"].update_one({"username": body.username}, {"$set": {
|
|
||||||
# "last_login": datetime.now().strftime("%m/%d/%y %H:%M:%S"),
|
|
||||||
# "is_active": "true"
|
|
||||||
# }})
|
|
||||||
|
|
||||||
return {"access_token": user["access_token"], "token_type": "bearer"}
|
return {"access_token": user["access_token"], "token_type": "bearer"}
|
||||||
|
|
||||||
|
|
||||||
@router.get(
|
# @router.get(
|
||||||
"/list", response_description="List all users", response_model=List[ShowUserModel]
|
# "/list", response_description="List all users", response_model=List[ShowUserModel]
|
||||||
)
|
# )
|
||||||
async def list_users():
|
# async def list_users():
|
||||||
users = await db["users"].find().to_list(1000)
|
# users = await db["users"].find().to_list(1000)
|
||||||
for user in users:
|
# for user in users:
|
||||||
user["is_active"] = "false"
|
# user["is_active"] = "false"
|
||||||
try:
|
# try:
|
||||||
last_login = datetime.strptime(
|
# last_login = datetime.strptime(
|
||||||
user["last_login"], "%m/%d/%y %H:%M:%S")
|
# user["last_login"], "%m/%d/%y %H:%M:%S")
|
||||||
my_delta = datetime.now() - last_login
|
# my_delta = datetime.now() - last_login
|
||||||
if my_delta <= timedelta(days=30):
|
# if my_delta <= timedelta(days=30):
|
||||||
user["is_active"] = "true"
|
# user["is_active"] = "true"
|
||||||
except ValueError:
|
# except ValueError:
|
||||||
pass
|
# pass
|
||||||
|
|
||||||
|
|
||||||
@router.post("/current", response_description="Current User")
|
@router.post("/current", response_description="Current User")
|
||||||
@@ -210,30 +202,39 @@ async def refresh_token(refresh_token: TokenModel):
|
|||||||
return json.loads(response.text)
|
return json.loads(response.text)
|
||||||
|
|
||||||
|
|
||||||
@router.put("/admin/{user_id}", response_description="Update a user", response_model=UpdateUserModel)
|
# @router.put("/admin/{user_id}", response_description="Update a user", response_model=UpdateUserModel)
|
||||||
async def update_user(user_id: str, user: UpdateUserModel):
|
# async def update_user(user_id: str, user: UpdateUserModel):
|
||||||
if current_user["role"] == "admin":
|
# if current_user["role"] == "admin":
|
||||||
user = {k: v for k, v in user.dict().items() if v is not None}
|
# user = {k: v for k, v in user.dict().items() if v is not None}
|
||||||
if len(user) >= 1:
|
# if len(user) >= 1:
|
||||||
update_result = await db["users"].update_one({"_id": user_id}, {"$set": user})
|
# update_result = await db["users"].update_one({"_id": user_id}, {"$set": user})
|
||||||
if update_result.modified_count == 1:
|
# if update_result.modified_count == 1:
|
||||||
if (
|
# if (
|
||||||
updated_user := await db["users"].find_one({"_id": user_id})
|
# updated_user := await db["users"].find_one({"_id": user_id})
|
||||||
) is not None:
|
# ) is not None:
|
||||||
return updated_user
|
# return updated_user
|
||||||
if (existing_user := await db["users"].find_one({"_id": user_id})) is not None:
|
# if (existing_user := await db["users"].find_one({"_id": user_id})) is not None:
|
||||||
return existing_user
|
# return existing_user
|
||||||
raise HTTPException(
|
# raise HTTPException(
|
||||||
status_code=404, detail=f"User {user_id} not found")
|
# status_code=404, detail=f"User {user_id} not found")
|
||||||
else:
|
# else:
|
||||||
raise HTTPException(
|
# raise HTTPException(
|
||||||
status_code=403, detail=f"Not having sufficient rights to modify the content")
|
# status_code=403, detail=f"Not having sufficient rights to modify the content")
|
||||||
|
|
||||||
|
|
||||||
@router.delete("/delete_user/{user_id}", response_description="Delete a user")
|
# @router.delete("/delete_user/{user_id}", response_description="Delete a user")
|
||||||
async def delete_user(user_id: str):
|
# async def delete_user(user_id: str):
|
||||||
delete_result = await db["users"].delete_one({"_id": user_id})
|
# delete_result = await db["users"].delete_one({"_id": user_id})
|
||||||
if delete_result.deleted_count == 1:
|
# if delete_result.deleted_count == 1:
|
||||||
return JSONResponse(status_code=status.HTTP_204_NO_CONTENT)
|
# return JSONResponse(status_code=status.HTTP_204_NO_CONTENT)
|
||||||
|
|
||||||
raise HTTPException(status_code=404, detail=f"User {user_id} not found")
|
# raise HTTPException(status_code=404, detail=f"User {user_id} not found")
|
||||||
|
|
||||||
|
|
||||||
|
# @router.get(
|
||||||
|
# "/list1111", response_description="List all users", response_model=List[UpdatePostModel]
|
||||||
|
# )
|
||||||
|
# async def list_users(token: token_test = Depends(get_current_user)):
|
||||||
|
# print(token)
|
||||||
|
# users = await db["posts"].find().to_list(1000)
|
||||||
|
# return users
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
|
|||||||
|
|
||||||
oauth2_scheme = OAuth2PasswordBearer(
|
oauth2_scheme = OAuth2PasswordBearer(
|
||||||
tokenUrl="https://sandboxapi.ebacsi.com.vn/auth/oauth/token")
|
tokenUrl="https://sandboxapi.ebacsi.com.vn/auth/oauth/token")
|
||||||
|
ROLE_PUBLIC = "PUBLIC"
|
||||||
ROLE_ORG = [
|
ROLE_ORG = [
|
||||||
{
|
{
|
||||||
"name": "ORG_USER",
|
"name": "ORG_USER",
|
||||||
|
|||||||
@@ -17,5 +17,7 @@ services:
|
|||||||
- 27017:27017
|
- 27017:27017
|
||||||
volumes:
|
volumes:
|
||||||
- taskdb:/data/db
|
- taskdb:/data/db
|
||||||
|
restart: always
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
taskdb:
|
taskdb:
|
||||||
Reference in New Issue
Block a user