157 lines
5.9 KiB
Transact-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
|