presentation.routers.api.v1.sessions¶
src.presentation.routers.api.v1.sessions
¶
Sessions resource handlers.
Handler functions for session management endpoints. Routes are registered via ROUTE_REGISTRY in routes/registry.py.
Handlers
create_session - Create session (login) delete_current_session - Delete current session (logout) list_sessions - List user sessions get_session - Get session details revoke_session - Revoke specific session revoke_all_sessions - Revoke all sessions (except current)
Classes¶
Functions¶
create_session
async
¶
create_session(
request: Request,
data: SessionCreateRequest,
auth_handler: AuthenticateUserHandler = Depends(
handler_factory(AuthenticateUserHandler)
),
session_handler: CreateSessionHandler = Depends(
handler_factory(CreateSessionHandler)
),
token_handler: GenerateAuthTokensHandler = Depends(
handler_factory(GenerateAuthTokensHandler)
),
) -> SessionCreateResponse | JSONResponse
Create a new session (login).
POST /api/v1/sessions → 201 Created
Orchestrates 3 handlers (CQRS pattern): 1. AuthenticateUser - Verify credentials 2. CreateSession - Create session with device/location 3. GenerateAuthTokens - Generate JWT + refresh token
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
request
|
Request
|
FastAPI request object. |
required |
data
|
SessionCreateRequest
|
Session creation request (email, password). |
required |
auth_handler
|
AuthenticateUserHandler
|
Authentication handler (injected). |
Depends(handler_factory(AuthenticateUserHandler))
|
session_handler
|
CreateSessionHandler
|
Session creation handler (injected). |
Depends(handler_factory(CreateSessionHandler))
|
token_handler
|
GenerateAuthTokensHandler
|
Token generation handler (injected). |
Depends(handler_factory(GenerateAuthTokensHandler))
|
Returns:
| Type | Description |
|---|---|
SessionCreateResponse | JSONResponse
|
SessionCreateResponse on success (201 Created). |
SessionCreateResponse | JSONResponse
|
JSONResponse with error on failure (400/401/403). |
Source code in src/presentation/routers/api/v1/sessions.py
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | |
delete_current_session
async
¶
delete_current_session(
request: Request,
data: SessionDeleteRequest,
authorization: Annotated[str | None, Header()] = None,
handler: LogoutUserHandler = Depends(
handler_factory(LogoutUserHandler)
),
cache: CacheProtocol = Depends(get_cache),
db_session: AsyncSession = Depends(get_db_session),
) -> Response | JSONResponse
Delete current session (logout).
DELETE /api/v1/sessions/current → 204 No Content
Revokes the refresh token to prevent new access tokens. The current access token remains valid until expiration (15 min).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
request
|
Request
|
FastAPI request object. |
required |
data
|
SessionDeleteRequest
|
Session delete request (refresh_token). |
required |
authorization
|
Annotated[str | None, Header()]
|
JWT access token from Authorization header. |
None
|
handler
|
LogoutUserHandler
|
Logout handler (injected). |
Depends(handler_factory(LogoutUserHandler))
|
Returns:
| Type | Description |
|---|---|
Response | JSONResponse
|
204 No Content on success. |
Response | JSONResponse
|
JSONResponse with error on failure (401). |
Source code in src/presentation/routers/api/v1/sessions.py
list_sessions
async
¶
list_sessions(
request: Request,
authorization: Annotated[str | None, Header()] = None,
active_only: bool = Query(
default=True,
description="Only return active sessions",
),
handler: ListSessionsHandler = Depends(
handler_factory(ListSessionsHandler)
),
cache: CacheProtocol = Depends(get_cache),
db_session: AsyncSession = Depends(get_db_session),
) -> SessionListResponse | JSONResponse
List all sessions for the current user.
GET /api/v1/sessions → 200 OK
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
request
|
Request
|
FastAPI request object. |
required |
authorization
|
Annotated[str | None, Header()]
|
JWT access token from Authorization header. |
None
|
active_only
|
bool
|
Filter to active sessions only. |
Query(default=True, description='Only return active sessions')
|
handler
|
ListSessionsHandler
|
List sessions handler (injected). |
Depends(handler_factory(ListSessionsHandler))
|
Returns:
| Type | Description |
|---|---|
SessionListResponse | JSONResponse
|
SessionListResponse with list of sessions. |
SessionListResponse | JSONResponse
|
JSONResponse with error on failure (401). |
Source code in src/presentation/routers/api/v1/sessions.py
get_session
async
¶
get_session(
request: Request,
session_id: UUID = Path(description="Session ID"),
authorization: Annotated[str | None, Header()] = None,
handler: GetSessionHandler = Depends(
handler_factory(GetSessionHandler)
),
cache: CacheProtocol = Depends(get_cache),
db_session: AsyncSession = Depends(get_db_session),
) -> SessionResponse | JSONResponse
Get details of a specific session.
GET /api/v1/sessions/{id} → 200 OK
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
request
|
Request
|
FastAPI request object. |
required |
session_id
|
UUID
|
Session ID from URL path. |
Path(description='Session ID')
|
authorization
|
Annotated[str | None, Header()]
|
JWT access token from Authorization header. |
None
|
handler
|
GetSessionHandler
|
Get session handler (injected). |
Depends(handler_factory(GetSessionHandler))
|
Returns:
| Type | Description |
|---|---|
SessionResponse | JSONResponse
|
SessionResponse with session details. |
SessionResponse | JSONResponse
|
JSONResponse with error on failure (401/404). |
Source code in src/presentation/routers/api/v1/sessions.py
revoke_session
async
¶
revoke_session(
request: Request,
session_id: UUID = Path(
description="Session ID to revoke"
),
data: SessionRevokeRequest | None = None,
authorization: Annotated[str | None, Header()] = None,
handler: RevokeSessionHandler = Depends(
handler_factory(RevokeSessionHandler)
),
cache: CacheProtocol = Depends(get_cache),
db_session: AsyncSession = Depends(get_db_session),
) -> Response | JSONResponse
Revoke a specific session.
DELETE /api/v1/sessions/{id} → 204 No Content
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
request
|
Request
|
FastAPI request object. |
required |
session_id
|
UUID
|
Session ID from URL path. |
Path(description='Session ID to revoke')
|
data
|
SessionRevokeRequest | None
|
Optional request body with reason. |
None
|
authorization
|
Annotated[str | None, Header()]
|
JWT access token from Authorization header. |
None
|
handler
|
RevokeSessionHandler
|
Revoke session handler (injected). |
Depends(handler_factory(RevokeSessionHandler))
|
Returns:
| Type | Description |
|---|---|
Response | JSONResponse
|
204 No Content on success. |
Response | JSONResponse
|
JSONResponse with error on failure (401/404). |
Source code in src/presentation/routers/api/v1/sessions.py
revoke_all_sessions
async
¶
revoke_all_sessions(
request: Request,
data: SessionRevokeAllRequest | None = None,
authorization: Annotated[str | None, Header()] = None,
handler: RevokeAllSessionsHandler = Depends(
handler_factory(RevokeAllSessionsHandler)
),
cache: CacheProtocol = Depends(get_cache),
db_session: AsyncSession = Depends(get_db_session),
) -> SessionRevokeAllResponse | JSONResponse
Revoke all sessions except current.
DELETE /api/v1/sessions → 200 OK
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
request
|
Request
|
FastAPI request object. |
required |
data
|
SessionRevokeAllRequest | None
|
Optional request body with reason. |
None
|
authorization
|
Annotated[str | None, Header()]
|
JWT access token from Authorization header. |
None
|
handler
|
RevokeAllSessionsHandler
|
Revoke all sessions handler (injected). |
Depends(handler_factory(RevokeAllSessionsHandler))
|
Returns:
| Type | Description |
|---|---|
SessionRevokeAllResponse | JSONResponse
|
SessionRevokeAllResponse with count of revoked sessions. |
SessionRevokeAllResponse | JSONResponse
|
JSONResponse with error on failure (401). |