Coorpacademy Progression Aggregations API

A separate aggregation service over the same progression data store, exposing DynamoDB-backed per-slide analytics and per-user completion and slide-count reads/writes under a /v1 prefix. 3 paths / 5 operations. Key-gated via an `authentication` header.

OpenAPI Specification

coorpacademy-progression-aggregations-openapi.json Raw ↑
{"swagger":"2.0","info":{"description":"API to manage CoorpAcademy progression","version":"1.0.0","title":"progression API"},"host":"aggregation-progression.coorpacademy.com","basePath":"/api","schemes":["https"],"produces":["application/json"],"securityDefinitions":{"authentication":{"type":"apiKey","name":"authentication","in":"header"}},"paths":{"/v1/analytics/slides/{slideId}":{"get":{"tags":["analytics"],"summary":"Get slide's analytics","description":"Get slide's analytics","operationId":"slideAnalyticsFromDynamodbGET","security":[{"authentication":[]}],"parameters":[{"name":"slideId","in":"path","description":"Id of the slide","required":true,"type":"string","x-example":"sli_XXXXXXXXX"}],"responses":{"200":{"description":"Slide's analytics","schema":{"$ref":"#/definitions/AnalyticsSlide"}},"401":{"$ref":"#/responses/Unauthorized"}},"x-swagger-router-controller":"analytics"}},"/v1/users/{userId}/analytics/completion":{"get":{"tags":["analytics"],"summary":"Get user progression completion","description":"Get user progression completion","operationId":"completionFromDynamodbForUserGET","security":[{"authentication":[]}],"parameters":[{"name":"userId","in":"path","description":"Id of the user","required":true,"type":"string","x-example":"222222222222222222222222"}],"responses":{"200":{"description":"Post user progression completion","schema":{"type":"array","items":{"$ref":"#/definitions/AnalyticsProgression"}}},"401":{"$ref":"#/responses/Unauthorized"},"403":{"$ref":"#/responses/Forbidden"}},"x-swagger-router-controller":"analytics"},"post":{"tags":["analytics"],"summary":"Post user progression completion","description":"Post user progression completion","operationId":"completionFromDynamodbForUserPOST","security":[{"authentication":[]}],"consumes":["text/plain"],"parameters":[{"name":"userId","in":"path","description":"Id of the user","required":true,"type":"string","x-example":"222222222222222222222222"},{"name":"contents","in":"body","schema":{"type":"string"},"description":"format: engine@type@ref,engine@type@ref (ex: microlearning@chapter@cha_111,microlearning@chapter@cha_222,learner@level@mod_444)"}],"responses":{"200":{"description":"Post user progression completion","schema":{"type":"array","items":{"$ref":"#/definitions/AnalyticsProgression"}}},"400":{"$ref":"#/responses/BadRequest"},"401":{"$ref":"#/responses/Unauthorized"},"403":{"$ref":"#/responses/Forbidden"}},"x-swagger-router-controller":"analytics"}},"/v1/users/{userId}/analytics/slide-count":{"get":{"tags":["analytics"],"summary":"Get content's slide count","description":"Get content's slide count","operationId":"slideCountFromDynamodbForUserGET","security":[{"authentication":[]}],"parameters":[{"name":"userId","in":"path","description":"Id of the user","required":true,"type":"string","x-example":"222222222222222222222222"}],"responses":{"200":{"description":"Post content's slide count","schema":{"type":"array","items":{"$ref":"#/definitions/AnalyticsSlideCount"}}},"401":{"$ref":"#/responses/Unauthorized"},"403":{"$ref":"#/responses/Forbidden"}},"x-swagger-router-controller":"analytics"},"post":{"tags":["analytics"],"summary":"Post content's slide count","description":"Post content's slide count","operationId":"slideCountFromDynamodbForUserPOST","security":[{"authentication":[]}],"consumes":["text/plain"],"parameters":[{"name":"userId","in":"path","description":"Id of the user","required":true,"type":"string","x-example":"222222222222222222222222"},{"name":"contents","in":"body","schema":{"type":"string"},"description":"format: engine@type@ref,engine@type@ref (ex: microlearning@chapter@cha_111,microlearning@chapter@cha_222,learner@level@mod_444)"}],"responses":{"200":{"description":"Post content's slide count","schema":{"type":"array","items":{"$ref":"#/definitions/AnalyticsSlideCount"}}},"401":{"$ref":"#/responses/Unauthorized"},"403":{"$ref":"#/responses/Forbidden"}},"x-swagger-router-controller":"analytics"}}},"definitions":{"AnalyticsProgression":{"type":"object","additionalProperties":false,"required":["engine","userId","content","current","lastProgressionId","success","stars","lives","remainingLifeRequests","createdAt","updatedAt"],"properties":{"engine":{"$ref":"#/definitions/Engine"},"userId":{"type":"string","description":"User identifier"},"content":{"$ref":"#/definitions/Content"},"current":{"type":"integer"},"lastProgressionId":{"type":"string","description":"Progression identifier"},"success":{"type":"boolean"},"stars":{"type":"integer"},"lives":{"type":"integer"},"remainingLifeRequests":{"type":"integer"},"createdAt":{"type":"string","format":"date-time"},"firstCompletionDate":{"type":"string","format":"date-time"},"lastCompletionDate":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"AnalyticsSlideCount":{"type":"object","required":["ref","best","total","nbAttempts"],"properties":{"ref":{"type":"string"},"best":{"type":"integer"},"total":{"type":"integer"},"nbAttempts":{"type":"integer"}}},"AnalyticsSlide":{"type":"object","additionalProperties":false,"properties":{"rate":{"type":"integer"},"success":{"type":"integer"},"total":{"type":"integer"}}},"Content":{"type":"object","additionalProperties":false,"required":["ref","type"],"description":"Content information related to the progression","properties":{"ref":{"type":"string","description":"Content ref"},"type":{"type":"string","description":"Content type: chapter, level, discipline, resource (video, pdf)"},"version":{"type":"string","description":"Version of the given content"}}},"Engine":{"type":"object","additionalProperties":false,"description":"Content information related to the used progression engine","required":["ref"],"properties":{"ref":{"type":"string","description":"Engine ref","enum":["microlearning","learner"]},"version":{"type":"string","description":"Engine version"}}},"EngineOptions":{"type":"object","additionalProperties":false,"description":"","properties":{"livesDisabled":{"type":"boolean"},"shuffleChoices":{"type":"boolean"},"lives":{"type":"integer"}}},"Error":{"type":"object","properties":{"id":{"type":"string"},"code":{"type":"string"},"errors":{"type":"array","items":{"type":"object"}},"success":{"type":"boolean"},"status":{"type":"integer"},"message":{"type":"string"}}}},"responses":{"BadRequest":{"description":"Bad Request","schema":{"$ref":"#/definitions/Error"}},"Forbidden":{"description":"Forbidden","schema":{"$ref":"#/definitions/Error"}},"InternalError":{"description":"InternalError","schema":{"$ref":"#/definitions/Error"}},"Unauthorized":{"description":"Unauthorized","schema":{"$ref":"#/definitions/Error"}},"NotFound":{"description":"Not Found","schema":{"$ref":"#/definitions/Error"}},"Conflit":{"description":"Conflit","schema":{"$ref":"#/definitions/Error"}}}}