You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
415 lines
8.5 KiB
415 lines
8.5 KiB
CREATE TABLE [dbo].[Send] ( |
|
[Id] UNIQUEIDENTIFIER NOT NULL, |
|
[UserId] UNIQUEIDENTIFIER NULL, |
|
[OrganizationId] UNIQUEIDENTIFIER NULL, |
|
[Type] TINYINT NOT NULL, |
|
[Data] VARCHAR(MAX) NOT NULL, |
|
[Key] VARCHAR (MAX) NOT NULL, |
|
[Password] NVARCHAR (300) NULL, |
|
[MaxAccessCount] INT NULL, |
|
[AccessCount] INT NOT NULL, |
|
[CreationDate] DATETIME2 (7) NOT NULL, |
|
[RevisionDate] DATETIME2 (7) NOT NULL, |
|
[ExpirationDate] DATETIME2 (7) NULL, |
|
[DeletionDate] DATETIME2 (7) NOT NULL, |
|
[Disabled] BIT NOT NULL, |
|
CONSTRAINT [PK_Send] PRIMARY KEY CLUSTERED ([Id] ASC), |
|
CONSTRAINT [FK_Send_Organization] FOREIGN KEY ([OrganizationId]) REFERENCES [dbo].[Organization] ([Id]), |
|
CONSTRAINT [FK_Send_User] FOREIGN KEY ([UserId]) REFERENCES [dbo].[User] ([Id]) |
|
); |
|
GO |
|
|
|
CREATE NONCLUSTERED INDEX [IX_Send_UserId_OrganizationId] |
|
ON [dbo].[Send]([UserId] ASC, [OrganizationId] ASC); |
|
GO |
|
|
|
CREATE NONCLUSTERED INDEX [IX_Send_DeletionDate] |
|
ON [dbo].[Send]([DeletionDate] ASC); |
|
GO |
|
|
|
CREATE VIEW [dbo].[SendView] |
|
AS |
|
SELECT |
|
* |
|
FROM |
|
[dbo].[Send] |
|
GO |
|
|
|
IF OBJECT_ID('[dbo].[Send_Create]') IS NOT NULL |
|
BEGIN |
|
DROP PROCEDURE [dbo].[Send_Create] |
|
END |
|
GO |
|
|
|
CREATE PROCEDURE [dbo].[Send_Create] |
|
@Id UNIQUEIDENTIFIER, |
|
@UserId UNIQUEIDENTIFIER, |
|
@OrganizationId UNIQUEIDENTIFIER, |
|
@Type TINYINT, |
|
@Data VARCHAR(MAX), |
|
@Key VARCHAR(MAX), |
|
@Password NVARCHAR(300), |
|
@MaxAccessCount INT, |
|
@AccessCount INT, |
|
@CreationDate DATETIME2(7), |
|
@RevisionDate DATETIME2(7), |
|
@ExpirationDate DATETIME2(7), |
|
@DeletionDate DATETIME2(7), |
|
@Disabled BIT |
|
AS |
|
BEGIN |
|
SET NOCOUNT ON |
|
|
|
INSERT INTO [dbo].[Send] |
|
( |
|
[Id], |
|
[UserId], |
|
[OrganizationId], |
|
[Type], |
|
[Data], |
|
[Key], |
|
[Password], |
|
[MaxAccessCount], |
|
[AccessCount], |
|
[CreationDate], |
|
[RevisionDate], |
|
[ExpirationDate], |
|
[DeletionDate], |
|
[Disabled] |
|
) |
|
VALUES |
|
( |
|
@Id, |
|
@UserId, |
|
@OrganizationId, |
|
@Type, |
|
@Data, |
|
@Key, |
|
@Password, |
|
@MaxAccessCount, |
|
@AccessCount, |
|
@CreationDate, |
|
@RevisionDate, |
|
@ExpirationDate, |
|
@DeletionDate, |
|
@Disabled |
|
) |
|
|
|
IF @UserId IS NOT NULL |
|
BEGIN |
|
IF @Type = 1 --File |
|
BEGIN |
|
EXEC [dbo].[User_UpdateStorage] @UserId |
|
END |
|
EXEC [dbo].[User_BumpAccountRevisionDate] @UserId |
|
END |
|
-- TODO: OrganizationId bump? |
|
END |
|
GO |
|
|
|
IF OBJECT_ID('[dbo].[Send_DeleteById]') IS NOT NULL |
|
BEGIN |
|
DROP PROCEDURE [dbo].[Send_DeleteById] |
|
END |
|
GO |
|
|
|
CREATE PROCEDURE [dbo].[Send_DeleteById] |
|
@Id UNIQUEIDENTIFIER |
|
AS |
|
BEGIN |
|
SET NOCOUNT ON |
|
|
|
DECLARE @UserId UNIQUEIDENTIFIER |
|
DECLARE @OrganizationId UNIQUEIDENTIFIER |
|
DECLARE @Type TINYINT |
|
|
|
SELECT TOP 1 |
|
@UserId = [UserId], |
|
@OrganizationId = [OrganizationId], |
|
@Type = [Type] |
|
FROM |
|
[dbo].[Send] |
|
WHERE |
|
[Id] = @Id |
|
|
|
DELETE |
|
FROM |
|
[dbo].[Send] |
|
WHERE |
|
[Id] = @Id |
|
|
|
IF @UserId IS NOT NULL |
|
BEGIN |
|
IF @Type = 1 --File |
|
BEGIN |
|
EXEC [dbo].[User_UpdateStorage] @UserId |
|
END |
|
EXEC [dbo].[User_BumpAccountRevisionDate] @UserId |
|
END |
|
-- TODO: OrganizationId bump? |
|
END |
|
GO |
|
|
|
IF OBJECT_ID('[dbo].[Send_ReadById]') IS NOT NULL |
|
BEGIN |
|
DROP PROCEDURE [dbo].[Send_ReadById] |
|
END |
|
GO |
|
|
|
CREATE PROCEDURE [dbo].[Send_ReadById] |
|
@Id UNIQUEIDENTIFIER |
|
AS |
|
BEGIN |
|
SET NOCOUNT ON |
|
|
|
SELECT |
|
* |
|
FROM |
|
[dbo].[SendView] |
|
WHERE |
|
[Id] = @Id |
|
END |
|
GO |
|
|
|
IF OBJECT_ID('[dbo].[Send_ReadByUserId]') IS NOT NULL |
|
BEGIN |
|
DROP PROCEDURE [dbo].[Send_ReadByUserId] |
|
END |
|
GO |
|
|
|
CREATE PROCEDURE [dbo].[Send_ReadByUserId] |
|
@UserId UNIQUEIDENTIFIER |
|
AS |
|
BEGIN |
|
SET NOCOUNT ON |
|
|
|
SELECT |
|
* |
|
FROM |
|
[dbo].[SendView] |
|
WHERE |
|
[OrganizationId] IS NULL |
|
AND [UserId] = @UserId |
|
END |
|
GO |
|
|
|
IF OBJECT_ID('[dbo].[Send_Update]') IS NOT NULL |
|
BEGIN |
|
DROP PROCEDURE [dbo].[Send_Update] |
|
END |
|
GO |
|
|
|
CREATE PROCEDURE [dbo].[Send_Update] |
|
@Id UNIQUEIDENTIFIER, |
|
@UserId UNIQUEIDENTIFIER, |
|
@OrganizationId UNIQUEIDENTIFIER, |
|
@Type TINYINT, |
|
@Data VARCHAR(MAX), |
|
@Key VARCHAR(MAX), |
|
@Password NVARCHAR(300), |
|
@MaxAccessCount INT, |
|
@AccessCount INT, |
|
@CreationDate DATETIME2(7), |
|
@RevisionDate DATETIME2(7), |
|
@ExpirationDate DATETIME2(7), |
|
@DeletionDate DATETIME2(7), |
|
@Disabled BIT |
|
AS |
|
BEGIN |
|
SET NOCOUNT ON |
|
|
|
UPDATE |
|
[dbo].[Send] |
|
SET |
|
[UserId] = @UserId, |
|
[OrganizationId] = @OrganizationId, |
|
[Type] = @Type, |
|
[Data] = @Data, |
|
[Key] = @Key, |
|
[Password] = @Password, |
|
[MaxAccessCount] = @MaxAccessCount, |
|
[AccessCount] = @AccessCount, |
|
[CreationDate] = @CreationDate, |
|
[RevisionDate] = @RevisionDate, |
|
[ExpirationDate] = @ExpirationDate, |
|
[DeletionDate] = @DeletionDate, |
|
[Disabled] = @Disabled |
|
WHERE |
|
[Id] = @Id |
|
|
|
IF @UserId IS NOT NULL |
|
BEGIN |
|
EXEC [dbo].[User_BumpAccountRevisionDate] @UserId |
|
END |
|
-- TODO: OrganizationId bump? |
|
END |
|
GO |
|
|
|
IF OBJECT_ID('[dbo].[Organization_UpdateStorage]') IS NOT NULL |
|
BEGIN |
|
DROP PROCEDURE [dbo].[Organization_UpdateStorage] |
|
END |
|
GO |
|
|
|
CREATE PROCEDURE [dbo].[Organization_UpdateStorage] |
|
@Id UNIQUEIDENTIFIER |
|
AS |
|
BEGIN |
|
SET NOCOUNT ON |
|
|
|
DECLARE @AttachmentStorage BIGINT |
|
DECLARE @SendStorage BIGINT |
|
|
|
CREATE TABLE #OrgStorageUpdateTemp |
|
( |
|
[Id] UNIQUEIDENTIFIER NOT NULL, |
|
[Attachments] VARCHAR(MAX) NULL |
|
) |
|
|
|
INSERT INTO #OrgStorageUpdateTemp |
|
SELECT |
|
[Id], |
|
[Attachments] |
|
FROM |
|
[dbo].[Cipher] |
|
WHERE |
|
[UserId] IS NULL |
|
AND [OrganizationId] = @Id |
|
|
|
;WITH [CTE] AS ( |
|
SELECT |
|
[Id], |
|
( |
|
SELECT |
|
SUM(CAST(JSON_VALUE(value,'$.Size') AS BIGINT)) |
|
FROM |
|
OPENJSON([Attachments]) |
|
) [Size] |
|
FROM |
|
#OrgStorageUpdateTemp |
|
) |
|
SELECT |
|
@AttachmentStorage = SUM([Size]) |
|
FROM |
|
[CTE] |
|
|
|
DROP TABLE #OrgStorageUpdateTemp |
|
|
|
;WITH [CTE] AS ( |
|
SELECT |
|
[Id], |
|
CAST(JSON_VALUE([Data],'$.Size') AS BIGINT) [Size] |
|
FROM |
|
[Send] |
|
WHERE |
|
[UserId] IS NULL |
|
AND [OrganizationId] = @Id |
|
) |
|
SELECT |
|
@SendStorage = SUM([CTE].[Size]) |
|
FROM |
|
[CTE] |
|
|
|
UPDATE |
|
[dbo].[Organization] |
|
SET |
|
[Storage] = (ISNULL(@AttachmentStorage, 0) + ISNULL(@SendStorage, 0)), |
|
[RevisionDate] = GETUTCDATE() |
|
WHERE |
|
[Id] = @Id |
|
END |
|
GO |
|
|
|
IF OBJECT_ID('[dbo].[User_UpdateStorage]') IS NOT NULL |
|
BEGIN |
|
DROP PROCEDURE [dbo].[User_UpdateStorage] |
|
END |
|
GO |
|
|
|
CREATE PROCEDURE [dbo].[User_UpdateStorage] |
|
@Id UNIQUEIDENTIFIER |
|
AS |
|
BEGIN |
|
SET NOCOUNT ON |
|
|
|
DECLARE @AttachmentStorage BIGINT |
|
DECLARE @SendStorage BIGINT |
|
|
|
CREATE TABLE #UserStorageUpdateTemp |
|
( |
|
[Id] UNIQUEIDENTIFIER NOT NULL, |
|
[Attachments] VARCHAR(MAX) NULL |
|
) |
|
|
|
INSERT INTO #UserStorageUpdateTemp |
|
SELECT |
|
[Id], |
|
[Attachments] |
|
FROM |
|
[dbo].[Cipher] |
|
WHERE |
|
[UserId] = @Id |
|
|
|
;WITH [CTE] AS ( |
|
SELECT |
|
[Id], |
|
( |
|
SELECT |
|
SUM(CAST(JSON_VALUE(value,'$.Size') AS BIGINT)) |
|
FROM |
|
OPENJSON([Attachments]) |
|
) [Size] |
|
FROM |
|
#UserStorageUpdateTemp |
|
) |
|
SELECT |
|
@AttachmentStorage = SUM([CTE].[Size]) |
|
FROM |
|
[CTE] |
|
|
|
DROP TABLE #UserStorageUpdateTemp |
|
|
|
;WITH [CTE] AS ( |
|
SELECT |
|
[Id], |
|
CAST(JSON_VALUE([Data],'$.Size') AS BIGINT) [Size] |
|
FROM |
|
[Send] |
|
WHERE |
|
[UserId] = @Id |
|
) |
|
SELECT |
|
@SendStorage = SUM([CTE].[Size]) |
|
FROM |
|
[CTE] |
|
|
|
UPDATE |
|
[dbo].[User] |
|
SET |
|
[Storage] = (ISNULL(@AttachmentStorage, 0) + ISNULL(@SendStorage, 0)), |
|
[RevisionDate] = GETUTCDATE() |
|
WHERE |
|
[Id] = @Id |
|
END |
|
GO |
|
|
|
IF OBJECT_ID('[dbo].[Send_ReadByDeletionDateBefore]') IS NOT NULL |
|
BEGIN |
|
DROP PROCEDURE [dbo].[Send_ReadByDeletionDateBefore] |
|
END |
|
GO |
|
|
|
CREATE PROCEDURE [dbo].[Send_ReadByDeletionDateBefore] |
|
@DeletionDate DATETIME2(7) |
|
AS |
|
BEGIN |
|
SET NOCOUNT ON |
|
|
|
SELECT |
|
* |
|
FROM |
|
[dbo].[SendView] |
|
WHERE |
|
[DeletionDate] < @DeletionDate |
|
END |
|
GO
|
|
|