feat(udt-011): V015 create v_AuditEvent_Local + v_SecurityEvent_Local views
This commit is contained in:
88
database/migrations/V015__create_local_timezone_views.sql
Normal file
88
database/migrations/V015__create_local_timezone_views.sql
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
-- 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
|
||||||
Reference in New Issue
Block a user