96 lines
3.5 KiB
Python
96 lines
3.5 KiB
Python
from fastapi import APIRouter, Depends, status, HTTPException, Request, Query
|
|
from sqlalchemy.orm import Session
|
|
from typing import List
|
|
|
|
from app.config.database import get_db
|
|
from app.middleware.auth_middleware import get_current_user, require_access, User
|
|
from app.schemas.auth.tenant_module_schema import TenantModuleCreate, TenantModuleUpdate, TenantModuleResponse
|
|
from app.controllers.auth.tenant_module_controller import TenantModuleController
|
|
from app.services.system.audit_log_service import AuditLogService
|
|
from app.helper.helpers import get_client_ip
|
|
|
|
router = APIRouter()
|
|
|
|
@router.get("/{tenant_id}/modules", response_model=List[TenantModuleResponse])
|
|
def list_tenant_modules(
|
|
tenant_id: str,
|
|
current_user: User = Depends(get_current_user),
|
|
_: bool = Depends(require_access("tenants.manage")),
|
|
db: Session = Depends(get_db)
|
|
):
|
|
return TenantModuleController.list_tenant_modules(db, tenant_id)
|
|
|
|
@router.post("/{tenant_id}/modules", response_model=TenantModuleResponse)
|
|
def assign_module_to_tenant(
|
|
request: Request,
|
|
tenant_id: str,
|
|
assignment_data: TenantModuleCreate,
|
|
current_user: User = Depends(get_current_user),
|
|
_: bool = Depends(require_access("tenants.manage")),
|
|
db: Session = Depends(get_db)
|
|
):
|
|
result = TenantModuleController.assign_module(db, tenant_id, assignment_data)
|
|
|
|
AuditLogService.log(
|
|
db=db,
|
|
module_name="Tenant Modules",
|
|
action_type="CREATE",
|
|
entity_id=str(result.id),
|
|
entity_name=f"Tenant {tenant_id} / Module {assignment_data.module_id}",
|
|
description=f"Module assigned to tenant {tenant_id}",
|
|
performed_by_id=str(current_user.id),
|
|
performed_by_email=current_user.email,
|
|
ip_address=get_client_ip(request),
|
|
new_values=assignment_data.model_dump(mode='json')
|
|
)
|
|
return result
|
|
|
|
@router.put("/{tenant_id}/modules/{tenant_module_id}", response_model=TenantModuleResponse)
|
|
def update_tenant_module(
|
|
request: Request,
|
|
tenant_id: str,
|
|
tenant_module_id: str,
|
|
update_data: TenantModuleUpdate,
|
|
current_user: User = Depends(get_current_user),
|
|
_: bool = Depends(require_access("tenants.manage")),
|
|
db: Session = Depends(get_db)
|
|
):
|
|
result = TenantModuleController.update_assignment(db, tenant_id, tenant_module_id, update_data)
|
|
|
|
AuditLogService.log(
|
|
db=db,
|
|
module_name="Tenant Modules",
|
|
action_type="UPDATE",
|
|
entity_id=tenant_module_id,
|
|
entity_name=f"Tenant {tenant_id} / Module assignment",
|
|
description=f"Tenant module assignment updated",
|
|
performed_by_id=str(current_user.id),
|
|
performed_by_email=current_user.email,
|
|
ip_address=get_client_ip(request),
|
|
new_values=update_data.model_dump(exclude_unset=True)
|
|
)
|
|
return result
|
|
|
|
@router.delete("/{tenant_id}/modules/{tenant_module_id}")
|
|
def remove_module_from_tenant(
|
|
request: Request,
|
|
tenant_id: str,
|
|
tenant_module_id: str,
|
|
current_user: User = Depends(get_current_user),
|
|
_: bool = Depends(require_access("tenants.manage")),
|
|
db: Session = Depends(get_db)
|
|
):
|
|
result = TenantModuleController.remove_assignment(db, tenant_id, tenant_module_id)
|
|
|
|
AuditLogService.log(
|
|
db=db,
|
|
module_name="Tenant Modules",
|
|
action_type="DELETE",
|
|
entity_id=tenant_module_id,
|
|
entity_name=f"Tenant {tenant_id} / Module assignment",
|
|
description=f"Tenant module assignment deleted",
|
|
performed_by_id=str(current_user.id),
|
|
performed_by_email=current_user.email,
|
|
ip_address=get_client_ip(request),
|
|
)
|
|
return result |