Stored Procedures
Raft usa SQL Server como núcleo persistente. Los adjuntos muestran dos cosas:
- el esquema completo vive en scripts SQL versionados;
- y el backend invoca procedimientos concretos en lugar de reescribir la lógica en C#.
Convención de nombres
| Objeto | Prefijo | Ejemplo |
|---|---|---|
| Stored Procedure SQL Server | usp_ | usp_DatabaseInstances_SoftDelete |
| View | vw_ | vw_UserDashboard |
| Function | fn_ | fn_CalculateStorageUsedMB |
Scripts relevantes
Los archivos más importantes que aparecieron en los adjuntos son:
Database/sql-server-schema.mdDatabase/Scripts/init-dns-tables-and-sps.sqlDatabase/Scripts/add_ai_usage_logs_table_and_sps.sqlDatabase/Scripts/update_profile_and_organization.sqlDatabase/Scripts/update_profile_full_migration.sqlDatabase/Scripts/usp_Users_ResetPasswordDirect.sqlDatabase/migration_n8n_persistence.sql
Procedimientos y vistas clave documentados en los adjuntos
| Objeto | Uso | Estado |
|---|---|---|
usp_Users_GetSharedSqlServerProvisioningState | Devuelve el login compartido y el estado de provisión para un usuario | Activo en la lógica de ciclo de vida |
usp_DatabaseInstances_SoftDelete | Marca una base como Orphaned y libera permisos | Activo en la lógica de ciclo de vida |
usp_DatabaseInstances_GetDueForPause | Detecta bases activas con 7 días de inactividad | Activo en la lógica de ciclo de vida |
usp_DatabaseInstances_GetDueForOrphan | Detecta bases pausadas listas para pasar a Orphaned | Activo en la lógica de ciclo de vida |
usp_DatabaseInstances_GetDueForDelete | Detecta bases Orphaned listas para purga física | Activo en la lógica de ciclo de vida |
vw_UserDashboard | Alimenta el dashboard del usuario con estados activos y pausados | Activa |
usp_DnsRecords_* | Capa SQL para la gestión de registros DNS | Referenciada por la célula DNS |
usp_N8n* / N8nAccounts SPs | Persistencia y trazabilidad de aprovisionamiento N8N | Referenciada por la célula N8N |
Reglas obligatorias
- No concatenar SQL dinámico con strings.
- Usar parámetros tipados siempre que exista entrada de usuario.
- Validar cuotas, TTL y conexiones antes de cambiar el estado de una base.
- Dejar el trabajo diferido a jobs o workers, no al request HTTP.
Plantilla de documentación
Cuando se documente un nuevo procedimiento:
usp_NombreDelProcedimiento
- Propósito: qué resuelve.
- Llamado desde: qué endpoint o servicio lo invoca.
- Parámetros: tabla con nombre, tipo y obligatoriedad.
- Retorno: result set, output params o código.
- Reglas: validaciones y límites.
- Errores:
THROWoRAISERRORque el backend debe interpretar.
Ejemplo
EXEC usp_DatabaseInstances_GetDueForPause
@InactivityDays = 7;