sciagent code + Gitea Actions CI/CD
CI/CD / backend (push) Failing after 2m8s
CI/CD / frontend (push) Failing after 1m40s
CI/CD / deploy (push) Has been skipped

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Thinh Lam
2026-06-30 09:38:30 +07:00
commit 688fac73e9
1167 changed files with 158244 additions and 0 deletions
@@ -0,0 +1,78 @@
-- ============================================================================
-- DYD — Create Production Database + Dedicated Login
-- Run on SQL Server as sysadmin (sa)
-- ============================================================================
USE [master];
GO
-- 1. Create database
IF NOT EXISTS (SELECT 1 FROM sys.databases WHERE name = N'DYD_Prod')
BEGIN
CREATE DATABASE [DYD_Prod]
COLLATE Vietnamese_CI_AS;
-- Optional: set recovery model (Simple cho dev/staging, Full cho prod backup log)
ALTER DATABASE [DYD_Prod] SET RECOVERY SIMPLE;
PRINT 'Database [DYD_Prod] created.';
END
ELSE
BEGIN
PRINT 'Database [DYD_Prod] already exists. Skipping.';
END
GO
-- 2. Create dedicated login for the app (KHÔNG dùng sa trong production)
-- TODO: Thay '<APP_DB_PASSWORD>' bằng password mạnh (32+ char, random)
-- Generate: [System.Web.Security.Membership]::GeneratePassword(32, 8)
IF NOT EXISTS (SELECT 1 FROM sys.sql_logins WHERE name = N'dyd_app')
BEGIN
CREATE LOGIN [dyd_app] WITH
PASSWORD = N'<APP_DB_PASSWORD>',
DEFAULT_DATABASE = [DYD_Prod],
CHECK_EXPIRATION = OFF,
CHECK_POLICY = ON;
PRINT 'Login [dyd_app] created.';
END
ELSE
BEGIN
PRINT 'Login [dyd_app] already exists. Skipping.';
END
GO
-- 3. Map login to database user + assign roles
USE [DYD_Prod];
GO
IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name = N'dyd_app')
BEGIN
CREATE USER [dyd_app] FOR LOGIN [dyd_app];
PRINT 'User [dyd_app] created in [DYD_Prod].';
END
GO
-- Grant roles:
-- db_datareader — SELECT
-- db_datawriter — INSERT, UPDATE, DELETE
-- db_ddladmin — CREATE/ALTER/DROP (cho EF migrations)
ALTER ROLE db_datareader ADD MEMBER [dyd_app];
ALTER ROLE db_datawriter ADD MEMBER [dyd_app];
ALTER ROLE db_ddladmin ADD MEMBER [dyd_app];
PRINT 'Roles granted to [dyd_app].';
GO
-- 4. Verify
SELECT
DB_NAME() AS Database_Name,
USER_NAME() AS Current_User,
@@VERSION AS Server_Version;
GO
PRINT '';
PRINT '==========================================';
PRINT ' DONE — DYD_Prod ready.';
PRINT '==========================================';
PRINT '';
PRINT 'Connection string cho .NET (điền password đã tạo):';
PRINT 'Server=103.124.94.58,1433;Database=DYD_Prod;User Id=dyd_app;Password=<APP_DB_PASSWORD>;TrustServerCertificate=True;MultipleActiveResultSets=True;';
GO
+653
View File
@@ -0,0 +1,653 @@
IF OBJECT_ID(N'[__EFMigrationsHistory]') IS NULL
BEGIN
CREATE TABLE [__EFMigrationsHistory] (
[MigrationId] nvarchar(150) NOT NULL,
[ProductVersion] nvarchar(32) NOT NULL,
CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId])
);
END;
GO
BEGIN TRANSACTION;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE TABLE [AppraisalTeams] (
[Id] uniqueidentifier NOT NULL,
[Name] nvarchar(200) NOT NULL,
[Description] nvarchar(max) NULL,
[IsActive] bit NOT NULL,
[CreatedAt] datetime2 NOT NULL,
[UpdatedAt] datetime2 NULL,
[CreatedBy] nvarchar(max) NULL,
[UpdatedBy] nvarchar(max) NULL,
[IsDeleted] bit NOT NULL,
[DeletedAt] datetime2 NULL,
[DeletedBy] nvarchar(max) NULL,
CONSTRAINT [PK_AppraisalTeams] PRIMARY KEY ([Id])
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE TABLE [AspNetRoles] (
[Id] nvarchar(450) NOT NULL,
[Name] nvarchar(256) NULL,
[NormalizedName] nvarchar(256) NULL,
[ConcurrencyStamp] nvarchar(max) NULL,
CONSTRAINT [PK_AspNetRoles] PRIMARY KEY ([Id])
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE TABLE [AspNetUsers] (
[Id] nvarchar(450) NOT NULL,
[FullName] nvarchar(max) NOT NULL,
[IsEnabled] bit NOT NULL,
[CreatedAt] datetime2 NOT NULL,
[LastLoginAt] datetime2 NULL,
[RefreshToken] nvarchar(max) NULL,
[RefreshTokenExpiresAt] datetime2 NULL,
[UnitId] uniqueidentifier NULL,
[UserName] nvarchar(256) NULL,
[NormalizedUserName] nvarchar(256) NULL,
[Email] nvarchar(256) NULL,
[NormalizedEmail] nvarchar(256) NULL,
[EmailConfirmed] bit NOT NULL,
[PasswordHash] nvarchar(max) NULL,
[SecurityStamp] nvarchar(max) NULL,
[ConcurrencyStamp] nvarchar(max) NULL,
[PhoneNumber] nvarchar(max) NULL,
[PhoneNumberConfirmed] bit NOT NULL,
[TwoFactorEnabled] bit NOT NULL,
[LockoutEnd] datetimeoffset NULL,
[LockoutEnabled] bit NOT NULL,
[AccessFailedCount] int NOT NULL,
CONSTRAINT [PK_AspNetUsers] PRIMARY KEY ([Id])
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE TABLE [AuditLogs] (
[Id] uniqueidentifier NOT NULL,
[EntityName] nvarchar(100) NOT NULL,
[EntityId] nvarchar(100) NOT NULL,
[Action] nvarchar(50) NOT NULL,
[ActorUserId] nvarchar(max) NULL,
[ActorDisplayName] nvarchar(max) NULL,
[PreviousValue] nvarchar(max) NULL,
[NewValue] nvarchar(max) NULL,
[Metadata] nvarchar(max) NULL,
[IpAddress] nvarchar(max) NULL,
[UserAgent] nvarchar(max) NULL,
[CreatedAt] datetime2 NOT NULL,
[UpdatedAt] datetime2 NULL,
[CreatedBy] nvarchar(max) NULL,
[UpdatedBy] nvarchar(max) NULL,
CONSTRAINT [PK_AuditLogs] PRIMARY KEY ([Id])
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE TABLE [Notifications] (
[Id] uniqueidentifier NOT NULL,
[RecipientUserId] nvarchar(450) NOT NULL,
[Title] nvarchar(200) NOT NULL,
[Message] nvarchar(max) NOT NULL,
[Type] nvarchar(20) NOT NULL,
[Link] nvarchar(max) NULL,
[IsRead] bit NOT NULL,
[ReadAt] datetime2 NULL,
[CreatedAt] datetime2 NOT NULL,
[UpdatedAt] datetime2 NULL,
[CreatedBy] nvarchar(max) NULL,
[UpdatedBy] nvarchar(max) NULL,
CONSTRAINT [PK_Notifications] PRIMARY KEY ([Id])
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE TABLE [SystemSettings] (
[Id] uniqueidentifier NOT NULL,
[Key] nvarchar(100) NOT NULL,
[Value] nvarchar(max) NOT NULL,
[Description] nvarchar(max) NULL,
[Category] nvarchar(50) NOT NULL,
[IsSecret] bit NOT NULL,
[CreatedAt] datetime2 NOT NULL,
[UpdatedAt] datetime2 NULL,
[CreatedBy] nvarchar(max) NULL,
[UpdatedBy] nvarchar(max) NULL,
[IsDeleted] bit NOT NULL,
[DeletedAt] datetime2 NULL,
[DeletedBy] nvarchar(max) NULL,
CONSTRAINT [PK_SystemSettings] PRIMARY KEY ([Id])
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE TABLE [Units] (
[Id] uniqueidentifier NOT NULL,
[Name] nvarchar(200) NOT NULL,
[Code] nvarchar(50) NOT NULL,
[Description] nvarchar(max) NULL,
[ParentUnitId] uniqueidentifier NULL,
[CreatedAt] datetime2 NOT NULL,
[UpdatedAt] datetime2 NULL,
[CreatedBy] nvarchar(max) NULL,
[UpdatedBy] nvarchar(max) NULL,
[IsDeleted] bit NOT NULL,
[DeletedAt] datetime2 NULL,
[DeletedBy] nvarchar(max) NULL,
CONSTRAINT [PK_Units] PRIMARY KEY ([Id]),
CONSTRAINT [FK_Units_Units_ParentUnitId] FOREIGN KEY ([ParentUnitId]) REFERENCES [Units] ([Id]) ON DELETE NO ACTION
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE TABLE [AppraisalTeamMembers] (
[Id] uniqueidentifier NOT NULL,
[AppraisalTeamId] uniqueidentifier NOT NULL,
[UserId] nvarchar(450) NOT NULL,
[Role] nvarchar(50) NOT NULL,
[IsChair] bit NOT NULL,
[CreatedAt] datetime2 NOT NULL,
[UpdatedAt] datetime2 NULL,
[CreatedBy] nvarchar(max) NULL,
[UpdatedBy] nvarchar(max) NULL,
CONSTRAINT [PK_AppraisalTeamMembers] PRIMARY KEY ([Id]),
CONSTRAINT [FK_AppraisalTeamMembers_AppraisalTeams_AppraisalTeamId] FOREIGN KEY ([AppraisalTeamId]) REFERENCES [AppraisalTeams] ([Id]) ON DELETE CASCADE
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE TABLE [AspNetRoleClaims] (
[Id] int NOT NULL IDENTITY,
[RoleId] nvarchar(450) NOT NULL,
[ClaimType] nvarchar(max) NULL,
[ClaimValue] nvarchar(max) NULL,
CONSTRAINT [PK_AspNetRoleClaims] PRIMARY KEY ([Id]),
CONSTRAINT [FK_AspNetRoleClaims_AspNetRoles_RoleId] FOREIGN KEY ([RoleId]) REFERENCES [AspNetRoles] ([Id]) ON DELETE CASCADE
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE TABLE [AspNetUserClaims] (
[Id] int NOT NULL IDENTITY,
[UserId] nvarchar(450) NOT NULL,
[ClaimType] nvarchar(max) NULL,
[ClaimValue] nvarchar(max) NULL,
CONSTRAINT [PK_AspNetUserClaims] PRIMARY KEY ([Id]),
CONSTRAINT [FK_AspNetUserClaims_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE TABLE [AspNetUserLogins] (
[LoginProvider] nvarchar(450) NOT NULL,
[ProviderKey] nvarchar(450) NOT NULL,
[ProviderDisplayName] nvarchar(max) NULL,
[UserId] nvarchar(450) NOT NULL,
CONSTRAINT [PK_AspNetUserLogins] PRIMARY KEY ([LoginProvider], [ProviderKey]),
CONSTRAINT [FK_AspNetUserLogins_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE TABLE [AspNetUserRoles] (
[UserId] nvarchar(450) NOT NULL,
[RoleId] nvarchar(450) NOT NULL,
CONSTRAINT [PK_AspNetUserRoles] PRIMARY KEY ([UserId], [RoleId]),
CONSTRAINT [FK_AspNetUserRoles_AspNetRoles_RoleId] FOREIGN KEY ([RoleId]) REFERENCES [AspNetRoles] ([Id]) ON DELETE CASCADE,
CONSTRAINT [FK_AspNetUserRoles_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE TABLE [AspNetUserTokens] (
[UserId] nvarchar(450) NOT NULL,
[LoginProvider] nvarchar(450) NOT NULL,
[Name] nvarchar(450) NOT NULL,
[Value] nvarchar(max) NULL,
CONSTRAINT [PK_AspNetUserTokens] PRIMARY KEY ([UserId], [LoginProvider], [Name]),
CONSTRAINT [FK_AspNetUserTokens_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE TABLE [Authors] (
[Id] uniqueidentifier NOT NULL,
[FullName] nvarchar(200) NOT NULL,
[Email] nvarchar(200) NOT NULL,
[PhoneNumber] nvarchar(max) NULL,
[Position] nvarchar(max) NULL,
[AcademicTitle] nvarchar(max) NULL,
[UnitId] uniqueidentifier NULL,
[UserId] nvarchar(max) NULL,
[CreatedAt] datetime2 NOT NULL,
[UpdatedAt] datetime2 NULL,
[CreatedBy] nvarchar(max) NULL,
[UpdatedBy] nvarchar(max) NULL,
[IsDeleted] bit NOT NULL,
[DeletedAt] datetime2 NULL,
[DeletedBy] nvarchar(max) NULL,
CONSTRAINT [PK_Authors] PRIMARY KEY ([Id]),
CONSTRAINT [FK_Authors_Units_UnitId] FOREIGN KEY ([UnitId]) REFERENCES [Units] ([Id]) ON DELETE SET NULL
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE TABLE [Initiatives] (
[Id] uniqueidentifier NOT NULL,
[Code] nvarchar(50) NOT NULL,
[Title] nvarchar(500) NOT NULL,
[Description] nvarchar(max) NOT NULL,
[ShortSummary] nvarchar(max) NULL,
[Objectives] nvarchar(max) NULL,
[ScopeOfApplication] nvarchar(max) NULL,
[ExpectedOutcomes] nvarchar(max) NULL,
[ActualOutcomes] nvarchar(max) NULL,
[EstimatedBudget] decimal(18,2) NULL,
[ActualBudget] decimal(18,2) NULL,
[StartDate] datetime2 NULL,
[EndDate] datetime2 NULL,
[SubmissionDate] datetime2 NULL,
[ApprovalDate] datetime2 NULL,
[Status] int NOT NULL,
[Category] int NOT NULL,
[Group] int NOT NULL,
[OwningUnitId] uniqueidentifier NOT NULL,
[SubmittedByUserId] nvarchar(max) NOT NULL,
[CreatedAt] datetime2 NOT NULL,
[UpdatedAt] datetime2 NULL,
[CreatedBy] nvarchar(max) NULL,
[UpdatedBy] nvarchar(max) NULL,
[IsDeleted] bit NOT NULL,
[DeletedAt] datetime2 NULL,
[DeletedBy] nvarchar(max) NULL,
CONSTRAINT [PK_Initiatives] PRIMARY KEY ([Id]),
CONSTRAINT [FK_Initiatives_Units_OwningUnitId] FOREIGN KEY ([OwningUnitId]) REFERENCES [Units] ([Id]) ON DELETE NO ACTION
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE TABLE [InitiativeAttachments] (
[Id] uniqueidentifier NOT NULL,
[InitiativeId] uniqueidentifier NOT NULL,
[FileName] nvarchar(260) NOT NULL,
[StoragePath] nvarchar(500) NOT NULL,
[ContentType] nvarchar(100) NOT NULL,
[FileSize] bigint NOT NULL,
[Description] nvarchar(max) NULL,
[Category] nvarchar(max) NULL,
[CreatedAt] datetime2 NOT NULL,
[UpdatedAt] datetime2 NULL,
[CreatedBy] nvarchar(max) NULL,
[UpdatedBy] nvarchar(max) NULL,
[IsDeleted] bit NOT NULL,
[DeletedAt] datetime2 NULL,
[DeletedBy] nvarchar(max) NULL,
CONSTRAINT [PK_InitiativeAttachments] PRIMARY KEY ([Id]),
CONSTRAINT [FK_InitiativeAttachments_Initiatives_InitiativeId] FOREIGN KEY ([InitiativeId]) REFERENCES [Initiatives] ([Id]) ON DELETE CASCADE
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE TABLE [InitiativeAuthors] (
[Id] uniqueidentifier NOT NULL,
[InitiativeId] uniqueidentifier NOT NULL,
[AuthorId] uniqueidentifier NOT NULL,
[ContributionPercentage] decimal(5,2) NOT NULL,
[IsLeadAuthor] bit NOT NULL,
[ContributionDescription] nvarchar(max) NULL,
[CreatedAt] datetime2 NOT NULL,
[UpdatedAt] datetime2 NULL,
[CreatedBy] nvarchar(max) NULL,
[UpdatedBy] nvarchar(max) NULL,
CONSTRAINT [PK_InitiativeAuthors] PRIMARY KEY ([Id]),
CONSTRAINT [FK_InitiativeAuthors_Authors_AuthorId] FOREIGN KEY ([AuthorId]) REFERENCES [Authors] ([Id]) ON DELETE NO ACTION,
CONSTRAINT [FK_InitiativeAuthors_Initiatives_InitiativeId] FOREIGN KEY ([InitiativeId]) REFERENCES [Initiatives] ([Id]) ON DELETE CASCADE
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE TABLE [InitiativeStatusHistories] (
[Id] uniqueidentifier NOT NULL,
[InitiativeId] uniqueidentifier NOT NULL,
[FromStatus] int NOT NULL,
[ToStatus] int NOT NULL,
[Comment] nvarchar(max) NULL,
[ChangedByUserId] nvarchar(max) NOT NULL,
[CreatedAt] datetime2 NOT NULL,
[UpdatedAt] datetime2 NULL,
[CreatedBy] nvarchar(max) NULL,
[UpdatedBy] nvarchar(max) NULL,
CONSTRAINT [PK_InitiativeStatusHistories] PRIMARY KEY ([Id]),
CONSTRAINT [FK_InitiativeStatusHistories_Initiatives_InitiativeId] FOREIGN KEY ([InitiativeId]) REFERENCES [Initiatives] ([Id]) ON DELETE CASCADE
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE TABLE [Reviews] (
[Id] uniqueidentifier NOT NULL,
[InitiativeId] uniqueidentifier NOT NULL,
[ReviewerUserId] nvarchar(max) NOT NULL,
[AppraisalTeamId] uniqueidentifier NOT NULL,
[Score] decimal(5,2) NULL,
[NoveltyScore] decimal(5,2) NULL,
[FeasibilityScore] decimal(5,2) NULL,
[ImpactScore] decimal(5,2) NULL,
[EfficiencyScore] decimal(5,2) NULL,
[Decision] int NOT NULL,
[Comments] nvarchar(max) NULL,
[Strengths] nvarchar(max) NULL,
[Weaknesses] nvarchar(max) NULL,
[Recommendations] nvarchar(max) NULL,
[ReviewedAt] datetime2 NULL,
[DueDate] datetime2 NULL,
[CreatedAt] datetime2 NOT NULL,
[UpdatedAt] datetime2 NULL,
[CreatedBy] nvarchar(max) NULL,
[UpdatedBy] nvarchar(max) NULL,
[IsDeleted] bit NOT NULL,
[DeletedAt] datetime2 NULL,
[DeletedBy] nvarchar(max) NULL,
CONSTRAINT [PK_Reviews] PRIMARY KEY ([Id]),
CONSTRAINT [FK_Reviews_AppraisalTeams_AppraisalTeamId] FOREIGN KEY ([AppraisalTeamId]) REFERENCES [AppraisalTeams] ([Id]) ON DELETE NO ACTION,
CONSTRAINT [FK_Reviews_Initiatives_InitiativeId] FOREIGN KEY ([InitiativeId]) REFERENCES [Initiatives] ([Id]) ON DELETE CASCADE
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE UNIQUE INDEX [IX_AppraisalTeamMembers_AppraisalTeamId_UserId] ON [AppraisalTeamMembers] ([AppraisalTeamId], [UserId]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE INDEX [IX_AspNetRoleClaims_RoleId] ON [AspNetRoleClaims] ([RoleId]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
EXEC(N'CREATE UNIQUE INDEX [RoleNameIndex] ON [AspNetRoles] ([NormalizedName]) WHERE [NormalizedName] IS NOT NULL');
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE INDEX [IX_AspNetUserClaims_UserId] ON [AspNetUserClaims] ([UserId]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE INDEX [IX_AspNetUserLogins_UserId] ON [AspNetUserLogins] ([UserId]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE INDEX [IX_AspNetUserRoles_RoleId] ON [AspNetUserRoles] ([RoleId]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE INDEX [EmailIndex] ON [AspNetUsers] ([NormalizedEmail]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
EXEC(N'CREATE UNIQUE INDEX [UserNameIndex] ON [AspNetUsers] ([NormalizedUserName]) WHERE [NormalizedUserName] IS NOT NULL');
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE INDEX [IX_AuditLogs_CreatedAt] ON [AuditLogs] ([CreatedAt]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE INDEX [IX_AuditLogs_EntityName_EntityId] ON [AuditLogs] ([EntityName], [EntityId]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE INDEX [IX_Authors_Email] ON [Authors] ([Email]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE INDEX [IX_Authors_UnitId] ON [Authors] ([UnitId]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE INDEX [IX_InitiativeAttachments_InitiativeId] ON [InitiativeAttachments] ([InitiativeId]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE INDEX [IX_InitiativeAuthors_AuthorId] ON [InitiativeAuthors] ([AuthorId]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE UNIQUE INDEX [IX_InitiativeAuthors_InitiativeId_AuthorId] ON [InitiativeAuthors] ([InitiativeId], [AuthorId]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE INDEX [IX_Initiatives_Category] ON [Initiatives] ([Category]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE UNIQUE INDEX [IX_Initiatives_Code] ON [Initiatives] ([Code]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE INDEX [IX_Initiatives_OwningUnitId] ON [Initiatives] ([OwningUnitId]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE INDEX [IX_Initiatives_Status] ON [Initiatives] ([Status]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE INDEX [IX_InitiativeStatusHistories_InitiativeId] ON [InitiativeStatusHistories] ([InitiativeId]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE INDEX [IX_Notifications_RecipientUserId_IsRead] ON [Notifications] ([RecipientUserId], [IsRead]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE INDEX [IX_Reviews_AppraisalTeamId] ON [Reviews] ([AppraisalTeamId]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE INDEX [IX_Reviews_InitiativeId] ON [Reviews] ([InitiativeId]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE UNIQUE INDEX [IX_SystemSettings_Key] ON [SystemSettings] ([Key]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE UNIQUE INDEX [IX_Units_Code] ON [Units] ([Code]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
CREATE INDEX [IX_Units_ParentUnitId] ON [Units] ([ParentUnitId]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260415141734_InitialCreate'
)
BEGIN
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260415141734_InitialCreate', N'10.0.6');
END;
COMMIT;
GO
@@ -0,0 +1,175 @@
BEGIN TRANSACTION;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260416081839_AddReportAndDocumentEntities'
)
BEGIN
CREATE TABLE [InitiativeReports] (
[Id] uniqueidentifier NOT NULL,
[Code] nvarchar(50) NOT NULL,
[InitiativeId] uniqueidentifier NOT NULL,
[ActualOutcomes] nvarchar(4000) NULL,
[ActualBudget] decimal(18,2) NULL,
[ImplementationNotes] nvarchar(4000) NULL,
[Challenges] nvarchar(4000) NULL,
[LessonsLearned] nvarchar(4000) NULL,
[Status] int NOT NULL,
[SubmissionDate] datetime2 NULL,
[ApprovalDate] datetime2 NULL,
[SubmittedByUserId] nvarchar(450) NULL,
[CreatedAt] datetime2 NOT NULL,
[UpdatedAt] datetime2 NULL,
[CreatedBy] nvarchar(max) NULL,
[UpdatedBy] nvarchar(max) NULL,
[IsDeleted] bit NOT NULL,
[DeletedAt] datetime2 NULL,
[DeletedBy] nvarchar(max) NULL,
CONSTRAINT [PK_InitiativeReports] PRIMARY KEY ([Id]),
CONSTRAINT [FK_InitiativeReports_Initiatives_InitiativeId] FOREIGN KEY ([InitiativeId]) REFERENCES [Initiatives] ([Id]) ON DELETE NO ACTION
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260416081839_AddReportAndDocumentEntities'
)
BEGIN
CREATE TABLE [RecognitionDocuments] (
[Id] uniqueidentifier NOT NULL,
[Code] nvarchar(50) NOT NULL,
[ReportId] uniqueidentifier NOT NULL,
[Type] int NOT NULL,
[Content] nvarchar(max) NULL,
[Summary] nvarchar(1000) NULL,
[Status] int NOT NULL,
[SubmissionDate] datetime2 NULL,
[ApprovalDate] datetime2 NULL,
[SubmittedByUserId] nvarchar(450) NULL,
[CreatedAt] datetime2 NOT NULL,
[UpdatedAt] datetime2 NULL,
[CreatedBy] nvarchar(max) NULL,
[UpdatedBy] nvarchar(max) NULL,
[IsDeleted] bit NOT NULL,
[DeletedAt] datetime2 NULL,
[DeletedBy] nvarchar(max) NULL,
CONSTRAINT [PK_RecognitionDocuments] PRIMARY KEY ([Id]),
CONSTRAINT [FK_RecognitionDocuments_InitiativeReports_ReportId] FOREIGN KEY ([ReportId]) REFERENCES [InitiativeReports] ([Id]) ON DELETE CASCADE
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260416081839_AddReportAndDocumentEntities'
)
BEGIN
CREATE TABLE [ReportStatusHistories] (
[Id] uniqueidentifier NOT NULL,
[ReportId] uniqueidentifier NOT NULL,
[FromStatus] int NOT NULL,
[ToStatus] int NOT NULL,
[Comment] nvarchar(2000) NULL,
[ChangedByUserId] nvarchar(450) NOT NULL,
[CreatedAt] datetime2 NOT NULL,
[UpdatedAt] datetime2 NULL,
[CreatedBy] nvarchar(max) NULL,
[UpdatedBy] nvarchar(max) NULL,
[IsDeleted] bit NOT NULL,
[DeletedAt] datetime2 NULL,
[DeletedBy] nvarchar(max) NULL,
CONSTRAINT [PK_ReportStatusHistories] PRIMARY KEY ([Id]),
CONSTRAINT [FK_ReportStatusHistories_InitiativeReports_ReportId] FOREIGN KEY ([ReportId]) REFERENCES [InitiativeReports] ([Id]) ON DELETE CASCADE
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260416081839_AddReportAndDocumentEntities'
)
BEGIN
CREATE TABLE [DocumentStatusHistories] (
[Id] uniqueidentifier NOT NULL,
[DocumentId] uniqueidentifier NOT NULL,
[FromStatus] int NOT NULL,
[ToStatus] int NOT NULL,
[Comment] nvarchar(2000) NULL,
[ChangedByUserId] nvarchar(450) NOT NULL,
[CreatedAt] datetime2 NOT NULL,
[UpdatedAt] datetime2 NULL,
[CreatedBy] nvarchar(max) NULL,
[UpdatedBy] nvarchar(max) NULL,
[IsDeleted] bit NOT NULL,
[DeletedAt] datetime2 NULL,
[DeletedBy] nvarchar(max) NULL,
CONSTRAINT [PK_DocumentStatusHistories] PRIMARY KEY ([Id]),
CONSTRAINT [FK_DocumentStatusHistories_RecognitionDocuments_DocumentId] FOREIGN KEY ([DocumentId]) REFERENCES [RecognitionDocuments] ([Id]) ON DELETE CASCADE
);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260416081839_AddReportAndDocumentEntities'
)
BEGIN
CREATE INDEX [IX_DocumentStatusHistories_DocumentId] ON [DocumentStatusHistories] ([DocumentId]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260416081839_AddReportAndDocumentEntities'
)
BEGIN
CREATE UNIQUE INDEX [IX_InitiativeReports_Code] ON [InitiativeReports] ([Code]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260416081839_AddReportAndDocumentEntities'
)
BEGIN
CREATE INDEX [IX_InitiativeReports_InitiativeId] ON [InitiativeReports] ([InitiativeId]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260416081839_AddReportAndDocumentEntities'
)
BEGIN
CREATE INDEX [IX_InitiativeReports_Status] ON [InitiativeReports] ([Status]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260416081839_AddReportAndDocumentEntities'
)
BEGIN
CREATE UNIQUE INDEX [IX_RecognitionDocuments_Code] ON [RecognitionDocuments] ([Code]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260416081839_AddReportAndDocumentEntities'
)
BEGIN
CREATE UNIQUE INDEX [IX_RecognitionDocuments_ReportId_Type] ON [RecognitionDocuments] ([ReportId], [Type]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260416081839_AddReportAndDocumentEntities'
)
BEGIN
CREATE INDEX [IX_ReportStatusHistories_ReportId] ON [ReportStatusHistories] ([ReportId]);
END;
IF NOT EXISTS (
SELECT * FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20260416081839_AddReportAndDocumentEntities'
)
BEGIN
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20260416081839_AddReportAndDocumentEntities', N'10.0.6');
END;
COMMIT;
GO