{"openapi":"3.1.0","info":{"title":"Mathrail Backend Application","description":"### Generic errors\nThe following generic errors are returned by the API:\n- **401**, _Unauthorized_: Client was not authenticated.\n- **403**, _Forbidden_: Client is missing a role required to perform the operation.\n- **400**, _Bad request_: Request data cannot be correctly parsed.\n- **422**, _Unprocessable entity_: Business validations failed.\n- **404**, _Not found_: Data was not found in the system.\n- **409**, _Conflict_: Optimistic locking failure. The version provided in _If-Match_ header does not match the current version of the data.\n","version":"2.50.0"},"servers":[{"url":"https://api.mathrail.com","description":"Generated server url"}],"security":[{"basicAuth":[]}],"paths":{"/api/users/{id}":{"get":{"tags":["user-rest-controller"],"summary":"Get user","operationId":"getUser","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"Version","style":"simple"}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/UserDtoGet"}}}}}},"put":{"tags":["user-rest-controller"],"summary":"Update user","operationId":"updateUser","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"If-Match","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDtoUpdate"}}},"required":true},"responses":{"204":{"description":"No Content"}}},"patch":{"tags":["user-rest-controller"],"summary":"Patch user","operationId":"patchUser","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"If-Match","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDtoPatch"}}},"required":true},"responses":{"204":{"description":"No Content"}}}},"/api/scenes/{id}":{"get":{"tags":["scene-rest-controller"],"summary":"Get scene","operationId":"getScene","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"Version","style":"simple"}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/SceneDtoGet"}}}}}},"put":{"tags":["scene-rest-controller"],"summary":"Update scene","operationId":"updateScene","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"If-Match","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SceneDtoUpdate"}}},"required":true},"responses":{"204":{"description":"No Content"}}},"patch":{"tags":["scene-rest-controller"],"summary":"Patch scene","operationId":"patchScene","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"If-Match","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SceneDtoPatch"}}},"required":true},"responses":{"204":{"description":"No Content"}}}},"/api/projects/{id}":{"get":{"tags":["project-rest-controller"],"summary":"Get project","operationId":"getProject","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"Version","style":"simple"}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/ProjectDtoGet"}}}}}},"put":{"tags":["project-rest-controller"],"summary":"Update project","operationId":"updateProject","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"If-Match","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDtoUpdate"}}},"required":true},"responses":{"204":{"description":"No Content"}}},"patch":{"tags":["project-rest-controller"],"summary":"Patch project","operationId":"patchProject","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"If-Match","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDtoPatch"}}},"required":true},"responses":{"204":{"description":"No Content"}}}},"/api/projects/{id}/companies":{"put":{"tags":["project-rest-controller"],"summary":"Update project companies","operationId":"updateProjectCompanies","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"If-Match","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidListProjectCompanyDtoUpdate"}}},"required":true},"responses":{"204":{"description":"No Content"}}}},"/api/my-user":{"get":{"tags":["my-user-rest-controller"],"summary":"Get my user","operationId":"getMyUser","responses":{"200":{"description":"OK","headers":{"ETag":{"description":"Version","style":"simple"}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/MyUserDtoGet"}}}}}},"put":{"tags":["my-user-rest-controller"],"summary":"Update my user","operationId":"updateMyUser","parameters":[{"name":"If-Match","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyUserDtoUpdate"}}},"required":true},"responses":{"204":{"description":"No Content"}}},"patch":{"tags":["my-user-rest-controller"],"summary":"Patch my user","operationId":"patchMyUser","parameters":[{"name":"If-Match","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyUserDtoPatch"}}},"required":true},"responses":{"204":{"description":"No Content"}}}},"/api/lessons/{id}":{"get":{"tags":["lesson-rest-controller"],"summary":"Get lesson","operationId":"getLesson","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"Version","style":"simple"}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/LessonDtoGet"}}}}}},"put":{"tags":["lesson-rest-controller"],"summary":"Update lesson","operationId":"updateLesson","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"If-Match","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LessonDtoUpdate"}}},"required":true},"responses":{"204":{"description":"No Content"}}},"patch":{"tags":["lesson-rest-controller"],"summary":"Patch lesson","operationId":"patchLesson","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"If-Match","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LessonDtoPatch"}}},"required":true},"responses":{"204":{"description":"No Content"}}}},"/api/layouts/{id}":{"get":{"tags":["layout-rest-controller"],"summary":"Get layout","operationId":"getLayout","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"Version","style":"simple"}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/LayoutDtoGet"}}}}}},"put":{"tags":["layout-rest-controller"],"summary":"Update layout","operationId":"updateLayout","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"If-Match","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayoutDtoUpdate"}}},"required":true},"responses":{"204":{"description":"No Content"}}},"patch":{"tags":["layout-rest-controller"],"summary":"Patch layout","operationId":"patchLayout","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"If-Match","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayoutDtoPatch"}}},"required":true},"responses":{"204":{"description":"No Content"}}}},"/api/layout-versions/{layoutVersionId}/simulation-runs/{simulationId}":{"get":{"tags":["simulation-run-rest-controller"],"summary":"Get simulation run","operationId":"getSimulationRun","parameters":[{"name":"layoutVersionId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"simulationId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/SimulationRunDtoGet"}}}}}},"put":{"tags":["simulation-run-rest-controller"],"summary":"Set simulation run","operationId":"setSimulationRun","parameters":[{"name":"layoutVersionId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"simulationId","in":"path","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulationRunDtoCreate"}}},"required":true},"responses":{"204":{"description":"No Content"}}}},"/api/layout-versions/{id}":{"get":{"tags":["layout-version-rest-controller"],"summary":"Get layout version","operationId":"getLayoutVersion","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"Version","style":"simple"}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/LayoutVersionDtoGet"}}}}}},"put":{"tags":["layout-version-rest-controller"],"summary":"Update layout version","operationId":"updateLayoutVersion","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"If-Match","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayoutVersionDtoUpdate"}}},"required":true},"responses":{"204":{"description":"No Content"}}}},"/api/layout-sessions/{token}/refresh":{"put":{"tags":["layout-session-rest-controller"],"summary":"Refresh layout session","operationId":"refreshLayoutSession","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"No Content"}}}},"/api/demo-lesson-runs/{courseLessonId}":{"put":{"tags":["demo-lesson-run-rest-controller"],"summary":"Set demo lesson run","operationId":"setDemoLessonRun","parameters":[{"name":"courseLessonId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoLessonRunDtoSet"}}},"required":true},"responses":{"204":{"description":"No Content"}}}},"/api/courses/{id}":{"get":{"tags":["course-rest-controller"],"summary":"Get course","operationId":"getCourse","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"Version","style":"simple"}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/CourseDtoGet"}}}}}},"put":{"tags":["course-rest-controller"],"summary":"Update course","operationId":"updateCourse","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"If-Match","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseDtoUpdate"}}},"required":true},"responses":{"204":{"description":"No Content"}}},"patch":{"tags":["course-rest-controller"],"summary":"Patch course","operationId":"patchCourse","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"If-Match","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseDtoPatch"}}},"required":true},"responses":{"204":{"description":"No Content"}}}},"/api/companies/{id}":{"get":{"tags":["company-rest-controller"],"summary":"Get company","operationId":"getCompany","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"Version","style":"simple"}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/CompanyDtoGet"}}}}}},"put":{"tags":["company-rest-controller"],"summary":"Update company","operationId":"updateCompany","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"If-Match","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyDtoUpdate"}}},"required":true},"responses":{"204":{"description":"No Content"}}},"patch":{"tags":["company-rest-controller"],"summary":"Patch company","operationId":"patchCompany","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"If-Match","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyDtoPatch"}}},"required":true},"responses":{"204":{"description":"No Content"}}}},"/api/users":{"get":{"tags":["user-rest-controller"],"summary":"List users","operationId":"listUsers","parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string"}},{"name":"companyId","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"role","in":"query","required":false,"schema":{"type":"string","enum":["engineer","instructor","student","admin","root"]}},{"name":"module","in":"query","required":false,"schema":{"type":"string","enum":["signaling","training","energy"]}},{"name":"archived","in":"query","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserDtoList"}}}}}}},"post":{"tags":["user-rest-controller"],"summary":"Create users","operationId":"createUsers","requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserDtoCreate"}}}},"required":true},"responses":{"200":{"description":"OK"}}}},"/api/user-files":{"post":{"tags":["user-file-rest-controller"],"summary":"Create user file","operationId":"createUserFile","parameters":[{"name":"file","in":"query","required":true,"schema":{"type":"string","format":"binary"}}],"responses":{"201":{"description":"Created","headers":{"Location":{"description":"Key","style":"simple"}}}}}},"/api/study-activities":{"post":{"tags":["study-activity-rest-controller"],"summary":"Create study activity","operationId":"createStudyActivity","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudyActivityDtoCreate"}}},"required":true},"responses":{"201":{"description":"Created"}}}},"/api/sessions":{"post":{"tags":["session-rest-controller"],"summary":"Create session (login)","operationId":"createSession","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionDtoCreate"}}},"required":true},"responses":{"201":{"description":"Created","headers":{"Location":{"description":"Token","style":"simple"}}}}},"delete":{"tags":["session-rest-controller"],"summary":"Delete session (logout)","operationId":"deleteSession","responses":{"204":{"description":"No Content"}}}},"/api/scenes":{"get":{"tags":["scene-rest-controller"],"summary":"List scenes","operationId":"listScenes","parameters":[{"name":"projectId","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"archived","in":"query","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SceneDtoList"}}}}}}},"post":{"tags":["scene-rest-controller"],"summary":"Create scene","operationId":"createScene","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SceneDtoUpdate"}}},"required":true},"responses":{"201":{"description":"Created","headers":{"Location":{"description":"Id","style":"simple"}}}}}},"/api/projects":{"get":{"tags":["project-rest-controller"],"summary":"List projects","operationId":"listProjects","parameters":[{"name":"module","in":"query","required":true,"schema":{"type":"string","enum":["signaling","training","energy"]}},{"name":"archived","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["name","created"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProjectDtoList"}}}}}}},"post":{"tags":["project-rest-controller"],"summary":"Create project","operationId":"createProject","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDtoCreate"}}},"required":true},"responses":{"201":{"description":"Created","headers":{"Location":{"description":"Id","style":"simple"}}}}}},"/api/password-reset-tokens":{"post":{"tags":["password-reset-rest-controller"],"summary":"Create password reset token and send password reset email","operationId":"createPasswordResetToken","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetDtoCreate"}}},"required":true},"responses":{"200":{"description":"OK"},"204":{"description":"No Content"}}}},"/api/password-reset-tokens/{passwordResetToken}":{"post":{"tags":["password-reset-rest-controller"],"summary":"Reset password","operationId":"resetPassword","parameters":[{"name":"passwordResetToken","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordResetDto"}}},"required":true},"responses":{"200":{"description":"OK"},"204":{"description":"No Content"}}}},"/api/ops-logs":{"get":{"tags":["ops-log-rest-controller"],"summary":"List ops logs","operationId":"listOpsLogs","parameters":[{"name":"createTimeTo","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"severity","in":"query","required":false,"schema":{"type":"string","enum":["info","warning","error"]}},{"name":"activity","in":"query","required":false,"schema":{"type":"string"}},{"name":"identifier","in":"query","required":false,"schema":{"type":"string"}},{"name":"name","in":"query","required":false,"schema":{"type":"string"}},{"name":"application","in":"query","required":false,"schema":{"type":"string","enum":["backend","frontend","layoutSnapshot","web"]}},{"name":"deviceId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"ipAddress","in":"query","required":false,"schema":{"type":"string"}},{"name":"country","in":"query","required":false,"schema":{"type":"string"}},{"name":"city","in":"query","required":false,"schema":{"type":"string"}},{"name":"userId","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"pageSessionId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"pageable","in":"query","required":true,"schema":{"$ref":"#/components/schemas/Pageable"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OpsLogDtoList"}}}}}}},"post":{"tags":["ops-log-rest-controller"],"summary":"Create ops logs","operationId":"createOpsLogs","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpsDeviceDtoCreate"}}},"required":true},"responses":{"201":{"description":"Created"}}}},"/api/lessons":{"get":{"tags":["lesson-rest-controller"],"summary":"List lessons","operationId":"listLessons","parameters":[{"name":"projectId","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"archived","in":"query","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LessonDtoList"}}}}}}},"post":{"tags":["lesson-rest-controller"],"summary":"Create lesson","operationId":"createLesson","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LessonDtoCreate"}}},"required":true},"responses":{"201":{"description":"Created","headers":{"Location":{"description":"Id","style":"simple"}}}}}},"/api/layouts":{"get":{"tags":["layout-rest-controller"],"summary":"List layouts","operationId":"listLayouts","parameters":[{"name":"projectId","in":"query","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"archived","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["name","updateTime"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LayoutDtoList"}}}}}}},"post":{"tags":["layout-rest-controller"],"summary":"Create layout","operationId":"createLayout","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayoutDtoCreate"}}},"required":true},"responses":{"201":{"description":"Created","headers":{"Location":{"description":"Id","style":"simple"}}}}}},"/api/layouts/{id}/copies":{"post":{"tags":["layout-rest-controller"],"summary":"Copy layout","operationId":"copyLayout","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"201":{"description":"Created","headers":{"Location":{"description":"Id","style":"simple"}}}}}},"/api/layout-versions":{"get":{"tags":["layout-version-rest-controller"],"summary":"List layout versions","operationId":"listLayoutVersions","parameters":[{"name":"layoutId","in":"query","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LayoutVersionDtoList"}}}}}}},"post":{"tags":["layout-version-rest-controller"],"summary":"Create layout version","operationId":"createLayoutVersion","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayoutVersionDtoCreate"}}},"required":true},"responses":{"201":{"description":"Created","headers":{"Location":{"description":"Id","style":"simple"}}}}}},"/api/layout-snapshots":{"get":{"tags":["layout-snapshot-rest-controller"],"summary":"List layout snapshots of current user, sorted by create time desc","operationId":"listLayoutSnapshots","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LayoutSnapshotDtoList"}}}}}}},"post":{"tags":["layout-snapshot-rest-controller"],"summary":"Create layout snapshot","operationId":"createLayoutSnapshot","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayoutSnapshotDtoCreate"}}},"required":true},"responses":{"201":{"description":"Created","headers":{"Location":{"description":"Key","style":"simple"}}}}}},"/api/layout-sessions":{"post":{"tags":["layout-session-rest-controller"],"summary":"Create layout session","operationId":"createLayoutSession","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayoutSessionDtoCreate"}}},"required":true},"responses":{"201":{"description":"Created","headers":{"Location":{"description":"Token","style":"simple"}}}}}},"/api/email-login-tokens":{"post":{"tags":["email-login-rest-controller"],"summary":"Create email login token and send the email","operationId":"createEmailLoginToken","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailLoginDtoCreate"}}},"required":true},"responses":{"204":{"description":"No Content"}}}},"/api/email-login-tokens/{emailLoginToken}":{"post":{"tags":["email-login-rest-controller"],"summary":"Login via email","operationId":"emailLogin","parameters":[{"name":"emailLoginToken","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"201":{"description":"Created","headers":{"Location":{"description":"Token","style":"simple"}}}}}},"/api/demo-users":{"post":{"tags":["demo-user-rest-controller"],"summary":"Create demo user","operationId":"createDemoUser","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDtoCreateDemo"}}},"required":true},"responses":{"201":{"description":"Created","headers":{"Location":{"description":"Token","style":"simple"}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/UserDtoCreateDemoResponse"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/UserDtoCreateDemoResponse"}}}}}}},"/api/courses":{"get":{"tags":["course-rest-controller"],"summary":"List courses","operationId":"listCourses","parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string"}},{"name":"instructorId","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["draft","open","closed"]}},{"name":"archived","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"pageable","in":"query","required":true,"schema":{"$ref":"#/components/schemas/Pageable"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CourseDtoList"}}}}}}},"post":{"tags":["course-rest-controller"],"summary":"Create course","operationId":"createCourse","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseDtoUpdate"}}},"required":true},"responses":{"201":{"description":"Created","headers":{"Location":{"description":"Id","style":"simple"}}}}}},"/api/course-resets/{id}":{"post":{"tags":["course-reset-rest-controller"],"summary":"Reset course","operationId":"resetCourse","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"No Content"}}}},"/api/course-resets/{courseId}/students/{studentId}/lessons/{lessonId}":{"post":{"tags":["course-reset-rest-controller"],"summary":"Reset course student lesson test","operationId":"resetCourse_1","parameters":[{"name":"courseId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"studentId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"lessonId","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"No Content"}}}},"/api/companies":{"get":{"tags":["company-rest-controller"],"summary":"List companies","operationId":"listCompanies","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CompanyDtoList"}}}}}}},"post":{"tags":["company-rest-controller"],"summary":"Create company","operationId":"createCompany","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyDtoUpdate"}}},"required":true},"responses":{"201":{"description":"Created","headers":{"Location":{"description":"Id","style":"simple"}}}}}},"/api/my-lesson-runs/{id}":{"get":{"tags":["my-lesson-run-rest-controller"],"summary":"Get my lesson run","operationId":"getLessonRun","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LessonRunDtoMyGet"}}}}}},"patch":{"tags":["my-lesson-run-rest-controller"],"summary":"Patch my lesson run","operationId":"patchLessonRun","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LessonRunDtoPatch"}}},"required":true},"responses":{"204":{"description":"No Content"}}}},"/api/layout-sessions/{token}":{"delete":{"tags":["layout-session-rest-controller"],"summary":"Expire layout session","operationId":"deleteLayoutSession","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"No Content"}}},"patch":{"tags":["layout-session-rest-controller"],"summary":"Patch layout session","operationId":"patchLayoutSession","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayoutSessionDtoPatch"}}},"required":true},"responses":{"204":{"description":"No Content"}}}},"/api/study-activities/report":{"get":{"tags":["study-activity-rest-controller"],"summary":"Study activity report","operationId":"reportStudyActivity","parameters":[{"name":"dateFrom","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"dateTo","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"granularity","in":"query","required":true,"schema":{"type":"string","enum":["day","week","month","quarter"]}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/StudyActivityDtoReport"}}}}}}},"/api/shareable-companies":{"get":{"tags":["shareable-company-rest-controller"],"summary":"List sharable companies","operationId":"listShareableCompanies","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CompanyDtoMaster"}}}}}}}},"/api/report/web-users":{"get":{"tags":["report-rest-controller"],"summary":"List web users","operationId":"listWebUsers","parameters":[{"name":"dateFrom","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"dateTo","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OpsLogDtoWebUsers"}}}}}}}},"/api/report/layout-snapshot-users":{"get":{"tags":["report-rest-controller"],"summary":"List layout snapshot users","operationId":"listLayoutSnapshotUsers","parameters":[{"name":"dateFrom","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"dateTo","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OpsLogDtoLayoutSnapshotUsers"}}}}}}}},"/api/report/frontend-users":{"get":{"tags":["report-rest-controller"],"summary":"List front-end users","operationId":"listFrontendUsers","parameters":[{"name":"dateFrom","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"dateTo","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OpsLogDtoFrontendUsers"}}}}}}}},"/api/report/daily-users-per-application":{"get":{"tags":["report-rest-controller"],"summary":"List daily distinct users per application","operationId":"listDailyUsersPerApplication","parameters":[{"name":"dateFrom","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"dateTo","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OpsLogDtoDailyUsersPerApp"}}}}}}}},"/api/my-lesson-runs":{"get":{"tags":["my-lesson-run-rest-controller"],"summary":"List my lesson runs","operationId":"listMyLessonRuns","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LessonRunDtoMyList"}}}}}}}},"/api/leaderboard":{"get":{"tags":["leaderboard-rest-controller"],"summary":"Get leaderboard","operationId":"getLeaderboard","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LeaderboardDtoGet"}}}}}}},"/api/layouts/{id}/latest-layout-version":{"get":{"tags":["layout-rest-controller"],"summary":"Get the latest layout version of a layout","operationId":"getLatestLayoutVersion","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"Version","style":"simple"}},"content":{"*/*":{"schema":{"$ref":"#/components/schemas/LayoutVersionDtoGetLayoutLatest"}}}}}}},"/api/layout-snapshots/{key}":{"get":{"tags":["layout-snapshot-public-rest-controller"],"summary":"Get layout snapshot by key, fill in backgrounds, anonymous access","operationId":"getLayoutSnapshotByKey","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LayoutSnapshotDtoGet"}}}}}}},"/api/layout-sessions/{token}/other-sessions":{"get":{"tags":["layout-session-rest-controller"],"summary":"List other layout sessions","operationId":"listOtherLayoutSessions","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LayoutSessionDtoList"}}}}}}}},"/api/demo-scenes/{id}":{"get":{"tags":["demo-scene-rest-controller"],"summary":"Get demo scene","operationId":"getDemoScene","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/SceneDtoGet"}}}}}}},"/api/demo-lesson-runs":{"get":{"tags":["demo-lesson-run-rest-controller"],"summary":"List demo lesson runs","operationId":"listDemoLessonRuns","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DemoLessonRunDtoList"}}}}}}}},"/api/demo-layouts/{id}":{"get":{"tags":["demo-layout-rest-controller"],"summary":"Get demo layout","operationId":"getDemoLayout","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LayoutDtoGet"}}}}}}},"/api/demo-layout-versions/{id}":{"get":{"tags":["demo-layout-version-rest-controller"],"summary":"Get demo layout version","operationId":"getDemoLayoutVersion","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/LayoutVersionDtoGet"}}}}}}},"/api/demo-course-lessons":{"get":{"tags":["demo-course-lesson-rest-controller"],"summary":"List demo course lessons","operationId":"listDemoCourseLessons","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CourseLessonDtoList"}}}}}}}},"/api/demo-course-lessons/{id}":{"get":{"tags":["demo-course-lesson-rest-controller"],"summary":"Get demo course lesson","operationId":"getDemoCourseLesson","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/CourseLessonDtoGet"}}}}}}},"/api/audit-logs":{"get":{"tags":["audit-log-rest-controller"],"summary":"List audit logs","operationId":"listAuditLogs","parameters":[{"name":"createTimeTo","in":"query","required":false,"schema":{"type":"string","format":"date-time"}},{"name":"entityName","in":"query","required":false,"schema":{"type":"string"}},{"name":"entityAction","in":"query","required":false,"schema":{"type":"string","enum":["copy","create","delete","patch","update","reset"]}},{"name":"entityId","in":"query","required":false,"schema":{"type":"string"}},{"name":"userId","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"pageable","in":"query","required":true,"schema":{"$ref":"#/components/schemas/Pageable"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AuditLogDtoList"}}}}}}}},"/api/audit-logs/{id}":{"get":{"tags":["audit-log-rest-controller"],"summary":"Get audit log","operationId":"getAuditLog","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/AuditLogDtoGet"}}}}}}},"/api/layout-snapshots/{id}":{"delete":{"tags":["layout-snapshot-rest-controller"],"summary":"Delete layout snapshot","operationId":"deleteLayoutSnapshot","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":"No Content"}}}}},"components":{"schemas":{"UserDtoUpdate":{"type":"object","properties":{"email":{"type":"string"},"username":{"type":"string","pattern":"^[a-zA-Z0-9_]*$"},"lastName":{"type":"string"},"firstName":{"type":"string"},"roles":{"type":"array","items":{"type":"string","enum":["engineer","instructor","student","admin","root"]}},"modules":{"type":"array","items":{"type":"string","enum":["signaling","training","energy"]}}},"required":["firstName","lastName"]},"BaseJsonNode":{},"SceneDtoUpdate":{"type":"object","properties":{"layoutVersionId":{"type":"integer","format":"int64"},"name":{"type":"string"},"category":{"type":"string","enum":["tutorial","interactive"]},"script":{"$ref":"#/components/schemas/BaseJsonNode"},"mapping":{"$ref":"#/components/schemas/BaseJsonNode"},"validationResults":{"$ref":"#/components/schemas/BaseJsonNode"}},"required":["category","layoutVersionId","mapping","name","script"]},"ProjectDtoUpdate":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"required":["name"]},"ProjectCompanyDtoUpdate":{"type":"object","properties":{"companyId":{"type":"integer","format":"int64"},"accessLevel":{"type":"string","enum":["comment","edit"]}},"required":["accessLevel","companyId"]},"ValidListProjectCompanyDtoUpdate":{"type":"array","items":{"$ref":"#/components/schemas/ProjectCompanyDtoUpdate"},"properties":{"list":{"type":"array","items":{"$ref":"#/components/schemas/ProjectCompanyDtoUpdate"}},"empty":{"type":"boolean"},"first":{"$ref":"#/components/schemas/ProjectCompanyDtoUpdate"},"last":{"$ref":"#/components/schemas/ProjectCompanyDtoUpdate"}}},"MyUserDtoUpdate":{"type":"object","properties":{"email":{"type":"string"},"username":{"type":"string","pattern":"^[a-zA-Z0-9_]*$"},"lastName":{"type":"string"},"firstName":{"type":"string"},"country":{"type":"string","maxLength":2,"minLength":2},"leaderboard":{"type":"boolean"},"privacyPolicyAccepted":{"type":"boolean"}},"required":["firstName","lastName"]},"LessonDtoUpdate":{"type":"object","properties":{"name":{"type":"string"},"localizedName":{"$ref":"#/components/schemas/BaseJsonNode"},"tutorial":{"$ref":"#/components/schemas/BaseJsonNode"},"practice":{"$ref":"#/components/schemas/BaseJsonNode"},"test":{"$ref":"#/components/schemas/BaseJsonNode"},"imageKey":{"type":"string","format":"uuid"}},"required":["name","practice","test","tutorial"]},"LayoutDtoUpdate":{"type":"object","properties":{"name":{"type":"string"},"code":{"type":"string"},"description":{"type":"string"}},"required":["name"]},"JsonContentDtoCreate":{"type":"object","properties":{"content":{"$ref":"#/components/schemas/BaseJsonNode"}}},"SimulationRunDtoCreate":{"type":"object","properties":{"scheme":{"$ref":"#/components/schemas/JsonContentDtoCreate"}},"required":["scheme"]},"LayoutVersionDtoUpdate":{"type":"object","properties":{"revision":{"type":"string"},"metaData":{"$ref":"#/components/schemas/BaseJsonNode"}}},"DemoLessonRunDtoSet":{"type":"object","properties":{"result":{"type":"integer","format":"int32"}},"required":["result"]},"CourseDtoUpdate":{"type":"object","properties":{"instructorId":{"type":"integer","format":"int64"},"name":{"type":"string"},"startTime":{"type":"string","format":"date-time"},"location":{"type":"string"},"description":{"type":"string"},"lessonIds":{"type":"array","items":{"type":"integer","format":"int64"}},"studentIds":{"type":"array","items":{"type":"integer","format":"int64"}}},"required":["instructorId","lessonIds","name","studentIds"]},"CompanyDtoUpdate":{"type":"object","properties":{"name":{"type":"string"},"usernamePrefix":{"type":"string","pattern":"^[a-zA-Z0-9]*$"},"modules":{"type":"array","items":{"type":"string","enum":["signaling","training","energy"]}},"trusted":{"type":"boolean"},"latitude":{"type":"number","format":"double","maximum":90,"minimum":-90},"longitude":{"type":"number","format":"double","maximum":180,"minimum":-180}},"required":["name","trusted"]},"UserDtoCreate":{"type":"object","properties":{"companyId":{"type":"integer","format":"int64"},"email":{"type":"string"},"username":{"type":"string","pattern":"^[a-zA-Z0-9_]*$"},"lastName":{"type":"string"},"firstName":{"type":"string"},"roles":{"type":"array","items":{"type":"string","enum":["engineer","instructor","student","admin","root"]}},"modules":{"type":"array","items":{"type":"string","enum":["signaling","training","energy"]}},"password":{"type":"string"}},"required":["companyId","firstName","lastName","password"]},"StudyActivityDtoCreate":{"type":"object","properties":{"deviceId":{"type":"string","format":"uuid"},"startTimeLocal":{"type":"string","format":"date-time"},"endTimeLocal":{"type":"string","format":"date-time"},"localTimeZoneOffset":{"type":"integer","format":"int32"}},"required":["deviceId","endTimeLocal","localTimeZoneOffset","startTimeLocal"]},"SessionDtoCreate":{"type":"object","properties":{"emailOrFullUsername":{"type":"string"},"password":{"type":"string"}},"required":["emailOrFullUsername","password"]},"ProjectDtoCreate":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"module":{"type":"string","enum":["signaling","training","energy"]},"sandbox":{"type":"boolean"}},"required":["module","name","sandbox"]},"PasswordResetDtoCreate":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"PasswordResetDto":{"type":"object","properties":{"password":{"type":"string","maxLength":2147483647,"minLength":8}},"required":["password"]},"OpsDeviceDtoCreate":{"type":"object","properties":{"application":{"type":"string","enum":["backend","frontend","layoutSnapshot","web"]},"deviceId":{"type":"string","format":"uuid"},"userId":{"type":"integer","format":"int64"},"pageSessionId":{"type":"string","format":"uuid"},"events":{"type":"array","items":{"$ref":"#/components/schemas/OpsEventDtoCreate"},"minItems":1}},"required":["application","deviceId","events","pageSessionId"]},"OpsEventDtoCreate":{"type":"object","properties":{"createTime":{"type":"string","format":"date-time"},"severity":{"type":"string","enum":["info","warning","error"]},"activity":{"type":"string"},"identifier":{"type":"string"},"name":{"type":"string"},"data":{"$ref":"#/components/schemas/BaseJsonNode"}},"required":["activity","createTime","name","severity"]},"LessonDtoCreate":{"type":"object","properties":{"projectId":{"type":"integer","format":"int64"},"name":{"type":"string"},"localizedName":{"$ref":"#/components/schemas/BaseJsonNode"},"tutorial":{"$ref":"#/components/schemas/BaseJsonNode"},"practice":{"$ref":"#/components/schemas/BaseJsonNode"},"test":{"$ref":"#/components/schemas/BaseJsonNode"}},"required":["name","practice","projectId","test","tutorial"]},"LayoutDtoCreate":{"type":"object","properties":{"projectId":{"type":"integer","format":"int64"},"name":{"type":"string"},"schemeType":{"type":"string","enum":["SignalingLayout","EnergyLayout"]},"schemeVersion":{"type":"integer","format":"int32"}},"required":["name","projectId","schemeType","schemeVersion"]},"BackgroundDtoCreate":{"type":"object","properties":{"imageKey":{"type":"string","format":"uuid"},"scene3dKey":{"type":"string","format":"uuid"},"name":{"type":"string"},"x":{"type":"number","format":"double"},"y":{"type":"number","format":"double"},"z":{"type":"integer","format":"int32"},"zoom":{"type":"number","format":"double"},"angle":{"type":"number","format":"double"},"opacity":{"type":"integer","format":"int32"},"visible":{"type":"boolean"},"opacity3d":{"type":"integer","format":"int32"},"visible3d":{"type":"boolean"},"sceneVisible":{"type":"boolean"}},"required":["angle","imageKey","name","opacity","opacity3d","sceneVisible","visible","visible3d","x","y","z","zoom"]},"LayoutVersionDtoCreate":{"type":"object","properties":{"layoutId":{"type":"integer","format":"int64"},"schemeType":{"type":"string","enum":["SignalingLayout","EnergyLayout"]},"schemeVersion":{"type":"integer","format":"int32"},"revision":{"type":"string"},"metaData":{"$ref":"#/components/schemas/BaseJsonNode"},"backgrounds":{"type":"array","items":{"$ref":"#/components/schemas/BackgroundDtoCreate"}},"scheme":{"$ref":"#/components/schemas/JsonContentDtoCreate"}},"required":["backgrounds","layoutId","scheme","schemeType","schemeVersion"]},"LayoutSnapshotDtoCreate":{"type":"object","properties":{"layoutVersionId":{"type":"integer","format":"int64"},"scheme":{"$ref":"#/components/schemas/JsonContentDtoCreate"},"initialView":{"$ref":"#/components/schemas/BaseJsonNode"}},"required":["initialView","layoutVersionId","scheme"]},"LayoutSessionDtoCreate":{"type":"object","properties":{"layoutId":{"type":"integer","format":"int64"},"status":{"type":"string","enum":["edit","comment","run"]}},"required":["layoutId","status"]},"EmailLoginDtoCreate":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"UserDtoCreateDemo":{"type":"object","properties":{"email":{"type":"string"}},"required":["email"]},"UserDtoCreateDemoResponse":{"type":"object","properties":{"hasPassword":{"type":"boolean"},"token":{"type":"string","format":"uuid"}}},"UserDtoPatch":{"type":"object","properties":{"archived":{"type":"boolean"},"password":{"type":"string"}}},"SceneDtoPatch":{"type":"object","properties":{"archived":{"type":"boolean"}},"required":["archived"]},"ProjectDtoPatch":{"type":"object","properties":{"archived":{"type":"boolean"},"ownerId":{"type":"integer","format":"int64"}}},"MyUserDtoPatch":{"type":"object","properties":{"password":{"type":"string","maxLength":2147483647,"minLength":8}},"required":["password"]},"LessonRunDtoPatch":{"type":"object","properties":{"tutorialProgress":{"type":"number","format":"float"},"practiceProgress":{"type":"number","format":"float"},"testProgress":{"type":"number","format":"float"},"practiceResults":{"$ref":"#/components/schemas/BaseJsonNode"},"testResults":{"$ref":"#/components/schemas/BaseJsonNode"}}},"LessonDtoPatch":{"type":"object","properties":{"archived":{"type":"boolean"}},"required":["archived"]},"LayoutDtoPatch":{"type":"object","properties":{"archived":{"type":"boolean"},"projectId":{"type":"integer","format":"int64"}}},"LayoutSessionDtoPatch":{"type":"object","properties":{"status":{"type":"string","enum":["edit","comment","run"]}},"required":["status"]},"CourseDtoPatch":{"type":"object","properties":{"archived":{"type":"boolean"},"status":{"type":"string","enum":["draft","open","closed"]},"locked":{"type":"boolean"}}},"CompanyDtoPatch":{"type":"object","properties":{"archived":{"type":"boolean"}},"required":["archived"]},"CompanyDtoMaster":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"usernamePrefix":{"type":"string"}}},"UserDtoList":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"company":{"$ref":"#/components/schemas/CompanyDtoMaster"},"email":{"type":"string"},"username":{"type":"string"},"lastName":{"type":"string"},"firstName":{"type":"string"},"roles":{"type":"array","items":{"type":"string","enum":["engineer","instructor","student","admin","root"]}},"modules":{"type":"array","items":{"type":"string","enum":["signaling","training","energy"]}},"shouldChangePassword":{"type":"boolean"},"archived":{"type":"boolean"}}},"CompanyDtoGetUser":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"usernamePrefix":{"type":"string"},"modules":{"type":"array","items":{"type":"string","enum":["signaling","training","energy"]}},"demo":{"type":"boolean"},"latitude":{"type":"number","format":"double"},"longitude":{"type":"number","format":"double"}}},"UserDtoGet":{"type":"object","properties":{"company":{"$ref":"#/components/schemas/CompanyDtoGetUser"},"email":{"type":"string"},"username":{"type":"string"},"lastName":{"type":"string"},"firstName":{"type":"string"},"roles":{"type":"array","items":{"type":"string","enum":["engineer","instructor","student","admin","root"]}},"modules":{"type":"array","items":{"type":"string","enum":["signaling","training","energy"]}},"shouldChangePassword":{"type":"boolean"},"archived":{"type":"boolean"},"country":{"type":"string"},"leaderboard":{"type":"boolean"},"privacyPolicyAccepted":{"type":"boolean"}}},"StudyActivityDtoReport":{"type":"object","properties":{"students":{"type":"array","items":{"$ref":"#/components/schemas/StudyActivityDtoReportCompany"}},"demo":{"type":"array","items":{"$ref":"#/components/schemas/StudyActivityDtoReportCompany"}}}},"StudyActivityDtoReportCompany":{"type":"object","properties":{"companyName":{"type":"string"},"data":{"type":"array","items":{"$ref":"#/components/schemas/StudyActivityDtoReportItem"}}}},"StudyActivityDtoReportItem":{"type":"object","properties":{"date":{"type":"string","format":"date"},"count":{"type":"integer","format":"int64"},"duration":{"type":"integer","format":"int64"}}},"LayoutDtoScene":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"}}},"LayoutVersionDtoScene":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"layout":{"$ref":"#/components/schemas/LayoutDtoScene"}}},"SceneDtoList":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"category":{"type":"string","enum":["tutorial","interactive"]},"updateTime":{"type":"string","format":"date-time"},"layoutVersion":{"$ref":"#/components/schemas/LayoutVersionDtoScene"},"archived":{"type":"boolean"}}},"LayoutDtoMaster":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"project":{"$ref":"#/components/schemas/ProjectDtoMaster"},"name":{"type":"string"},"code":{"type":"string"},"description":{"type":"string"},"schemeType":{"type":"string","enum":["SignalingLayout","EnergyLayout"]},"author":{"$ref":"#/components/schemas/UserDtoMaster"},"updateTime":{"type":"string","format":"date-time"}}},"LayoutVersionDtoMaster":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"createUser":{"$ref":"#/components/schemas/UserDtoMaster"},"createTime":{"type":"string","format":"date-time"},"layout":{"$ref":"#/components/schemas/LayoutDtoMaster"}}},"ProjectDtoMaster":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"module":{"type":"string","enum":["signaling","training","energy"]},"sandbox":{"type":"boolean"}}},"SceneDtoGet":{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string","enum":["tutorial","interactive"]},"updateTime":{"type":"string","format":"date-time"},"layoutVersion":{"$ref":"#/components/schemas/LayoutVersionDtoMaster"},"script":{"$ref":"#/components/schemas/BaseJsonNode"},"mapping":{"$ref":"#/components/schemas/BaseJsonNode"},"archived":{"type":"boolean"},"validationResults":{"$ref":"#/components/schemas/BaseJsonNode"}}},"UserDtoMaster":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"email":{"type":"string"},"username":{"type":"string"},"lastName":{"type":"string"},"firstName":{"type":"string"}}},"OpsLogDtoWebUsers":{"type":"object","properties":{"country":{"type":"string"},"city":{"type":"string"},"count":{"type":"integer","format":"int64"}}},"OpsLogDtoLayoutSnapshotUsers":{"type":"object","properties":{"key":{"type":"string"},"project":{"type":"string"},"schemeType":{"type":"string","enum":["SignalingLayout","EnergyLayout"]},"layout":{"type":"string"},"country":{"type":"string"},"count":{"type":"integer","format":"int64"}}},"OpsLogDtoFrontendUsers":{"type":"object","properties":{"company":{"type":"string"},"lastName":{"type":"string"},"firstName":{"type":"string"}}},"OpsLogDtoDailyUsersPerApp":{"type":"object","properties":{"date":{"type":"string","format":"date"},"application":{"type":"string","enum":["backend","frontend","layoutSnapshot","web"]},"count":{"type":"integer","format":"int32"}}},"ProjectDtoList":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"module":{"type":"string","enum":["signaling","training","energy"]},"sandbox":{"type":"boolean"},"archived":{"type":"boolean"},"shared":{"type":"boolean"},"myAccessLevel":{"type":"string","enum":["comment","edit","owner"]}}},"ProjectCompanyDtoGet":{"type":"object","properties":{"company":{"$ref":"#/components/schemas/CompanyDtoMaster"},"accessLevel":{"type":"string","enum":["comment","edit"]}}},"ProjectDtoGet":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"owner":{"$ref":"#/components/schemas/UserDtoMaster"},"module":{"type":"string","enum":["signaling","training","energy"]},"sandbox":{"type":"boolean"},"archived":{"type":"boolean"},"myAccessLevel":{"type":"string","enum":["comment","edit","owner"]},"projectCompanies":{"type":"array","items":{"$ref":"#/components/schemas/ProjectCompanyDtoGet"}}}},"Pageable":{"type":"object","properties":{"page":{"type":"integer","format":"int32","minimum":0},"size":{"type":"integer","format":"int32","minimum":1},"sort":{"type":"array","items":{"type":"string"}}}},"OpsLogDtoList":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"application":{"type":"string","enum":["backend","frontend","layoutSnapshot","web"]},"deviceId":{"type":"string","format":"uuid"},"ipAddress":{"type":"string"},"browser":{"type":"string"},"browserVersion":{"type":"string"},"os":{"type":"string"},"osVersion":{"type":"string"},"deviceType":{"type":"string"},"country":{"type":"string"},"city":{"type":"string"},"user":{"$ref":"#/components/schemas/UserDtoMaster"},"pageSessionId":{"type":"string","format":"uuid"},"createTime":{"type":"string","format":"date-time"},"severity":{"type":"string","enum":["info","warning","error"]},"activity":{"type":"string"},"identifier":{"type":"string"},"name":{"type":"string"},"data":{"$ref":"#/components/schemas/BaseJsonNode"}}},"MyUserDtoGet":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"company":{"$ref":"#/components/schemas/CompanyDtoGetUser"},"email":{"type":"string"},"username":{"type":"string"},"lastName":{"type":"string"},"firstName":{"type":"string"},"roles":{"type":"array","items":{"type":"string","enum":["engineer","instructor","student","admin","root"]}},"modules":{"type":"array","items":{"type":"string","enum":["signaling","training","energy"]}},"shouldChangePassword":{"type":"boolean"},"archived":{"type":"boolean"},"country":{"type":"string"},"leaderboard":{"type":"boolean"},"privacyPolicyAccepted":{"type":"boolean"}}},"CourseDtoMaster":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"instructor":{"$ref":"#/components/schemas/UserDtoMaster"},"name":{"type":"string"},"startTime":{"type":"string","format":"date-time"},"location":{"type":"string"},"status":{"type":"string","enum":["draft","open","closed"]},"locked":{"type":"boolean"}}},"LessonDtoMasterScenes":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"localizedName":{"$ref":"#/components/schemas/BaseJsonNode"},"project":{"$ref":"#/components/schemas/ProjectDtoMaster"},"tutorial":{"$ref":"#/components/schemas/BaseJsonNode"},"practice":{"$ref":"#/components/schemas/BaseJsonNode"},"test":{"$ref":"#/components/schemas/BaseJsonNode"},"image":{"$ref":"#/components/schemas/UserFileDtoMaster"}}},"LessonRunDtoMyList":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"course":{"$ref":"#/components/schemas/CourseDtoMaster"},"lesson":{"$ref":"#/components/schemas/LessonDtoMasterScenes"},"tutorialProgress":{"type":"number","format":"float"},"practiceProgress":{"type":"number","format":"float"},"testProgress":{"type":"number","format":"float"},"practiceResults":{"$ref":"#/components/schemas/BaseJsonNode"},"practiceTime":{"type":"string","format":"date-time"},"testResults":{"$ref":"#/components/schemas/BaseJsonNode"},"testTime":{"type":"string","format":"date-time"}}},"UserFileDtoMaster":{"type":"object","properties":{"key":{"type":"string","format":"uuid"},"contentType":{"type":"string"}}},"LessonRunDtoMyGet":{"type":"object","properties":{"course":{"$ref":"#/components/schemas/CourseDtoMaster"},"lesson":{"$ref":"#/components/schemas/LessonDtoMasterScenes"},"tutorialProgress":{"type":"number","format":"float"},"practiceProgress":{"type":"number","format":"float"},"testProgress":{"type":"number","format":"float"},"practiceResults":{"$ref":"#/components/schemas/BaseJsonNode"},"practiceTime":{"type":"string","format":"date-time"},"testResults":{"$ref":"#/components/schemas/BaseJsonNode"},"testTime":{"type":"string","format":"date-time"}}},"LessonDtoList":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"updateTime":{"type":"string","format":"date-time"},"archived":{"type":"boolean"}}},"LessonDtoGet":{"type":"object","properties":{"name":{"type":"string"},"localizedName":{"$ref":"#/components/schemas/BaseJsonNode"},"project":{"$ref":"#/components/schemas/ProjectDtoMaster"},"tutorial":{"$ref":"#/components/schemas/BaseJsonNode"},"practice":{"$ref":"#/components/schemas/BaseJsonNode"},"test":{"$ref":"#/components/schemas/BaseJsonNode"},"updateTime":{"type":"string","format":"date-time"},"archived":{"type":"boolean"},"image":{"$ref":"#/components/schemas/UserFileDtoMaster"}}},"LeaderboardDtoGet":{"type":"object","properties":{"start":{"type":"array","items":{"$ref":"#/components/schemas/LeaderboardPositionDtoGet"}},"myPosition":{"type":"array","items":{"$ref":"#/components/schemas/LeaderboardPositionDtoGet"}}}},"LeaderboardPositionDtoGet":{"type":"object","properties":{"userId":{"type":"integer","format":"int64"},"position":{"type":"integer","format":"int32"},"country":{"type":"string"},"firstName":{"type":"string"},"results2":{"type":"integer","format":"int64"},"results3":{"type":"integer","format":"int64"},"results4":{"type":"integer","format":"int64"}}},"LayoutDtoList":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"version":{"type":"integer","format":"int64"},"name":{"type":"string"},"description":{"type":"string"},"schemeType":{"type":"string","enum":["SignalingLayout","EnergyLayout"]},"schemeVersion":{"type":"integer","format":"int32"},"author":{"$ref":"#/components/schemas/UserDtoMaster"},"updateTime":{"type":"string","format":"date-time"},"archived":{"type":"boolean"}}},"LayoutDtoGet":{"type":"object","properties":{"project":{"$ref":"#/components/schemas/ProjectDtoMaster"},"name":{"type":"string"},"code":{"type":"string"},"description":{"type":"string"},"schemeType":{"type":"string","enum":["SignalingLayout","EnergyLayout"]},"schemeVersion":{"type":"integer","format":"int32"},"author":{"$ref":"#/components/schemas/UserDtoMaster"},"updateTime":{"type":"string","format":"date-time"},"archived":{"type":"boolean"}}},"BackgroundDtoList":{"type":"object","properties":{"image":{"$ref":"#/components/schemas/UserFileDtoMaster"},"scene3d":{"$ref":"#/components/schemas/UserFileDtoMaster"},"name":{"type":"string"},"x":{"type":"number","format":"double"},"y":{"type":"number","format":"double"},"z":{"type":"integer","format":"int32"},"zoom":{"type":"number","format":"double"},"angle":{"type":"number","format":"double"},"opacity":{"type":"integer","format":"int32"},"visible":{"type":"boolean"},"opacity3d":{"type":"integer","format":"int32"},"visible3d":{"type":"boolean"},"sceneVisible":{"type":"boolean"}}},"JsonContentDtoGet":{"type":"object","properties":{"content":{"$ref":"#/components/schemas/BaseJsonNode"}}},"LayoutVersionDtoGetLayoutLatest":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"revision":{"type":"string"},"metaData":{"$ref":"#/components/schemas/BaseJsonNode"},"createUser":{"$ref":"#/components/schemas/UserDtoMaster"},"createTime":{"type":"string","format":"date-time"},"backgrounds":{"type":"array","items":{"$ref":"#/components/schemas/BackgroundDtoList"}},"scheme":{"$ref":"#/components/schemas/JsonContentDtoGet"}}},"LayoutVersionDtoList":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"revision":{"type":"string"},"metaData":{"$ref":"#/components/schemas/BaseJsonNode"},"createUser":{"$ref":"#/components/schemas/UserDtoMaster"},"createTime":{"type":"string","format":"date-time"}}},"SimulationRunDtoGet":{"type":"object","properties":{"layoutVersion":{"$ref":"#/components/schemas/LayoutVersionDtoMaster"},"owner":{"$ref":"#/components/schemas/UserDtoMaster"},"scheme":{"$ref":"#/components/schemas/JsonContentDtoCreate"},"updateTime":{"type":"string","format":"date-time"}}},"LayoutVersionDtoGet":{"type":"object","properties":{"revision":{"type":"string"},"metaData":{"$ref":"#/components/schemas/BaseJsonNode"},"createUser":{"$ref":"#/components/schemas/UserDtoMaster"},"createTime":{"type":"string","format":"date-time"},"backgrounds":{"type":"array","items":{"$ref":"#/components/schemas/BackgroundDtoList"}},"scheme":{"$ref":"#/components/schemas/JsonContentDtoGet"}}},"LayoutSnapshotDtoList":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"key":{"type":"string","format":"uuid"},"layoutVersion":{"$ref":"#/components/schemas/LayoutVersionDtoMaster"},"createTime":{"type":"string","format":"date-time"}}},"LayoutSnapshotDtoGet":{"type":"object","properties":{"owner":{"$ref":"#/components/schemas/UserDtoMaster"},"layoutVersion":{"$ref":"#/components/schemas/LayoutVersionDtoSnapshot"},"scheme":{"$ref":"#/components/schemas/JsonContentDtoGet"},"initialView":{"$ref":"#/components/schemas/BaseJsonNode"},"createTime":{"type":"string","format":"date-time"}}},"LayoutVersionDtoSnapshot":{"type":"object","properties":{"createUser":{"$ref":"#/components/schemas/UserDtoMaster"},"createTime":{"type":"string","format":"date-time"},"revision":{"type":"string"},"metaData":{"$ref":"#/components/schemas/BaseJsonNode"},"layout":{"$ref":"#/components/schemas/LayoutDtoMaster"},"backgrounds":{"type":"array","items":{"$ref":"#/components/schemas/BackgroundDtoList"}}}},"LayoutSessionDtoList":{"type":"object","properties":{"user":{"$ref":"#/components/schemas/UserDtoMaster"},"status":{"type":"string"}}},"CourseLessonDtoRef":{"type":"object","properties":{"id":{"type":"integer","format":"int64"}}},"DemoLessonRunDtoList":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"courseLesson":{"$ref":"#/components/schemas/CourseLessonDtoRef"},"result":{"type":"integer","format":"int32"},"finishTime":{"type":"string","format":"date-time"}}},"CourseDtoMasterDescription":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"instructor":{"$ref":"#/components/schemas/UserDtoMaster"},"name":{"type":"string"},"startTime":{"type":"string","format":"date-time"},"location":{"type":"string"},"description":{"type":"string"},"status":{"type":"string","enum":["draft","open","closed"]},"locked":{"type":"boolean"}}},"CourseLessonDtoList":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"course":{"$ref":"#/components/schemas/CourseDtoMasterDescription"},"lesson":{"$ref":"#/components/schemas/LessonDtoMasterScenes"}}},"CourseLessonDtoGet":{"type":"object","properties":{"course":{"$ref":"#/components/schemas/CourseDtoMaster"},"lesson":{"$ref":"#/components/schemas/LessonDtoMasterScenes"}}},"CourseDtoList":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"version":{"type":"integer","format":"int64"},"instructor":{"$ref":"#/components/schemas/UserDtoMaster"},"name":{"type":"string"},"startTime":{"type":"string","format":"date-time"},"location":{"type":"string"},"status":{"type":"string","enum":["draft","open","closed"]},"archived":{"type":"boolean"},"lessons":{"type":"integer","format":"int64"},"students":{"type":"integer","format":"int64"}}},"CourseDtoGet":{"type":"object","properties":{"instructor":{"$ref":"#/components/schemas/UserDtoMaster"},"name":{"type":"string"},"startTime":{"type":"string","format":"date-time"},"location":{"type":"string"},"description":{"type":"string"},"status":{"type":"string","enum":["draft","open","closed"]},"locked":{"type":"boolean"},"createTime":{"type":"string","format":"date-time"},"openTime":{"type":"string","format":"date-time"},"closeTime":{"type":"string","format":"date-time"},"archived":{"type":"boolean"},"lessons":{"type":"array","items":{"$ref":"#/components/schemas/LessonDtoMasterScenes"}},"students":{"type":"array","items":{"$ref":"#/components/schemas/UserDtoMaster"}},"lessonRuns":{"type":"array","items":{"$ref":"#/components/schemas/LessonRunDtoGetCourse"}}}},"LessonRunDtoGetCourse":{"type":"object","properties":{"lessonId":{"type":"integer","format":"int64"},"studentId":{"type":"integer","format":"int64"},"tutorialProgress":{"type":"number","format":"float"},"practiceProgress":{"type":"number","format":"float"},"testProgress":{"type":"number","format":"float"},"practiceResults":{"$ref":"#/components/schemas/BaseJsonNode"},"practiceTime":{"type":"string","format":"date-time"},"testResults":{"$ref":"#/components/schemas/BaseJsonNode"},"testTime":{"type":"string","format":"date-time"}}},"CompanyDtoList":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"usernamePrefix":{"type":"string"},"modules":{"type":"array","items":{"type":"string","enum":["signaling","training","energy"]}},"trusted":{"type":"boolean"},"demo":{"type":"boolean"},"archived":{"type":"boolean"}}},"CompanyDtoGet":{"type":"object","properties":{"name":{"type":"string"},"usernamePrefix":{"type":"string"},"modules":{"type":"array","items":{"type":"string","enum":["signaling","training","energy"]}},"trusted":{"type":"boolean"},"demo":{"type":"boolean"},"archived":{"type":"boolean"},"latitude":{"type":"number","format":"double"},"longitude":{"type":"number","format":"double"}}},"AuditLogDtoList":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"createTime":{"type":"string","format":"date-time"},"entityName":{"type":"string"},"entityAction":{"type":"string","enum":["copy","create","delete","patch","update","reset"]},"entityId":{"type":"string"},"user":{"$ref":"#/components/schemas/UserDtoMaster"}}},"AuditLogDtoGet":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"createTime":{"type":"string","format":"date-time"},"entityName":{"type":"string"},"entityAction":{"type":"string","enum":["copy","create","delete","patch","update","reset"]},"entityId":{"type":"string"},"user":{"$ref":"#/components/schemas/UserDtoMaster"},"data":{"$ref":"#/components/schemas/BaseJsonNode"}}}},"securitySchemes":{"basicAuth":{"type":"http","scheme":"basic"}}}}