refactor: dbcrud->dbuser

This commit is contained in:
2024-12-03 22:12:30 +09:00
parent 9f61ab300c
commit 6504d8d29f
7 changed files with 224 additions and 68 deletions

View File

@@ -1,6 +1,7 @@
from fastapi import APIRouter, Request, Depends, Response, Security, encoders
import typing as t
from app.core.common import ApiReturnModel,ApiReturnPage
from app.core.apiexception import APIException
from app.db.session import get_db
from app.db.crud import (
get_allusers,
@@ -12,129 +13,174 @@ from app.db.crud import (
assign_userrole,
get_roles,
)
from app.db.schemas import UserCreate, UserEdit, User, UserOut,Role
from app.db.schemas import UserCreate, UserEdit, User, UserOut,RoleBase,Permission
from app.core.auth import get_current_user,get_current_active_user, get_current_active_superuser
from app.db.cruddb.dbuser import dbuser
users_router = r = APIRouter()
@r.get(
"/users",
response_model=t.List[User],
"/users",tags=["User"],
response_model=ApiReturnPage[User],
response_model_exclude_none=True,
)
async def users_list(
response: Response,
request: Request,
db=Depends(get_db),
current_user=Depends(get_current_active_user),
):
"""
Get all users
"""
if current_user.is_superuser:
users = get_allusers(db)
else:
users = get_users(db)
# This is necessary for react-admin to work
#response.headers["Content-Range"] = f"0-9/{len(users)}"
return users
try:
if current_user.is_superuser:
users = dbuser.get_users(db)
else:
users = dbuser.get_users_not_admin(db)
return users
except Exception as e:
raise APIException('user:users',request.url._url,f"Error occurred while get user list",e)
@r.get("/users/me", response_model=User, response_model_exclude_none=True)
@r.get("/users/me", tags=["User"],
response_model=ApiReturnModel[User],
response_model_exclude_none=True,
)
async def user_me(current_user=Depends(get_current_active_user)):
"""
Get own user
"""
return current_user
return ApiReturnModel(data = current_user)
@r.get(
"/users/{user_id}",
response_model=User,
"/users/{user_id}",tags=["User"],
response_model=ApiReturnModel[User|None],
response_model_exclude_none=True,
)
async def user_details(
request: Request,
user_id: int,
db=Depends(get_db),
current_user=Depends(get_current_active_superuser),
current_user=Depends(get_current_active_user),
):
"""
Get any user details
"""
user = get_user(db, user_id)
return user
# return encoders.jsonable_encoder(
# user, skip_defaults=True, exclude_none=True,
# )
try:
user = dbuser.get(db, user_id)
if user:
if user.is_superuser and not current_user.is_superuser:
user = None
return ApiReturnModel(data = user)
except Exception as e:
raise APIException('user:users',request.url._url,f"Error occurred while get user({user_id}) detail:",e)
@r.post("/users", response_model=User, response_model_exclude_none=True)
@r.post("/users", tags=["User"],
response_model=ApiReturnModel[User|None],
response_model_exclude_none=True,
)
async def user_create(
request: Request,
user: UserCreate,
db=Depends(get_db),
current_user=Depends(get_current_active_superuser),
current_user=Depends(get_current_active_user),
):
"""
Create a new user
"""
return create_user(db, user)
try:
if user.is_superuser and not current_user.is_superuser:
return ApiReturnModel(data = None)
return ApiReturnModel(data =dbuser.create_user(db, user,current_user.id))
except Exception as e:
raise APIException('user:users',request.url._url,f"Error occurred while create user({user.email}):",e)
@r.put(
"/users/{user_id}", response_model=User, response_model_exclude_none=True
"/users/{user_id}", tags=["User"],
response_model=ApiReturnModel[User|None],
response_model_exclude_none=True,
)
async def user_edit(
request: Request,
user_id: int,
user: UserEdit,
db=Depends(get_db),
current_user=Depends(get_current_active_superuser),
current_user=Depends(get_current_active_user),
):
"""
Update existing user
"""
return edit_user(db, user_id, user)
try:
if user.is_superuser and not current_user.is_superuser:
return ApiReturnModel(data = None)
return ApiReturnModel(data = dbuser.edit_user(db,user_id,user,current_user.id))
except Exception as e:
raise APIException('user:users',request.url._url,f"Error occurred while edit user({user_id}):",e)
@r.delete(
"/users/{user_id}", response_model=User, response_model_exclude_none=True
"/users/{user_id}", tags=["User"],
response_model=ApiReturnModel[UserOut|None],
response_model_exclude_none=True
)
async def user_delete(
request: Request,
user_id: int,
db=Depends(get_db),
current_user=Depends(get_current_active_superuser),
current_user=Depends(get_current_active_user),
):
"""
Delete existing user
"""
return delete_user(db, user_id)
try:
user = dbuser.get(db,user_id)
if user.is_superuser and not current_user.is_superuser:
return ApiReturnModel(data = None)
return ApiReturnModel(data = dbuser.delete_user(db, user_id))
except Exception as e:
raise APIException('user:users',request.url._url,f"Error occurred while delete user({user_id}):",e)
@r.post("/userrole",
response_model=User,
@r.post("/userrole",tags=["User"],
response_model=ApiReturnModel[User],
response_model_exclude_none=True,)
async def assign_role(
request: Request,
userid:int,
user_id:int,
roles:t.List[int],
db=Depends(get_db)
):
return assign_userrole(db,userid,roles)
try:
return ApiReturnModel(data = dbuser.assign_userrole(db,user_id,roles))
except Exception as e:
raise APIException('user:userrole',request.url._url,f"Error occurred while assign user({user_id}) roles({roles}):",e)
@r.get(
"/roles",
response_model=t.List[Role],
"/roles",tags=["User"],
response_model=ApiReturnModel[t.List[RoleBase]|None],
response_model_exclude_none=True,
)
async def roles_list(
response: Response,
request: Request,
db=Depends(get_db),
current_user=Security(get_current_active_user, scopes=["role_list"]),
current_user=Depends(get_current_active_user),
#current_user=Security(get_current_active_user, scopes=["role_list"]),
):
roles = get_roles(db)
return roles
try:
if current_user.is_superuser:
roles = dbuser.get_roles(db)
else:
if len(current_user.roles)>0:
roles = dbuser.get_roles_by_level(db,current_user.roles[0].level)
else:
roles = []
return ApiReturnModel(data = roles)
except Exception as e:
raise APIException('user:roles',request.url._url,f"Error occurred while get roles:",e)
@r.get(
"/userpermssions",tags=["User"],
response_model=ApiReturnModel[t.List[Permission]|None],
response_model_exclude_none=True,
)
async def permssions_list(
request: Request,
db=Depends(get_db),
current_user=Depends(get_current_active_user),
#current_user=Security(get_current_active_user, scopes=["role_list"]),
):
try:
if current_user.is_superuser:
permissions = dbuser.get_permissions(db)
else:
if len(current_user.roles)>0:
permissions = dbuser.get_user_permissions(db,current_user.id)
else:
permissions = []
return ApiReturnModel(data = permissions)
except Exception as e:
raise APIException('user:userpermssions',request.url._url,f"Error occurred while get user(){current_user.id} permissions:",e)