mirror of
https://github.com/openmax-server/server.git
synced 2026-05-23 03:51:43 +03:00
feat: 23 опкод для регистрации, смс шлюз, докер
This commit is contained in:
41
sms-gateway/app/routers/sms.py
Normal file
41
sms-gateway/app/routers/sms.py
Normal file
@@ -0,0 +1,41 @@
|
||||
from __future__ import annotations
|
||||
import logging
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
from pydantic import BaseModel
|
||||
from app.deps import get_sms_service
|
||||
from app.service import RateLimitExceeded, SmsService
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
router = APIRouter(prefix="/sms", tags=["SMS"])
|
||||
|
||||
class SendCodeRequest(BaseModel):
|
||||
phone_number: str
|
||||
|
||||
class SendCodeResponse(BaseModel):
|
||||
success: bool
|
||||
provider: str
|
||||
phone_number: str
|
||||
code: str | None = None
|
||||
error: str | None = None
|
||||
|
||||
@router.post("/send", response_model=SendCodeResponse)
|
||||
async def send_code(
|
||||
request: SendCodeRequest,
|
||||
service: SmsService = Depends(get_sms_service),
|
||||
) -> SendCodeResponse:
|
||||
try:
|
||||
result = await service.send_code(request.phone_number)
|
||||
except RateLimitExceeded as e:
|
||||
raise HTTPException(
|
||||
status_code=429,
|
||||
detail={"error": "Слишком много запросов для этого номера", "retry_after": e.retry_after},
|
||||
headers={"Retry-After": str(e.retry_after)},
|
||||
)
|
||||
if not result.success:
|
||||
raise HTTPException(status_code=502, detail=result.error or "Ошибка отправки SMS")
|
||||
return SendCodeResponse(
|
||||
success=True,
|
||||
provider=result.provider,
|
||||
phone_number=request.phone_number,
|
||||
code=result.code,
|
||||
)
|
||||
Reference in New Issue
Block a user