PlotDirector/PlotLine/Sql/097_Phase16F_WordCompanionRuntimeSceneWordCountSync.sql

79 lines
2.2 KiB
Transact-SQL

CREATE OR ALTER PROCEDURE dbo.WordCompanion_Runtime_SceneWordCount_Update
@UserID int,
@DocumentGuid uniqueidentifier,
@BookID int,
@ChapterID int,
@SceneID int,
@WordCount int
AS
BEGIN
SET NOCOUNT ON;
IF @DocumentGuid IS NULL
OR @DocumentGuid = '00000000-0000-0000-0000-000000000000'
OR @BookID <= 0
OR @ChapterID <= 0
OR @SceneID <= 0
OR @WordCount < 0
RETURN;
DECLARE @ManuscriptDocumentID int;
SELECT @ManuscriptDocumentID = md.ManuscriptDocumentID
FROM dbo.ManuscriptDocuments md
INNER JOIN dbo.Books b ON b.BookID = md.BookID
INNER JOIN dbo.Projects p ON p.ProjectID = b.ProjectID
INNER JOIN dbo.ProjectUserAccess pua ON pua.ProjectID = p.ProjectID
WHERE md.DocumentGuid = @DocumentGuid
AND md.BookID = @BookID
AND md.IsActive = 1
AND b.IsArchived = 0
AND p.IsArchived = 0
AND pua.UserID = @UserID
AND pua.IsActive = 1;
IF @ManuscriptDocumentID IS NULL
RETURN;
IF NOT EXISTS
(
SELECT 1
FROM dbo.Scenes s
INNER JOIN dbo.Chapters c ON c.ChapterID = s.ChapterID
WHERE s.SceneID = @SceneID
AND s.ChapterID = @ChapterID
AND c.BookID = @BookID
AND s.IsArchived = 0
AND c.IsArchived = 0
AND s.IsLinkedToManuscript = 1
AND s.ManuscriptDocumentID = @ManuscriptDocumentID
)
RETURN;
DECLARE @LastWorkedOnDate date = CONVERT(date, SYSUTCDATETIME());
IF EXISTS (SELECT 1 FROM dbo.SceneWorkflow WHERE SceneID = @SceneID)
BEGIN
UPDATE dbo.SceneWorkflow
SET ActualWordCount = @WordCount,
LastWorkedOn = @LastWorkedOnDate,
UpdatedDate = SYSUTCDATETIME()
WHERE SceneID = @SceneID;
END
ELSE
BEGIN
INSERT dbo.SceneWorkflow (SceneID, ActualWordCount, LastWorkedOn)
VALUES (@SceneID, @WordCount, @LastWorkedOnDate);
END;
UPDATE dbo.ManuscriptDocuments
SET LastSyncUtc = SYSUTCDATETIME()
WHERE ManuscriptDocumentID = @ManuscriptDocumentID;
SELECT @SceneID AS SceneId,
@WordCount AS ActualWords,
@LastWorkedOnDate AS LastWorkedOn,
N'Word count synced.' AS Message;
END;
GO