88 lines
3.2 KiB
Python
88 lines
3.2 KiB
Python
from fastapi import APIRouter, Depends, status, HTTPException, Query
|
|
from sqlalchemy.orm import Session
|
|
from typing import List, Optional
|
|
import uuid
|
|
from app.config.database import get_db
|
|
from app.controllers.auth.tenant_controller import TenantController
|
|
from app.schemas.auth.tenant_schema import TenantCreate, TenantUpdate, TenantResponse, TenantPaginatedResponse
|
|
from app.middleware.auth_middleware import get_current_user, require_access
|
|
from app.middleware.tenant_middleware import get_tenant_id_from_user
|
|
from app.models.auth.user_model import User
|
|
|
|
router = APIRouter()
|
|
|
|
@router.post("/create", response_model=TenantResponse, status_code=status.HTTP_201_CREATED)
|
|
def create_tenant(
|
|
tenant_data: TenantCreate,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user),
|
|
_ = Depends(require_access("superadmin.tenant.create"))
|
|
):
|
|
return TenantController.create_tenant(db, tenant_data)
|
|
|
|
@router.get("/get", response_model=List[TenantResponse])
|
|
def get_all_tenants(
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user),
|
|
_ = Depends(require_access("superadmin.tenant.read"))
|
|
):
|
|
return TenantController.get_all_tenants(db)
|
|
|
|
@router.get("/get/{tenant_id}", response_model=TenantResponse)
|
|
def get_tenant(
|
|
tenant_id: uuid.UUID,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user),
|
|
_ = Depends(require_access("superadmin.tenant.read"))
|
|
):
|
|
return TenantController.get_tenant_by_id(db, tenant_id)
|
|
|
|
@router.get("/me", response_model=TenantResponse)
|
|
def get_my_tenant(
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user),
|
|
):
|
|
tenant_id = get_tenant_id_from_user(current_user)
|
|
if not tenant_id:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
detail="Tenant not found"
|
|
)
|
|
return TenantController.get_tenant_by_id(db, tenant_id)
|
|
|
|
@router.put("/update/{tenant_id}", response_model=TenantResponse)
|
|
def update_tenant(
|
|
tenant_id: uuid.UUID,
|
|
tenant_data: TenantUpdate,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user),
|
|
_ = Depends(require_access("superadmin.tenant.update"))
|
|
):
|
|
return TenantController.update_tenant(db, tenant_id, tenant_data)
|
|
|
|
@router.delete("/delete/{tenant_id}")
|
|
def delete_tenant(
|
|
tenant_id: uuid.UUID,
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user),
|
|
_ = Depends(require_access("superadmin.tenant.delete"))
|
|
):
|
|
return TenantController.delete_tenant(db, tenant_id)
|
|
|
|
@router.get("/list", response_model=TenantPaginatedResponse)
|
|
def list_tenants(
|
|
page: int = Query(1, ge=1, description="Page number"),
|
|
page_size: int = Query(10, ge=1, le=100, description="Items per page"),
|
|
search: Optional[str] = Query(None, description="Search in name, domain, or ID"),
|
|
is_active: Optional[bool] = Query(None, description="Filter by active status"),
|
|
db: Session = Depends(get_db),
|
|
current_user: User = Depends(get_current_user),
|
|
_ = Depends(require_access("superadmin.tenant.read")),
|
|
):
|
|
return TenantController.get_tenants_paginated(
|
|
db=db,
|
|
page=page,
|
|
page_size=page_size,
|
|
search=search,
|
|
is_active=is_active,
|
|
) |