Add frontend/modules/loyalty with types, API client, design system, feature pages and thin App Router routes under app/loyalty/. BFF proxy at app/api/loyalty/. Include loyalty frontend docs. Co-authored-by: Cursor <cursoragent@cursor.com>
40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
"""Common API dependencies."""
|
|
from __future__ import annotations
|
|
|
|
from uuid import UUID
|
|
|
|
from fastapi import Depends, Query, Request
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.core.database import get_db
|
|
from app.core.security import get_current_user
|
|
from shared.exceptions import TenantNotResolvedError
|
|
from shared.pagination import PaginationParams
|
|
from shared.security import CurrentUser
|
|
from shared.tenant import STATE_TENANT_ID
|
|
|
|
__all__ = [
|
|
"get_db",
|
|
"get_pagination",
|
|
"require_tenant",
|
|
"get_current_user",
|
|
"AsyncSession",
|
|
"CurrentUser",
|
|
]
|
|
|
|
|
|
def get_pagination(
|
|
page: int = Query(default=1, ge=1),
|
|
page_size: int = Query(default=20, ge=1, le=500),
|
|
) -> PaginationParams:
|
|
return PaginationParams(page=page, page_size=page_size)
|
|
|
|
|
|
def require_tenant(request: Request) -> UUID:
|
|
tenant_id = getattr(request.state, STATE_TENANT_ID, None)
|
|
if tenant_id is None:
|
|
raise TenantNotResolvedError(
|
|
"tenant قابل تشخیص نبود. هدر X-Tenant-ID را ارسال کنید."
|
|
)
|
|
return tenant_id
|