PlotDirector/PlotLine/Sql/163_Phase25H_BookContextAndLeanImportFlow.sql

199 lines
7.2 KiB
Transact-SQL

SET NOCOUNT ON;
GO
IF COL_LENGTH('dbo.Books', 'StoryEra') IS NULL
BEGIN
ALTER TABLE dbo.Books ADD StoryEra nvarchar(80) NULL;
END;
GO
IF COL_LENGTH('dbo.Books', 'PrimaryLocaleCode') IS NULL
BEGIN
ALTER TABLE dbo.Books ADD PrimaryLocaleCode nvarchar(16) NULL;
END;
GO
CREATE OR ALTER PROCEDURE dbo.Book_ListByProject
@ProjectID int
AS
BEGIN
SET NOCOUNT ON;
SELECT b.BookID, b.ProjectID, b.BookTitle, b.Subtitle, b.Tagline, b.ShortDescription, b.Status,
b.BookNumber, b.Description, b.TargetWordCount, b.StoryEra, b.PrimaryLocaleCode,
b.WritingStartDate, b.TargetCompletionDate, b.PublicationDate, b.UsesExplicitScenes,
b.CoverThumbnailPath, b.CoverStandardPath,
ISNULL(wordCounts.CurrentWordCount, 0) AS CurrentWordCount,
ISNULL(counts.ChapterCount, 0) AS ChapterCount,
ISNULL(counts.SceneCount, 0) AS SceneCount,
b.SortOrder, b.CreatedDate, b.UpdatedDate, b.IsArchived, b.ArchivedDate, b.ArchivedReason
FROM dbo.Books b
OUTER APPLY
(
SELECT COUNT(DISTINCT c.ChapterID) AS ChapterCount, COUNT(s.SceneID) AS SceneCount
FROM dbo.Chapters c
LEFT JOIN dbo.Scenes s ON s.ChapterID = c.ChapterID AND s.IsArchived = 0
WHERE c.BookID = b.BookID AND c.IsArchived = 0
) counts
OUTER APPLY
(
SELECT SUM(ISNULL(sw.ActualWordCount, 0)) AS CurrentWordCount
FROM dbo.Chapters c
INNER JOIN dbo.Scenes s ON s.ChapterID = c.ChapterID AND s.IsArchived = 0
LEFT JOIN dbo.SceneWorkflow sw ON sw.SceneID = s.SceneID
WHERE c.BookID = b.BookID AND c.IsArchived = 0
) wordCounts
WHERE b.ProjectID = @ProjectID AND b.IsArchived = 0
ORDER BY b.SortOrder, b.BookNumber, b.BookTitle;
END;
GO
CREATE OR ALTER PROCEDURE dbo.Book_ListByProjects
@ProjectIDs nvarchar(max)
AS
BEGIN
SET NOCOUNT ON;
;WITH ProjectIDs AS
(
SELECT DISTINCT TRY_CONVERT(int, value) AS ProjectID
FROM STRING_SPLIT(COALESCE(@ProjectIDs, N''), N',')
WHERE TRY_CONVERT(int, value) IS NOT NULL
)
SELECT b.BookID, b.ProjectID, b.BookTitle, b.Subtitle, b.Tagline, b.ShortDescription, b.Status,
b.BookNumber, b.Description, b.TargetWordCount, b.StoryEra, b.PrimaryLocaleCode,
b.WritingStartDate, b.TargetCompletionDate, b.PublicationDate, b.UsesExplicitScenes,
b.CoverThumbnailPath, b.CoverStandardPath,
ISNULL(wordCounts.CurrentWordCount, 0) AS CurrentWordCount,
ISNULL(counts.ChapterCount, 0) AS ChapterCount,
ISNULL(counts.SceneCount, 0) AS SceneCount,
b.SortOrder, b.CreatedDate, b.UpdatedDate, b.IsArchived, b.ArchivedDate, b.ArchivedReason
FROM dbo.Books b
INNER JOIN ProjectIDs ids ON ids.ProjectID = b.ProjectID
OUTER APPLY
(
SELECT COUNT(DISTINCT c.ChapterID) AS ChapterCount, COUNT(s.SceneID) AS SceneCount
FROM dbo.Chapters c
LEFT JOIN dbo.Scenes s ON s.ChapterID = c.ChapterID AND s.IsArchived = 0
WHERE c.BookID = b.BookID AND c.IsArchived = 0
) counts
OUTER APPLY
(
SELECT SUM(ISNULL(sw.ActualWordCount, 0)) AS CurrentWordCount
FROM dbo.Chapters c
INNER JOIN dbo.Scenes s ON s.ChapterID = c.ChapterID AND s.IsArchived = 0
LEFT JOIN dbo.SceneWorkflow sw ON sw.SceneID = s.SceneID
WHERE c.BookID = b.BookID AND c.IsArchived = 0
) wordCounts
WHERE b.IsArchived = 0
ORDER BY b.ProjectID, b.SortOrder, b.BookNumber, b.BookTitle;
END;
GO
CREATE OR ALTER PROCEDURE dbo.Book_Get
@BookID int
AS
BEGIN
SET NOCOUNT ON;
SELECT b.BookID, b.ProjectID, b.BookTitle, b.Subtitle, b.Tagline, b.ShortDescription, b.Status,
b.BookNumber, b.Description, b.TargetWordCount, b.StoryEra, b.PrimaryLocaleCode,
b.WritingStartDate, b.TargetCompletionDate, b.PublicationDate, b.UsesExplicitScenes,
b.CoverThumbnailPath, b.CoverStandardPath,
ISNULL(wordCounts.CurrentWordCount, 0) AS CurrentWordCount,
ISNULL(counts.ChapterCount, 0) AS ChapterCount,
ISNULL(counts.SceneCount, 0) AS SceneCount,
b.SortOrder, b.CreatedDate, b.UpdatedDate, b.IsArchived, b.ArchivedDate, b.ArchivedReason
FROM dbo.Books b
OUTER APPLY
(
SELECT COUNT(DISTINCT c.ChapterID) AS ChapterCount, COUNT(s.SceneID) AS SceneCount
FROM dbo.Chapters c
LEFT JOIN dbo.Scenes s ON s.ChapterID = c.ChapterID AND s.IsArchived = 0
WHERE c.BookID = b.BookID AND c.IsArchived = 0
) counts
OUTER APPLY
(
SELECT SUM(ISNULL(sw.ActualWordCount, 0)) AS CurrentWordCount
FROM dbo.Chapters c
INNER JOIN dbo.Scenes s ON s.ChapterID = c.ChapterID AND s.IsArchived = 0
LEFT JOIN dbo.SceneWorkflow sw ON sw.SceneID = s.SceneID
WHERE c.BookID = b.BookID AND c.IsArchived = 0
) wordCounts
WHERE b.BookID = @BookID AND b.IsArchived = 0;
END;
GO
CREATE OR ALTER PROCEDURE dbo.Book_Save
@BookID int = NULL,
@ProjectID int,
@BookTitle nvarchar(200),
@Subtitle nvarchar(200) = NULL,
@Tagline nvarchar(300) = NULL,
@ShortDescription nvarchar(max) = NULL,
@Status nvarchar(50) = N'Planning',
@BookNumber int,
@Description nvarchar(max) = NULL,
@TargetWordCount int = NULL,
@StoryEra nvarchar(80) = NULL,
@PrimaryLocaleCode nvarchar(16) = NULL,
@WritingStartDate date = NULL,
@TargetCompletionDate date = NULL,
@PublicationDate date = NULL,
@UsesExplicitScenes bit = 0
AS
BEGIN
SET NOCOUNT ON;
IF @TargetWordCount IS NOT NULL AND @TargetWordCount <= 0
THROW 51000, 'Target word count must be greater than zero.', 1;
SET @StoryEra = NULLIF(LTRIM(RTRIM(@StoryEra)), N'');
SET @PrimaryLocaleCode = NULLIF(LTRIM(RTRIM(@PrimaryLocaleCode)), N'');
IF NULLIF(LTRIM(RTRIM(@Status)), N'') IS NULL
SET @Status = N'Planning';
IF @BookID IS NULL OR @BookID = 0
BEGIN
DECLARE @NextBookOrder int = ISNULL((SELECT MAX(SortOrder) FROM dbo.Books WHERE ProjectID = @ProjectID), 0) + 10;
INSERT dbo.Books
(
ProjectID, BookTitle, Subtitle, Tagline, ShortDescription, Status, BookNumber, Description,
TargetWordCount, StoryEra, PrimaryLocaleCode, WritingStartDate, TargetCompletionDate,
PublicationDate, UsesExplicitScenes, SortOrder
)
VALUES
(
@ProjectID, @BookTitle, @Subtitle, @Tagline, @ShortDescription, @Status, @BookNumber, @Description,
@TargetWordCount, @StoryEra, @PrimaryLocaleCode, @WritingStartDate, @TargetCompletionDate,
@PublicationDate, @UsesExplicitScenes, @NextBookOrder
);
SELECT CAST(SCOPE_IDENTITY() AS int) AS BookID;
RETURN;
END;
UPDATE dbo.Books
SET BookTitle = @BookTitle,
Subtitle = @Subtitle,
Tagline = @Tagline,
ShortDescription = @ShortDescription,
Status = @Status,
BookNumber = @BookNumber,
Description = @Description,
TargetWordCount = @TargetWordCount,
StoryEra = @StoryEra,
PrimaryLocaleCode = @PrimaryLocaleCode,
WritingStartDate = @WritingStartDate,
TargetCompletionDate = @TargetCompletionDate,
PublicationDate = @PublicationDate,
UsesExplicitScenes = @UsesExplicitScenes,
UpdatedDate = SYSUTCDATETIME()
WHERE BookID = @BookID;
SELECT @BookID AS BookID;
END;
GO