Files
SIG-CM2.0/database/migrations/V015__create_local_timezone_views.sql

89 lines
3.5 KiB
Transact-SQL

-- V015__create_local_timezone_views.sql
-- UDT-011: Vistas admin con OccurredAt convertido a hora Argentina.
--
-- Crea:
-- dbo.v_AuditEvent_Local — AuditEvent con OccurredAtLocal (offset -03:00)
-- dbo.v_SecurityEvent_Local — SecurityEvent con OccurredAtLocal (offset -03:00)
--
-- Conversión: OccurredAt AT TIME ZONE 'UTC' AT TIME ZONE 'Argentina Standard Time'
-- → offset fijo -03:00, sin DST (Argentina dejó el horario de verano en 2009).
-- → Nombre 'Argentina Standard Time' es portable: Windows + SQL Server Linux 2022+ (via ICU).
--
-- Idempotente: re-ejecutable. Guard IF OBJECT_ID IS NULL en cada vista.
-- No altera tablas base — rollback seguro sin pérdida de datos.
-- Reversa: V015_ROLLBACK.sql.
-- Run on: SIGCM2 (dev) y SIGCM2_Test (integration tests).
--
-- Covers: REQ-DB-VIEWS-001, REQ-DB-VIEWS-002, REQ-DB-VIEWS-003, REQ-DB-VIEWS-004
SET QUOTED_IDENTIFIER ON;
SET ANSI_NULLS ON;
SET NOCOUNT ON;
GO
-- ═══════════════════════════════════════════════════════════════════════
-- 1. dbo.v_AuditEvent_Local
-- ═══════════════════════════════════════════════════════════════════════
-- Nota: CREATE VIEW no permite IF...BEGIN...END directo — se usa EXEC('CREATE VIEW ...').
IF OBJECT_ID('dbo.v_AuditEvent_Local', 'V') IS NULL
BEGIN
EXEC('
CREATE VIEW dbo.v_AuditEvent_Local AS
SELECT
Id,
OccurredAt,
OccurredAt AT TIME ZONE ''UTC'' AT TIME ZONE ''Argentina Standard Time'' AS OccurredAtLocal,
ActorUserId,
ActorRoleId,
Action,
TargetType,
TargetId,
CorrelationId,
IpAddress,
UserAgent,
Metadata
FROM dbo.AuditEvent;
');
PRINT 'View dbo.v_AuditEvent_Local created.';
END
ELSE
PRINT 'View dbo.v_AuditEvent_Local already exists — skip.';
GO
-- ═══════════════════════════════════════════════════════════════════════
-- 2. dbo.v_SecurityEvent_Local
-- ═══════════════════════════════════════════════════════════════════════
IF OBJECT_ID('dbo.v_SecurityEvent_Local', 'V') IS NULL
BEGIN
EXEC('
CREATE VIEW dbo.v_SecurityEvent_Local AS
SELECT
Id,
OccurredAt,
OccurredAt AT TIME ZONE ''UTC'' AT TIME ZONE ''Argentina Standard Time'' AS OccurredAtLocal,
ActorUserId,
AttemptedUsername,
SessionId,
Action,
Result,
FailureReason,
IpAddress,
UserAgent,
Metadata
FROM dbo.SecurityEvent;
');
PRINT 'View dbo.v_SecurityEvent_Local created.';
END
ELSE
PRINT 'View dbo.v_SecurityEvent_Local already exists — skip.';
GO
PRINT '';
PRINT 'V015 applied successfully.';
PRINT ' - dbo.v_AuditEvent_Local (AuditEvent + OccurredAtLocal offset -03:00)';
PRINT ' - dbo.v_SecurityEvent_Local (SecurityEvent + OccurredAtLocal offset -03:00)';
PRINT ' - Argentina Standard Time = UTC-3 (fixed offset, no DST since 2009)';
GO