diff --git a/src/Core/Domains/Share.cs b/src/Core/Domains/Share.cs new file mode 100644 index 0000000000..040b2822eb --- /dev/null +++ b/src/Core/Domains/Share.cs @@ -0,0 +1,22 @@ +using System; +using Bit.Core.Utilities; + +namespace Bit.Core.Domains +{ + public class Share : IDataObject + { + public Guid Id { get; set; } + public Guid UserId { get; set; } + public Guid CipherId { get; set; } + public string Key { get; set; } + public string Permissions { get; set; } + public Enums.ShareStatusType Status { get; set; } + public DateTime CreationDate { get; internal set; } = DateTime.UtcNow; + public DateTime RevisionDate { get; internal set; } = DateTime.UtcNow; + + public void SetNewId() + { + Id = CoreHelpers.GenerateComb(); + } + } +} diff --git a/src/Core/Enums/ShareStatusType.cs b/src/Core/Enums/ShareStatusType.cs new file mode 100644 index 0000000000..4f87de1217 --- /dev/null +++ b/src/Core/Enums/ShareStatusType.cs @@ -0,0 +1,9 @@ +namespace Bit.Core.Enums +{ + public enum ShareStatusType : byte + { + Pending = 0, + Accepted = 1, + Rejected = 2 + } +} diff --git a/src/Core/Repositories/IShareRepository.cs b/src/Core/Repositories/IShareRepository.cs new file mode 100644 index 0000000000..44b1441a81 --- /dev/null +++ b/src/Core/Repositories/IShareRepository.cs @@ -0,0 +1,9 @@ +using System; +using Bit.Core.Domains; + +namespace Bit.Core.Repositories +{ + public interface IShareRepository : IRepository + { + } +} diff --git a/src/Core/Repositories/SqlServer/ShareRepository.cs b/src/Core/Repositories/SqlServer/ShareRepository.cs new file mode 100644 index 0000000000..79417a74e8 --- /dev/null +++ b/src/Core/Repositories/SqlServer/ShareRepository.cs @@ -0,0 +1,16 @@ +using System; +using Bit.Core.Domains; + +namespace Bit.Core.Repositories.SqlServer +{ + public class ShareRepository : Repository, IShareRepository + { + public ShareRepository(GlobalSettings globalSettings) + : this(globalSettings.SqlServer.ConnectionString) + { } + + public ShareRepository(string connectionString) + : base(connectionString) + { } + } +} diff --git a/src/Sql/Sql.sqlproj b/src/Sql/Sql.sqlproj index 4c4e23afb6..54cd4a49c5 100644 --- a/src/Sql/Sql.sqlproj +++ b/src/Sql/Sql.sqlproj @@ -103,5 +103,11 @@ + + + + + + \ No newline at end of file diff --git a/src/Sql/dbo/Stored Procedures/Share_Create.sql b/src/Sql/dbo/Stored Procedures/Share_Create.sql new file mode 100644 index 0000000000..8e08065d5e --- /dev/null +++ b/src/Sql/dbo/Stored Procedures/Share_Create.sql @@ -0,0 +1,36 @@ +CREATE PROCEDURE [dbo].[Share_Create] + @Id UNIQUEIDENTIFIER, + @UserId UNIQUEIDENTIFIER, + @CipherId UNIQUEIDENTIFIER, + @Key NVARCHAR(MAX), + @Permissions NVARCHAR(MAX), + @Status TINYINT, + @CreationDate DATETIME2(7), + @RevisionDate DATETIME2(7) +AS +BEGIN + SET NOCOUNT ON + + INSERT INTO [dbo].[Share] + ( + [Id], + [UserId], + [CipherId], + [Key], + [Permissions], + [Status], + [CreationDate], + [RevisionDate] + ) + VALUES + ( + @Id, + @UserId, + @CipherId, + @Key, + @Permissions, + @Status, + @CreationDate, + @RevisionDate + ) +END \ No newline at end of file diff --git a/src/Sql/dbo/Stored Procedures/Share_DeleteById.sql b/src/Sql/dbo/Stored Procedures/Share_DeleteById.sql new file mode 100644 index 0000000000..d344e8eea8 --- /dev/null +++ b/src/Sql/dbo/Stored Procedures/Share_DeleteById.sql @@ -0,0 +1,12 @@ +CREATE PROCEDURE [dbo].[Share_DeleteById] + @Id UNIQUEIDENTIFIER +AS +BEGIN + SET NOCOUNT ON + + DELETE + FROM + [dbo].[Share] + WHERE + [Id] = @Id +END \ No newline at end of file diff --git a/src/Sql/dbo/Stored Procedures/Share_ReadById.sql b/src/Sql/dbo/Stored Procedures/Share_ReadById.sql new file mode 100644 index 0000000000..5663031028 --- /dev/null +++ b/src/Sql/dbo/Stored Procedures/Share_ReadById.sql @@ -0,0 +1,13 @@ +CREATE PROCEDURE [dbo].[Share_ReadById] + @Id UNIQUEIDENTIFIER +AS +BEGIN + SET NOCOUNT ON + + SELECT + * + FROM + [dbo].[ShareView] + WHERE + [Id] = @Id +END \ No newline at end of file diff --git a/src/Sql/dbo/Stored Procedures/Share_Update.sql b/src/Sql/dbo/Stored Procedures/Share_Update.sql new file mode 100644 index 0000000000..d498b0226e --- /dev/null +++ b/src/Sql/dbo/Stored Procedures/Share_Update.sql @@ -0,0 +1,26 @@ +CREATE PROCEDURE [dbo].[Share_Update] + @Id UNIQUEIDENTIFIER, + @UserId UNIQUEIDENTIFIER, + @CipherId UNIQUEIDENTIFIER, + @Key NVARCHAR(MAX), + @Permissions NVARCHAR(MAX), + @Status TINYINT, + @CreationDate DATETIME2(7), + @RevisionDate DATETIME2(7) +AS +BEGIN + SET NOCOUNT ON + + UPDATE + [dbo].[Share] + SET + [UserId] = @UserId, + [CipherId] = @CipherId, + [Key] = @Key, + [Permissions] = @Permissions, + [Status] = @Status, + [CreationDate] = @CreationDate, + [RevisionDate] = @RevisionDate + WHERE + [Id] = @Id +END \ No newline at end of file diff --git a/src/Sql/dbo/Tables/Share.sql b/src/Sql/dbo/Tables/Share.sql new file mode 100644 index 0000000000..d1f99638f0 --- /dev/null +++ b/src/Sql/dbo/Tables/Share.sql @@ -0,0 +1,19 @@ +CREATE TABLE [dbo].[Share] ( + [Id] UNIQUEIDENTIFIER NOT NULL, + [UserId] UNIQUEIDENTIFIER NOT NULL, + [CipherId] UNIQUEIDENTIFIER NOT NULL, + [Key] VARCHAR(MAX) NULL, + [Permissions] VARCHAR(MAX) NULL, + [Status] TINYINT NOT NULL, + [CreationDate] DATETIME2 (7) NOT NULL, + [RevisionDate] DATETIME2 (7) NOT NULL, + CONSTRAINT [PK_Share] PRIMARY KEY CLUSTERED ([Id] ASC), + CONSTRAINT [FK_Share_Cipher] FOREIGN KEY ([CipherId]) REFERENCES [dbo].[Cipher] ([Id]), + CONSTRAINT [FK_Share_User] FOREIGN KEY ([UserId]) REFERENCES [dbo].[User] ([Id]) +); + + +GO +CREATE NONCLUSTERED INDEX [IX_Share_CipherId_Status] + ON [dbo].[Share]([CipherId] ASC, [Status] ASC); + diff --git a/src/Sql/dbo/Views/ShareView.sql b/src/Sql/dbo/Views/ShareView.sql new file mode 100644 index 0000000000..63f090cc1c --- /dev/null +++ b/src/Sql/dbo/Views/ShareView.sql @@ -0,0 +1,6 @@ +CREATE VIEW [dbo].[ShareView] +AS +SELECT + * +FROM + [dbo].[Share] \ No newline at end of file