74 lines
2.3 KiB
Transact-SQL
74 lines
2.3 KiB
Transact-SQL
USE [RobotInstaller];
|
|
GO
|
|
|
|
SET ANSI_NULLS ON;
|
|
SET QUOTED_IDENTIFIER ON;
|
|
GO
|
|
|
|
-- Additive/idempotent migration. Safe to run more than once.
|
|
IF OBJECT_ID(N'dbo.Notifications', N'U') IS NULL
|
|
BEGIN
|
|
CREATE TABLE dbo.Notifications
|
|
(
|
|
Id UNIQUEIDENTIFIER NOT NULL
|
|
CONSTRAINT PK_Notifications PRIMARY KEY CLUSTERED
|
|
CONSTRAINT DF_Notifications_Id DEFAULT NEWSEQUENTIALID(),
|
|
RecipientUserId UNIQUEIDENTIFIER NOT NULL,
|
|
ActorUserId UNIQUEIDENTIFIER NULL,
|
|
ActorName NVARCHAR(200) NULL,
|
|
BroadcastId UNIQUEIDENTIFIER NULL,
|
|
EventType NVARCHAR(100) NOT NULL,
|
|
Severity NVARCHAR(20) NOT NULL
|
|
CONSTRAINT DF_Notifications_Severity DEFAULT N'info',
|
|
Title NVARCHAR(200) NOT NULL,
|
|
Message NVARCHAR(1000) NOT NULL,
|
|
EntityType NVARCHAR(50) NULL,
|
|
EntityId NVARCHAR(100) NULL,
|
|
ActionUrl NVARCHAR(1000) NULL,
|
|
ReadAt DATETIME2(3) NULL,
|
|
CreatedAt DATETIME2(3) NOT NULL
|
|
CONSTRAINT DF_Notifications_CreatedAt DEFAULT SYSUTCDATETIME(),
|
|
ExpiresAt DATETIME2(3) NULL,
|
|
CONSTRAINT FK_Notifications_RecipientUser
|
|
FOREIGN KEY (RecipientUserId) REFERENCES dbo.Users(Id) ON DELETE CASCADE,
|
|
CONSTRAINT CK_Notifications_Severity
|
|
CHECK (Severity IN (N'info', N'success', N'warning', N'error')),
|
|
CONSTRAINT CK_Notifications_EventType_NotBlank
|
|
CHECK (LEN(LTRIM(RTRIM(EventType))) > 0),
|
|
CONSTRAINT CK_Notifications_Title_NotBlank
|
|
CHECK (LEN(LTRIM(RTRIM(Title))) > 0),
|
|
CONSTRAINT CK_Notifications_Message_NotBlank
|
|
CHECK (LEN(LTRIM(RTRIM(Message))) > 0)
|
|
);
|
|
END;
|
|
GO
|
|
|
|
IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM sys.indexes
|
|
WHERE object_id = OBJECT_ID(N'dbo.Notifications')
|
|
AND name = N'IX_Notifications_Recipient_Read_Created'
|
|
)
|
|
BEGIN
|
|
CREATE INDEX IX_Notifications_Recipient_Read_Created
|
|
ON dbo.Notifications(RecipientUserId, ReadAt, CreatedAt DESC)
|
|
INCLUDE (Severity, Title, ActionUrl, ExpiresAt);
|
|
END;
|
|
GO
|
|
|
|
IF NOT EXISTS (
|
|
SELECT 1
|
|
FROM sys.indexes
|
|
WHERE object_id = OBJECT_ID(N'dbo.Notifications')
|
|
AND name = N'IX_Notifications_BroadcastId'
|
|
)
|
|
BEGIN
|
|
CREATE INDEX IX_Notifications_BroadcastId
|
|
ON dbo.Notifications(BroadcastId)
|
|
WHERE BroadcastId IS NOT NULL;
|
|
END;
|
|
GO
|
|
|
|
PRINT N'RobotInstaller notification schema is ready.';
|
|
GO
|