TorbatYar/backend/services/identity-access/app/api/v1/users.py
Mortezakoohjani 800b0ba2c5 Deploy TorbatYar for torbatyar.ir with nginx multi-tenant routing.
Wire production domain, CORS for tenant subdomains, celery volume mounts, and nginx reverse proxy configs for apex, API, identity, auth, and wildcard tenants.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-21 21:43:33 +03:30

71 lines
2.3 KiB
Python

from uuid import UUID
from fastapi import APIRouter, Depends, Header, Query, status
from sqlalchemy.ext.asyncio import AsyncSession
from app.core.database import get_db
from app.core.security import require_platform_admin
from app.schemas.user import MembershipCreate, MembershipRead, UserCreate, UserRead
from app.services.user_service import UserService
router = APIRouter(tags=["users"])
@router.get("/users", response_model=list[UserRead])
async def list_users(
offset: int = Query(default=0, ge=0),
limit: int = Query(default=50, ge=1, le=100),
db: AsyncSession = Depends(get_db),
_user=Depends(require_platform_admin),
) -> list[UserRead]:
users = await UserService(db).list_users(offset=offset, limit=limit)
return [UserRead.model_validate(user) for user in users]
@router.post("/users", response_model=UserRead, status_code=status.HTTP_201_CREATED)
async def register_user(
payload: UserCreate,
db: AsyncSession = Depends(get_db),
_user=Depends(require_platform_admin),
) -> UserRead:
user = await UserService(db).register(payload)
return UserRead.model_validate(user)
@router.get("/users/{user_id}", response_model=UserRead)
async def get_user(
user_id: UUID,
db: AsyncSession = Depends(get_db),
_user=Depends(require_platform_admin),
) -> UserRead:
user = await UserService(db).get(user_id)
return UserRead.model_validate(user)
@router.post(
"/tenants/{tenant_id}/members",
response_model=MembershipRead,
status_code=status.HTTP_201_CREATED,
)
async def add_tenant_member(
tenant_id: UUID,
payload: MembershipCreate,
db: AsyncSession = Depends(get_db),
_user=Depends(require_platform_admin),
authorization: str | None = Header(default=None),
) -> MembershipRead:
membership = await UserService(db).add_member(
tenant_id, payload, authorization=authorization
)
return MembershipRead.model_validate(membership)
@router.get("/tenants/{tenant_id}/members", response_model=list[MembershipRead])
async def list_tenant_members(
tenant_id: UUID,
db: AsyncSession = Depends(get_db),
_user=Depends(require_platform_admin),
) -> list[MembershipRead]:
rows = await UserService(db).list_members(tenant_id)
return [MembershipRead.model_validate(m) for m in rows]