CREATE OR REPLACE FUNCTION GetFeatureRequests(AppId INTEGER DEFAULT 1)
RETURNS TABLE (
Id BIGINT,
CreatedAt TIMESTAMP WITH TIME ZONE,
Title TEXT,
Description TEXT,
isPremiumFeature BOOLEAN,
Status INTEGER,
ImplementedVersion TEXT,
VoteCount BIGINT,
UserVoteStatus INTEGER
) AS $$
BEGIN
RETURN QUERY
SELECT
fr."Id",
fr."CreatedAt",
fr."Title",
fr."Description",
fr."isPremiumFeature",
fr."Status",
fr."ImplementedVersion",
COALESCE(SUM(CASE
WHEN u."isUpvote" = true THEN 1
WHEN u."isUpvote" = false THEN -1
ELSE 0
END), 0) AS VoteCount,
COALESCE(MAX(CASE
WHEN u."UserId" = auth.uid() AND u."isUpvote" = true THEN 1
WHEN u."UserId" = auth.uid() AND u."isUpvote" = false THEN 0
ELSE -1
END), -1) AS UserVoteStatus
FROM
public."dt_FeatureRequest" fr
LEFT JOIN
public."dt_FeatureRequestUserUpvotes" u
ON
u."FeatureRequestId" = fr."Id"
WHERE
fr."AppId" = AppId
GROUP BY
fr."Id", fr."CreatedAt", fr."Title", fr."Description",
fr."isPremiumFeature", fr."Status", fr."ImplementedVersion"
ORDER BY
VoteCount DESC,
fr."CreatedAt" DESC;
END;
$$ LANGUAGE plpgsql;