Implement on_after_update event handle

This commit is contained in:
François Voron
2020-02-03 10:48:53 +01:00
parent 05b1df9a16
commit 9353bb79cb
6 changed files with 98 additions and 8 deletions

View File

@ -78,6 +78,10 @@ class FastAPIUsers:
"""Add an event handler on successful forgot password request."""
return self._on_event(Event.ON_AFTER_FORGOT_PASSWORD)
def on_after_update(self) -> Callable:
"""Add an event handler on successful update user request."""
return self._on_event(Event.ON_AFTER_UPDATE)
def get_oauth_router(
self, oauth_client: BaseOAuth2, state_secret: str, redirect_url: str = None
) -> EventHandlersRouter:

View File

@ -15,6 +15,7 @@ class ErrorCode:
class Event(Enum):
ON_AFTER_REGISTER = auto()
ON_AFTER_FORGOT_PASSWORD = auto()
ON_AFTER_UPDATE = auto()
class EventHandlersRouter(APIRouter):

View File

@ -169,6 +169,7 @@ def get_user_router(
@router.patch("/me", response_model=user_model)
async def update_me(
request: Request,
updated_user: user_update_model, # type: ignore
user: user_db_model = Depends(get_current_active_user), # type: ignore
):
@ -176,7 +177,13 @@ def get_user_router(
models.BaseUserUpdate, updated_user,
) # Prevent mypy complain
updated_user_data = updated_user.create_update_dict()
return await _update_user(user, updated_user_data)
updated_user = await _update_user(user, updated_user_data)
await router.run_handlers(
Event.ON_AFTER_UPDATE, updated_user, updated_user_data, request
)
return updated_user
@router.get(
"/",