PlotDirector/PlotLine/Sql/091_Phase15B_FeatureRequestWorkflow.sql

157 lines
5.9 KiB
Transact-SQL

SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
CREATE OR ALTER PROCEDURE dbo.FeatureRequest_GetForUser
@FeatureRequestID int,
@UserID int
AS
BEGIN
SET NOCOUNT ON;
SELECT fr.FeatureRequestID, fr.UserID, au.Email AS UserEmail, au.DisplayName AS UserDisplayName,
fr.Title, fr.Description, fr.AppArea, fr.Importance, fr.Status, fr.IsPublicCandidate,
fr.AdminNotes, fr.CreatedUtc, fr.UpdatedUtc, fr.ClosedUtc, fr.ShippedUtc,
COALESCE(latest.CreatedUtc, fr.UpdatedUtc, fr.CreatedUtc) AS LatestActivityUtc,
latest.IsAdmin AS LatestMessageIsAdmin,
latest.MessageBody AS LatestMessagePreview,
messageCounts.MessageCount
FROM dbo.FeatureRequests fr
INNER JOIN dbo.AppUser au ON au.UserID = fr.UserID
OUTER APPLY
(
SELECT TOP (1) frm.IsAdmin, frm.MessageBody, frm.CreatedUtc
FROM dbo.FeatureRequestMessages frm
WHERE frm.FeatureRequestID = fr.FeatureRequestID
ORDER BY frm.CreatedUtc DESC, frm.FeatureRequestMessageID DESC
) latest
OUTER APPLY
(
SELECT COUNT(1) AS MessageCount
FROM dbo.FeatureRequestMessages frm
WHERE frm.FeatureRequestID = fr.FeatureRequestID
) messageCounts
WHERE fr.FeatureRequestID = @FeatureRequestID
AND fr.UserID = @UserID;
END;
GO
CREATE OR ALTER PROCEDURE dbo.FeatureRequest_GetForAdmin
@FeatureRequestID int
AS
BEGIN
SET NOCOUNT ON;
SELECT fr.FeatureRequestID, fr.UserID, au.Email AS UserEmail, au.DisplayName AS UserDisplayName,
fr.Title, fr.Description, fr.AppArea, fr.Importance, fr.Status, fr.IsPublicCandidate,
fr.AdminNotes, fr.CreatedUtc, fr.UpdatedUtc, fr.ClosedUtc, fr.ShippedUtc,
COALESCE(latest.CreatedUtc, fr.UpdatedUtc, fr.CreatedUtc) AS LatestActivityUtc,
latest.IsAdmin AS LatestMessageIsAdmin,
latest.MessageBody AS LatestMessagePreview,
messageCounts.MessageCount
FROM dbo.FeatureRequests fr
INNER JOIN dbo.AppUser au ON au.UserID = fr.UserID
OUTER APPLY
(
SELECT TOP (1) frm.IsAdmin, frm.MessageBody, frm.CreatedUtc
FROM dbo.FeatureRequestMessages frm
WHERE frm.FeatureRequestID = fr.FeatureRequestID
ORDER BY frm.CreatedUtc DESC, frm.FeatureRequestMessageID DESC
) latest
OUTER APPLY
(
SELECT COUNT(1) AS MessageCount
FROM dbo.FeatureRequestMessages frm
WHERE frm.FeatureRequestID = fr.FeatureRequestID
) messageCounts
WHERE fr.FeatureRequestID = @FeatureRequestID;
END;
GO
CREATE OR ALTER PROCEDURE dbo.FeatureRequest_ListForUser
@UserID int
AS
BEGIN
SET NOCOUNT ON;
SELECT fr.FeatureRequestID, fr.UserID, au.Email AS UserEmail, au.DisplayName AS UserDisplayName,
fr.Title, fr.Description, fr.AppArea, fr.Importance, fr.Status, fr.IsPublicCandidate,
CAST(NULL AS nvarchar(max)) AS AdminNotes, fr.CreatedUtc, fr.UpdatedUtc, fr.ClosedUtc, fr.ShippedUtc,
COALESCE(latest.CreatedUtc, fr.UpdatedUtc, fr.CreatedUtc) AS LatestActivityUtc,
latest.IsAdmin AS LatestMessageIsAdmin,
latest.MessageBody AS LatestMessagePreview,
messageCounts.MessageCount
FROM dbo.FeatureRequests fr
INNER JOIN dbo.AppUser au ON au.UserID = fr.UserID
OUTER APPLY
(
SELECT TOP (1) frm.IsAdmin, frm.MessageBody, frm.CreatedUtc
FROM dbo.FeatureRequestMessages frm
WHERE frm.FeatureRequestID = fr.FeatureRequestID
ORDER BY frm.CreatedUtc DESC, frm.FeatureRequestMessageID DESC
) latest
OUTER APPLY
(
SELECT COUNT(1) AS MessageCount
FROM dbo.FeatureRequestMessages frm
WHERE frm.FeatureRequestID = fr.FeatureRequestID
) messageCounts
WHERE fr.UserID = @UserID
ORDER BY COALESCE(latest.CreatedUtc, fr.UpdatedUtc, fr.CreatedUtc) DESC, fr.FeatureRequestID DESC;
END;
GO
CREATE OR ALTER PROCEDURE dbo.FeatureRequest_ListForAdmin
@Status nvarchar(50) = NULL,
@AppArea nvarchar(100) = NULL,
@Importance nvarchar(50) = NULL,
@Search nvarchar(200) = NULL,
@Sort nvarchar(50) = N'LatestActivity'
AS
BEGIN
SET NOCOUNT ON;
DECLARE @CleanSearch nvarchar(200) = NULLIF(LTRIM(RTRIM(@Search)), N'');
SELECT fr.FeatureRequestID, fr.UserID, au.Email AS UserEmail, au.DisplayName AS UserDisplayName,
fr.Title, fr.Description, fr.AppArea, fr.Importance, fr.Status, fr.IsPublicCandidate,
fr.AdminNotes, fr.CreatedUtc, fr.UpdatedUtc, fr.ClosedUtc, fr.ShippedUtc,
COALESCE(latest.CreatedUtc, fr.UpdatedUtc, fr.CreatedUtc) AS LatestActivityUtc,
latest.IsAdmin AS LatestMessageIsAdmin,
latest.MessageBody AS LatestMessagePreview,
messageCounts.MessageCount
FROM dbo.FeatureRequests fr
INNER JOIN dbo.AppUser au ON au.UserID = fr.UserID
OUTER APPLY
(
SELECT TOP (1) frm.IsAdmin, frm.MessageBody, frm.CreatedUtc
FROM dbo.FeatureRequestMessages frm
WHERE frm.FeatureRequestID = fr.FeatureRequestID
ORDER BY frm.CreatedUtc DESC, frm.FeatureRequestMessageID DESC
) latest
OUTER APPLY
(
SELECT COUNT(1) AS MessageCount
FROM dbo.FeatureRequestMessages frm
WHERE frm.FeatureRequestID = fr.FeatureRequestID
) messageCounts
WHERE (@Status IS NULL OR fr.Status = @Status)
AND (@AppArea IS NULL OR fr.AppArea = @AppArea)
AND (@Importance IS NULL OR fr.Importance = @Importance)
AND
(
@CleanSearch IS NULL
OR fr.Title LIKE N'%' + @CleanSearch + N'%'
OR fr.Description LIKE N'%' + @CleanSearch + N'%'
OR au.DisplayName LIKE N'%' + @CleanSearch + N'%'
OR au.Email LIKE N'%' + @CleanSearch + N'%'
)
ORDER BY
CASE WHEN @Sort = N'OldestFirst' THEN fr.CreatedUtc END ASC,
CASE WHEN @Sort = N'NewestFirst' THEN fr.CreatedUtc END DESC,
CASE WHEN @Sort IS NULL OR @Sort = N'LatestActivity' THEN COALESCE(latest.CreatedUtc, fr.UpdatedUtc, fr.CreatedUtc) END DESC,
fr.FeatureRequestID DESC;
END;
GO