♻️ Re-enable user update path operations for frontend client generation (#574)

This commit is contained in:
Alejandra
2023-12-27 14:39:42 -05:00
committed by GitHub
parent 47d30b75c3
commit 6faa5f66d5
3 changed files with 62 additions and 51 deletions

View File

@@ -1,7 +1,7 @@
from typing import Annotated, Any
from typing import Any
from fastapi import APIRouter, Depends, HTTPException
from sqlmodel import Session, select
from fastapi import APIRouter, HTTPException
from sqlmodel import select
from app.api.deps import CurrentUser, SessionDep
from app.models import Item, ItemCreate, ItemOut, ItemUpdate
@@ -90,4 +90,4 @@ def delete_item(session: SessionDep, current_user: CurrentUser, id: int) -> Any:
raise HTTPException(status_code=400, detail="Not enough permissions")
session.delete(item)
session.commit()
return item
return item

View File

@@ -1,8 +1,6 @@
from typing import Annotated, Any, List
from typing import Any, List
from fastapi import APIRouter, Body, Depends, HTTPException
from fastapi.encoders import jsonable_encoder
from pydantic.networks import EmailStr
from fastapi import APIRouter, Depends, HTTPException
from sqlmodel import select
from app import crud
@@ -12,7 +10,14 @@ from app.api.deps import (
get_current_active_superuser,
)
from app.core.config import settings
from app.models import User, UserCreate, UserCreateOpen, UserOut, UserUpdate
from app.models import (
User,
UserCreate,
UserCreateOpen,
UserOut,
UserUpdate,
UserUpdateMe,
)
from app.utils import send_new_account_email
router = APIRouter()
@@ -54,29 +59,24 @@ def create_user(*, session: SessionDep, user_in: UserCreate) -> Any:
return user
# TODO: Refactor when SQLModel has update
# @router.put("/me")
# def update_user_me(
# *,
# session: SessionDep,
# password: Annotated[str, Body(None)],
# full_name: Annotated[str, Body(None)],
# email: Annotated[EmailStr, Body(None)],
# current_user: CurrentUser,
# ) -> UserOut:
# """
# Update own user.
# """
# current_user_data = jsonable_encoder(current_user)
# user_in = UserUpdate(**current_user_data)
# if password is not None:
# user_in.password = password
# if full_name is not None:
# user_in.full_name = full_name
# if email is not None:
# user_in.email = email
# user = crud.user.update(session, session_obj=current_user, obj_in=user_in)
# return user
@router.put("/me", response_model=UserOut)
def update_user_me(
*, session: SessionDep, body: UserUpdateMe, current_user: CurrentUser
) -> Any:
"""
Update own user.
"""
# TODO: Refactor when SQLModel has update
# current_user_data = jsonable_encoder(current_user)
# user_in = UserUpdate(**current_user_data)
# if password is not None:
# user_in.password = password
# if full_name is not None:
# user_in.full_name = full_name
# if email is not None:
# user_in.email = email
# user = crud.user.update(session, session_obj=current_user, obj_in=user_in)
# return user
@router.get("/me", response_model=UserOut)
@@ -127,22 +127,27 @@ def read_user_by_id(
return user
# TODO: Refactor when SQLModel has update
# @router.put("/{user_id}", dependencies=[Depends(get_current_active_superuser)])
# def update_user(
# *,
# session: SessionDep,
# user_id: int,
# user_in: UserUpdate,
# ) -> UserOut:
# """
# Update a user.
# """
# user = session.get(User, user_id)
# if not user:
# raise HTTPException(
# status_code=404,
# detail="The user with this username does not exist in the system",
# )
# user = crud.user.update(session, db_obj=user, obj_in=user_in)
# return user # type: ignore
@router.put(
"/{user_id}",
dependencies=[Depends(get_current_active_superuser)],
response_model=UserOut,
)
def update_user(
*,
session: SessionDep,
user_id: int,
user_in: UserUpdate,
) -> Any:
"""
Update a user.
"""
# TODO: Refactor when SQLModel has update
# user = session.get(User, user_id)
# if not user:
# raise HTTPException(
# status_code=404,
# detail="The user with this username does not exist in the system",
# )
# user = crud.user.update(session, db_obj=user, obj_in=user_in)
# return user

View File

@@ -29,6 +29,11 @@ class UserUpdate(UserBase):
password: Union[str, None] = None
class UserUpdateMe(BaseModel):
password: Union[str, None] = None
full_name: Union[str, None] = None
email: Union[EmailStr, None] = None
# Database model, database table inferred from class name
class User(UserBase, table=True):
id: Union[int, None] = Field(default=None, primary_key=True)
@@ -87,6 +92,7 @@ class Token(BaseModel):
class TokenPayload(BaseModel):
sub: Union[int, None] = None
class NewPassword(BaseModel):
token: str
new_password: str