{ "openapi": "3.1.0", "info": { "version": "0.1.0", "title": "Dwengo-1 Backend API", "description": "Dwengo-1 Backend API using Express, based on VZW Dwengo", "license": { "name": "MIT", "url": "https://github.com/SELab-2/Dwengo-1/blob/336496ab6352ee3f8bf47490c90b5cf81526cef6/LICENSE" } }, "servers": [ { "url": "http://localhost:3000/", "description": "Development server" }, { "url": "https://sel2-1.ugent.be/", "description": "Production server" } ], "paths": { "/api/": { "get": { "description": "", "responses": { "200": { "description": "OK" } } } }, "/api/student/": { "get": { "tags": ["Student"], "description": "", "parameters": [ { "name": "full", "in": "query", "schema": { "type": "string" } } ], "responses": { "201": { "description": "Created" }, "404": { "description": "Not Found" } } }, "post": { "tags": ["Student"], "description": "", "responses": { "201": { "description": "Created" }, "400": { "description": "Bad Request" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "username": { "example": "any" }, "firstName": { "example": "any" }, "lastName": { "example": "any" } } } } } } }, "delete": { "tags": ["Student"], "description": "", "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" }, "404": { "description": "Not Found" } } } }, "/api/student/{username}": { "delete": { "tags": ["Student"], "description": "", "parameters": [ { "name": "username", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" }, "404": { "description": "Not Found" } } }, "get": { "tags": ["Student"], "description": "", "parameters": [ { "name": "username", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "201": { "description": "Created" }, "400": { "description": "Bad Request" }, "404": { "description": "Not Found" } } } }, "/api/student/{id}/classes": { "get": { "tags": ["Student"], "description": "", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "full", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "500": { "description": "Internal Server Error" } } } }, "/api/student/{id}/submissions": { "get": { "tags": ["Student"], "description": "", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } } } }, "/api/student/{id}/assignments": { "get": { "tags": ["Student"], "description": "", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "full", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } } } }, "/api/student/{id}/groups": { "get": { "tags": ["Student"], "description": "", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "full", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } } } }, "/api/student/{id}/questions": { "get": { "tags": ["Student"], "description": "", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } } } }, "/api/group/": { "get": { "tags": ["Group"], "description": "", "parameters": [ { "name": "full", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" } } }, "post": { "tags": ["Group"], "description": "", "responses": { "201": { "description": "Created" }, "400": { "description": "Bad Request" }, "500": { "description": "Internal Server Error" } } } }, "/api/group/{groupid}": { "get": { "tags": ["Group"], "description": "", "parameters": [ { "name": "groupid", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" } } } }, "/api/group/{id}/questions": { "get": { "tags": ["Group"], "description": "", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } } } }, "/api/assignment/": { "get": { "tags": ["Assignment"], "description": "", "parameters": [ { "name": "full", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } } }, "post": { "tags": ["Assignment"], "description": "", "responses": { "201": { "description": "Created" }, "400": { "description": "Bad Request" }, "500": { "description": "Internal Server Error" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "description": { "example": "any" }, "language": { "example": "any" }, "learningPath": { "example": "any" }, "title": { "example": "any" } } } } } } } }, "/api/assignment/{id}": { "get": { "tags": ["Assignment"], "description": "", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" }, "404": { "description": "Not Found" } } } }, "/api/assignment/{id}/submissions": { "get": { "tags": ["Assignment"], "description": "", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" } } } }, "/api/assignment/{id}/questions": { "get": { "tags": ["Assignment"], "description": "", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } } } }, "/api/assignment/{assignmentid}/groups/": { "get": { "tags": ["Assignment"], "description": "", "parameters": [ { "name": "assignmentid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "full", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" } } }, "post": { "tags": ["Assignment"], "description": "", "parameters": [ { "name": "assignmentid", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "201": { "description": "Created" }, "400": { "description": "Bad Request" }, "500": { "description": "Internal Server Error" } } } }, "/api/assignment/{assignmentid}/groups/{groupid}": { "get": { "tags": ["Assignment"], "description": "", "parameters": [ { "name": "assignmentid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "groupid", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" } } } }, "/api/assignment/{assignmentid}/groups/{id}/questions": { "get": { "tags": ["Assignment"], "description": "", "parameters": [ { "name": "assignmentid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } } } }, "/api/submission/": { "get": { "tags": ["Submission"], "description": "", "responses": { "200": { "description": "OK" } } } }, "/api/submission/{id}": { "post": { "tags": ["Submission"], "description": "", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found" } } }, "get": { "tags": ["Submission"], "description": "", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "language", "in": "query", "schema": { "type": "string" } }, { "name": "version", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" }, "404": { "description": "Not Found" } } }, "delete": { "tags": ["Submission"], "description": "", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "language", "in": "query", "schema": { "type": "string" } }, { "name": "version", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found" } } } }, "/api/class/": { "get": { "tags": ["Class"], "description": "", "parameters": [ { "name": "full", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } } }, "post": { "tags": ["Class"], "description": "", "responses": { "201": { "description": "Created" }, "400": { "description": "Bad Request" }, "500": { "description": "Internal Server Error" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "displayName": { "example": "any" } } } } } } } }, "/api/class/{id}": { "get": { "tags": ["Class"], "description": "", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found" }, "500": { "description": "Internal Server Error" } } } }, "/api/class/{id}/teacher-invitations": { "get": { "tags": ["Class"], "description": "", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "full", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } } } }, "/api/class/{id}/students": { "get": { "tags": ["Class"], "description": "", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "full", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } } } }, "/api/class/{classid}/assignments/": { "get": { "tags": ["Class"], "description": "", "parameters": [ { "name": "classid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "full", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } } }, "post": { "tags": ["Class"], "description": "", "parameters": [ { "name": "classid", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "201": { "description": "Created" }, "400": { "description": "Bad Request" }, "500": { "description": "Internal Server Error" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "description": { "example": "any" }, "language": { "example": "any" }, "learningPath": { "example": "any" }, "title": { "example": "any" } } } } } } } }, "/api/class/{classid}/assignments/{id}": { "get": { "tags": ["Class"], "description": "", "parameters": [ { "name": "classid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" }, "404": { "description": "Not Found" } } } }, "/api/class/{classid}/assignments/{id}/submissions": { "get": { "tags": ["Class"], "description": "", "parameters": [ { "name": "classid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" } } } }, "/api/class/{classid}/assignments/{id}/questions": { "get": { "tags": ["Class"], "description": "", "parameters": [ { "name": "classid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } } } }, "/api/class/{classid}/assignments/{assignmentid}/groups/": { "get": { "tags": ["Class"], "description": "", "parameters": [ { "name": "classid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "assignmentid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "full", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" } } }, "post": { "tags": ["Class"], "description": "", "parameters": [ { "name": "classid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "assignmentid", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "201": { "description": "Created" }, "400": { "description": "Bad Request" }, "500": { "description": "Internal Server Error" } } } }, "/api/class/{classid}/assignments/{assignmentid}/groups/{groupid}": { "get": { "tags": ["Class"], "description": "", "parameters": [ { "name": "classid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "assignmentid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "groupid", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" } } } }, "/api/class/{classid}/assignments/{assignmentid}/groups/{id}/questions": { "get": { "tags": ["Class"], "description": "", "parameters": [ { "name": "classid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "assignmentid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } } } }, "/api/question/": { "get": { "tags": ["Question"], "description": "", "parameters": [ { "name": "full", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found" } } }, "post": { "tags": ["Question"], "description": "", "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "learningObjectIdentifier": { "example": "any" }, "author": { "example": "any" }, "content": { "example": "any" } } } } } } } }, "/api/question/{seq}": { "delete": { "tags": ["Question"], "description": "", "parameters": [ { "name": "seq", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" } } }, "get": { "tags": ["Question"], "description": "", "parameters": [ { "name": "seq", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found" } } } }, "/api/question/answers/{seq}": { "get": { "tags": ["Question"], "description": "", "parameters": [ { "name": "seq", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "full", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found" } } } }, "/api/auth/config": { "get": { "tags": ["Auth"], "description": "", "responses": { "200": { "description": "OK" } } } }, "/api/auth/testAuthenticatedOnly": { "get": { "tags": ["Auth"], "description": "", "responses": { "200": { "description": "OK" } }, "security": [ { "student": [] }, { "teacher": [] } ] } }, "/api/auth/testStudentsOnly": { "get": { "tags": ["Auth"], "description": "", "responses": { "200": { "description": "OK" } }, "security": [ { "student": [] } ] } }, "/api/auth/testTeachersOnly": { "get": { "tags": ["Auth"], "description": "", "responses": { "200": { "description": "OK" } }, "security": [ { "teacher": [] } ] } }, "/api/theme/": { "get": { "tags": ["Theme"], "description": "", "parameters": [ { "name": "language", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } } } }, "/api/theme/{theme}": { "get": { "tags": ["Theme"], "description": "", "parameters": [ { "name": "theme", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found" } } } }, "/api/learningPath/": { "get": { "tags": ["Learning Path"], "description": "", "parameters": [ { "name": "hruid", "in": "query", "schema": { "type": "string" } }, { "name": "theme", "in": "query", "schema": { "type": "string" } }, { "name": "search", "in": "query", "schema": { "type": "string" } }, { "name": "language", "in": "query", "schema": { "type": "string" } }, { "name": "forStudent", "in": "query", "schema": { "type": "string" } }, { "name": "forGroup", "in": "query", "schema": { "type": "string" } }, { "name": "assignmentNo", "in": "query", "schema": { "type": "string" } }, { "name": "classId", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } } } }, "/api/learningObject/": { "get": { "tags": ["Learning Object"], "description": "", "parameters": [ { "name": "full", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } } } }, "/api/learningObject/{hruid}": { "get": { "tags": ["Learning Object"], "description": "", "parameters": [ { "name": "hruid", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } } } }, "/api/learningObject/{hruid}/html": { "get": { "tags": ["Learning Object"], "description": "", "parameters": [ { "name": "hruid", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } } } }, "/api/learningObject/{hruid}/html/{attachmentName}": { "get": { "tags": ["Learning Object"], "description": "", "parameters": [ { "name": "hruid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "attachmentName", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "default": { "description": "" } } } }, "/api/learningObject/{hruid}/submissions/": { "get": { "tags": ["Learning Object"], "description": "", "parameters": [ { "name": "hruid", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } } } }, "/api/learningObject/{hruid}/submissions/{id}": { "post": { "tags": ["Learning Object"], "description": "", "parameters": [ { "name": "hruid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found" } } }, "get": { "tags": ["Learning Object"], "description": "", "parameters": [ { "name": "hruid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "language", "in": "query", "schema": { "type": "string" } }, { "name": "version", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" }, "404": { "description": "Not Found" } } }, "delete": { "tags": ["Learning Object"], "description": "", "parameters": [ { "name": "hruid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "language", "in": "query", "schema": { "type": "string" } }, { "name": "version", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found" } } } }, "/api/learningObject/{hruid}/{version}/questions/": { "get": { "tags": ["Learning Object"], "description": "", "parameters": [ { "name": "hruid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "version", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "full", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found" } } }, "post": { "tags": ["Learning Object"], "description": "", "parameters": [ { "name": "hruid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "version", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" } }, "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "learningObjectIdentifier": { "example": "any" }, "author": { "example": "any" }, "content": { "example": "any" } } } } } } } }, "/api/learningObject/{hruid}/{version}/questions/{seq}": { "delete": { "tags": ["Learning Object"], "description": "", "parameters": [ { "name": "hruid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "version", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "seq", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request" } } }, "get": { "tags": ["Learning Object"], "description": "", "parameters": [ { "name": "hruid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "version", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "seq", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found" } } } }, "/api/learningObject/{hruid}/{version}/questions/answers/{seq}": { "get": { "tags": ["Learning Object"], "description": "", "parameters": [ { "name": "hruid", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "version", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "seq", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "full", "in": "query", "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found" } } } } }, "components": { "securitySchemes": { "student": { "type": "oauth2", "flows": { "implicit": { "authorizationUrl": "https://sel2-1.ugent.be/idp/realms/student/protocol/openid-connect/auth", "scopes": { "openid": "openid", "profile": "profile", "email": "email" } } } }, "teacher": { "type": "oauth2", "flows": { "implicit": { "authorizationUrl": "https://sel2-1.ugent.be/idp/realms/teacher/protocol/openid-connect/auth", "scopes": { "openid": "openid", "profile": "profile", "email": "email" } } } } } } }