Files
soft_usite/rest/controllers/role_controller.go
T
Lizandro GuarnizoandClaude Sonnet 5 08265510ea feat(umind): mide el consumo de IA, OCR y transcripción por tenant
Es la base del cobro por uso: hasta ahora no había ninguna medición de
consumo en todo el repo.

- UmindUso registra cada evento facturable con el costo YA calculado al
  precio vigente del plan. Congelarlo evita que subir un precio revalúe
  consumo pasado, que haría indefendible una factura ante un reclamo.
- callAI devuelve los tokens que reportó el proveedor (campo usage, igual
  en todos los OpenAI-compatibles; input+output en Anthropic). Se mide
  cada ronda de tool-calling, no solo la última: todas gastan tokens.
- ExtraerTextoOCR y TranscribirAudioSelfHosted reciben agenteID; 0 = no
  medir, que es lo que pasan los botones "Probar" del panel de staff.
- Aviso al superar el tope del plan, una vez por mes y sin cortar el
  servicio. El flag de "ya avisé" es en memoria a propósito.
- GET /app/umind/uso con filtros de fecha: resumen por tipo + detalle.
- Test del cálculo de costo por tipo, incluida fracción de 1k tokens y
  tenant sin plan.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-13 11:41:23 -05:00

118 lines
3.4 KiB
Go
Executable File

package controllers
import (
"fmt"
"github.com/gofiber/fiber/v2"
"github.com/sujit-baniya/fiber-boilerplate/app"
"github.com/sujit-baniya/fiber-boilerplate/pkg/models"
"gorm.io/gorm"
)
func CreateNewRole(c *fiber.Ctx) error {
var role models.Role
c.BodyParser(&role)
app.Http.Database.Create(&role)
return c.JSON(role)
}
func RemoveRole(c *fiber.Ctx) error {
var role models.Role
c.BodyParser(&role)
app.Http.Database.
Delete(&models.RoleAndPermission{})
app.Http.Auth.Enforcer.LoadPolicy()
return nil
}
func AssignRoleToUser(c *fiber.Ctx) error {
var roleRequest models.RoleRequest
var role1 models.RoleAndPermission
c.BodyParser(&roleRequest)
role := models.RoleAndPermission{
Ptype: "g",
V0: fmt.Sprintf("%d", roleRequest.UserID),
V1: roleRequest.Role,
}
err := app.Http.Database.Unscoped().First(&role1, models.RoleAndPermission{Ptype: role.Ptype, V0: role.V0, V1: role.V1}).Error
if err != nil {
app.Http.Database.Create(&role)
app.Http.Auth.Enforcer.LoadPolicy()
return c.JSON(role)
}
role1.DeletedAt = gorm.DeletedAt{Valid: false}
app.Http.Database.Unscoped().Save(role1)
app.Http.Auth.Enforcer.LoadPolicy()
return c.JSON(role1)
}
func RevokeRoleFromUser(c *fiber.Ctx) error {
var roleRequest models.RoleRequest
c.BodyParser(&roleRequest)
app.Http.Database.
Delete(
&models.RoleAndPermission{},
models.RoleAndPermission{V0: fmt.Sprintf("%d", roleRequest.UserID), V1: roleRequest.Role})
app.Http.Auth.Enforcer.LoadPolicy()
return c.JSON("Role Revoked from user")
}
func ChangeRoleForUser(c *fiber.Ctx) error {
var role models.RoleRequest
var role1 models.RoleAndPermission
c.BodyParser(&role)
err := app.Http.Database.Unscoped().First(&role1, models.RoleAndPermission{Ptype: "g", V0: fmt.Sprintf("%d", role.UserID), V1: role.OldRole}).Error
if err == nil {
role1.V1 = role.Role
role1.DeletedAt = gorm.DeletedAt{Valid: false}
app.Http.Database.Unscoped().Save(role1)
app.Http.Auth.Enforcer.LoadPolicy()
return c.JSON("Role Changed for user")
}
return c.JSON("Role doesn't exists")
}
func AddPermissionOnRole(c *fiber.Ctx) error {
var permission models.PermissionRequest
var role1 models.RoleAndPermission
c.BodyParser(&permission)
if permission.Role != "" && permission.Module != "" && permission.Action != "" {
role := models.RoleAndPermission{
Ptype: "p",
V0: permission.Role,
V1: permission.Module,
V2: permission.Action,
Category: "permission",
}
err := app.Http.Database.Unscoped().First(&role1, models.RoleAndPermission{Ptype: role.Ptype, V0: role.V0, V1: role.V1, V2: role.V2}).Error
if err != nil {
app.Http.Database.Create(&role)
}
role1.DeletedAt = gorm.DeletedAt{Valid: false}
app.Http.Database.Unscoped().Save(role1)
}
if permission.Role != "" && permission.Route != "" && permission.Method != "" {
fmt.Println(1)
role := models.RoleAndPermission{
Ptype: "p",
V0: permission.Role,
V1: permission.Route,
V2: permission.Method,
Category: "route",
}
err := app.Http.Database.Unscoped().First(&role1, models.RoleAndPermission{Ptype: role.Ptype, V0: role.V0, V1: role.V1, V2: role.V2}).Error
if err != nil {
app.Http.Database.Create(&role)
}
role1.DeletedAt = gorm.DeletedAt{Valid: false}
app.Http.Database.Unscoped().Save(role1)
}
app.Http.Auth.Enforcer.LoadPolicy()
return nil
}
func RemovePermissionFromRole(c *fiber.Ctx) error {
return nil
}
func ChangePermissionOnRole(c *fiber.Ctx) error {
return nil
}