Skip to content

Commit 6faa5f6

Browse files
authored
♻️ Re-enable user update path operations for frontend client generation (fastapi#574)
1 parent 47d30b7 commit 6faa5f6

File tree

3 files changed

+62
-51
lines changed

3 files changed

+62
-51
lines changed

src/backend/app/app/api/api_v1/endpoints/items.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
from typing import Annotated, Any
1+
from typing import Any
22

3-
from fastapi import APIRouter, Depends, HTTPException
4-
from sqlmodel import Session, select
3+
from fastapi import APIRouter, HTTPException
4+
from sqlmodel import select
55

66
from app.api.deps import CurrentUser, SessionDep
77
from app.models import Item, ItemCreate, ItemOut, ItemUpdate
@@ -90,4 +90,4 @@ def delete_item(session: SessionDep, current_user: CurrentUser, id: int) -> Any:
9090
raise HTTPException(status_code=400, detail="Not enough permissions")
9191
session.delete(item)
9292
session.commit()
93-
return item
93+
return item

src/backend/app/app/api/api_v1/endpoints/users.py

Lines changed: 52 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
from typing import Annotated, Any, List
1+
from typing import Any, List
22

3-
from fastapi import APIRouter, Body, Depends, HTTPException
4-
from fastapi.encoders import jsonable_encoder
5-
from pydantic.networks import EmailStr
3+
from fastapi import APIRouter, Depends, HTTPException
64
from sqlmodel import select
75

86
from app import crud
@@ -12,7 +10,14 @@
1210
get_current_active_superuser,
1311
)
1412
from app.core.config import settings
15-
from app.models import User, UserCreate, UserCreateOpen, UserOut, UserUpdate
13+
from app.models import (
14+
User,
15+
UserCreate,
16+
UserCreateOpen,
17+
UserOut,
18+
UserUpdate,
19+
UserUpdateMe,
20+
)
1621
from app.utils import send_new_account_email
1722

1823
router = APIRouter()
@@ -54,29 +59,24 @@ def create_user(*, session: SessionDep, user_in: UserCreate) -> Any:
5459
return user
5560

5661

57-
# TODO: Refactor when SQLModel has update
58-
# @router.put("/me")
59-
# def update_user_me(
60-
# *,
61-
# session: SessionDep,
62-
# password: Annotated[str, Body(None)],
63-
# full_name: Annotated[str, Body(None)],
64-
# email: Annotated[EmailStr, Body(None)],
65-
# current_user: CurrentUser,
66-
# ) -> UserOut:
67-
# """
68-
# Update own user.
69-
# """
70-
# current_user_data = jsonable_encoder(current_user)
71-
# user_in = UserUpdate(**current_user_data)
72-
# if password is not None:
73-
# user_in.password = password
74-
# if full_name is not None:
75-
# user_in.full_name = full_name
76-
# if email is not None:
77-
# user_in.email = email
78-
# user = crud.user.update(session, session_obj=current_user, obj_in=user_in)
79-
# return user
62+
@router.put("/me", response_model=UserOut)
63+
def update_user_me(
64+
*, session: SessionDep, body: UserUpdateMe, current_user: CurrentUser
65+
) -> Any:
66+
"""
67+
Update own user.
68+
"""
69+
# TODO: Refactor when SQLModel has update
70+
# current_user_data = jsonable_encoder(current_user)
71+
# user_in = UserUpdate(**current_user_data)
72+
# if password is not None:
73+
# user_in.password = password
74+
# if full_name is not None:
75+
# user_in.full_name = full_name
76+
# if email is not None:
77+
# user_in.email = email
78+
# user = crud.user.update(session, session_obj=current_user, obj_in=user_in)
79+
# return user
8080

8181

8282
@router.get("/me", response_model=UserOut)
@@ -127,22 +127,27 @@ def read_user_by_id(
127127
return user
128128

129129

130-
# TODO: Refactor when SQLModel has update
131-
# @router.put("/{user_id}", dependencies=[Depends(get_current_active_superuser)])
132-
# def update_user(
133-
# *,
134-
# session: SessionDep,
135-
# user_id: int,
136-
# user_in: UserUpdate,
137-
# ) -> UserOut:
138-
# """
139-
# Update a user.
140-
# """
141-
# user = session.get(User, user_id)
142-
# if not user:
143-
# raise HTTPException(
144-
# status_code=404,
145-
# detail="The user with this username does not exist in the system",
146-
# )
147-
# user = crud.user.update(session, db_obj=user, obj_in=user_in)
148-
# return user # type: ignore
130+
@router.put(
131+
"/{user_id}",
132+
dependencies=[Depends(get_current_active_superuser)],
133+
response_model=UserOut,
134+
)
135+
def update_user(
136+
*,
137+
session: SessionDep,
138+
user_id: int,
139+
user_in: UserUpdate,
140+
) -> Any:
141+
"""
142+
Update a user.
143+
"""
144+
145+
# TODO: Refactor when SQLModel has update
146+
# user = session.get(User, user_id)
147+
# if not user:
148+
# raise HTTPException(
149+
# status_code=404,
150+
# detail="The user with this username does not exist in the system",
151+
# )
152+
# user = crud.user.update(session, db_obj=user, obj_in=user_in)
153+
# return user

src/backend/app/app/models.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ class UserUpdate(UserBase):
2929
password: Union[str, None] = None
3030

3131

32+
class UserUpdateMe(BaseModel):
33+
password: Union[str, None] = None
34+
full_name: Union[str, None] = None
35+
email: Union[EmailStr, None] = None
36+
3237
# Database model, database table inferred from class name
3338
class User(UserBase, table=True):
3439
id: Union[int, None] = Field(default=None, primary_key=True)
@@ -87,6 +92,7 @@ class Token(BaseModel):
8792
class TokenPayload(BaseModel):
8893
sub: Union[int, None] = None
8994

95+
9096
class NewPassword(BaseModel):
9197
token: str
9298
new_password: str

0 commit comments

Comments
 (0)