Skip to content

presentation.routers.api.v1.email_verifications

src.presentation.routers.api.v1.email_verifications

Email verifications resource handlers.

Handler functions for email verification endpoints. Routes are registered via ROUTE_REGISTRY in routes/registry.py.

Handlers

create_email_verification - Create email verification (verify email)

Classes

Functions

create_email_verification async

create_email_verification(
    request: Request,
    data: EmailVerificationCreateRequest,
    handler: VerifyEmailHandler = Depends(
        handler_factory(VerifyEmailHandler)
    ),
) -> EmailVerificationCreateResponse | JSONResponse

Create email verification (verify email).

POST /api/v1/email-verifications → 201 Created

Verifies user's email address using the token sent during registration. After verification, user can create a session (login).

Parameters:

Name Type Description Default
request Request

FastAPI request object.

required
data EmailVerificationCreateRequest

Email verification request (token).

required
handler VerifyEmailHandler

Verify email handler (injected).

Depends(handler_factory(VerifyEmailHandler))

Returns:

Type Description
EmailVerificationCreateResponse | JSONResponse

EmailVerificationCreateResponse on success (201 Created).

EmailVerificationCreateResponse | JSONResponse

JSONResponse with error on failure (400/404).

Source code in src/presentation/routers/api/v1/email_verifications.py
async def create_email_verification(
    request: Request,
    data: EmailVerificationCreateRequest,
    handler: VerifyEmailHandler = Depends(handler_factory(VerifyEmailHandler)),
) -> EmailVerificationCreateResponse | JSONResponse:
    """Create email verification (verify email).

    POST /api/v1/email-verifications → 201 Created

    Verifies user's email address using the token sent during registration.
    After verification, user can create a session (login).

    Args:
        request: FastAPI request object.
        data: Email verification request (token).
        handler: Verify email handler (injected).

    Returns:
        EmailVerificationCreateResponse on success (201 Created).
        JSONResponse with error on failure (400/404).
    """
    # Create command from request data
    command = VerifyEmail(
        token=data.token,
    )

    # Execute handler
    result = await handler.handle(command, request)

    # Handle result
    match result:
        case Success(value=_):
            return EmailVerificationCreateResponse()
        case Failure(error=error):
            # Map error to ApplicationErrorCode
            error_mapping = {
                "token_not_found": ApplicationErrorCode.NOT_FOUND,
                "token_expired": ApplicationErrorCode.COMMAND_VALIDATION_FAILED,
                "token_already_used": ApplicationErrorCode.COMMAND_VALIDATION_FAILED,
                "user_not_found": ApplicationErrorCode.NOT_FOUND,
            }
            error_code = error_mapping.get(
                error, ApplicationErrorCode.COMMAND_VALIDATION_FAILED
            )

            app_error = ApplicationError(
                code=error_code,
                message=_get_user_friendly_error(error),
            )
            return ErrorResponseBuilder.from_application_error(
                error=app_error,
                request=request,
                trace_id=get_trace_id() or "",
            )