feat: Integrar AuditService en todos los endpoints críticos
- Auth: login, logout, login_failed con registro automático - Tickets: create, update, delete, assign con old/new values - Users: create, update, delete con sanitización de passwords - Stats: implementar top_users con JOIN a tabla users - Schema: agregar índices compuestos para mejor performance - Frontend: limpiar logs de debug en viewDetail - Manejo de errores: audit logs no afectan flujo principal
This commit is contained in:
@@ -266,9 +266,22 @@ async def get_audit_stats(
|
||||
by_resource_result = await db.execute(by_resource_query)
|
||||
by_resource_type = {row.resource_type: row.count for row in by_resource_result}
|
||||
|
||||
# Top usuarios (necesitamos hacer join - simplificado por ahora)
|
||||
# En producción podrías hacer un join con users para obtener nombres
|
||||
top_users = {} # Placeholder - implementar con join si es necesario
|
||||
# Top usuarios (con join a users para obtener nombres)
|
||||
top_users_query = select(
|
||||
User.email,
|
||||
func.count(AuditLog.id).label('count')
|
||||
).join(
|
||||
User, AuditLog.user_id == User.id
|
||||
).where(
|
||||
AuditLog.tenant_id == current_tenant.id
|
||||
).group_by(
|
||||
User.email
|
||||
).order_by(
|
||||
desc('count')
|
||||
).limit(5)
|
||||
|
||||
top_users_result = await db.execute(top_users_query)
|
||||
top_users = {row.email: row.count for row in top_users_result}
|
||||
|
||||
# Acciones críticas hoy (delete, update sensibles, etc.)
|
||||
critical_actions_query = select(func.count()).select_from(AuditLog).where(
|
||||
|
||||
Reference in New Issue
Block a user