diff --git a/database/migrations/V001__create_usuario.sql b/database/migrations/V001__create_usuario.sql new file mode 100644 index 0000000..0f3b16e --- /dev/null +++ b/database/migrations/V001__create_usuario.sql @@ -0,0 +1,43 @@ +-- V001__create_usuario.sql +-- Creates the core Usuario table for SIG-CM2 +-- Run on: SIGCM2 (prod) and SIGCM2_Test (integration tests) + +SET QUOTED_IDENTIFIER ON; +SET ANSI_NULLS ON; +GO + +IF OBJECT_ID('dbo.Usuario', 'U') IS NULL +BEGIN + CREATE TABLE dbo.Usuario ( + Id INT IDENTITY(1,1) NOT NULL CONSTRAINT PK_Usuario PRIMARY KEY, + Username NVARCHAR(50) NOT NULL, + PasswordHash NVARCHAR(255) NOT NULL, + Nombre NVARCHAR(100) NOT NULL, + Apellido NVARCHAR(100) NOT NULL, + Email NVARCHAR(150) NULL, + Rol VARCHAR(30) NOT NULL, + PermisosJson NVARCHAR(MAX) NOT NULL CONSTRAINT DF_Usuario_Permisos DEFAULT('[]'), + Activo BIT NOT NULL CONSTRAINT DF_Usuario_Activo DEFAULT(1), + FechaCreacion DATETIME2(3) NOT NULL CONSTRAINT DF_Usuario_FechaCreacion DEFAULT(SYSUTCDATETIME()), + FechaModificacion DATETIME2(3) NULL, + UltimoLogin DATETIME2(3) NULL, + CONSTRAINT UQ_Usuario_Username UNIQUE (Username), + CONSTRAINT CK_Usuario_Rol CHECK (Rol IN ('admin','vendedor','tasador','consulta')) + ); + + PRINT 'Table dbo.Usuario created successfully.'; +END +ELSE +BEGIN + PRINT 'Table dbo.Usuario already exists — skipping.'; +END +GO + +IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = 'IX_Usuario_Username_Activo' AND object_id = OBJECT_ID('dbo.Usuario')) +BEGIN + CREATE INDEX IX_Usuario_Username_Activo + ON dbo.Usuario(Username) + WHERE Activo = 1; + PRINT 'Index IX_Usuario_Username_Activo created.'; +END +GO diff --git a/database/seeds/S001__seed_admin.sql b/database/seeds/S001__seed_admin.sql new file mode 100644 index 0000000..844b29a --- /dev/null +++ b/database/seeds/S001__seed_admin.sql @@ -0,0 +1,30 @@ +-- S001__seed_admin.sql +-- Seeds the default admin user for SIG-CM2 +-- BCrypt hash of '@Diego550@' at cost 12 +-- Generated: 2026-04-13 + +SET QUOTED_IDENTIFIER ON; +SET ANSI_NULLS ON; +SET NOCOUNT ON; +GO + +IF NOT EXISTS (SELECT 1 FROM dbo.Usuario WHERE Username = 'admin') +BEGIN + INSERT INTO dbo.Usuario (Username, PasswordHash, Nombre, Apellido, Email, Rol, PermisosJson, Activo) + VALUES ( + 'admin', + '$2a$12$rmq6tlSAQ8WXhR2CwLCSeuwCJKz/.8Eab95UQCUNfwe4dokeOqMcW', + 'Administrador', + 'Sistema', + NULL, + 'admin', + '["*"]', + 1 + ); + PRINT 'Admin user seeded successfully.'; +END +ELSE +BEGIN + PRINT 'Admin user already exists — skipping.'; +END +GO