199 lines
7.2 KiB
Transact-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
|