89 lines
3.5 KiB
Transact-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
|