141 lines
5.3 KiB
Transact-SQL
141 lines
5.3 KiB
Transact-SQL
SET ANSI_NULLS ON;
|
|
GO
|
|
SET QUOTED_IDENTIFIER ON;
|
|
GO
|
|
|
|
IF OBJECT_ID(N'dbo.ChapterPurposeTypes', N'U') IS NULL
|
|
BEGIN
|
|
CREATE TABLE dbo.ChapterPurposeTypes
|
|
(
|
|
ChapterPurposeID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_ChapterPurposeTypes PRIMARY KEY,
|
|
PurposeName nvarchar(100) NOT NULL,
|
|
SortOrder int NOT NULL CONSTRAINT DF_ChapterPurposeTypes_SortOrder DEFAULT 0,
|
|
IsArchived bit NOT NULL CONSTRAINT DF_ChapterPurposeTypes_IsArchived DEFAULT 0,
|
|
CONSTRAINT UQ_ChapterPurposeTypes_PurposeName UNIQUE (PurposeName)
|
|
);
|
|
END;
|
|
GO
|
|
|
|
MERGE dbo.ChapterPurposeTypes AS target
|
|
USING (VALUES
|
|
(N'Opening', 10),
|
|
(N'Character Development', 20),
|
|
(N'Relationship Development', 30),
|
|
(N'World Building', 40),
|
|
(N'Investigation', 50),
|
|
(N'Revelation', 60),
|
|
(N'Escalation', 70),
|
|
(N'Turning Point', 80),
|
|
(N'Climax', 90),
|
|
(N'Resolution', 100),
|
|
(N'Transition', 110)
|
|
) AS source (PurposeName, SortOrder)
|
|
ON target.PurposeName = source.PurposeName
|
|
WHEN MATCHED THEN UPDATE SET SortOrder = source.SortOrder, IsArchived = 0
|
|
WHEN NOT MATCHED THEN INSERT (PurposeName, SortOrder, IsArchived) VALUES (source.PurposeName, source.SortOrder, 0);
|
|
GO
|
|
|
|
IF COL_LENGTH(N'dbo.Chapters', N'ChapterPurposeID') IS NULL
|
|
ALTER TABLE dbo.Chapters ADD ChapterPurposeID int NULL;
|
|
GO
|
|
|
|
IF NOT EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = N'FK_Chapters_ChapterPurposeTypes')
|
|
ALTER TABLE dbo.Chapters ADD CONSTRAINT FK_Chapters_ChapterPurposeTypes FOREIGN KEY (ChapterPurposeID) REFERENCES dbo.ChapterPurposeTypes(ChapterPurposeID);
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.Lookup_All
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
SELECT RevisionStatusID, StatusName, SortOrder FROM dbo.RevisionStatuses ORDER BY SortOrder;
|
|
SELECT TimeModeID, TimeModeName, SortOrder FROM dbo.TimeModes ORDER BY SortOrder;
|
|
SELECT DurationUnitID, DurationUnitName, SortOrder FROM dbo.DurationUnits ORDER BY SortOrder;
|
|
SELECT TimeConfidenceID, TimeConfidenceName, SortOrder FROM dbo.TimeConfidences ORDER BY SortOrder;
|
|
SELECT ScenePurposeTypeID, PurposeName, SortOrder FROM dbo.ScenePurposeTypes WHERE IsArchived = 0 ORDER BY SortOrder;
|
|
SELECT ChapterPurposeID, PurposeName, SortOrder, IsArchived FROM dbo.ChapterPurposeTypes WHERE IsArchived = 0 ORDER BY SortOrder;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.Chapter_ListByBook
|
|
@BookID int
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
SELECT c.ChapterID, c.BookID, c.ChapterNumber, c.ChapterTitle, c.POVCharacterID, c.Summary,
|
|
c.ChapterPurposeID, cpt.PurposeName AS ChapterPurposeName,
|
|
c.SortOrder, c.RevisionStatusID, rs.StatusName AS RevisionStatusName,
|
|
c.CreatedDate, c.UpdatedDate, c.IsArchived, c.IsLinkedToManuscript,
|
|
c.ManuscriptDocumentID, c.ExternalReference, c.LinkedUtc
|
|
FROM dbo.Chapters c
|
|
INNER JOIN dbo.RevisionStatuses rs ON rs.RevisionStatusID = c.RevisionStatusID
|
|
LEFT JOIN dbo.ChapterPurposeTypes cpt ON cpt.ChapterPurposeID = c.ChapterPurposeID
|
|
WHERE c.BookID = @BookID AND c.IsArchived = 0
|
|
ORDER BY c.SortOrder, c.ChapterNumber;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.Chapter_Get
|
|
@ChapterID int
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
SELECT c.ChapterID, c.BookID, c.ChapterNumber, c.ChapterTitle, c.POVCharacterID, c.Summary,
|
|
c.ChapterPurposeID, cpt.PurposeName AS ChapterPurposeName,
|
|
c.SortOrder, c.RevisionStatusID, rs.StatusName AS RevisionStatusName,
|
|
c.CreatedDate, c.UpdatedDate, c.IsArchived, c.IsLinkedToManuscript,
|
|
c.ManuscriptDocumentID, c.ExternalReference, c.LinkedUtc
|
|
FROM dbo.Chapters c
|
|
INNER JOIN dbo.RevisionStatuses rs ON rs.RevisionStatusID = c.RevisionStatusID
|
|
LEFT JOIN dbo.ChapterPurposeTypes cpt ON cpt.ChapterPurposeID = c.ChapterPurposeID
|
|
WHERE c.ChapterID = @ChapterID AND c.IsArchived = 0;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.Chapter_Save
|
|
@ChapterID int = NULL,
|
|
@BookID int,
|
|
@ChapterNumber decimal(10,2),
|
|
@ChapterTitle nvarchar(200),
|
|
@Summary nvarchar(max) = NULL,
|
|
@ChapterPurposeID int = NULL,
|
|
@RevisionStatusID int
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
IF @ChapterID IS NULL OR @ChapterID = 0
|
|
BEGIN
|
|
DECLARE @NextChapterOrder int = ISNULL((SELECT MAX(SortOrder) FROM dbo.Chapters WHERE BookID = @BookID), 0) + 10;
|
|
INSERT dbo.Chapters (BookID, ChapterNumber, ChapterTitle, Summary, ChapterPurposeID, SortOrder, RevisionStatusID)
|
|
VALUES (@BookID, @ChapterNumber, @ChapterTitle, @Summary, @ChapterPurposeID, @NextChapterOrder, @RevisionStatusID);
|
|
SELECT CAST(SCOPE_IDENTITY() AS int) AS ChapterID;
|
|
RETURN;
|
|
END;
|
|
|
|
UPDATE dbo.Chapters
|
|
SET ChapterNumber = @ChapterNumber,
|
|
ChapterTitle = @ChapterTitle,
|
|
Summary = @Summary,
|
|
ChapterPurposeID = @ChapterPurposeID,
|
|
RevisionStatusID = @RevisionStatusID,
|
|
UpdatedDate = SYSUTCDATETIME()
|
|
WHERE ChapterID = @ChapterID;
|
|
SELECT @ChapterID AS ChapterID;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.StoryIntelligenceImportCommit_UpdateChapterPlanning
|
|
@ChapterID int,
|
|
@Summary nvarchar(max) = NULL,
|
|
@ChapterPurposeID int = NULL
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
|
|
UPDATE dbo.Chapters
|
|
SET Summary = COALESCE(NULLIF(LTRIM(RTRIM(@Summary)), N''), Summary),
|
|
ChapterPurposeID = COALESCE(@ChapterPurposeID, ChapterPurposeID),
|
|
UpdatedDate = SYSUTCDATETIME()
|
|
WHERE ChapterID = @ChapterID;
|
|
END;
|
|
GO
|