More swagger
This commit is contained in:
parent
301343e3a2
commit
98325e47b6
@ -815,6 +815,39 @@ getAddUserR = do
|
|||||||
return $ Bool True
|
return $ Bool True
|
||||||
Nothing -> return $ Bool False
|
Nothing -> return $ Bool False
|
||||||
|
|
||||||
|
declareAllSubmissionsApi :: String -> String -> Declare (Definitions Schema) Swagger
|
||||||
|
declareAllSubmissionsApi q d = do
|
||||||
|
-- param schemas
|
||||||
|
let challengeNameSchema = toParamSchema (Proxy :: Proxy String)
|
||||||
|
|
||||||
|
allSubmissionsResponse <- declareResponse (Proxy :: Proxy SubmissionsView)
|
||||||
|
|
||||||
|
return $ mempty
|
||||||
|
& paths .~
|
||||||
|
fromList [ ("/api/" ++ q ++ "/{challengeName}",
|
||||||
|
mempty & DS.get ?~ (mempty
|
||||||
|
& parameters .~ [ Inline $ mempty
|
||||||
|
& name .~ "challengeName"
|
||||||
|
& required ?~ True
|
||||||
|
& schema .~ ParamOther (mempty
|
||||||
|
& in_ .~ ParamPath
|
||||||
|
& paramSchema .~ challengeNameSchema) ]
|
||||||
|
& produces ?~ MimeList ["application/json"]
|
||||||
|
& description ?~ "d"
|
||||||
|
& at 200 ?~ Inline allSubmissionsResponse))
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
allSubmissionsApi :: Swagger
|
||||||
|
allSubmissionsApi = spec & definitions .~ defs
|
||||||
|
where
|
||||||
|
(defs, spec) = runDeclare (declareAllSubmissionsApi "challenge-all-submissions" "Returns all submissions for a challenge") mempty
|
||||||
|
|
||||||
|
mySubmissionsApi :: Swagger
|
||||||
|
mySubmissionsApi = spec & definitions .~ defs
|
||||||
|
where
|
||||||
|
(defs, spec) = runDeclare (declareAllSubmissionsApi "challenge-my-submissions" "Returns all submissions for a challenge for the user") mempty
|
||||||
|
|
||||||
getChallengeAllSubmissionsJsonR :: Text -> Handler Value
|
getChallengeAllSubmissionsJsonR :: Text -> Handler Value
|
||||||
getChallengeAllSubmissionsJsonR challengeName = do
|
getChallengeAllSubmissionsJsonR challengeName = do
|
||||||
v <- fetchAllSubmissionsView challengeName
|
v <- fetchAllSubmissionsView challengeName
|
||||||
@ -918,6 +951,21 @@ instance ToJSON EvaluationView where
|
|||||||
, "test" .= evaluationViewTest e
|
, "test" .= evaluationViewTest e
|
||||||
]
|
]
|
||||||
|
|
||||||
|
instance ToSchema EvaluationView where
|
||||||
|
declareNamedSchema _ = do
|
||||||
|
stringSchema <- declareSchemaRef (DPR.Proxy :: DPR.Proxy String)
|
||||||
|
doubleSchema <- declareSchemaRef (DPR.Proxy :: DPR.Proxy Double)
|
||||||
|
testRefSchema <- declareSchemaRef (DPR.Proxy :: DPR.Proxy TestReference)
|
||||||
|
return $ NamedSchema (Just "Evaluation") $ mempty
|
||||||
|
& type_ .~ SwaggerObject
|
||||||
|
& properties .~
|
||||||
|
fromList [ ("score", stringSchema)
|
||||||
|
, ("full-score", doubleSchema)
|
||||||
|
, ("test", testRefSchema)
|
||||||
|
]
|
||||||
|
& required .~ [ "score", "full-score", "test" ]
|
||||||
|
|
||||||
|
|
||||||
data TagView = TagView {
|
data TagView = TagView {
|
||||||
tagViewName :: Text,
|
tagViewName :: Text,
|
||||||
tagViewDescription :: Maybe Text,
|
tagViewDescription :: Maybe Text,
|
||||||
@ -930,6 +978,20 @@ instance ToJSON TagView where
|
|||||||
, "accepted" .= tagViewAccepted t
|
, "accepted" .= tagViewAccepted t
|
||||||
]
|
]
|
||||||
|
|
||||||
|
instance ToSchema TagView where
|
||||||
|
declareNamedSchema _ = do
|
||||||
|
stringSchema <- declareSchemaRef (DPR.Proxy :: DPR.Proxy String)
|
||||||
|
boolSchema <- declareSchemaRef (DPR.Proxy :: DPR.Proxy Bool)
|
||||||
|
return $ NamedSchema (Just "Tag") $ mempty
|
||||||
|
& type_ .~ SwaggerObject
|
||||||
|
& properties .~
|
||||||
|
fromList [ ("name", stringSchema)
|
||||||
|
, ("description", stringSchema)
|
||||||
|
, ("accepted", boolSchema)
|
||||||
|
]
|
||||||
|
& required .~ [ "name", "description" ]
|
||||||
|
|
||||||
|
|
||||||
data SubmissionView = SubmissionView {
|
data SubmissionView = SubmissionView {
|
||||||
submissionViewId :: Int64,
|
submissionViewId :: Int64,
|
||||||
submissionViewVariantId :: Int64,
|
submissionViewVariantId :: Int64,
|
||||||
@ -965,6 +1027,36 @@ instance ToJSON SubmissionView where
|
|||||||
, "isPublic" .= submissionViewIsPublic s
|
, "isPublic" .= submissionViewIsPublic s
|
||||||
]
|
]
|
||||||
|
|
||||||
|
instance ToSchema SubmissionView where
|
||||||
|
declareNamedSchema _ = do
|
||||||
|
stringSchema <- declareSchemaRef (DPR.Proxy :: DPR.Proxy String)
|
||||||
|
boolSchema <- declareSchemaRef (DPR.Proxy :: DPR.Proxy Bool)
|
||||||
|
intSchema <- declareSchemaRef (DPR.Proxy :: DPR.Proxy Int)
|
||||||
|
intsSchema <- declareSchemaRef (DPR.Proxy :: DPR.Proxy [Int])
|
||||||
|
tagsSchema <- declareSchemaRef (DPR.Proxy :: DPR.Proxy [TagView])
|
||||||
|
evalsSchema <- declareSchemaRef (DPR.Proxy :: DPR.Proxy [EvaluationView])
|
||||||
|
return $ NamedSchema (Just "SubmissionView") $ mempty
|
||||||
|
& type_ .~ SwaggerObject
|
||||||
|
& properties .~
|
||||||
|
fromList [ ("id", intSchema)
|
||||||
|
, ("variant", intSchema)
|
||||||
|
, ("rank", intSchema)
|
||||||
|
, ("submitter", stringSchema)
|
||||||
|
, ("when", stringSchema)
|
||||||
|
, ("version", intsSchema)
|
||||||
|
, ("description", stringSchema)
|
||||||
|
, ("tags", tagsSchema)
|
||||||
|
, ("hash", stringSchema)
|
||||||
|
, ("evaluations", evalsSchema)
|
||||||
|
, ("isOwner", boolSchema)
|
||||||
|
, ("isReevaluable", boolSchema)
|
||||||
|
, ("isVisible", boolSchema)
|
||||||
|
, ("isPublic", boolSchema)
|
||||||
|
]
|
||||||
|
& required .~ [ "id", "variant", "rank", "submitter", "when", "version",
|
||||||
|
"description", "tags", "hash", "evaluations",
|
||||||
|
"isOwner", "isReevaluable", "isVisible", "isPublic" ]
|
||||||
|
|
||||||
data SubmissionsView = SubmissionsView {
|
data SubmissionsView = SubmissionsView {
|
||||||
submissionsViewSubmissions :: [SubmissionView],
|
submissionsViewSubmissions :: [SubmissionView],
|
||||||
submissionsViewTests :: [TestReference]
|
submissionsViewTests :: [TestReference]
|
||||||
@ -976,6 +1068,18 @@ instance ToJSON SubmissionsView where
|
|||||||
"submissions" .= submissionsViewSubmissions ss
|
"submissions" .= submissionsViewSubmissions ss
|
||||||
]
|
]
|
||||||
|
|
||||||
|
instance ToSchema SubmissionsView where
|
||||||
|
declareNamedSchema _ = do
|
||||||
|
submissionViewsSchema <- declareSchemaRef (DPR.Proxy :: DPR.Proxy [SubmissionView])
|
||||||
|
testRefsSchema <- declareSchemaRef (DPR.Proxy :: DPR.Proxy [TestReference])
|
||||||
|
return $ NamedSchema (Just "Tag") $ mempty
|
||||||
|
& type_ .~ SwaggerObject
|
||||||
|
& properties .~
|
||||||
|
fromList [ ("tests", submissionViewsSchema)
|
||||||
|
, ("submissions", testRefsSchema)
|
||||||
|
]
|
||||||
|
& required .~ [ "tests", "submission" ]
|
||||||
|
|
||||||
getChallengeSubmissions :: ((Entity Submission) -> Bool) -> Text -> Handler Html
|
getChallengeSubmissions :: ((Entity Submission) -> Bool) -> Text -> Handler Html
|
||||||
getChallengeSubmissions condition name = do
|
getChallengeSubmissions condition name = do
|
||||||
Entity challengeId challenge <- runDB $ getBy404 $ UniqueName name
|
Entity challengeId challenge <- runDB $ getBy404 $ UniqueName name
|
||||||
|
@ -12,7 +12,7 @@ getSwaggerR :: Handler Value
|
|||||||
getSwaggerR = return $ toJSON apiDescription
|
getSwaggerR = return $ toJSON apiDescription
|
||||||
|
|
||||||
apiDescription :: Swagger
|
apiDescription :: Swagger
|
||||||
apiDescription = generalApi <> listChallengesApi <> leaderboardApi
|
apiDescription = generalApi <> listChallengesApi <> leaderboardApi <> allSubmissionsApi <> mySubmissionsApi
|
||||||
|
|
||||||
generalApi :: Swagger
|
generalApi :: Swagger
|
||||||
generalApi = (mempty :: Swagger)
|
generalApi = (mempty :: Swagger)
|
||||||
|
@ -29,6 +29,13 @@ import GEval.EvaluationScheme
|
|||||||
|
|
||||||
import GEval.ParseParams (parseParamsFromFilePath, OutputFileParsed(..))
|
import GEval.ParseParams (parseParamsFromFilePath, OutputFileParsed(..))
|
||||||
|
|
||||||
|
import Data.Swagger hiding (get)
|
||||||
|
import qualified Data.Swagger as DS
|
||||||
|
import Data.Swagger.Declare
|
||||||
|
import Data.Proxy as DPR
|
||||||
|
import Control.Lens hiding ((.=), (^.))
|
||||||
|
import Data.HashMap.Strict.InsOrd (fromList)
|
||||||
|
|
||||||
data TestReference = TestReference Text Text
|
data TestReference = TestReference Text Text
|
||||||
deriving (Show, Eq, Ord)
|
deriving (Show, Eq, Ord)
|
||||||
|
|
||||||
@ -38,6 +45,16 @@ instance ToJSON TestReference where
|
|||||||
"metric" .= metric
|
"metric" .= metric
|
||||||
]
|
]
|
||||||
|
|
||||||
|
instance ToSchema TestReference where
|
||||||
|
declareNamedSchema _ = do
|
||||||
|
stringSchema <- declareSchemaRef (DPR.Proxy :: DPR.Proxy String)
|
||||||
|
return $ NamedSchema (Just "TestReference") $ mempty
|
||||||
|
& type_ .~ SwaggerObject
|
||||||
|
& properties .~
|
||||||
|
Data.HashMap.Strict.InsOrd.fromList [ ("name", stringSchema)
|
||||||
|
, ("metric", stringSchema)
|
||||||
|
]
|
||||||
|
& required .~ [ "name", "metric" ]
|
||||||
|
|
||||||
getTestReference :: Entity Test -> TestReference
|
getTestReference :: Entity Test -> TestReference
|
||||||
getTestReference (Entity _ test) = TestReference (Data.Text.pack $ show $ testMetric test) (testName test)
|
getTestReference (Entity _ test) = TestReference (Data.Text.pack $ show $ testMetric test) (testName test)
|
||||||
@ -51,7 +68,7 @@ data LeaderboardEntry = LeaderboardEntry {
|
|||||||
leaderboardBestVariantId :: VariantId,
|
leaderboardBestVariantId :: VariantId,
|
||||||
leaderboardEvaluationMap :: Map TestReference Evaluation,
|
leaderboardEvaluationMap :: Map TestReference Evaluation,
|
||||||
leaderboardNumberOfSubmissions :: Int,
|
leaderboardNumberOfSubmissions :: Int,
|
||||||
leaderboardTags :: [(Entity Tag, Entity SubmissionTag)],
|
leaderboardTags :: [(Entity Import.Tag, Entity SubmissionTag)],
|
||||||
leaderboardParams :: [Parameter],
|
leaderboardParams :: [Parameter],
|
||||||
leaderboardVersion :: (Int, Int, Int)
|
leaderboardVersion :: (Int, Int, Int)
|
||||||
}
|
}
|
||||||
@ -61,7 +78,7 @@ data TableEntry = TableEntry {
|
|||||||
tableEntryVariant :: Entity Variant,
|
tableEntryVariant :: Entity Variant,
|
||||||
tableEntrySubmitter :: Entity User,
|
tableEntrySubmitter :: Entity User,
|
||||||
tableEntryMapping :: Map TestReference Evaluation,
|
tableEntryMapping :: Map TestReference Evaluation,
|
||||||
tableEntryTagsInfo :: [(Entity Tag, Entity SubmissionTag)],
|
tableEntryTagsInfo :: [(Entity Import.Tag, Entity SubmissionTag)],
|
||||||
tableEntryParams :: [Entity Parameter],
|
tableEntryParams :: [Entity Parameter],
|
||||||
tableEntryRank :: Int,
|
tableEntryRank :: Int,
|
||||||
tableEntryVersion :: (Int, Int, Int) }
|
tableEntryVersion :: (Int, Int, Int) }
|
||||||
@ -456,7 +473,7 @@ getScore testId variantId = do
|
|||||||
|
|
||||||
data BasicSubmissionInfo = BasicSubmissionInfo {
|
data BasicSubmissionInfo = BasicSubmissionInfo {
|
||||||
basicSubmissionInfoUser :: User,
|
basicSubmissionInfoUser :: User,
|
||||||
basicSubmissionInfoTagEnts :: [(Entity Tag, Entity SubmissionTag)],
|
basicSubmissionInfoTagEnts :: [(Entity Import.Tag, Entity SubmissionTag)],
|
||||||
basicSubmissionInfoVersion :: Version }
|
basicSubmissionInfoVersion :: Version }
|
||||||
|
|
||||||
getBasicSubmissionInfo :: (MonadIO m, PersistQueryRead backend,
|
getBasicSubmissionInfo :: (MonadIO m, PersistQueryRead backend,
|
||||||
|
Loading…
Reference in New Issue
Block a user