diff --git a/src/Core/Dirt/Entities/OrganizationApplication.cs b/src/Core/Dirt/Entities/OrganizationApplication.cs index 6d8ed2e92f..259dbd60dd 100644 --- a/src/Core/Dirt/Entities/OrganizationApplication.cs +++ b/src/Core/Dirt/Entities/OrganizationApplication.cs @@ -5,12 +5,13 @@ using Bit.Core.Utilities; namespace Bit.Core.Dirt.Entities; -public class OrganizationApplication : ITableObject +public class OrganizationApplication : ITableObject, IRevisable { public Guid Id { get; set; } public Guid OrganizationId { get; set; } public string Applications { get; set; } = string.Empty; public DateTime CreationDate { get; set; } = DateTime.UtcNow; + public DateTime RevisionDate { get; set; } = DateTime.UtcNow; public void SetNewId() { diff --git a/src/Sql/dbo/Dirt/Stored Procedures/OrganizationApplication_Update.sql b/src/Sql/dbo/Dirt/Stored Procedures/OrganizationApplication_Update.sql new file mode 100644 index 0000000000..481e9597af --- /dev/null +++ b/src/Sql/dbo/Dirt/Stored Procedures/OrganizationApplication_Update.sql @@ -0,0 +1,13 @@ +CREATE PROCEDURE [dbo].[OrganizationApplication_Update] + @Id UNIQUEIDENTIFIER, + @OrganizationId UNIQUEIDENTIFIER, + @Applications NVARCHAR(MAX), + @RevisionDate DATETIME2(7) +AS + SET NOCOUNT ON; + UPDATE [dbo].[OrganizationApplication] + SET + [OrganizationId] = @OrganizationId, + [Applications] = @Applications, + [RevisionDate] = @RevisionDate + WHERE [Id] = @Id; diff --git a/src/Sql/dbo/Dirt/Tables/OrganizationApplication.sql b/src/Sql/dbo/Dirt/Tables/OrganizationApplication.sql index d063b3b648..58c8080e23 100644 --- a/src/Sql/dbo/Dirt/Tables/OrganizationApplication.sql +++ b/src/Sql/dbo/Dirt/Tables/OrganizationApplication.sql @@ -3,6 +3,7 @@ CREATE TABLE [dbo].[OrganizationApplication] ( [OrganizationId] UNIQUEIDENTIFIER NOT NULL, [Applications] NVARCHAR(MAX) NOT NULL, [CreationDate] DATETIME2 (7) NOT NULL, + [RevisionDate] DATETIME2 (7) NOT NULL, CONSTRAINT [PK_OrganizationApplication] PRIMARY KEY CLUSTERED ([Id] ASC), CONSTRAINT [FK_OrganizationApplication_Organization] FOREIGN KEY ([OrganizationId]) REFERENCES [dbo].[Organization] ([Id]) ); diff --git a/util/Migrator/DbScripts/2025-06-13-01_OrganizationApplication.sql b/util/Migrator/DbScripts/2025-06-13-01_OrganizationApplication.sql index 54c68c870d..f68d17c517 100644 --- a/util/Migrator/DbScripts/2025-06-13-01_OrganizationApplication.sql +++ b/util/Migrator/DbScripts/2025-06-13-01_OrganizationApplication.sql @@ -1,74 +1,49 @@ IF OBJECT_ID('dbo.OrganizationApplication') IS NULL BEGIN - CREATE TABLE [dbo].[OrganizationApplication] - ( - [Id] UNIQUEIDENTIFIER NOT NULL, - [OrganizationId] UNIQUEIDENTIFIER NOT NULL, - [Applications] NVARCHAR(MAX) NOT NULL, - [CreationDate] DATETIME2 (7) NOT NULL, + CREATE TABLE [dbo].[OrganizationApplication] ( + [Id] UNIQUEIDENTIFIER NOT NULL, + [OrganizationId] UNIQUEIDENTIFIER NOT NULL, + [Applications] NVARCHAR(MAX) NOT NULL, + [CreationDate] DATETIME2 (7) NOT NULL, + [RevisionDate] DATETIME2 (7) NOT NULL, CONSTRAINT [PK_OrganizationApplication] PRIMARY KEY CLUSTERED ([Id] ASC), CONSTRAINT [FK_OrganizationApplication_Organization] FOREIGN KEY ([OrganizationId]) REFERENCES [dbo].[Organization] ([Id]) - ); + ); CREATE NONCLUSTERED INDEX [IX_OrganizationApplication_OrganizationId] ON [dbo].[OrganizationApplication]([OrganizationId] ASC); - END GO -CREATE OR ALTER VIEW [dbo].[OrganizationApplicationView] -AS - SELECT * - FROM [dbo].[OrganizationApplication]; +CREATE OR ALTER VIEW [dbo].[OrganizationApplicationView] AS + SELECT * FROM [dbo].[OrganizationApplication]; GO CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_Create] @Id UNIQUEIDENTIFIER OUTPUT, @OrganizationId UNIQUEIDENTIFIER, @Applications NVARCHAR(MAX), - @CreationDate DATETIME2(7) + @CreationDate DATETIME2(7), + @RevisionDate DATETIME2(7) AS SET NOCOUNT ON; INSERT INTO [dbo].[OrganizationApplication] - ( + ( [Id], [OrganizationId], [Applications], - [CreationDate] - ) + [CreationDate], + [RevisionDate] + ) VALUES ( - @Id, - @OrganizationId, - @Applications, - @CreationDate + @Id, + @OrganizationId, + @Applications, + @CreationDate, + @RevisionDate ); - -GO - -CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_DeleteById] - @Id UNIQUEIDENTIFIER -AS - SET NOCOUNT ON; - - DELETE FROM - [dbo].[OrganizationApplication] - WHERE - [Id] = @Id; - -GO - -CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_ReadById] - @Id UNIQUEIDENTIFIER -AS - SET NOCOUNT ON; - - SELECT - * - FROM [dbo].[OrganizationApplicationView] - WHERE [Id] = @Id; - GO CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_ReadByOrganizationId] @@ -76,10 +51,63 @@ CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_ReadByOrganizationId] AS SET NOCOUNT ON; + IF @OrganizationId IS NULL + THROW 50000, 'OrganizationId cannot be null', 1; + SELECT * FROM [dbo].[OrganizationApplicationView] WHERE [OrganizationId] = @OrganizationId; - GO +CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_ReadById] + @Id UNIQUEIDENTIFIER +AS + SET NOCOUNT ON; + + IF @Id IS NULL + THROW 50000, 'Id cannot be null', 1; + + SELECT + * + FROM [dbo].[OrganizationApplicationView] + WHERE [Id] = @Id; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_Update] + @Id UNIQUEIDENTIFIER OUTPUT, + @OrganizationId UNIQUEIDENTIFIER, + @Applications NVARCHAR(MAX), + @CreationDate DATETIME2(7), + @RevisionDate DATETIME2(7) +AS + SET NOCOUNT ON; + UPDATE [dbo].[OrganizationApplication] + SET + [OrganizationId] = @OrganizationId, + [Applications] = @Applications, + [RevisionDate] = @RevisionDate + WHERE [Id] = @Id; +GO + +CREATE OR ALTER PROCEDURE [dbo].[OrganizationApplication_DeleteById] + @Id UNIQUEIDENTIFIER +AS + SET NOCOUNT ON; + + IF @Id IS NULL + THROW 50000, 'Id cannot be null', 1; + + DELETE FROM [dbo].[OrganizationApplication] + WHERE [Id] = @Id; +GO + + + + + + + + + + diff --git a/util/MySqlMigrations/Migrations/20250613215532_2025-06-13-00_OrganizationReport.sql.Designer.cs b/util/MySqlMigrations/Migrations/20250613215532_2025-06-13-00_OrganizationReport.sql.Designer.cs index 3441fd1d92..0c8987658f 100644 --- a/util/MySqlMigrations/Migrations/20250613215532_2025-06-13-00_OrganizationReport.sql.Designer.cs +++ b/util/MySqlMigrations/Migrations/20250613215532_2025-06-13-00_OrganizationReport.sql.Designer.cs @@ -985,6 +985,9 @@ namespace Bit.MySqlMigrations.Migrations b.Property("OrganizationId") .HasColumnType("char(36)"); + b.Property("RevisionDate") + .HasColumnType("datetime(6)"); + b.HasKey("Id"); b.HasIndex("Id") diff --git a/util/MySqlMigrations/Migrations/20250613215532_2025-06-13-00_OrganizationReport.sql.cs b/util/MySqlMigrations/Migrations/20250613215532_2025-06-13-00_OrganizationReport.sql.cs index ac8661efed..13650faf47 100644 --- a/util/MySqlMigrations/Migrations/20250613215532_2025-06-13-00_OrganizationReport.sql.cs +++ b/util/MySqlMigrations/Migrations/20250613215532_2025-06-13-00_OrganizationReport.sql.cs @@ -18,7 +18,8 @@ public partial class _2025061300_OrganizationReportsql : Migration OrganizationId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), Applications = table.Column(type: "longtext", nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), - CreationDate = table.Column(type: "datetime(6)", nullable: false) + CreationDate = table.Column(type: "datetime(6)", nullable: false), + RevisionDate = table.Column(type: "datetime(6)", nullable: false) }, constraints: table => { diff --git a/util/MySqlMigrations/Migrations/DatabaseContextModelSnapshot.cs b/util/MySqlMigrations/Migrations/DatabaseContextModelSnapshot.cs index 55e4680847..ed8f56f7e6 100644 --- a/util/MySqlMigrations/Migrations/DatabaseContextModelSnapshot.cs +++ b/util/MySqlMigrations/Migrations/DatabaseContextModelSnapshot.cs @@ -982,6 +982,9 @@ namespace Bit.MySqlMigrations.Migrations b.Property("OrganizationId") .HasColumnType("char(36)"); + b.Property("RevisionDate") + .HasColumnType("datetime(6)"); + b.HasKey("Id"); b.HasIndex("Id") diff --git a/util/PostgresMigrations/Migrations/20250613215536_2025-06-13-00_OrganizationReport.sql.Designer.cs b/util/PostgresMigrations/Migrations/20250613215536_2025-06-13-00_OrganizationReport.sql.Designer.cs index 0a11f7a939..c8d49c17f8 100644 --- a/util/PostgresMigrations/Migrations/20250613215536_2025-06-13-00_OrganizationReport.sql.Designer.cs +++ b/util/PostgresMigrations/Migrations/20250613215536_2025-06-13-00_OrganizationReport.sql.Designer.cs @@ -990,6 +990,9 @@ namespace Bit.PostgresMigrations.Migrations b.Property("OrganizationId") .HasColumnType("uuid"); + b.Property("RevisionDate") + .HasColumnType("timestamp with time zone"); + b.HasKey("Id"); b.HasIndex("Id") diff --git a/util/PostgresMigrations/Migrations/20250613215536_2025-06-13-00_OrganizationReport.sql.cs b/util/PostgresMigrations/Migrations/20250613215536_2025-06-13-00_OrganizationReport.sql.cs index 370b17a7c1..55fe031009 100644 --- a/util/PostgresMigrations/Migrations/20250613215536_2025-06-13-00_OrganizationReport.sql.cs +++ b/util/PostgresMigrations/Migrations/20250613215536_2025-06-13-00_OrganizationReport.sql.cs @@ -17,7 +17,8 @@ public partial class _2025061300_OrganizationReportsql : Migration Id = table.Column(type: "uuid", nullable: false), OrganizationId = table.Column(type: "uuid", nullable: false), Applications = table.Column(type: "text", nullable: false), - CreationDate = table.Column(type: "timestamp with time zone", nullable: false) + CreationDate = table.Column(type: "timestamp with time zone", nullable: false), + RevisionDate = table.Column(type: "timestamp with time zone", nullable: false) }, constraints: table => { diff --git a/util/PostgresMigrations/Migrations/DatabaseContextModelSnapshot.cs b/util/PostgresMigrations/Migrations/DatabaseContextModelSnapshot.cs index 88695fc5a7..aa283cf352 100644 --- a/util/PostgresMigrations/Migrations/DatabaseContextModelSnapshot.cs +++ b/util/PostgresMigrations/Migrations/DatabaseContextModelSnapshot.cs @@ -987,6 +987,9 @@ namespace Bit.PostgresMigrations.Migrations b.Property("OrganizationId") .HasColumnType("uuid"); + b.Property("RevisionDate") + .HasColumnType("timestamp with time zone"); + b.HasKey("Id"); b.HasIndex("Id") diff --git a/util/SqliteMigrations/Migrations/20250613215539_2025-06-13-00_OrganizationReport.sql.Designer.cs b/util/SqliteMigrations/Migrations/20250613215539_2025-06-13-00_OrganizationReport.sql.Designer.cs index 8d7fb5f2cc..f6c241ff5e 100644 --- a/util/SqliteMigrations/Migrations/20250613215539_2025-06-13-00_OrganizationReport.sql.Designer.cs +++ b/util/SqliteMigrations/Migrations/20250613215539_2025-06-13-00_OrganizationReport.sql.Designer.cs @@ -974,6 +974,9 @@ namespace Bit.SqliteMigrations.Migrations b.Property("OrganizationId") .HasColumnType("TEXT"); + b.Property("RevisionDate") + .HasColumnType("TEXT"); + b.HasKey("Id"); b.HasIndex("Id") diff --git a/util/SqliteMigrations/Migrations/20250613215539_2025-06-13-00_OrganizationReport.sql.cs b/util/SqliteMigrations/Migrations/20250613215539_2025-06-13-00_OrganizationReport.sql.cs index 8e5db7170f..c2e7afdc22 100644 --- a/util/SqliteMigrations/Migrations/20250613215539_2025-06-13-00_OrganizationReport.sql.cs +++ b/util/SqliteMigrations/Migrations/20250613215539_2025-06-13-00_OrganizationReport.sql.cs @@ -17,7 +17,8 @@ public partial class _2025061300_OrganizationReportsql : Migration Id = table.Column(type: "TEXT", nullable: false), OrganizationId = table.Column(type: "TEXT", nullable: false), Applications = table.Column(type: "TEXT", nullable: false), - CreationDate = table.Column(type: "TEXT", nullable: false) + CreationDate = table.Column(type: "TEXT", nullable: false), + RevisionDate = table.Column(type: "TEXT", nullable: false) }, constraints: table => { diff --git a/util/SqliteMigrations/Migrations/DatabaseContextModelSnapshot.cs b/util/SqliteMigrations/Migrations/DatabaseContextModelSnapshot.cs index 2d18d58dbe..ef9fb7cbfd 100644 --- a/util/SqliteMigrations/Migrations/DatabaseContextModelSnapshot.cs +++ b/util/SqliteMigrations/Migrations/DatabaseContextModelSnapshot.cs @@ -971,6 +971,9 @@ namespace Bit.SqliteMigrations.Migrations b.Property("OrganizationId") .HasColumnType("TEXT"); + b.Property("RevisionDate") + .HasColumnType("TEXT"); + b.HasKey("Id"); b.HasIndex("Id")