Added api for admin update user

This commit is contained in:
Saurab-Shrestha 2024-02-08 14:27:47 +05:45
parent 5c2a025280
commit a4931a1a31
7 changed files with 70 additions and 11 deletions

View File

@ -25,7 +25,7 @@ if config.config_file_name is not None:
# add your model's MetaData object here # add your model's MetaData object here
# for 'autogenerate' support # for 'autogenerate' support
# from myapp import mymodel # from myapp import mymodel1w
# target_metadata = mymodel.Base.metadata # target_metadata = mymodel.Base.metadata
target_metadata = Base.metadata target_metadata = Base.metadata

View File

@ -285,3 +285,61 @@ def delete_user(
content={"message": "User deleted successfully"}, content={"message": "User deleted successfully"},
) )
@router.post("/update_user")
def admin_update_user(
*,
db: Session = Depends(deps.get_db),
user_update: schemas.UserAdminUpdate,
current_user: models.User = Security(
deps.get_current_user,
scopes=[Role.ADMIN["name"], Role.SUPER_ADMIN["name"]],
),
) -> Any:
"""
Update the user by the Admin/Super_ADMIN
"""
existing_user = crud.user.get(db, id=user_update.id)
if existing_user is None:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail=f"User not found with id: {user_update.id}",
)
if existing_user.fullname == user_update.fullname:
pass
else:
fullname = crud.user.get_by_name(db, name=user_update.fullname)
if fullname:
raise HTTPException(
status_code=409,
detail="The user with this username already exists!",
)
role = crud.role.get_by_name(db,name=user_update.role)
if role.id == 1:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail=f"Cannot create SUPER ADMIN!",
)
user_role = crud.user_role.get_by_user_id(db, user_id=existing_user.id)
role_in = schemas.UserRoleUpdate(
user_id = existing_user.id,
role_id = role.id,
)
role = crud.user_role.update(db, db_obj=user_role, obj_in=role_in)
user_in = schemas.UserUpdate(fullname=user_update.fullname,
email=existing_user.email, company_id=existing_user.user_role.company_id)
print("User in: ", user_in)
user = crud.user.update(db, db_obj=existing_user, obj_in=user_in)
return JSONResponse(
status_code=status.HTTP_200_OK,
content={"message": "User updated successfully",
}
)

View File

@ -3,7 +3,7 @@ from typing import Any, Dict, List, Optional, Union
from private_gpt.users.core.security import get_password_hash, verify_password from private_gpt.users.core.security import get_password_hash, verify_password
from private_gpt.users.crud.base import CRUDBase from private_gpt.users.crud.base import CRUDBase
from private_gpt.users.models.user import User from private_gpt.users.models.user import User
from private_gpt.users.schemas.user import UserCreate, UserUpdate, AdminUpdate from private_gpt.users.schemas.user import UserCreate, UserUpdate
from private_gpt.users.models.user_role import UserRole from private_gpt.users.models.user_role import UserRole
from private_gpt.users.models.role import Role from private_gpt.users.models.role import Role
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
@ -89,5 +89,8 @@ class CRUDUser(CRUDBase[User, UserCreate, UserUpdate]):
.all() .all()
) )
def get_by_name(self, db: Session, *, name: str) -> Optional[User]:
return db.query(self.model).filter(User.fullname == name).first()
user = CRUDUser(User) user = CRUDUser(User)

View File

@ -17,9 +17,4 @@ class CRUDUserRole(CRUDBase[UserRole, UserRoleCreate, UserRoleUpdate]):
)-> Optional[UserRole]: )-> Optional[UserRole]:
return db.query(UserRole).filter(UserRole.user_id == user_id).delete() return db.query(UserRole).filter(UserRole.user_id == user_id).delete()
# def update_user_role(
# self, db: Session, *, user_id: int, role_id: int
# ) -> Optional[UserRole]:
# return self.update(db, )
user_role = CRUDUserRole(UserRole) user_role = CRUDUserRole(UserRole)

View File

@ -1,6 +1,6 @@
from .role import Role, RoleCreate, RoleInDB, RoleUpdate from .role import Role, RoleCreate, RoleInDB, RoleUpdate
from .token import TokenSchema, TokenPayload from .token import TokenSchema, TokenPayload
from .user import User, UserCreate, UserInDB, UserUpdate, UserBaseSchema, Profile, UsernameUpdate, DeleteUser, AdminUpdate from .user import User, UserCreate, UserInDB, UserUpdate, UserBaseSchema, Profile, UsernameUpdate, DeleteUser, UserAdminUpdate
from .user_role import UserRole, UserRoleCreate, UserRoleInDB, UserRoleUpdate from .user_role import UserRole, UserRoleCreate, UserRoleInDB, UserRoleUpdate
from .subscription import Subscription, SubscriptionBase, SubscriptionCreate, SubscriptionUpdate from .subscription import Subscription, SubscriptionBase, SubscriptionCreate, SubscriptionUpdate
from .company import Company, CompanyBase, CompanyCreate, CompanyUpdate from .company import Company, CompanyBase, CompanyCreate, CompanyUpdate

View File

@ -58,6 +58,8 @@ class Profile(UserBaseSchema):
class DeleteUser(BaseModel): class DeleteUser(BaseModel):
id: int id: int
class AdminUpdate(BaseModel):
class UserAdminUpdate(BaseModel):
id: int
fullname: str fullname: str
role: int role: str

View File

@ -19,6 +19,7 @@ class UserRoleCreate(UserRoleBase):
# Properties to receive via API on update # Properties to receive via API on update
class UserRoleUpdate(BaseModel): class UserRoleUpdate(BaseModel):
user_id: int
role_id: int role_id: int
class Config: class Config: