PlotDirector/PlotLine/Sql/121_Phase20V_StoryIntelligenceImportCommit.sql

166 lines
5.8 KiB
Transact-SQL

SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
IF OBJECT_ID(N'dbo.StoryIntelligenceImportCommits', N'U') IS NULL
BEGIN
CREATE TABLE dbo.StoryIntelligenceImportCommits
(
StoryIntelligenceImportCommitID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_StoryIntelligenceImportCommits PRIMARY KEY,
StoryIntelligenceRunID int NOT NULL,
ProjectID int NULL,
BookID int NULL,
ChapterID int NULL,
CommittedAt datetime2 NOT NULL CONSTRAINT DF_StoryIntelligenceImportCommits_CommittedAt DEFAULT SYSUTCDATETIME(),
CommittedByUserID int NOT NULL,
ScenesCreated int NOT NULL CONSTRAINT DF_StoryIntelligenceImportCommits_ScenesCreated DEFAULT 0,
MetricsCreated int NOT NULL CONSTRAINT DF_StoryIntelligenceImportCommits_MetricsCreated DEFAULT 0,
Status nvarchar(40) NOT NULL,
Notes nvarchar(max) NULL,
CreatedUtc datetime2 NOT NULL CONSTRAINT DF_StoryIntelligenceImportCommits_CreatedUtc DEFAULT SYSUTCDATETIME(),
CONSTRAINT FK_StoryIntelligenceImportCommits_Runs FOREIGN KEY (StoryIntelligenceRunID) REFERENCES dbo.StoryIntelligenceRuns(StoryIntelligenceRunID),
CONSTRAINT FK_StoryIntelligenceImportCommits_Projects FOREIGN KEY (ProjectID) REFERENCES dbo.Projects(ProjectID),
CONSTRAINT FK_StoryIntelligenceImportCommits_Books FOREIGN KEY (BookID) REFERENCES dbo.Books(BookID),
CONSTRAINT FK_StoryIntelligenceImportCommits_Chapters FOREIGN KEY (ChapterID) REFERENCES dbo.Chapters(ChapterID),
CONSTRAINT FK_StoryIntelligenceImportCommits_AppUser FOREIGN KEY (CommittedByUserID) REFERENCES dbo.AppUser(UserID)
);
END;
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'UX_StoryIntelligenceImportCommits_CompletedRun' AND object_id = OBJECT_ID(N'dbo.StoryIntelligenceImportCommits'))
CREATE UNIQUE INDEX UX_StoryIntelligenceImportCommits_CompletedRun ON dbo.StoryIntelligenceImportCommits(StoryIntelligenceRunID) WHERE Status = N'Completed';
GO
IF COL_LENGTH(N'dbo.Scenes', N'ImportSource') IS NULL
ALTER TABLE dbo.Scenes ADD ImportSource nvarchar(80) NULL;
GO
IF COL_LENGTH(N'dbo.Scenes', N'ImportRunID') IS NULL
ALTER TABLE dbo.Scenes ADD ImportRunID int NULL;
GO
IF COL_LENGTH(N'dbo.Scenes', N'SourceStartParagraph') IS NULL
ALTER TABLE dbo.Scenes ADD SourceStartParagraph int NULL;
GO
IF COL_LENGTH(N'dbo.Scenes', N'SourceEndParagraph') IS NULL
ALTER TABLE dbo.Scenes ADD SourceEndParagraph int NULL;
GO
IF NOT EXISTS (SELECT 1 FROM sys.foreign_keys WHERE name = N'FK_Scenes_StoryIntelligenceRuns_ImportRunID')
ALTER TABLE dbo.Scenes ADD CONSTRAINT FK_Scenes_StoryIntelligenceRuns_ImportRunID FOREIGN KEY (ImportRunID) REFERENCES dbo.StoryIntelligenceRuns(StoryIntelligenceRunID);
GO
CREATE OR ALTER PROCEDURE dbo.StoryIntelligenceImportCommit_GetByRun
@StoryIntelligenceRunID int
AS
BEGIN
SET NOCOUNT ON;
SELECT TOP (1) StoryIntelligenceImportCommitID, StoryIntelligenceRunID, ProjectID, BookID, ChapterID,
CommittedAt, CommittedByUserID, ScenesCreated, MetricsCreated, Status, Notes, CreatedUtc
FROM dbo.StoryIntelligenceImportCommits
WHERE StoryIntelligenceRunID = @StoryIntelligenceRunID
ORDER BY CASE WHEN Status = N'Completed' THEN 0 ELSE 1 END, CreatedUtc DESC;
END;
GO
CREATE OR ALTER PROCEDURE dbo.StoryIntelligenceImportCommit_HasCompleted
@StoryIntelligenceRunID int
AS
BEGIN
SET NOCOUNT ON;
SELECT CAST(CASE WHEN EXISTS
(
SELECT 1
FROM dbo.StoryIntelligenceImportCommits
WHERE StoryIntelligenceRunID = @StoryIntelligenceRunID
AND Status = N'Completed'
) THEN 1 ELSE 0 END AS bit);
END;
GO
CREATE OR ALTER PROCEDURE dbo.StoryIntelligenceImportCommit_CountChapterScenes
@ChapterID int
AS
BEGIN
SET NOCOUNT ON;
SELECT COUNT(1)
FROM dbo.Scenes
WHERE ChapterID = @ChapterID
AND IsArchived = 0;
END;
GO
CREATE OR ALTER PROCEDURE dbo.StoryIntelligenceSceneSource_Save
@SceneID int,
@ImportSource nvarchar(80),
@ImportRunID int,
@SourceStartParagraph int = NULL,
@SourceEndParagraph int = NULL
AS
BEGIN
SET NOCOUNT ON;
UPDATE dbo.Scenes
SET ImportSource = @ImportSource,
ImportRunID = @ImportRunID,
SourceStartParagraph = @SourceStartParagraph,
SourceEndParagraph = @SourceEndParagraph,
UpdatedDate = SYSUTCDATETIME()
WHERE SceneID = @SceneID;
END;
GO
CREATE OR ALTER PROCEDURE dbo.StoryIntelligenceImportCommit_RecordCompleted
@StoryIntelligenceRunID int,
@ProjectID int = NULL,
@BookID int = NULL,
@ChapterID int = NULL,
@CommittedByUserID int,
@ScenesCreated int,
@MetricsCreated int,
@Notes nvarchar(max) = NULL
AS
BEGIN
SET NOCOUNT ON;
INSERT dbo.StoryIntelligenceImportCommits
(
StoryIntelligenceRunID, ProjectID, BookID, ChapterID, CommittedAt, CommittedByUserID,
ScenesCreated, MetricsCreated, Status, Notes
)
VALUES
(
@StoryIntelligenceRunID, @ProjectID, @BookID, @ChapterID, SYSUTCDATETIME(), @CommittedByUserID,
@ScenesCreated, @MetricsCreated, N'Completed', @Notes
);
SELECT CAST(SCOPE_IDENTITY() AS int);
END;
GO
CREATE OR ALTER PROCEDURE dbo.StoryIntelligenceImportCommit_RecordFailed
@StoryIntelligenceRunID int,
@ProjectID int = NULL,
@BookID int = NULL,
@ChapterID int = NULL,
@CommittedByUserID int,
@ScenesCreated int,
@MetricsCreated int,
@Notes nvarchar(max) = NULL
AS
BEGIN
SET NOCOUNT ON;
INSERT dbo.StoryIntelligenceImportCommits
(
StoryIntelligenceRunID, ProjectID, BookID, ChapterID, CommittedAt, CommittedByUserID,
ScenesCreated, MetricsCreated, Status, Notes
)
VALUES
(
@StoryIntelligenceRunID, @ProjectID, @BookID, @ChapterID, SYSUTCDATETIME(), @CommittedByUserID,
@ScenesCreated, @MetricsCreated, N'Failed', @Notes
);
END;
GO