generated from coulomb/repo-seed
feat: add v2 manifest bootstrap endpoints
Some checks failed
Build and Deploy / build-push-deploy (push) Has been cancelled
Some checks failed
Build and Deploy / build-push-deploy (push) Has been cancelled
This commit is contained in:
@@ -16,7 +16,8 @@ import qualified Data.Text.Encoding as TE
|
||||
import qualified Data.Yaml as Yaml -- yaml package
|
||||
import qualified Data.ByteString.Lazy as LBS
|
||||
import Application.Helper.TypeRegistry
|
||||
( activeWidgetTypes, activeEventTypes, activeAnnotationCategories )
|
||||
( activeWidgetTypes, activeEventTypes, activeAnnotationCategories
|
||||
, activePolicyScopes )
|
||||
import Network.HTTP.Types (status200)
|
||||
import Network.Wai (responseLBS)
|
||||
|
||||
@@ -47,10 +48,12 @@ buildOpenApiSpec = do
|
||||
let allWidgetTypes = fwWidgetTypes ++ ownedWidgetTypes
|
||||
eventTypes <- activeEventTypes
|
||||
annCats <- activeAnnotationCategories
|
||||
policyScopes <- activePolicyScopes
|
||||
|
||||
let wtEnum = toJSON $ map (.name) allWidgetTypes
|
||||
let etEnum = toJSON $ map (.name) eventTypes
|
||||
let acEnum = toJSON $ map (.name) annCats
|
||||
let psEnum = toJSON $ map (.name) policyScopes
|
||||
|
||||
pure $ object
|
||||
[ "openapi" .= ("3.1.0" :: Text)
|
||||
@@ -76,6 +79,10 @@ buildOpenApiSpec = do
|
||||
[ "type" .= ("string" :: Text)
|
||||
, "enum" .= acEnum
|
||||
]
|
||||
, "PolicyScope" .= object
|
||||
[ "type" .= ("string" :: Text)
|
||||
, "enum" .= psEnum
|
||||
]
|
||||
, "PaginationMeta" .= object
|
||||
[ "type" .= ("object" :: Text)
|
||||
, "properties" .= object
|
||||
@@ -85,6 +92,7 @@ buildOpenApiSpec = do
|
||||
]
|
||||
]
|
||||
, "Hub" .= hubSchema
|
||||
, "HubCapabilityManifest" .= manifestSchema
|
||||
, "Widget" .= widgetSchema
|
||||
, "InteractionEvent" .= interactionEventSchema
|
||||
, "Annotation" .= annotationSchema
|
||||
@@ -114,6 +122,20 @@ buildPaths = object
|
||||
, "post" .= writeOp "Hub" "CreateHubRequest"
|
||||
]
|
||||
, "/hubs/{id}" .= getShowPath "Hub"
|
||||
, "/hub-capability-manifests" .= object
|
||||
[ "get" .= listOp "HubCapabilityManifest"
|
||||
[ ("hubId", "string", "uuid")
|
||||
, ("status", "string", "")
|
||||
]
|
||||
, "post" .= writeOp "HubCapabilityManifest" "CreateHubCapabilityManifestRequest"
|
||||
]
|
||||
, "/hub-capability-manifests/{id}" .= object
|
||||
[ "get" .= showOp "HubCapabilityManifest"
|
||||
, "patch" .= writeOpWithSummary "Update HubCapabilityManifest" "HubCapabilityManifest" "UpdateHubCapabilityManifestRequest"
|
||||
]
|
||||
, "/hub-capability-manifests/{id}/activate" .= object
|
||||
[ "post" .= writeOpWithSummary "Activate HubCapabilityManifest" "HubCapabilityManifest" "ActivateHubCapabilityManifestRequest"
|
||||
]
|
||||
, "/widgets" .= object
|
||||
[ "get" .= listOp "Widget" []
|
||||
, "post" .= writeOp "Widget" "CreateWidgetRequest"
|
||||
@@ -144,6 +166,7 @@ buildPaths = object
|
||||
, "/widget-types" .= publicListPath "WidgetTypeRegistry"
|
||||
, "/event-types" .= publicListPath "EventTypeRegistry"
|
||||
, "/annotation-categories" .= publicListPath "AnnotationCategoryRegistry"
|
||||
, "/policy-scopes" .= publicListPath "PolicyScopeRegistry"
|
||||
, "/token" .= tokenPath
|
||||
-- Phase 10 — Hub Registry and Widget Marketplace
|
||||
, "/hub-registry" .= getListPath "HubRegistryEntry"
|
||||
@@ -214,8 +237,11 @@ showOp schemaName = object
|
||||
]
|
||||
|
||||
writeOp :: Text -> Text -> Value
|
||||
writeOp schemaName _reqSchema = object
|
||||
[ "summary" .= ("Create " <> schemaName)
|
||||
writeOp schemaName reqSchema = writeOpWithSummary ("Create " <> schemaName) schemaName reqSchema
|
||||
|
||||
writeOpWithSummary :: Text -> Text -> Text -> Value
|
||||
writeOpWithSummary summaryText schemaName _reqSchema = object
|
||||
[ "summary" .= summaryText
|
||||
, "security" .= [object ["BearerAuth" .= ([] :: [Text])]]
|
||||
, "requestBody" .= object
|
||||
[ "required" .= True
|
||||
@@ -305,6 +331,26 @@ widgetSchema = object
|
||||
]
|
||||
]
|
||||
|
||||
manifestSchema :: Value
|
||||
manifestSchema = object
|
||||
[ "type" .= ("object" :: Text)
|
||||
, "properties" .= object
|
||||
[ "id" .= uuidProp
|
||||
, "hubId" .= uuidProp
|
||||
, "manifestVersion" .= strProp
|
||||
, "declaredWidgetTypes" .= object ["type" .= ("array" :: Text), "items" .= object ["$ref" .= ("#/components/schemas/WidgetType" :: Text)]]
|
||||
, "declaredEventTypes" .= object ["type" .= ("array" :: Text), "items" .= object ["$ref" .= ("#/components/schemas/EventType" :: Text)]]
|
||||
, "declaredAnnotationCategories" .= object ["type" .= ("array" :: Text), "items" .= object ["$ref" .= ("#/components/schemas/AnnotationCategory" :: Text)]]
|
||||
, "declaredPolicyScopes" .= object ["type" .= ("array" :: Text), "items" .= object ["$ref" .= ("#/components/schemas/PolicyScope" :: Text)]]
|
||||
, "capabilityDescription" .= strProp
|
||||
, "contact" .= strProp
|
||||
, "status" .= strProp
|
||||
, "activatedAt" .= dtProp
|
||||
, "createdAt" .= dtProp
|
||||
, "updatedAt" .= dtProp
|
||||
]
|
||||
]
|
||||
|
||||
interactionEventSchema :: Value
|
||||
interactionEventSchema = object
|
||||
[ "type" .= ("object" :: Text)
|
||||
|
||||
Reference in New Issue
Block a user