2026-02-05 15:13:06 +08:00
|
|
|
from __future__ import annotations
|
|
|
|
|
|
2026-02-25 10:20:43 +08:00
|
|
|
from typing import Protocol
|
2026-02-05 15:13:06 +08:00
|
|
|
|
2026-02-24 16:38:30 +08:00
|
|
|
from v1.auth.schemas import (
|
2026-02-25 13:34:02 +08:00
|
|
|
AuthResendCodeResponse,
|
|
|
|
|
AuthSignupStartResponse,
|
2026-02-05 15:13:06 +08:00
|
|
|
AuthTokenResponse,
|
2026-02-25 10:20:43 +08:00
|
|
|
AuthUserByEmailResponse,
|
2026-02-05 15:13:06 +08:00
|
|
|
LoginRequest,
|
|
|
|
|
RefreshRequest,
|
2026-02-25 13:34:02 +08:00
|
|
|
SignupResendRequest,
|
|
|
|
|
SignupStartRequest,
|
|
|
|
|
SignupVerifyRequest,
|
2026-02-05 15:13:06 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AuthServiceGateway(Protocol):
|
2026-02-25 13:34:02 +08:00
|
|
|
async def signup_start(
|
|
|
|
|
self, request: SignupStartRequest
|
|
|
|
|
) -> AuthSignupStartResponse:
|
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
|
|
|
|
async def signup_verify(self, request: SignupVerifyRequest) -> AuthTokenResponse:
|
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
|
|
|
|
async def signup_resend(
|
|
|
|
|
self, request: SignupResendRequest
|
|
|
|
|
) -> AuthResendCodeResponse:
|
2026-02-05 15:13:06 +08:00
|
|
|
raise NotImplementedError
|
|
|
|
|
|
|
|
|
|
async def login(self, request: LoginRequest) -> AuthTokenResponse:
|
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
|
|
|
|
async def refresh(self, request: RefreshRequest) -> AuthTokenResponse:
|
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
|
|
|
|
async def logout(self, refresh_token: str | None) -> None:
|
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
2026-02-25 10:20:43 +08:00
|
|
|
async def get_user_by_email(self, email: str) -> AuthUserByEmailResponse:
|
|
|
|
|
raise NotImplementedError
|
2026-02-05 15:13:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class AuthService:
|
|
|
|
|
_gateway: AuthServiceGateway
|
|
|
|
|
|
|
|
|
|
def __init__(self, gateway: AuthServiceGateway) -> None:
|
|
|
|
|
self._gateway = gateway
|
|
|
|
|
|
2026-02-25 13:34:02 +08:00
|
|
|
async def signup_start(
|
|
|
|
|
self, request: SignupStartRequest
|
|
|
|
|
) -> AuthSignupStartResponse:
|
|
|
|
|
return await self._gateway.signup_start(request)
|
|
|
|
|
|
|
|
|
|
async def signup_verify(self, request: SignupVerifyRequest) -> AuthTokenResponse:
|
|
|
|
|
return await self._gateway.signup_verify(request)
|
|
|
|
|
|
|
|
|
|
async def signup_resend(
|
|
|
|
|
self, request: SignupResendRequest
|
|
|
|
|
) -> AuthResendCodeResponse:
|
|
|
|
|
return await self._gateway.signup_resend(request)
|
2026-02-05 15:13:06 +08:00
|
|
|
|
|
|
|
|
async def login(self, request: LoginRequest) -> AuthTokenResponse:
|
|
|
|
|
return await self._gateway.login(request)
|
|
|
|
|
|
|
|
|
|
async def refresh(self, request: RefreshRequest) -> AuthTokenResponse:
|
|
|
|
|
return await self._gateway.refresh(request)
|
|
|
|
|
|
|
|
|
|
async def logout(self, refresh_token: str | None) -> None:
|
|
|
|
|
await self._gateway.logout(refresh_token)
|
|
|
|
|
|
2026-02-25 10:20:43 +08:00
|
|
|
async def get_user_by_email(self, email: str) -> AuthUserByEmailResponse:
|
|
|
|
|
return await self._gateway.get_user_by_email(email)
|