mirror of
https://github.com/idrainformatica/PecFlow.git
synced 2026-06-16 12:45:42 +02:00
Implementazioni varie
This commit is contained in:
@@ -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)
|
||||
Reference in New Issue
Block a user