2026-04-02 16:36:35 +08:00
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
from typing import Protocol
|
|
|
|
|
|
|
|
|
|
from v1.auth.schemas import (
|
2026-04-02 18:39:35 +08:00
|
|
|
EmailSessionCreateRequest,
|
2026-04-02 16:36:35 +08:00
|
|
|
OtpSendRequest,
|
|
|
|
|
SessionRefreshRequest,
|
|
|
|
|
SessionResponse,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AuthServiceGateway(Protocol):
|
|
|
|
|
async def send_otp(self, request: OtpSendRequest) -> None:
|
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
2026-04-02 18:39:35 +08:00
|
|
|
async def create_email_session(
|
|
|
|
|
self, request: EmailSessionCreateRequest
|
2026-04-02 16:36:35 +08:00
|
|
|
) -> SessionResponse:
|
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
|
|
|
|
async def refresh_session(self, request: SessionRefreshRequest) -> SessionResponse:
|
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
|
|
|
|
async def delete_session(self, refresh_token: str | None) -> None:
|
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AuthService:
|
|
|
|
|
_gateway: AuthServiceGateway
|
|
|
|
|
|
|
|
|
|
def __init__(
|
|
|
|
|
self,
|
|
|
|
|
gateway: AuthServiceGateway,
|
|
|
|
|
) -> None:
|
|
|
|
|
self._gateway = gateway
|
|
|
|
|
|
|
|
|
|
async def send_otp(self, request: OtpSendRequest) -> None:
|
|
|
|
|
await self._gateway.send_otp(request)
|
|
|
|
|
|
2026-04-02 18:39:35 +08:00
|
|
|
async def create_email_session(
|
|
|
|
|
self, request: EmailSessionCreateRequest
|
2026-04-02 16:36:35 +08:00
|
|
|
) -> SessionResponse:
|
2026-04-02 18:39:35 +08:00
|
|
|
return await self._gateway.create_email_session(request)
|
2026-04-02 16:36:35 +08:00
|
|
|
|
|
|
|
|
async def refresh_session(self, request: SessionRefreshRequest) -> SessionResponse:
|
|
|
|
|
return await self._gateway.refresh_session(request)
|
|
|
|
|
|
|
|
|
|
async def delete_session(self, refresh_token: str | None) -> None:
|
|
|
|
|
await self._gateway.delete_session(refresh_token)
|