Implementazioni varie

This commit is contained in:
2026-03-27 20:59:06 +01:00
parent 047990811f
commit 46784aca4c
40 changed files with 4090 additions and 34 deletions
+106
View File
@@ -0,0 +1,106 @@
"""
Router regole di smistamento automatico (Feature 2).
Endpoint:
GET /routing-rules lista regole del tenant
POST /routing-rules crea regola (admin)
GET /routing-rules/{id} dettaglio regola
PUT /routing-rules/{id} aggiorna regola (admin)
DELETE /routing-rules/{id} elimina regola (admin)
POST /routing-rules/{id}/toggle abilita/disabilita regola (admin)
"""
import uuid
from fastapi import APIRouter, status
from app.dependencies import AdminUser, CurrentUser, DB
from app.schemas.routing_rule import (
RoutingRuleCreate,
RoutingRuleListResponse,
RoutingRuleResponse,
RoutingRuleUpdate,
)
from app.services.routing_rule_service import RoutingRuleService
router = APIRouter(tags=["Routing Rules"])
@router.get("/routing-rules", response_model=RoutingRuleListResponse)
async def list_rules(
current_user: CurrentUser,
db: DB,
) -> RoutingRuleListResponse:
"""Elenca le regole di smistamento del tenant."""
svc = RoutingRuleService(db)
items, total = await svc.list_rules(current_user.tenant_id)
return RoutingRuleListResponse(
items=[RoutingRuleResponse.model_validate(r) for r in items],
total=total,
)
@router.post("/routing-rules", response_model=RoutingRuleResponse, status_code=status.HTTP_201_CREATED)
async def create_rule(
data: RoutingRuleCreate,
current_user: AdminUser,
db: DB,
) -> RoutingRuleResponse:
"""Crea una nuova regola di smistamento (solo admin)."""
svc = RoutingRuleService(db)
rule = await svc.create_rule(current_user.tenant_id, data, created_by=current_user.id)
return RoutingRuleResponse.model_validate(rule)
@router.get("/routing-rules/{rule_id}", response_model=RoutingRuleResponse)
async def get_rule(
rule_id: uuid.UUID,
current_user: CurrentUser,
db: DB,
) -> RoutingRuleResponse:
"""Restituisce il dettaglio di una regola."""
svc = RoutingRuleService(db)
rule = await svc.get_rule(current_user.tenant_id, rule_id)
return RoutingRuleResponse.model_validate(rule)
@router.put("/routing-rules/{rule_id}", response_model=RoutingRuleResponse)
async def update_rule(
rule_id: uuid.UUID,
data: RoutingRuleUpdate,
current_user: AdminUser,
db: DB,
) -> RoutingRuleResponse:
"""Aggiorna una regola di smistamento (solo admin)."""
svc = RoutingRuleService(db)
rule = await svc.update_rule(current_user.tenant_id, rule_id, data)
return RoutingRuleResponse.model_validate(rule)
@router.delete("/routing-rules/{rule_id}", status_code=status.HTTP_204_NO_CONTENT)
async def delete_rule(
rule_id: uuid.UUID,
current_user: AdminUser,
db: DB,
) -> None:
"""Elimina una regola di smistamento (solo admin)."""
svc = RoutingRuleService(db)
await svc.delete_rule(current_user.tenant_id, rule_id)
@router.post("/routing-rules/{rule_id}/toggle", response_model=RoutingRuleResponse)
async def toggle_rule(
rule_id: uuid.UUID,
current_user: AdminUser,
db: DB,
) -> RoutingRuleResponse:
"""Abilita o disabilita una regola di smistamento (admin)."""
svc = RoutingRuleService(db)
rule = await svc.get_rule(current_user.tenant_id, rule_id)
from app.schemas.routing_rule import RoutingRuleUpdate
updated = await svc.update_rule(
current_user.tenant_id,
rule_id,
RoutingRuleUpdate(is_active=not rule.is_active),
)
return RoutingRuleResponse.model_validate(updated)