199 lines
6.4 KiB
Transact-SQL
199 lines
6.4 KiB
Transact-SQL
SET ANSI_NULLS ON;
|
|
GO
|
|
SET QUOTED_IDENTIFIER ON;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.SceneAssetSuggestions_ListByScene
|
|
@SceneID int,
|
|
@UserID int
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
|
|
SELECT suggestion.SceneAssetSuggestionID,
|
|
suggestion.SceneID,
|
|
suggestion.AssetID,
|
|
sa.AssetName,
|
|
suggestion.Status,
|
|
suggestion.Confidence,
|
|
suggestion.Reason,
|
|
suggestion.DetectedUtc
|
|
FROM dbo.SceneAssetSuggestions suggestion
|
|
INNER JOIN dbo.Scenes s ON s.SceneID = suggestion.SceneID
|
|
INNER JOIN dbo.Chapters c ON c.ChapterID = s.ChapterID
|
|
INNER JOIN dbo.Books b ON b.BookID = c.BookID
|
|
INNER JOIN dbo.Projects p ON p.ProjectID = b.ProjectID
|
|
INNER JOIN dbo.ProjectUserAccess pua ON pua.ProjectID = p.ProjectID
|
|
INNER JOIN dbo.StoryAssets sa ON sa.StoryAssetID = suggestion.AssetID
|
|
WHERE suggestion.SceneID = @SceneID
|
|
AND suggestion.Status = N'Pending'
|
|
AND s.IsArchived = 0
|
|
AND c.IsArchived = 0
|
|
AND b.IsArchived = 0
|
|
AND p.IsArchived = 0
|
|
AND sa.IsArchived = 0
|
|
AND pua.UserID = @UserID
|
|
AND pua.IsActive = 1
|
|
ORDER BY
|
|
CASE suggestion.Confidence WHEN N'High' THEN 0 WHEN N'Medium' THEN 1 ELSE 2 END,
|
|
sa.AssetName;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.SceneAssetSuggestion_Accept
|
|
@SceneAssetSuggestionID int,
|
|
@UserID int
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
|
|
DECLARE @SceneID int;
|
|
DECLARE @AssetID int;
|
|
DECLARE @AssetEventTypeID int;
|
|
DECLARE @SceneAssetCreated bit = 0;
|
|
|
|
SELECT @SceneID = suggestion.SceneID,
|
|
@AssetID = suggestion.AssetID
|
|
FROM dbo.SceneAssetSuggestions suggestion
|
|
INNER JOIN dbo.Scenes s ON s.SceneID = suggestion.SceneID
|
|
INNER JOIN dbo.Chapters c ON c.ChapterID = s.ChapterID
|
|
INNER JOIN dbo.Books b ON b.BookID = c.BookID
|
|
INNER JOIN dbo.Projects p ON p.ProjectID = b.ProjectID
|
|
INNER JOIN dbo.ProjectUserAccess pua ON pua.ProjectID = p.ProjectID
|
|
INNER JOIN dbo.StoryAssets sa ON sa.StoryAssetID = suggestion.AssetID AND sa.ProjectID = p.ProjectID
|
|
WHERE suggestion.SceneAssetSuggestionID = @SceneAssetSuggestionID
|
|
AND suggestion.Status = N'Pending'
|
|
AND s.IsArchived = 0
|
|
AND c.IsArchived = 0
|
|
AND b.IsArchived = 0
|
|
AND p.IsArchived = 0
|
|
AND sa.IsArchived = 0
|
|
AND pua.UserID = @UserID
|
|
AND pua.IsActive = 1;
|
|
|
|
IF @SceneID IS NULL OR @AssetID IS NULL
|
|
RETURN;
|
|
|
|
SELECT TOP (1) @AssetEventTypeID = AssetEventTypeID
|
|
FROM dbo.AssetEventTypes
|
|
WHERE TypeName = N'Used'
|
|
AND IsActive = 1
|
|
ORDER BY SortOrder, AssetEventTypeID;
|
|
|
|
IF @AssetEventTypeID IS NULL
|
|
SELECT TOP (1) @AssetEventTypeID = AssetEventTypeID
|
|
FROM dbo.AssetEventTypes
|
|
WHERE IsActive = 1
|
|
ORDER BY SortOrder, AssetEventTypeID;
|
|
|
|
IF @AssetEventTypeID IS NULL
|
|
RETURN;
|
|
|
|
IF NOT EXISTS (SELECT 1 FROM dbo.AssetEvents WHERE SceneID = @SceneID AND StoryAssetID = @AssetID)
|
|
AND NOT EXISTS (SELECT 1 FROM dbo.SceneAssetLocations WHERE SceneID = @SceneID AND StoryAssetID = @AssetID)
|
|
AND NOT EXISTS (SELECT 1 FROM dbo.AssetCustodyEvents WHERE SceneID = @SceneID AND StoryAssetID = @AssetID)
|
|
BEGIN
|
|
INSERT dbo.AssetEvents (StoryAssetID, SceneID, AssetEventTypeID, FromStateID, ToStateID, EventTitle, EventDescription)
|
|
VALUES (@AssetID, @SceneID, @AssetEventTypeID, NULL, NULL, N'Used', NULL);
|
|
|
|
SET @SceneAssetCreated = 1;
|
|
END;
|
|
|
|
UPDATE dbo.SceneAssetSuggestions
|
|
SET Status = N'Accepted',
|
|
ReviewedByUserID = @UserID,
|
|
ReviewedUtc = SYSUTCDATETIME()
|
|
WHERE SceneAssetSuggestionID = @SceneAssetSuggestionID
|
|
AND Status = N'Pending';
|
|
|
|
SELECT @SceneAssetSuggestionID AS SceneAssetSuggestionID,
|
|
@SceneID AS SceneID,
|
|
@AssetID AS AssetID,
|
|
N'Accepted' AS Status,
|
|
@SceneAssetCreated AS SceneAssetCreated;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.SceneAssetSuggestion_Reject
|
|
@SceneAssetSuggestionID int,
|
|
@UserID int
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
|
|
DECLARE @SceneID int;
|
|
DECLARE @AssetID int;
|
|
|
|
SELECT @SceneID = suggestion.SceneID,
|
|
@AssetID = suggestion.AssetID
|
|
FROM dbo.SceneAssetSuggestions suggestion
|
|
INNER JOIN dbo.Scenes s ON s.SceneID = suggestion.SceneID
|
|
INNER JOIN dbo.Chapters c ON c.ChapterID = s.ChapterID
|
|
INNER JOIN dbo.Books b ON b.BookID = c.BookID
|
|
INNER JOIN dbo.Projects p ON p.ProjectID = b.ProjectID
|
|
INNER JOIN dbo.ProjectUserAccess pua ON pua.ProjectID = p.ProjectID
|
|
INNER JOIN dbo.StoryAssets sa ON sa.StoryAssetID = suggestion.AssetID AND sa.ProjectID = p.ProjectID
|
|
WHERE suggestion.SceneAssetSuggestionID = @SceneAssetSuggestionID
|
|
AND suggestion.Status = N'Pending'
|
|
AND s.IsArchived = 0
|
|
AND c.IsArchived = 0
|
|
AND b.IsArchived = 0
|
|
AND p.IsArchived = 0
|
|
AND sa.IsArchived = 0
|
|
AND pua.UserID = @UserID
|
|
AND pua.IsActive = 1;
|
|
|
|
IF @SceneID IS NULL OR @AssetID IS NULL
|
|
RETURN;
|
|
|
|
UPDATE dbo.SceneAssetSuggestions
|
|
SET Status = N'Rejected',
|
|
ReviewedByUserID = @UserID,
|
|
ReviewedUtc = SYSUTCDATETIME()
|
|
WHERE SceneAssetSuggestionID = @SceneAssetSuggestionID
|
|
AND Status = N'Pending';
|
|
|
|
SELECT @SceneAssetSuggestionID AS SceneAssetSuggestionID,
|
|
@SceneID AS SceneID,
|
|
@AssetID AS AssetID,
|
|
N'Rejected' AS Status,
|
|
CAST(0 AS bit) AS SceneAssetCreated;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.SceneAssetSuggestions_CountByChapter
|
|
@ChapterID int,
|
|
@UserID int
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Chapters c
|
|
INNER JOIN dbo.Books b ON b.BookID = c.BookID
|
|
INNER JOIN dbo.Projects p ON p.ProjectID = b.ProjectID
|
|
INNER JOIN dbo.ProjectUserAccess pua ON pua.ProjectID = p.ProjectID
|
|
WHERE c.ChapterID = @ChapterID
|
|
AND c.IsArchived = 0
|
|
AND b.IsArchived = 0
|
|
AND p.IsArchived = 0
|
|
AND pua.UserID = @UserID
|
|
AND pua.IsActive = 1
|
|
)
|
|
RETURN;
|
|
|
|
SELECT s.SceneID,
|
|
COUNT(suggestion.SceneAssetSuggestionID) AS PendingSuggestionCount
|
|
FROM dbo.Scenes s
|
|
INNER JOIN dbo.SceneAssetSuggestions suggestion ON suggestion.SceneID = s.SceneID
|
|
INNER JOIN dbo.StoryAssets sa ON sa.StoryAssetID = suggestion.AssetID
|
|
WHERE s.ChapterID = @ChapterID
|
|
AND s.IsArchived = 0
|
|
AND sa.IsArchived = 0
|
|
AND suggestion.Status = N'Pending'
|
|
GROUP BY s.SceneID;
|
|
END;
|
|
GO
|