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-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,
|
|
|
|
|
SignupRequest,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AuthServiceGateway(Protocol):
|
|
|
|
|
async def signup(self, request: SignupRequest) -> AuthTokenResponse:
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
async def signup(self, request: SignupRequest) -> AuthTokenResponse:
|
|
|
|
|
return await self._gateway.signup(request)
|
|
|
|
|
|
|
|
|
|
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)
|