Add isOwner field to the leaderboard end-point

This commit is contained in:
Filip Gralinski 2021-09-15 12:55:16 +02:00
parent 76b84637c9
commit 9260d74b08
2 changed files with 8 additions and 3 deletions

View File

@ -90,6 +90,7 @@ instance ToJSON LeaderboardEntry where
, "times" .= leaderboardNumberOfSubmissions entry , "times" .= leaderboardNumberOfSubmissions entry
, "hash" .= (fromSHA1ToText $ submissionCommit $ leaderboardBestSubmission entry) , "hash" .= (fromSHA1ToText $ submissionCommit $ leaderboardBestSubmission entry)
, "isPublic" .= (submissionIsPublic $ leaderboardBestSubmission entry) , "isPublic" .= (submissionIsPublic $ leaderboardBestSubmission entry)
, "isOwner" .= (leaderboardIsOwner entry)
, "isReevaluable" .= (leaderboardIsReevaluable entry) , "isReevaluable" .= (leaderboardIsReevaluable entry)
, "isVisible" .= (leaderboardIsVisible entry) , "isVisible" .= (leaderboardIsVisible entry)
, "id" .= (leaderboardBestSubmissionId entry) , "id" .= (leaderboardBestSubmissionId entry)
@ -228,6 +229,7 @@ instance ToSchema LeaderboardEntryView where
& example .~ Just (toJSON (2:: Int))) & example .~ Just (toJSON (2:: Int)))
, ("hash", hashSchema) , ("hash", hashSchema)
, ("evaluations", evaluationsSchema) , ("evaluations", evaluationsSchema)
, ("isOwner", boolSchema)
, ("isPublic", isPublicSchema) , ("isPublic", isPublicSchema)
, ("isReevaluable", boolSchema) , ("isReevaluable", boolSchema)
, ("isVisible", isVisibleSchema) , ("isVisible", isVisibleSchema)
@ -1415,7 +1417,7 @@ convertEvaluationToView theMapping entTest =
-- convertTableEntryToView :: Maybe UserId -> [Entity Test] -> TableEntry -> SubmissionView -- convertTableEntryToView :: Maybe UserId -> [Entity Test] -> TableEntry -> SubmissionView
convertTableEntryToView :: [Entity Test] -> TableEntry -> HandlerFor App SubmissionView convertTableEntryToView :: [Entity Test] -> TableEntry -> HandlerFor App SubmissionView
convertTableEntryToView tests entry = do convertTableEntryToView tests entry = do
mUserId <- maybeAuthPossiblyByToken mUserEnt <- maybeAuthPossiblyByToken
isReevaluable <- runDB $ canBeReevaluated $ entityKey $ tableEntrySubmission entry isReevaluable <- runDB $ canBeReevaluated $ entityKey $ tableEntrySubmission entry
let isVisible = True let isVisible = True
@ -1433,7 +1435,7 @@ convertTableEntryToView tests entry = do
submissionViewTags = Import.map convertTagInfoToView $ tableEntryTagsInfo entry, submissionViewTags = Import.map convertTagInfoToView $ tableEntryTagsInfo entry,
submissionViewHash = fromSHA1ToText $ submissionCommit submission, submissionViewHash = fromSHA1ToText $ submissionCommit submission,
submissionViewEvaluations = catMaybes $ Import.map (convertEvaluationToView $ tableEntryMapping entry) tests, submissionViewEvaluations = catMaybes $ Import.map (convertEvaluationToView $ tableEntryMapping entry) tests,
submissionViewIsOwner = (entityKey <$> mUserId) == Just (submissionSubmitter submission), submissionViewIsOwner = (entityKey <$> mUserEnt) == Just (submissionSubmitter submission),
submissionViewIsReevaluable = isReevaluable, submissionViewIsReevaluable = isReevaluable,
submissionViewIsVisible = isVisible, submissionViewIsVisible = isVisible,
submissionViewIsPublic = submissionIsPublic submission, submissionViewIsPublic = submissionIsPublic submission,

View File

@ -74,6 +74,7 @@ data LeaderboardEntry = LeaderboardEntry {
leaderboardTags :: [(Entity Import.Tag, Entity SubmissionTag)], leaderboardTags :: [(Entity Import.Tag, Entity SubmissionTag)],
leaderboardParams :: [Parameter], leaderboardParams :: [Parameter],
leaderboardVersion :: (Int, Int, Int), leaderboardVersion :: (Int, Int, Int),
leaderboardIsOwner :: Bool,
leaderboardIsVisible :: Bool, leaderboardIsVisible :: Bool,
leaderboardIsReevaluable :: Bool, leaderboardIsReevaluable :: Bool,
leaderboardTeam :: Maybe (Entity Team) leaderboardTeam :: Maybe (Entity Team)
@ -392,7 +393,8 @@ toLeaderboardEntry challengeId tests ss = do
SubmissionSubmitter ==. entityKey user] SubmissionSubmitter ==. entityKey user]
[Desc SubmissionStamp] [Desc SubmissionStamp]
mUserId <- maybeAuthPossiblyByToken mUserEnt <- maybeAuthPossiblyByToken
let isOwner = (entityKey <$> mUserEnt) == Just (submissionSubmitter submission)
isReevaluable <- runDB $ canBeReevaluated $ entityKey $ tableEntrySubmission bestOne isReevaluable <- runDB $ canBeReevaluated $ entityKey $ tableEntrySubmission bestOne
let isVisible = True let isVisible = True
@ -415,6 +417,7 @@ toLeaderboardEntry challengeId tests ss = do
leaderboardTags = tagEnts, leaderboardTags = tagEnts,
leaderboardParams = map entityVal theParameters, leaderboardParams = map entityVal theParameters,
leaderboardVersion = theVersion, leaderboardVersion = theVersion,
leaderboardIsOwner = isOwner,
leaderboardIsReevaluable = isReevaluable, leaderboardIsReevaluable = isReevaluable,
leaderboardIsVisible = isVisible, leaderboardIsVisible = isVisible,
leaderboardTeam = mTeam leaderboardTeam = mTeam