Files
saas_backend/app/routes/auth/role.py
T
2026-01-17 14:18:00 +05:30

87 lines
2.9 KiB
Python

from fastapi import APIRouter, Depends, status, Query
from sqlalchemy.orm import Session
from typing import List, Optional
import uuid
from app.config.database import get_db
from app.controllers.auth.role_controller import RoleController
from app.schemas.auth.role_schema import (
RoleCreate,
RoleUpdate,
RoleResponse,
RoleWithAccessesResponse,
RolePaginatedResponse,
)
from app.middleware.auth_middleware import get_current_user, require_access
from app.models.auth.user_model import User
router = APIRouter()
@router.post("/create", response_model=RoleResponse, status_code=status.HTTP_201_CREATED)
def create_role(
role_data: RoleCreate,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user),
_=Depends(require_access("admin.role.create")),
):
return RoleController.create_role(
db, role_data, current_user.tenant_id if current_user.tenant_id else None
)
@router.get("/get", response_model=List[RoleResponse])
def get_all_roles(
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user),
_=Depends(require_access("admin.role.read")),
):
return RoleController.get_all_roles(
db, current_user.tenant_id if current_user.tenant_id else None
)
@router.get("/get/{role_id}", response_model=RoleWithAccessesResponse)
def get_role(
role_id: uuid.UUID,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user),
_=Depends(require_access("admin.role.read")),
):
return RoleController.get_role_with_accesses(db, role_id)
@router.put("/update/{role_id}", response_model=RoleResponse)
def update_role(
role_id: uuid.UUID,
role_data: RoleUpdate,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user),
_=Depends(require_access("admin.role.update")),
):
is_superadmin = current_user.tenant_id is None
return RoleController.update_role(
db, role_id, role_data, is_superadmin=is_superadmin
)
@router.delete("/delete/{role_id}")
def delete_role(
role_id: uuid.UUID,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user),
_=Depends(require_access("admin.role.delete")),
):
is_superadmin = current_user.tenant_id is None
return RoleController.delete_role(db, role_id, is_superadmin=is_superadmin)
@router.get("/list", response_model=RolePaginatedResponse)
def list_roles(
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 role name or ID"),
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user),
_=Depends(require_access("admin.role.read")),
):
return RoleController.get_roles_paginated(
db=db,
current_user_tenant_id=current_user.tenant_id,
page=page,
page_size=page_size,
search=search,
)