From 28ce05e250fb24dd186314146b1757894009db74 Mon Sep 17 00:00:00 2001 From: Tiankai Ma Date: Sun, 16 Aug 2026 18:54:20 +0800 Subject: [PATCH] feat(oauth): adopt scoped calendar feed access --- api/openapi.json | 3643 ++++++++++++++---------- api/openapi.provenance.json | 4 +- internal/api/client.go | 17 +- internal/api/client_test.go | 31 + internal/auth/auth.go | 54 +- internal/auth/auth_test.go | 86 +- internal/cmd/apicmd/api_paths_gen.go | 1 + internal/cmd/calendar/calendar.go | 19 +- internal/cmd/calendar/calendar_test.go | 27 + internal/cmd/homework/homework.go | 6 +- internal/cmd/me/me.go | 17 +- internal/cmd/me/me_test.go | 16 + internal/openapi/client.gen.go | 2382 +++++++++------- scripts/openapi-contract | 7 - 14 files changed, 3703 insertions(+), 2607 deletions(-) create mode 100644 internal/api/client_test.go create mode 100644 internal/cmd/me/me_test.go diff --git a/api/openapi.json b/api/openapi.json index 61cae46..b39be42 100644 --- a/api/openapi.json +++ b/api/openapi.json @@ -20,6 +20,10 @@ "name": "OpenAPI", "description": "OpenAPI operations" }, + { + "name": "account.client-activity", + "description": "account.client-activity operations" + }, { "name": "account.preferences", "description": "account.preferences operations" @@ -173,6 +177,7 @@ { "name": "Account", "tags": [ + "account.client-activity", "account.preferences", "account.profile" ] @@ -556,6 +561,75 @@ } } }, + "/api/account/client-activity": { + "get": { + "operationId": "account_client_activity_list", + "summary": "List activity performed by the current OAuth client for the current user", + "tags": [ + "account.client-activity" + ], + "x-oauth-scopes": [ + "account.client-activity:read" + ], + "security": [ + { + "bearerAuth": [] + } + ], + "parameters": [ + { + "in": "query", + "name": "cursor", + "schema": { + "type": "string", + "maxLength": 256 + } + }, + { + "in": "query", + "name": "limit", + "schema": { + "type": "integer", + "format": "int64", + "minimum": 1, + "maximum": 50 + } + } + ], + "responses": { + "200": { + "description": "Successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/accountClientActivityResponseSchema" + } + } + } + }, + "400": { + "description": "Error response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/openApiErrorSchema" + } + } + } + }, + "401": { + "description": "Error response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/openApiErrorSchema" + } + } + } + } + } + } + }, "/api/account/preferences": { "post": { "operationId": "setLocale", @@ -604,6 +678,9 @@ "tags": [ "account.profile" ], + "x-oauth-scopes": [ + "account.profile:read" + ], "security": [ { "bearerAuth": [] @@ -1337,6 +1414,7 @@ "in": "query", "name": "locale", "schema": { + "default": "zh-cn", "type": "string", "enum": [ "en-us", @@ -1499,6 +1577,7 @@ "in": "query", "name": "locale", "schema": { + "default": "zh-cn", "type": "string", "enum": [ "en-us", @@ -1660,6 +1739,7 @@ "in": "query", "name": "locale", "schema": { + "default": "zh-cn", "type": "string", "enum": [ "en-us", @@ -1890,6 +1970,7 @@ "in": "query", "name": "locale", "schema": { + "default": "zh-cn", "type": "string", "enum": [ "en-us", @@ -2493,6 +2574,27 @@ "false" ] } + }, + { + "in": "query", + "name": "page", + "schema": { + "type": "integer", + "format": "int64", + "minimum": 1, + "maximum": 100 + } + }, + { + "in": "query", + "name": "pageSize", + "schema": { + "type": "integer", + "format": "int64", + "minimum": 1, + "maximum": 50 + }, + "description": "Number of items per page." } ], "responses": { @@ -2801,6 +2903,29 @@ "sessionCookie": [] } ], + "parameters": [ + { + "in": "query", + "name": "page", + "schema": { + "type": "integer", + "format": "int64", + "minimum": 1, + "maximum": 100 + } + }, + { + "in": "query", + "name": "pageSize", + "schema": { + "type": "integer", + "format": "int64", + "minimum": 1, + "maximum": 50 + }, + "description": "Number of items per page." + } + ], "responses": { "200": { "description": "Successful response", @@ -2812,6 +2937,16 @@ } } }, + "400": { + "description": "Error response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/openApiErrorSchema" + } + } + } + }, "401": { "description": "Error response", "content": { @@ -3542,7 +3677,8 @@ "type": "integer", "format": "int64", "minimum": 1, - "maximum": 200 + "maximum": 200, + "default": 100 } } ], @@ -5036,6 +5172,7 @@ "in": "query", "name": "locale", "schema": { + "default": "zh-cn", "type": "string", "enum": [ "en-us", @@ -5132,6 +5269,7 @@ "in": "query", "name": "locale", "schema": { + "default": "zh-cn", "type": "string", "enum": [ "en-us", @@ -5220,9 +5358,11 @@ "name": "sectionIds", "schema": { "type": "string", - "minLength": 1 + "minLength": 1, + "description": "Comma-separated positive Section database IDs; at most 50 unique IDs." }, - "required": true + "required": true, + "description": "Comma-separated positive Section database IDs; at most 50 unique IDs." } ], "responses": { @@ -5236,6 +5376,9 @@ } } }, + "308": { + "description": "Response 308" + }, "400": { "description": "Error response", "content": { @@ -5352,6 +5495,7 @@ "in": "query", "name": "locale", "schema": { + "default": "zh-cn", "type": "string", "enum": [ "en-us", @@ -6463,6 +6607,10 @@ "tags": [ "workspace.subscription" ], + "x-oauth-scopes": [ + "workspace.subscription:read", + "workspace.calendar-feed:read" + ], "security": [ { "bearerAuth": [] @@ -7640,6 +7788,7 @@ "in": "query", "name": "locale", "schema": { + "default": "zh-cn", "type": "string", "enum": [ "en-us", @@ -7696,6 +7845,7 @@ "in": "query", "name": "locale", "schema": { + "default": "zh-cn", "type": "string", "enum": [ "en-us", @@ -8426,7 +8576,8 @@ "code", "startDate", "endDate" - ] + ], + "additionalProperties": false }, "__schema1": { "type": "object", @@ -8683,6 +8834,72 @@ ], "additionalProperties": false }, + "accountClientActivityResponseSchema": { + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "action": { + "type": "string" + }, + "outcome": { + "type": "string", + "enum": [ + "success", + "denied", + "failure" + ] + }, + "channel": { + "type": "string", + "enum": [ + "web", + "rest", + "graphql", + "mcp", + "auth", + "webhook", + "system" + ] + }, + "createdAt": { + "type": "string", + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" + }, + "targetType": { + "nullable": true, + "type": "string" + } + }, + "required": [ + "id", + "action", + "outcome", + "channel", + "createdAt", + "targetType" + ], + "additionalProperties": false + } + }, + "nextCursor": { + "nullable": true, + "type": "string" + } + }, + "required": [ + "items", + "nextCursor" + ], + "additionalProperties": false + }, "localeUpdateRequestSchema": { "type": "object", "properties": { @@ -8734,6 +8951,7 @@ "type": "string" }, "isAdmin": { + "nullable": true, "type": "boolean" }, "createdAt": { @@ -10440,6 +10658,13 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" + }, "category": { "nullable": true, "type": "object", @@ -10455,12 +10680,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -10479,12 +10713,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -10503,12 +10746,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -10527,12 +10779,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -10551,12 +10812,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -10575,12 +10845,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false } @@ -10597,6 +10876,8 @@ "educationLevelId", "gradationId", "typeId", + "namePrimary", + "nameSecondary", "category", "classType", "classify", @@ -10757,12 +11038,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false } @@ -10783,12 +11073,21 @@ "nameEn": { "nullable": true, "type": "string" - } - }, - "required": [ + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" + } + }, + "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false } @@ -10809,12 +11108,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false } @@ -10835,12 +11143,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false } @@ -10861,12 +11178,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false } @@ -10887,12 +11213,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false } @@ -10913,12 +11248,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false } @@ -10939,12 +11283,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false } @@ -10960,7 +11313,6 @@ "maximum": 9007199254740991 }, "jwId": { - "nullable": true, "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 @@ -10976,6 +11328,13 @@ "nullable": true, "type": "string" }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" + }, "buildings": { "type": "array", "items": { @@ -11006,6 +11365,13 @@ "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ @@ -11014,7 +11380,9 @@ "nameCn", "nameEn", "code", - "campusId" + "campusId", + "namePrimary", + "nameSecondary" ], "additionalProperties": false } @@ -11026,6 +11394,8 @@ "nameCn", "nameEn", "code", + "namePrimary", + "nameSecondary", "buildings" ], "additionalProperties": false @@ -11059,9 +11429,7 @@ "maximum": 9007199254740991 }, "periods": { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "date": { "nullable": true, @@ -11240,7 +11608,6 @@ "maximum": 9007199254740991 }, "jwId": { - "nullable": true, "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 @@ -11363,13 +11730,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "personId": { - "nullable": true, + "jwId": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "teacherId": { + "personId": { "nullable": true, "type": "integer", "minimum": -9007199254740991, @@ -11434,74 +11800,12 @@ "nameSecondary" ], "additionalProperties": false - }, - "teacherTitle": { - "nullable": true, - "type": "object", - "properties": { - "id": { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "jwId": { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "nameCn": { - "type": "string" - }, - "nameEn": { - "nullable": true, - "type": "string" - }, - "code": { - "type": "string" - }, - "enabled": { - "nullable": true, - "type": "boolean" - }, - "namePrimary": { - "type": "string" - }, - "nameSecondary": { - "nullable": true, - "type": "string" - } - }, - "required": [ - "id", - "jwId", - "nameCn", - "nameEn", - "code", - "enabled", - "namePrimary", - "nameSecondary" - ], - "additionalProperties": false - }, - "_count": { - "type": "object", - "properties": { - "sections": { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - } - }, - "required": [ - "sections" - ], - "additionalProperties": false } }, "required": [ "id", + "jwId", "personId", - "teacherId", "code", "nameCn", "nameEn", @@ -11525,12 +11829,6 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, "retiredAt": { "nullable": true, "type": "string", @@ -11558,9 +11856,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -11593,9 +11889,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -11786,6 +12080,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -11852,9 +12147,7 @@ "maximum": 9007199254740991 }, "actualPeriods": { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "isDefault": { "type": "boolean" @@ -12024,6 +12317,13 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ @@ -12031,7 +12331,9 @@ "jwId", "code", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -12074,7 +12376,6 @@ "maximum": 9007199254740991 }, "jwId": { - "nullable": true, "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 @@ -12089,6 +12390,13 @@ "code": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ @@ -12096,7 +12404,9 @@ "jwId", "nameCn", "nameEn", - "code" + "code", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -12110,13 +12420,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "personId": { - "nullable": true, + "jwId": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "teacherId": { + "personId": { "nullable": true, "type": "integer", "minimum": -9007199254740991, @@ -12132,15 +12441,24 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", + "jwId", "personId", - "teacherId", "code", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false } @@ -12265,13 +12583,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "personId": { - "nullable": true, + "jwId": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "teacherId": { + "personId": { "nullable": true, "type": "integer", "minimum": -9007199254740991, @@ -12316,6 +12633,13 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" + }, "department": { "nullable": true, "type": "object", @@ -12338,6 +12662,13 @@ "isCollege": { "nullable": true, "type": "boolean" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ @@ -12345,7 +12676,9 @@ "code", "nameCn", "nameEn", - "isCollege" + "isCollege", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -12376,6 +12709,13 @@ "enabled": { "nullable": true, "type": "boolean" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ @@ -12384,7 +12724,9 @@ "nameCn", "nameEn", "code", - "enabled" + "enabled", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -12405,8 +12747,8 @@ }, "required": [ "id", + "jwId", "personId", - "teacherId", "code", "nameCn", "nameEn", @@ -12416,6 +12758,8 @@ "address", "departmentId", "teacherTitleId", + "namePrimary", + "nameSecondary", "department", "teacherTitle", "_count" @@ -13190,54 +13534,7 @@ "homeworksListResponseSchema": { "type": "object", "properties": { - "viewer": { - "type": "object", - "properties": { - "userId": { - "nullable": true, - "type": "string" - }, - "name": { - "nullable": true, - "type": "string" - }, - "image": { - "nullable": true, - "type": "string" - }, - "isAdmin": { - "type": "boolean" - }, - "isAuthenticated": { - "type": "boolean" - }, - "isSuspended": { - "type": "boolean" - }, - "suspensionReason": { - "nullable": true, - "type": "string" - }, - "suspensionExpiresAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - } - }, - "required": [ - "userId", - "name", - "image", - "isAdmin", - "isAuthenticated", - "isSuspended", - "suspensionReason", - "suspensionExpiresAt" - ], - "additionalProperties": false - }, - "homeworks": { + "data": { "type": "array", "items": { "type": "object", @@ -13318,12 +13615,6 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, "retiredAt": { "nullable": true, "type": "string", @@ -13351,9 +13642,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -13386,9 +13675,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -13579,6 +13866,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -13814,6 +14102,85 @@ "additionalProperties": false } }, + "pagination": { + "type": "object", + "properties": { + "page": { + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, + "pageSize": { + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, + "total": { + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, + "totalPages": { + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + } + }, + "required": [ + "page", + "pageSize", + "total", + "totalPages" + ], + "additionalProperties": false + }, + "viewer": { + "type": "object", + "properties": { + "userId": { + "nullable": true, + "type": "string" + }, + "name": { + "nullable": true, + "type": "string" + }, + "image": { + "nullable": true, + "type": "string" + }, + "isAdmin": { + "type": "boolean" + }, + "isAuthenticated": { + "type": "boolean" + }, + "isSuspended": { + "type": "boolean" + }, + "suspensionReason": { + "nullable": true, + "type": "string" + }, + "suspensionExpiresAt": { + "nullable": true, + "type": "string", + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" + } + }, + "required": [ + "userId", + "name", + "image", + "isAdmin", + "isAuthenticated", + "isSuspended", + "suspensionReason", + "suspensionExpiresAt" + ], + "additionalProperties": false + }, "auditLogs": { "type": "array", "items": { @@ -13826,10 +14193,12 @@ "type": "string", "enum": [ "created", + "updated", "deleted" ] }, "titleSnapshot": { + "nullable": true, "type": "string" }, "createdAt": { @@ -13894,8 +14263,9 @@ } }, "required": [ + "data", + "pagination", "viewer", - "homeworks", "auditLogs" ], "additionalProperties": false @@ -14165,12 +14535,6 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, "retiredAt": { "nullable": true, "type": "string", @@ -14198,9 +14562,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -14233,9 +14595,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -14426,6 +14786,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -14733,54 +15094,7 @@ "subscribedHomeworksResponseSchema": { "type": "object", "properties": { - "viewer": { - "type": "object", - "properties": { - "userId": { - "nullable": true, - "type": "string" - }, - "name": { - "nullable": true, - "type": "string" - }, - "image": { - "nullable": true, - "type": "string" - }, - "isAdmin": { - "type": "boolean" - }, - "isAuthenticated": { - "type": "boolean" - }, - "isSuspended": { - "type": "boolean" - }, - "suspensionReason": { - "nullable": true, - "type": "string" - }, - "suspensionExpiresAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - } - }, - "required": [ - "userId", - "name", - "image", - "isAdmin", - "isAuthenticated", - "isSuspended", - "suspensionReason", - "suspensionExpiresAt" - ], - "additionalProperties": false - }, - "homeworks": { + "data": { "type": "array", "items": { "type": "object", @@ -14861,12 +15175,6 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, "retiredAt": { "nullable": true, "type": "string", @@ -14894,9 +15202,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -14929,9 +15235,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -15122,6 +15426,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -15357,98 +15662,42 @@ "additionalProperties": false } }, - "auditLogs": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "action": { - "type": "string", - "enum": [ - "created", - "deleted" - ] - }, - "titleSnapshot": { - "type": "string" - }, - "createdAt": { - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, - "sectionId": { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "homeworkId": { - "nullable": true, - "type": "string" - }, - "actorId": { - "nullable": true, - "type": "string" - }, - "actor": { - "nullable": true, - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "nullable": true, - "type": "string" - }, - "username": { - "nullable": true, - "type": "string" - }, - "image": { - "nullable": true, - "type": "string" - } - }, - "required": [ - "id", - "name", - "username", - "image" - ], - "additionalProperties": false - } + "pagination": { + "type": "object", + "properties": { + "page": { + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 }, - "required": [ - "id", - "action", - "titleSnapshot", - "createdAt", - "sectionId", - "homeworkId", - "actorId", - "actor" - ], - "additionalProperties": false - } - }, - "sectionIds": { - "type": "array", - "items": { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - } + "pageSize": { + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, + "total": { + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, + "totalPages": { + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + } + }, + "required": [ + "page", + "pageSize", + "total", + "totalPages" + ], + "additionalProperties": false } }, "required": [ - "viewer", - "homeworks", - "auditLogs", - "sectionIds" + "data", + "pagination" ], "additionalProperties": false }, @@ -15653,9 +15902,7 @@ "maximum": 9007199254740991 }, "periods": { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "date": { "nullable": true, @@ -15834,7 +16081,6 @@ "maximum": 9007199254740991 }, "jwId": { - "nullable": true, "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 @@ -15957,13 +16203,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "personId": { - "nullable": true, + "jwId": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "teacherId": { + "personId": { "nullable": true, "type": "integer", "minimum": -9007199254740991, @@ -16028,74 +16273,12 @@ "nameSecondary" ], "additionalProperties": false - }, - "teacherTitle": { - "nullable": true, - "type": "object", - "properties": { - "id": { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "jwId": { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "nameCn": { - "type": "string" - }, - "nameEn": { - "nullable": true, - "type": "string" - }, - "code": { - "type": "string" - }, - "enabled": { - "nullable": true, - "type": "boolean" - }, - "namePrimary": { - "type": "string" - }, - "nameSecondary": { - "nullable": true, - "type": "string" - } - }, - "required": [ - "id", - "jwId", - "nameCn", - "nameEn", - "code", - "enabled", - "namePrimary", - "nameSecondary" - ], - "additionalProperties": false - }, - "_count": { - "type": "object", - "properties": { - "sections": { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - } - }, - "required": [ - "sections" - ], - "additionalProperties": false } }, "required": [ "id", + "jwId", "personId", - "teacherId", "code", "nameCn", "nameEn", @@ -16119,12 +16302,6 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, "retiredAt": { "nullable": true, "type": "string", @@ -16152,9 +16329,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -16187,9 +16362,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -16380,6 +16553,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -16446,9 +16620,7 @@ "maximum": 9007199254740991 }, "actualPeriods": { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "isDefault": { "type": "boolean" @@ -16740,12 +16912,6 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, "retiredAt": { "nullable": true, "type": "string", @@ -16773,9 +16939,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -16808,9 +16972,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -17001,6 +17163,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -17320,18 +17483,33 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "jwId": { + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, "nameCn": { "type": "string" }, "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", + "jwId", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -17381,12 +17559,6 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, "retiredAt": { "nullable": true, "type": "string", @@ -17414,9 +17586,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -17449,9 +17619,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -17642,6 +17810,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -17732,9 +17901,7 @@ "maximum": 9007199254740991 }, "periods": { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "date": { "nullable": true, @@ -17913,7 +18080,6 @@ "maximum": 9007199254740991 }, "jwId": { - "nullable": true, "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 @@ -18036,13 +18202,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "personId": { - "nullable": true, + "jwId": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "teacherId": { + "personId": { "nullable": true, "type": "integer", "minimum": -9007199254740991, @@ -18173,14 +18338,16 @@ }, "required": [ "id", + "jwId", "personId", - "teacherId", "code", "nameCn", "nameEn", "namePrimary", "nameSecondary", - "department" + "department", + "teacherTitle", + "_count" ], "additionalProperties": false } @@ -18198,12 +18365,6 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, "retiredAt": { "nullable": true, "type": "string", @@ -18231,9 +18392,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -18266,9 +18425,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -18459,6 +18616,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -18525,9 +18683,7 @@ "maximum": 9007199254740991 }, "actualPeriods": { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "isDefault": { "type": "boolean" @@ -18622,12 +18778,6 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, "retiredAt": { "nullable": true, "type": "string", @@ -18655,9 +18805,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -18690,9 +18838,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -18846,6 +18992,13 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" + }, "category": { "nullable": true, "type": "object", @@ -18861,13 +19014,22 @@ "nameEn": { "nullable": true, "type": "string" - } - }, - "required": [ - "id", - "nameCn", - "nameEn" - ], + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" + } + }, + "required": [ + "id", + "nameCn", + "nameEn", + "namePrimary", + "nameSecondary" + ], "additionalProperties": false }, "classType": { @@ -18885,12 +19047,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -18909,12 +19080,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -18933,12 +19113,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -18957,12 +19146,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -18981,21 +19179,23 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false - }, - "namePrimary": { - "type": "string" - }, - "nameSecondary": { - "nullable": true, - "type": "string" } }, "required": [ @@ -19010,14 +19210,14 @@ "educationLevelId", "gradationId", "typeId", + "namePrimary", + "nameSecondary", "category", "classType", "classify", "educationLevel", "gradation", - "type", - "namePrimary", - "nameSecondary" + "type" ], "additionalProperties": false }, @@ -19039,7 +19239,6 @@ "maximum": 9007199254740991 }, "jwId": { - "nullable": true, "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 @@ -19083,6 +19282,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "jwId": { + "nullable": true, + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, "code": { "type": "string" }, @@ -19107,6 +19312,7 @@ }, "required": [ "id", + "jwId", "code", "nameCn", "nameEn", @@ -19126,13 +19332,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "personId": { - "nullable": true, + "jwId": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "teacherId": { + "personId": { "nullable": true, "type": "integer", "minimum": -9007199254740991, @@ -19149,34 +19354,6 @@ "nullable": true, "type": "string" }, - "email": { - "nullable": true, - "type": "string" - }, - "telephone": { - "nullable": true, - "type": "string" - }, - "mobile": { - "nullable": true, - "type": "string" - }, - "address": { - "nullable": true, - "type": "string" - }, - "departmentId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "teacherTitleId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, "namePrimary": { "type": "string" }, @@ -19187,17 +19364,11 @@ }, "required": [ "id", + "jwId", "personId", - "teacherId", "code", "nameCn", "nameEn", - "email", - "telephone", - "mobile", - "address", - "departmentId", - "teacherTitleId", "namePrimary", "nameSecondary" ], @@ -19208,6 +19379,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -19249,12 +19421,6 @@ "additionalProperties": false } }, - "calendarPath": { - "type": "string" - }, - "calendarUrl": { - "type": "string" - }, "note": { "type": "string" } @@ -19262,8 +19428,6 @@ "required": [ "userId", "sections", - "calendarPath", - "calendarUrl", "note" ], "additionalProperties": false @@ -19317,12 +19481,6 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, "retiredAt": { "nullable": true, "type": "string", @@ -19350,9 +19508,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -19385,9 +19541,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -19541,6 +19695,13 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" + }, "category": { "nullable": true, "type": "object", @@ -19556,12 +19717,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -19580,12 +19750,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -19604,12 +19783,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -19628,12 +19816,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -19652,12 +19849,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -19676,21 +19882,23 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false - }, - "namePrimary": { - "type": "string" - }, - "nameSecondary": { - "nullable": true, - "type": "string" } }, "required": [ @@ -19705,14 +19913,14 @@ "educationLevelId", "gradationId", "typeId", + "namePrimary", + "nameSecondary", "category", "classType", "classify", "educationLevel", "gradation", - "type", - "namePrimary", - "nameSecondary" + "type" ], "additionalProperties": false }, @@ -19734,7 +19942,6 @@ "maximum": 9007199254740991 }, "jwId": { - "nullable": true, "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 @@ -19778,6 +19985,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "jwId": { + "nullable": true, + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, "code": { "type": "string" }, @@ -19802,6 +20015,7 @@ }, "required": [ "id", + "jwId", "code", "nameCn", "nameEn", @@ -19821,13 +20035,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "personId": { - "nullable": true, + "jwId": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "teacherId": { + "personId": { "nullable": true, "type": "integer", "minimum": -9007199254740991, @@ -19844,34 +20057,6 @@ "nullable": true, "type": "string" }, - "email": { - "nullable": true, - "type": "string" - }, - "telephone": { - "nullable": true, - "type": "string" - }, - "mobile": { - "nullable": true, - "type": "string" - }, - "address": { - "nullable": true, - "type": "string" - }, - "departmentId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "teacherTitleId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, "namePrimary": { "type": "string" }, @@ -19882,17 +20067,11 @@ }, "required": [ "id", + "jwId", "personId", - "teacherId", "code", "nameCn", "nameEn", - "email", - "telephone", - "mobile", - "address", - "departmentId", - "teacherTitleId", "namePrimary", "nameSecondary" ], @@ -19903,6 +20082,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -19944,12 +20124,6 @@ "additionalProperties": false } }, - "calendarPath": { - "type": "string" - }, - "calendarUrl": { - "type": "string" - }, "note": { "type": "string" } @@ -19957,8 +20131,6 @@ "required": [ "userId", "sections", - "calendarPath", - "calendarUrl", "note" ], "additionalProperties": false @@ -20024,13 +20196,7 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, - "retiredAt": { + "retiredAt": { "nullable": true, "type": "string", "format": "date-time", @@ -20057,9 +20223,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -20092,9 +20256,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -20248,6 +20410,13 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" + }, "category": { "nullable": true, "type": "object", @@ -20263,12 +20432,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -20287,12 +20465,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -20311,12 +20498,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -20335,12 +20531,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -20359,12 +20564,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -20383,21 +20597,23 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false - }, - "namePrimary": { - "type": "string" - }, - "nameSecondary": { - "nullable": true, - "type": "string" } }, "required": [ @@ -20412,14 +20628,14 @@ "educationLevelId", "gradationId", "typeId", + "namePrimary", + "nameSecondary", "category", "classType", "classify", "educationLevel", "gradation", - "type", - "namePrimary", - "nameSecondary" + "type" ], "additionalProperties": false }, @@ -20441,7 +20657,6 @@ "maximum": 9007199254740991 }, "jwId": { - "nullable": true, "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 @@ -20485,6 +20700,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "jwId": { + "nullable": true, + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, "code": { "type": "string" }, @@ -20509,6 +20730,7 @@ }, "required": [ "id", + "jwId", "code", "nameCn", "nameEn", @@ -20528,13 +20750,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "personId": { - "nullable": true, + "jwId": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "teacherId": { + "personId": { "nullable": true, "type": "integer", "minimum": -9007199254740991, @@ -20551,34 +20772,6 @@ "nullable": true, "type": "string" }, - "email": { - "nullable": true, - "type": "string" - }, - "telephone": { - "nullable": true, - "type": "string" - }, - "mobile": { - "nullable": true, - "type": "string" - }, - "address": { - "nullable": true, - "type": "string" - }, - "departmentId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "teacherTitleId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, "namePrimary": { "type": "string" }, @@ -20589,17 +20782,11 @@ }, "required": [ "id", + "jwId", "personId", - "teacherId", "code", "nameCn", "nameEn", - "email", - "telephone", - "mobile", - "address", - "departmentId", - "teacherTitleId", "namePrimary", "nameSecondary" ], @@ -20610,6 +20797,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -20651,12 +20839,6 @@ "additionalProperties": false } }, - "calendarPath": { - "type": "string" - }, - "calendarUrl": { - "type": "string" - }, "note": { "type": "string" } @@ -20664,8 +20846,6 @@ "required": [ "userId", "sections", - "calendarPath", - "calendarUrl", "note" ], "additionalProperties": false @@ -22500,6 +22680,13 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" + }, "category": { "nullable": true, "type": "object", @@ -22515,12 +22702,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -22539,12 +22735,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -22563,12 +22768,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -22587,12 +22801,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -22611,12 +22834,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -22635,12 +22867,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -22659,12 +22900,6 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, "retiredAt": { "nullable": true, "type": "string", @@ -22692,9 +22927,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -22727,9 +22960,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -22842,7 +23073,6 @@ "maximum": 9007199254740991 }, "jwId": { - "nullable": true, "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 @@ -22857,6 +23087,13 @@ "code": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ @@ -22864,7 +23101,9 @@ "jwId", "nameCn", "nameEn", - "code" + "code", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -22878,13 +23117,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "personId": { - "nullable": true, + "jwId": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "teacherId": { + "personId": { "nullable": true, "type": "integer", "minimum": -9007199254740991, @@ -22901,48 +23139,23 @@ "nullable": true, "type": "string" }, - "email": { - "nullable": true, - "type": "string" - }, - "telephone": { - "nullable": true, - "type": "string" - }, - "mobile": { - "nullable": true, + "namePrimary": { "type": "string" }, - "address": { + "nameSecondary": { "nullable": true, "type": "string" - }, - "departmentId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "teacherTitleId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 } }, "required": [ "id", + "jwId", "personId", - "teacherId", "code", "nameCn", "nameEn", - "email", - "telephone", - "mobile", - "address", - "departmentId", - "teacherTitleId" + "namePrimary", + "nameSecondary" ], "additionalProperties": false } @@ -22951,6 +23164,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -22989,27 +23203,44 @@ ], "additionalProperties": false } - } - }, - "required": [ - "id", - "jwId", - "code", - "nameCn", - "nameEn", - "categoryId", + }, + "_count": { + "type": "object", + "properties": { + "sections": { + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + } + }, + "required": [ + "sections" + ], + "additionalProperties": false + } + }, + "required": [ + "id", + "jwId", + "code", + "nameCn", + "nameEn", + "categoryId", "classTypeId", "classifyId", "educationLevelId", "gradationId", "typeId", + "namePrimary", + "nameSecondary", "category", "classType", "classify", "educationLevel", "gradation", "type", - "sections" + "sections", + "_count" ], "additionalProperties": false }, @@ -23026,12 +23257,6 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, "retiredAt": { "nullable": true, "type": "string", @@ -23059,9 +23284,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -23094,9 +23317,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -23250,6 +23471,13 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" + }, "category": { "nullable": true, "type": "object", @@ -23265,12 +23493,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -23289,12 +23526,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -23313,12 +23559,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -23337,12 +23592,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -23361,12 +23625,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -23385,12 +23658,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false } @@ -23407,6 +23689,8 @@ "educationLevelId", "gradationId", "typeId", + "namePrimary", + "nameSecondary", "category", "classType", "classify", @@ -23434,7 +23718,6 @@ "maximum": 9007199254740991 }, "jwId": { - "nullable": true, "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 @@ -23449,6 +23732,13 @@ "code": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ @@ -23456,7 +23746,9 @@ "jwId", "nameCn", "nameEn", - "code" + "code", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -23469,6 +23761,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "jwId": { + "nullable": true, + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, "code": { "type": "string" }, @@ -23482,14 +23780,24 @@ "isCollege": { "nullable": true, "type": "boolean" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", + "jwId", "code", "nameCn", "nameEn", - "isCollege" + "isCollege", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -23508,12 +23816,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -23532,12 +23849,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -23564,6 +23890,13 @@ }, "code": { "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ @@ -23571,7 +23904,9 @@ "jwId", "nameCn", "nameEn", - "code" + "code", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -23586,9 +23921,7 @@ "maximum": 9007199254740991 }, "periods": { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "date": { "nullable": true, @@ -23707,9 +24040,7 @@ "maximum": 9007199254740991 }, "actualPeriods": { - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "isDefault": { "type": "boolean" @@ -23743,13 +24074,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "personId": { - "nullable": true, + "jwId": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "teacherId": { + "personId": { "nullable": true, "type": "integer", "minimum": -9007199254740991, @@ -23766,34 +24096,13 @@ "nullable": true, "type": "string" }, - "email": { - "nullable": true, - "type": "string" - }, - "telephone": { - "nullable": true, - "type": "string" - }, - "mobile": { - "nullable": true, + "namePrimary": { "type": "string" }, - "address": { + "nameSecondary": { "nullable": true, "type": "string" }, - "departmentId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "teacherTitleId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, "department": { "nullable": true, "type": "object", @@ -23816,6 +24125,13 @@ "isCollege": { "nullable": true, "type": "boolean" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ @@ -23823,7 +24139,9 @@ "code", "nameCn", "nameEn", - "isCollege" + "isCollege", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -23854,6 +24172,13 @@ "enabled": { "nullable": true, "type": "boolean" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ @@ -23862,24 +24187,22 @@ "nameCn", "nameEn", "code", - "enabled" + "enabled", + "namePrimary", + "nameSecondary" ], "additionalProperties": false } }, "required": [ "id", + "jwId", "personId", - "teacherId", "code", "nameCn", "nameEn", - "email", - "telephone", - "mobile", - "address", - "departmentId", - "teacherTitleId", + "namePrimary", + "nameSecondary", "department", "teacherTitle" ], @@ -23912,9 +24235,7 @@ }, "period": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "weekIndices": { "nullable": true, @@ -23935,7 +24256,14 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "teacher": { + "teacherTitleId": { + "nullable": true, + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, + "teacherLessonType": { + "nullable": true, "type": "object", "properties": { "id": { @@ -23943,22 +24271,11 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "personId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "teacherId": { - "nullable": true, + "jwId": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "code": { - "nullable": true, - "type": "string" - }, "nameCn": { "type": "string" }, @@ -23966,52 +24283,30 @@ "nullable": true, "type": "string" }, - "email": { - "nullable": true, - "type": "string" - }, - "telephone": { - "nullable": true, - "type": "string" - }, - "mobile": { - "nullable": true, + "code": { "type": "string" }, - "address": { + "role": { "nullable": true, "type": "string" }, - "departmentId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "teacherTitleId": { + "enabled": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "boolean" } }, "required": [ "id", - "personId", - "teacherId", - "code", + "jwId", "nameCn", "nameEn", - "email", - "telephone", - "mobile", - "address", - "departmentId", - "teacherTitleId" + "code", + "role", + "enabled" ], "additionalProperties": false }, - "teacherLessonType": { + "teacherTitle": { "nullable": true, "type": "object", "properties": { @@ -24035,13 +24330,16 @@ "code": { "type": "string" }, - "role": { + "enabled": { "nullable": true, + "type": "boolean" + }, + "namePrimary": { "type": "string" }, - "enabled": { + "nameSecondary": { "nullable": true, - "type": "boolean" + "type": "string" } }, "required": [ @@ -24050,8 +24348,9 @@ "nameCn", "nameEn", "code", - "role", - "enabled" + "enabled", + "namePrimary", + "nameSecondary" ], "additionalProperties": false } @@ -24065,8 +24364,9 @@ "weekIndices", "weekIndicesMsg", "teacherLessonTypeId", - "teacher", - "teacherLessonType" + "teacherTitleId", + "teacherLessonType", + "teacherTitle" ], "additionalProperties": false } @@ -24140,18 +24440,33 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "jwId": { + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, "nameCn": { "type": "string" }, "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", + "jwId", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -24217,7 +24532,6 @@ "maximum": 9007199254740991 }, "jwId": { - "nullable": true, "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 @@ -24282,6 +24596,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -24423,12 +24738,6 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, "retiredAt": { "nullable": true, "type": "string", @@ -24456,9 +24765,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -24491,9 +24798,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -24647,6 +24952,13 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" + }, "category": { "nullable": true, "type": "object", @@ -24656,10 +24968,17 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "nameCn": { + "nameCn": { + "type": "string" + }, + "nameEn": { + "nullable": true, + "type": "string" + }, + "namePrimary": { "type": "string" }, - "nameEn": { + "nameSecondary": { "nullable": true, "type": "string" } @@ -24667,7 +24986,9 @@ "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -24686,12 +25007,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -24710,12 +25040,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -24734,12 +25073,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -24758,12 +25106,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -24782,21 +25139,23 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false - }, - "namePrimary": { - "type": "string" - }, - "nameSecondary": { - "nullable": true, - "type": "string" } }, "required": [ @@ -24811,14 +25170,14 @@ "educationLevelId", "gradationId", "typeId", + "namePrimary", + "nameSecondary", "category", "classType", "classify", "educationLevel", "gradation", - "type", - "namePrimary", - "nameSecondary" + "type" ], "additionalProperties": false }, @@ -24840,7 +25199,6 @@ "maximum": 9007199254740991 }, "jwId": { - "nullable": true, "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 @@ -24884,6 +25242,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "jwId": { + "nullable": true, + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, "code": { "type": "string" }, @@ -24908,6 +25272,7 @@ }, "required": [ "id", + "jwId", "code", "nameCn", "nameEn", @@ -24927,13 +25292,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "personId": { - "nullable": true, + "jwId": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "teacherId": { + "personId": { "nullable": true, "type": "integer", "minimum": -9007199254740991, @@ -24950,34 +25314,6 @@ "nullable": true, "type": "string" }, - "email": { - "nullable": true, - "type": "string" - }, - "telephone": { - "nullable": true, - "type": "string" - }, - "mobile": { - "nullable": true, - "type": "string" - }, - "address": { - "nullable": true, - "type": "string" - }, - "departmentId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "teacherTitleId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, "namePrimary": { "type": "string" }, @@ -24988,17 +25324,11 @@ }, "required": [ "id", + "jwId", "personId", - "teacherId", "code", "nameCn", "nameEn", - "email", - "telephone", - "mobile", - "address", - "departmentId", - "teacherTitleId", "namePrimary", "nameSecondary" ], @@ -25009,6 +25339,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -25074,13 +25405,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "personId": { - "nullable": true, + "jwId": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "teacherId": { + "personId": { "nullable": true, "type": "integer", "minimum": -9007199254740991, @@ -25125,6 +25455,13 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" + }, "department": { "nullable": true, "type": "object", @@ -25147,6 +25484,13 @@ "isCollege": { "nullable": true, "type": "boolean" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ @@ -25154,7 +25498,9 @@ "code", "nameCn", "nameEn", - "isCollege" + "isCollege", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -25185,6 +25531,13 @@ "enabled": { "nullable": true, "type": "boolean" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ @@ -25193,7 +25546,9 @@ "nameCn", "nameEn", "code", - "enabled" + "enabled", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -25212,12 +25567,6 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, "retiredAt": { "nullable": true, "type": "string", @@ -25245,9 +25594,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -25280,9 +25627,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -25436,6 +25781,13 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" + }, "category": { "nullable": true, "type": "object", @@ -25451,12 +25803,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -25475,12 +25836,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -25499,12 +25869,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -25523,12 +25902,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -25547,12 +25935,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -25571,12 +25968,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false } @@ -25593,6 +25999,8 @@ "educationLevelId", "gradationId", "typeId", + "namePrimary", + "nameSecondary", "category", "classType", "classify", @@ -25614,6 +26022,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -25669,8 +26078,8 @@ }, "required": [ "id", + "jwId", "personId", - "teacherId", "code", "nameCn", "nameEn", @@ -25680,6 +26089,8 @@ "address", "departmentId", "teacherTitleId", + "namePrimary", + "nameSecondary", "department", "teacherTitle", "sections", @@ -26182,12 +26593,6 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, "retiredAt": { "nullable": true, "type": "string", @@ -26215,9 +26620,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -26250,9 +26653,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -26443,6 +26844,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -27079,12 +27481,6 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, "retiredAt": { "nullable": true, "type": "string", @@ -27112,9 +27508,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -27147,9 +27541,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -27303,6 +27695,13 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" + }, "category": { "nullable": true, "type": "object", @@ -27315,7 +27714,14 @@ "nameCn": { "type": "string" }, - "nameEn": { + "nameEn": { + "nullable": true, + "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { "nullable": true, "type": "string" } @@ -27323,7 +27729,9 @@ "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -27342,12 +27750,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -27366,12 +27783,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -27390,12 +27816,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -27414,12 +27849,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -27438,21 +27882,23 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false - }, - "namePrimary": { - "type": "string" - }, - "nameSecondary": { - "nullable": true, - "type": "string" } }, "required": [ @@ -27467,14 +27913,14 @@ "educationLevelId", "gradationId", "typeId", + "namePrimary", + "nameSecondary", "category", "classType", "classify", "educationLevel", "gradation", - "type", - "namePrimary", - "nameSecondary" + "type" ], "additionalProperties": false }, @@ -27496,7 +27942,6 @@ "maximum": 9007199254740991 }, "jwId": { - "nullable": true, "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 @@ -27540,6 +27985,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "jwId": { + "nullable": true, + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, "code": { "type": "string" }, @@ -27564,6 +28015,7 @@ }, "required": [ "id", + "jwId", "code", "nameCn", "nameEn", @@ -27583,13 +28035,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "personId": { - "nullable": true, + "jwId": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "teacherId": { + "personId": { "nullable": true, "type": "integer", "minimum": -9007199254740991, @@ -27606,34 +28057,6 @@ "nullable": true, "type": "string" }, - "email": { - "nullable": true, - "type": "string" - }, - "telephone": { - "nullable": true, - "type": "string" - }, - "mobile": { - "nullable": true, - "type": "string" - }, - "address": { - "nullable": true, - "type": "string" - }, - "departmentId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "teacherTitleId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, "namePrimary": { "type": "string" }, @@ -27644,17 +28067,11 @@ }, "required": [ "id", + "jwId", "personId", - "teacherId", "code", "nameCn", "nameEn", - "email", - "telephone", - "mobile", - "address", - "departmentId", - "teacherTitleId", "namePrimary", "nameSecondary" ], @@ -27665,6 +28082,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -27756,12 +28174,6 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, "retiredAt": { "nullable": true, "type": "string", @@ -27789,9 +28201,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -27824,9 +28234,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -27980,6 +28388,13 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" + }, "category": { "nullable": true, "type": "object", @@ -27995,12 +28410,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -28019,12 +28443,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -28043,12 +28476,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -28067,12 +28509,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -28091,12 +28542,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -28115,21 +28575,23 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false - }, - "namePrimary": { - "type": "string" - }, - "nameSecondary": { - "nullable": true, - "type": "string" } }, "required": [ @@ -28144,14 +28606,14 @@ "educationLevelId", "gradationId", "typeId", + "namePrimary", + "nameSecondary", "category", "classType", "classify", "educationLevel", "gradation", - "type", - "namePrimary", - "nameSecondary" + "type" ], "additionalProperties": false }, @@ -28173,7 +28635,6 @@ "maximum": 9007199254740991 }, "jwId": { - "nullable": true, "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 @@ -28217,6 +28678,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "jwId": { + "nullable": true, + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, "code": { "type": "string" }, @@ -28241,6 +28708,7 @@ }, "required": [ "id", + "jwId", "code", "nameCn", "nameEn", @@ -28260,13 +28728,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "personId": { - "nullable": true, + "jwId": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "teacherId": { + "personId": { "nullable": true, "type": "integer", "minimum": -9007199254740991, @@ -28283,34 +28750,6 @@ "nullable": true, "type": "string" }, - "email": { - "nullable": true, - "type": "string" - }, - "telephone": { - "nullable": true, - "type": "string" - }, - "mobile": { - "nullable": true, - "type": "string" - }, - "address": { - "nullable": true, - "type": "string" - }, - "departmentId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "teacherTitleId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, "namePrimary": { "type": "string" }, @@ -28321,17 +28760,11 @@ }, "required": [ "id", + "jwId", "personId", - "teacherId", "code", "nameCn", "nameEn", - "email", - "telephone", - "mobile", - "address", - "departmentId", - "teacherTitleId", "namePrimary", "nameSecondary" ], @@ -28342,6 +28775,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -28383,12 +28817,6 @@ "additionalProperties": false } }, - "calendarPath": { - "type": "string" - }, - "calendarUrl": { - "type": "string" - }, "note": { "type": "string" } @@ -28396,8 +28824,6 @@ "required": [ "userId", "sections", - "calendarPath", - "calendarUrl", "note" ], "additionalProperties": false @@ -28445,12 +28871,6 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, "retiredAt": { "nullable": true, "type": "string", @@ -28478,9 +28898,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -28513,9 +28931,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -28665,9 +29081,16 @@ }, "typeId": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" }, "category": { "nullable": true, @@ -28684,12 +29107,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -28708,12 +29140,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -28732,12 +29173,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -28756,12 +29206,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -28780,12 +29239,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -28804,21 +29272,23 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false - }, - "namePrimary": { - "type": "string" - }, - "nameSecondary": { - "nullable": true, - "type": "string" } }, "required": [ @@ -28833,14 +29303,14 @@ "educationLevelId", "gradationId", "typeId", + "namePrimary", + "nameSecondary", "category", "classType", "classify", "educationLevel", "gradation", - "type", - "namePrimary", - "nameSecondary" + "type" ], "additionalProperties": false }, @@ -28862,7 +29332,6 @@ "maximum": 9007199254740991 }, "jwId": { - "nullable": true, "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 @@ -28906,6 +29375,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "jwId": { + "nullable": true, + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, "code": { "type": "string" }, @@ -28930,6 +29405,7 @@ }, "required": [ "id", + "jwId", "code", "nameCn", "nameEn", @@ -28949,13 +29425,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "personId": { - "nullable": true, + "jwId": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "teacherId": { + "personId": { "nullable": true, "type": "integer", "minimum": -9007199254740991, @@ -28972,34 +29447,6 @@ "nullable": true, "type": "string" }, - "email": { - "nullable": true, - "type": "string" - }, - "telephone": { - "nullable": true, - "type": "string" - }, - "mobile": { - "nullable": true, - "type": "string" - }, - "address": { - "nullable": true, - "type": "string" - }, - "departmentId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "teacherTitleId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, "namePrimary": { "type": "string" }, @@ -29010,17 +29457,11 @@ }, "required": [ "id", + "jwId", "personId", - "teacherId", "code", "nameCn", "nameEn", - "email", - "telephone", - "mobile", - "address", - "departmentId", - "teacherTitleId", "namePrimary", "nameSecondary" ], @@ -29031,6 +29472,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -29072,22 +29514,27 @@ "additionalProperties": false } }, - "calendarPath": { + "note": { "type": "string" }, - "calendarUrl": { + "calendarPath": { + "nullable": true, + "description": "Private calendar feed path. Populated only for OAuth tokens with workspace.calendar-feed:read.", "type": "string" }, - "note": { - "type": "string" + "calendarUrl": { + "nullable": true, + "description": "Private calendar feed URL. Populated only for OAuth tokens with workspace.calendar-feed:read.", + "type": "string", + "format": "uri" } }, "required": [ "userId", "sections", + "note", "calendarPath", - "calendarUrl", - "note" + "calendarUrl" ], "additionalProperties": false } @@ -29160,12 +29607,6 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, "retiredAt": { "nullable": true, "type": "string", @@ -29193,9 +29634,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -29228,9 +29667,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -29384,6 +29821,13 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" + }, "category": { "nullable": true, "type": "object", @@ -29399,12 +29843,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -29423,12 +29876,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -29447,12 +29909,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -29471,12 +29942,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -29495,12 +29975,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -29519,21 +30008,23 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false - }, - "namePrimary": { - "type": "string" - }, - "nameSecondary": { - "nullable": true, - "type": "string" } }, "required": [ @@ -29548,14 +30039,14 @@ "educationLevelId", "gradationId", "typeId", + "namePrimary", + "nameSecondary", "category", "classType", "classify", "educationLevel", "gradation", - "type", - "namePrimary", - "nameSecondary" + "type" ], "additionalProperties": false }, @@ -29577,7 +30068,6 @@ "maximum": 9007199254740991 }, "jwId": { - "nullable": true, "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 @@ -29621,6 +30111,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "jwId": { + "nullable": true, + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, "code": { "type": "string" }, @@ -29645,6 +30141,7 @@ }, "required": [ "id", + "jwId", "code", "nameCn", "nameEn", @@ -29664,13 +30161,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "personId": { - "nullable": true, + "jwId": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "teacherId": { + "personId": { "nullable": true, "type": "integer", "minimum": -9007199254740991, @@ -29687,34 +30183,6 @@ "nullable": true, "type": "string" }, - "email": { - "nullable": true, - "type": "string" - }, - "telephone": { - "nullable": true, - "type": "string" - }, - "mobile": { - "nullable": true, - "type": "string" - }, - "address": { - "nullable": true, - "type": "string" - }, - "departmentId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "teacherTitleId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, "namePrimary": { "type": "string" }, @@ -29725,17 +30193,11 @@ }, "required": [ "id", + "jwId", "personId", - "teacherId", "code", "nameCn", "nameEn", - "email", - "telephone", - "mobile", - "address", - "departmentId", - "teacherTitleId", "namePrimary", "nameSecondary" ], @@ -29746,6 +30208,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -29805,13 +30268,7 @@ "jwId": { "type": "integer", "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" + "maximum": 9007199254740991 }, "retiredAt": { "nullable": true, @@ -29840,9 +30297,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -29875,9 +30330,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -30031,6 +30484,13 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" + }, "category": { "nullable": true, "type": "object", @@ -30046,12 +30506,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -30070,12 +30539,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -30094,12 +30572,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -30118,12 +30605,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -30142,12 +30638,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -30166,21 +30671,23 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false - }, - "namePrimary": { - "type": "string" - }, - "nameSecondary": { - "nullable": true, - "type": "string" } }, "required": [ @@ -30195,14 +30702,14 @@ "educationLevelId", "gradationId", "typeId", + "namePrimary", + "nameSecondary", "category", "classType", "classify", "educationLevel", "gradation", - "type", - "namePrimary", - "nameSecondary" + "type" ], "additionalProperties": false }, @@ -30224,7 +30731,6 @@ "maximum": 9007199254740991 }, "jwId": { - "nullable": true, "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 @@ -30268,6 +30774,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "jwId": { + "nullable": true, + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, "code": { "type": "string" }, @@ -30292,6 +30804,7 @@ }, "required": [ "id", + "jwId", "code", "nameCn", "nameEn", @@ -30311,13 +30824,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "personId": { - "nullable": true, + "jwId": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "teacherId": { + "personId": { "nullable": true, "type": "integer", "minimum": -9007199254740991, @@ -30334,34 +30846,6 @@ "nullable": true, "type": "string" }, - "email": { - "nullable": true, - "type": "string" - }, - "telephone": { - "nullable": true, - "type": "string" - }, - "mobile": { - "nullable": true, - "type": "string" - }, - "address": { - "nullable": true, - "type": "string" - }, - "departmentId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "teacherTitleId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, "namePrimary": { "type": "string" }, @@ -30372,17 +30856,11 @@ }, "required": [ "id", + "jwId", "personId", - "teacherId", "code", "nameCn", "nameEn", - "email", - "telephone", - "mobile", - "address", - "departmentId", - "teacherTitleId", "namePrimary", "nameSecondary" ], @@ -30393,6 +30871,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -30454,12 +30933,6 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, "retiredAt": { "nullable": true, "type": "string", @@ -30487,9 +30960,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -30522,9 +30993,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -30678,6 +31147,13 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" + }, "category": { "nullable": true, "type": "object", @@ -30693,12 +31169,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -30717,12 +31202,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -30741,12 +31235,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -30765,12 +31268,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -30789,12 +31301,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -30813,21 +31334,23 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false - }, - "namePrimary": { - "type": "string" - }, - "nameSecondary": { - "nullable": true, - "type": "string" } }, "required": [ @@ -30842,14 +31365,14 @@ "educationLevelId", "gradationId", "typeId", + "namePrimary", + "nameSecondary", "category", "classType", "classify", "educationLevel", "gradation", - "type", - "namePrimary", - "nameSecondary" + "type" ], "additionalProperties": false }, @@ -30871,7 +31394,6 @@ "maximum": 9007199254740991 }, "jwId": { - "nullable": true, "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 @@ -30915,6 +31437,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "jwId": { + "nullable": true, + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, "code": { "type": "string" }, @@ -30939,6 +31467,7 @@ }, "required": [ "id", + "jwId", "code", "nameCn", "nameEn", @@ -30958,13 +31487,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "personId": { - "nullable": true, + "jwId": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "teacherId": { + "personId": { "nullable": true, "type": "integer", "minimum": -9007199254740991, @@ -30981,34 +31509,6 @@ "nullable": true, "type": "string" }, - "email": { - "nullable": true, - "type": "string" - }, - "telephone": { - "nullable": true, - "type": "string" - }, - "mobile": { - "nullable": true, - "type": "string" - }, - "address": { - "nullable": true, - "type": "string" - }, - "departmentId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "teacherTitleId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, "namePrimary": { "type": "string" }, @@ -31019,17 +31519,11 @@ }, "required": [ "id", + "jwId", "personId", - "teacherId", "code", "nameCn", "nameEn", - "email", - "telephone", - "mobile", - "address", - "departmentId", - "teacherTitleId", "namePrimary", "nameSecondary" ], @@ -31040,6 +31534,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -31101,13 +31596,7 @@ "jwId": { "type": "integer", "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" + "maximum": 9007199254740991 }, "retiredAt": { "nullable": true, @@ -31136,9 +31625,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -31171,9 +31658,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -31327,6 +31812,13 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" + }, "category": { "nullable": true, "type": "object", @@ -31342,12 +31834,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -31366,12 +31867,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -31390,12 +31900,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -31414,12 +31933,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -31438,12 +31966,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -31462,21 +31999,23 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false - }, - "namePrimary": { - "type": "string" - }, - "nameSecondary": { - "nullable": true, - "type": "string" } }, "required": [ @@ -31491,14 +32030,14 @@ "educationLevelId", "gradationId", "typeId", + "namePrimary", + "nameSecondary", "category", "classType", "classify", "educationLevel", "gradation", - "type", - "namePrimary", - "nameSecondary" + "type" ], "additionalProperties": false }, @@ -31520,7 +32059,6 @@ "maximum": 9007199254740991 }, "jwId": { - "nullable": true, "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 @@ -31564,6 +32102,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "jwId": { + "nullable": true, + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, "code": { "type": "string" }, @@ -31588,6 +32132,7 @@ }, "required": [ "id", + "jwId", "code", "nameCn", "nameEn", @@ -31607,13 +32152,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "personId": { - "nullable": true, + "jwId": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "teacherId": { + "personId": { "nullable": true, "type": "integer", "minimum": -9007199254740991, @@ -31630,34 +32174,6 @@ "nullable": true, "type": "string" }, - "email": { - "nullable": true, - "type": "string" - }, - "telephone": { - "nullable": true, - "type": "string" - }, - "mobile": { - "nullable": true, - "type": "string" - }, - "address": { - "nullable": true, - "type": "string" - }, - "departmentId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "teacherTitleId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, "namePrimary": { "type": "string" }, @@ -31668,17 +32184,11 @@ }, "required": [ "id", + "jwId", "personId", - "teacherId", "code", "nameCn", "nameEn", - "email", - "telephone", - "mobile", - "address", - "departmentId", - "teacherTitleId", "namePrimary", "nameSecondary" ], @@ -31689,6 +32199,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", @@ -31730,12 +32241,6 @@ "additionalProperties": false } }, - "calendarPath": { - "type": "string" - }, - "calendarUrl": { - "type": "string" - }, "note": { "type": "string" } @@ -31743,8 +32248,6 @@ "required": [ "userId", "sections", - "calendarPath", - "calendarUrl", "note" ], "additionalProperties": false @@ -31879,12 +32382,6 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "sourceLastSeenAt": { - "nullable": true, - "type": "string", - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - }, "retiredAt": { "nullable": true, "type": "string", @@ -31912,9 +32409,7 @@ }, "periodsPerWeek": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "timesPerWeek": { "nullable": true, @@ -31947,9 +32442,7 @@ }, "actualPeriods": { "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 + "type": "number" }, "theoryPeriods": { "nullable": true, @@ -32103,6 +32596,13 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" + }, "category": { "nullable": true, "type": "object", @@ -32118,12 +32618,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -32142,12 +32651,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -32166,12 +32684,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -32190,12 +32717,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -32214,12 +32750,21 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false }, @@ -32238,21 +32783,23 @@ "nameEn": { "nullable": true, "type": "string" + }, + "namePrimary": { + "type": "string" + }, + "nameSecondary": { + "nullable": true, + "type": "string" } }, "required": [ "id", "nameCn", - "nameEn" + "nameEn", + "namePrimary", + "nameSecondary" ], "additionalProperties": false - }, - "namePrimary": { - "type": "string" - }, - "nameSecondary": { - "nullable": true, - "type": "string" } }, "required": [ @@ -32267,14 +32814,14 @@ "educationLevelId", "gradationId", "typeId", + "namePrimary", + "nameSecondary", "category", "classType", "classify", "educationLevel", "gradation", - "type", - "namePrimary", - "nameSecondary" + "type" ], "additionalProperties": false }, @@ -32296,7 +32843,6 @@ "maximum": 9007199254740991 }, "jwId": { - "nullable": true, "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 @@ -32340,6 +32886,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, + "jwId": { + "nullable": true, + "type": "integer", + "minimum": -9007199254740991, + "maximum": 9007199254740991 + }, "code": { "type": "string" }, @@ -32364,6 +32916,7 @@ }, "required": [ "id", + "jwId", "code", "nameCn", "nameEn", @@ -32383,13 +32936,12 @@ "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "personId": { - "nullable": true, + "jwId": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, - "teacherId": { + "personId": { "nullable": true, "type": "integer", "minimum": -9007199254740991, @@ -32406,34 +32958,6 @@ "nullable": true, "type": "string" }, - "email": { - "nullable": true, - "type": "string" - }, - "telephone": { - "nullable": true, - "type": "string" - }, - "mobile": { - "nullable": true, - "type": "string" - }, - "address": { - "nullable": true, - "type": "string" - }, - "departmentId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, - "teacherTitleId": { - "nullable": true, - "type": "integer", - "minimum": -9007199254740991, - "maximum": 9007199254740991 - }, "namePrimary": { "type": "string" }, @@ -32444,17 +32968,11 @@ }, "required": [ "id", + "jwId", "personId", - "teacherId", "code", "nameCn", "nameEn", - "email", - "telephone", - "mobile", - "address", - "departmentId", - "teacherTitleId", "namePrimary", "nameSecondary" ], @@ -32465,6 +32983,7 @@ "required": [ "id", "jwId", + "retiredAt", "code", "bizTypeId", "credits", diff --git a/api/openapi.provenance.json b/api/openapi.provenance.json index 8c91383..d88b091 100644 --- a/api/openapi.provenance.json +++ b/api/openapi.provenance.json @@ -1,5 +1,5 @@ { "repository": "Life-USTC/server", - "commit": "e32d01a31d2e3b79765448aed8665eb197b93977", - "sha256": "d56af5ae5da8dc89e5c3ef618bc39cd0ea9b64e93a8e0808e4e2ab6ffabd58f4" + "commit": "dabcb0aae2b3ca19d36fc340f86ec2627d88a5c5", + "sha256": "fba8624277f766ac924cf070807bb071059157f75849c996ea4a943258ba402a" } diff --git a/internal/api/client.go b/internal/api/client.go index d184a8f..88aa4c6 100644 --- a/internal/api/client.go +++ b/internal/api/client.go @@ -75,7 +75,7 @@ func (t *authTransport) RoundTrip(req *http.Request) (*http.Response, error) { req.Header.Set("Authorization", "Bearer "+cred.AccessToken) } - output.VerboseF("→ %s %s", req.Method, req.URL) + output.VerboseF("→ %s %s", req.Method, redactedRequestURL(req.URL)) start := time.Now() resp, err := t.base.RoundTrip(req) @@ -127,6 +127,21 @@ func (t *authTransport) RoundTrip(req *http.Request) (*http.Response, error) { return resp, nil } +func redactedRequestURL(requestURL *url.URL) string { + if requestURL == nil { + return "" + } + redacted := *requestURL + const calendarFeedPrefix = "/api/calendar-feeds/" + if strings.HasPrefix(redacted.Path, calendarFeedPrefix) { + redacted.Path = calendarFeedPrefix + "[redacted].ics" + redacted.RawPath = "" + redacted.RawQuery = "" + redacted.ForceQuery = false + } + return redacted.String() +} + func (t *authTransport) ensureToken() bool { t.mu.Lock() defer t.mu.Unlock() diff --git a/internal/api/client_test.go b/internal/api/client_test.go new file mode 100644 index 0000000..1a0ab32 --- /dev/null +++ b/internal/api/client_test.go @@ -0,0 +1,31 @@ +package api + +import ( + "net/url" + "strings" + "testing" +) + +func TestRedactedRequestURLHidesCalendarFeedCredential(t *testing.T) { + requestURL, err := url.Parse("https://life.example/api/calendar-feeds/private-token.ics?token=query-secret&download=1") + if err != nil { + t.Fatal(err) + } + got := redactedRequestURL(requestURL) + if strings.Contains(got, "private-token") || strings.Contains(got, "query-secret") { + t.Fatalf("redacted URL leaked feed credential: %s", got) + } + if got != "https://life.example/api/calendar-feeds/%5Bredacted%5D.ics" { + t.Fatalf("redacted URL = %q", got) + } +} + +func TestRedactedRequestURLLeavesOrdinaryPathsIntact(t *testing.T) { + requestURL, err := url.Parse("https://life.example/api/workspace/subscriptions/current") + if err != nil { + t.Fatal(err) + } + if got := redactedRequestURL(requestURL); got != requestURL.String() { + t.Fatalf("redacted URL = %q, want %q", got, requestURL) + } +} diff --git a/internal/auth/auth.go b/internal/auth/auth.go index f4a027a..0106919 100644 --- a/internal/auth/auth.go +++ b/internal/auth/auth.go @@ -88,13 +88,36 @@ func oauthResource(server string, meta map[string]any) string { return strings.TrimRight(server, "/") } +var cliOAuthScopes = []string{ + "email", + "offline_access", + "account.profile:read", + "catalog.bus:read", + "catalog.course:read", + "catalog.link:read", + "catalog.schedule:read", + "catalog.section:read", + "catalog.teacher:read", + "community.comment:write", + "community.description:write", + "community.section-homework:write", + "workspace.bus-preferences:write", + "workspace.calendar-feed:read", + "workspace.homework:write", + "workspace.link-pin:write", + "workspace.overview:read", + "workspace.schedule:read", + "workspace.subscription:write", + "workspace.todo:write", + "workspace.upload:write", +} + func oauthScopesFromMetadata(meta map[string]any) ([]string, error) { rawScopes, ok := meta["scopes_supported"].([]any) if !ok || len(rawScopes) == 0 { return nil, fmt.Errorf("server OAuth metadata does not advertise scopes_supported") } - scopes := make([]string, 0, len(rawScopes)) seen := make(map[string]struct{}, len(rawScopes)) for _, rawScope := range rawScopes { scope, ok := rawScope.(string) @@ -102,19 +125,15 @@ func oauthScopesFromMetadata(meta map[string]any) ([]string, error) { return nil, fmt.Errorf("server OAuth metadata contains an invalid supported scope") } scope = strings.TrimSpace(scope) - if scope == "openid" || scope == "profile" || scope == "email" { - continue - } - if _, duplicate := seen[scope]; duplicate { - continue - } seen[scope] = struct{}{} - scopes = append(scopes, scope) } - if len(scopes) == 0 { - return nil, fmt.Errorf("server OAuth metadata does not advertise usable API scopes") + + for _, scope := range cliOAuthScopes { + if _, supported := seen[scope]; !supported { + return nil, fmt.Errorf("server OAuth metadata does not advertise required scope %q", scope) + } } - return scopes, nil + return append([]string(nil), cliOAuthScopes...), nil } func registerPublicClient(endpoint string, scopes, redirectURIs, grantTypes, responseTypes []string) (map[string]any, error) { @@ -255,6 +274,14 @@ func callbackRedirectURI(addr net.Addr) string { return fmt.Sprintf("http://%s/callback", addr.String()) } +func browserAuthorizationURL(conf *oauth2.Config, state, challenge string) string { + return conf.AuthCodeURL(state, + oauth2.SetAuthURLParam("code_challenge", challenge), + oauth2.SetAuthURLParam("code_challenge_method", "S256"), + oauth2.SetAuthURLParam("prompt", "login"), + ) +} + type callbackResult struct { code string state string @@ -345,10 +372,7 @@ func Login(server string) (*config.Credential, error) { ctx := oauth2Context(context.Background(), &http.Client{Timeout: 15 * time.Second}) - authURL := conf.AuthCodeURL(state, - oauth2.SetAuthURLParam("code_challenge", challenge), - oauth2.SetAuthURLParam("code_challenge_method", "S256"), - ) + authURL := browserAuthorizationURL(conf, state, challenge) ch := make(chan callbackResult, 1) diff --git a/internal/auth/auth_test.go b/internal/auth/auth_test.go index 24880fb..fb4a4c5 100644 --- a/internal/auth/auth_test.go +++ b/internal/auth/auth_test.go @@ -7,6 +7,7 @@ import ( "net/http/httptest" "net/url" "strconv" + "strings" "testing" "time" @@ -92,35 +93,52 @@ func TestRegisterPublicClientOmitsUnusedDeviceRedirectMetadata(t *testing.T) { } func TestOAuthScopesFromMetadata(t *testing.T) { + advertised := make([]any, 0, len(cliOAuthScopes)+3) + advertised = append(advertised, + "openid", + "profile", + "account.client-activity:read", + ) + for _, scope := range cliOAuthScopes { + advertised = append(advertised, scope) + } scopes, err := oauthScopesFromMetadata(map[string]any{ - "scopes_supported": []any{ - "openid", - "profile", - "email", - "offline_access", - "workspace.todo:read", - "workspace.todo:write", - "workspace.todo:read", - }, + "scopes_supported": advertised, }) if err != nil { t.Fatal(err) } - want := []string{ - "offline_access", - "workspace.todo:read", - "workspace.todo:write", + if strings.Join(scopes, " ") != strings.Join(cliOAuthScopes, " ") { + t.Fatalf("scopes = %#v, want %#v", scopes, cliOAuthScopes) } - if len(scopes) != len(want) { - t.Fatalf("scopes = %#v, want %#v", scopes, want) + granted := make(map[string]bool, len(scopes)) + for _, scope := range scopes { + granted[scope] = true } - for i := range want { - if scopes[i] != want[i] { - t.Fatalf("scopes = %#v, want %#v", scopes, want) + for _, forbidden := range []string{"account.client-activity:read", "openid", "profile"} { + if granted[forbidden] { + t.Fatalf("scopes unexpectedly include %q: %#v", forbidden, scopes) } } } +func TestOAuthScopesFromMetadataRequiresCalendarFeedAndEmail(t *testing.T) { + for _, missing := range []string{"email", "workspace.calendar-feed:read"} { + t.Run(missing, func(t *testing.T) { + advertised := make([]any, 0, len(cliOAuthScopes)-1) + for _, scope := range cliOAuthScopes { + if scope != missing { + advertised = append(advertised, scope) + } + } + _, err := oauthScopesFromMetadata(map[string]any{"scopes_supported": advertised}) + if err == nil || !strings.Contains(err.Error(), missing) { + t.Fatalf("error = %v, want missing required scope %q", err, missing) + } + }) + } +} + func TestOAuthScopesFromMetadataRejectsMissingOrInvalidScopes(t *testing.T) { tests := []struct { name string @@ -131,7 +149,7 @@ func TestOAuthScopesFromMetadataRejectsMissingOrInvalidScopes(t *testing.T) { {name: "empty", meta: map[string]any{"scopes_supported": []any{}}}, {name: "invalid item", meta: map[string]any{"scopes_supported": []any{"offline_access", 42}}}, {name: "blank item", meta: map[string]any{"scopes_supported": []any{"offline_access", " "}}}, - {name: "identity only", meta: map[string]any{"scopes_supported": []any{"openid", "profile", "email"}}}, + {name: "missing required", meta: map[string]any{"scopes_supported": []any{"openid", "profile", "email"}}}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { @@ -158,13 +176,7 @@ func TestLoginDeviceCodeAcceptsOAuthTokenWithoutIDToken(t *testing.T) { "registration_endpoint": server.URL + "/api/auth/oauth2/register", "device_authorization_endpoint": server.URL + "/api/auth/oauth2/device-authorization", "token_endpoint": server.URL + "/api/auth/oauth2/token", - "scopes_supported": []string{ - "openid", - "profile", - "email", - "offline_access", - "workspace.todo:read", - }, + "scopes_supported": append([]string{"openid", "profile", "account.client-activity:read"}, cliOAuthScopes...), }) case "/api/auth/oauth2/register": var body map[string]any @@ -201,7 +213,7 @@ func TestLoginDeviceCodeAcceptsOAuthTokenWithoutIDToken(t *testing.T) { "refresh_token": "device-refresh", "token_type": "Bearer", "expires_in": 3600, - "scope": "offline_access workspace.todo:read", + "scope": strings.Join(cliOAuthScopes, " "), }) default: http.NotFound(w, r) @@ -216,7 +228,7 @@ func TestLoginDeviceCodeAcceptsOAuthTokenWithoutIDToken(t *testing.T) { if cred.AccessToken != "device-access" || cred.RefreshToken != "device-refresh" { t.Fatalf("credential = %#v", cred) } - const wantScope = "offline_access workspace.todo:read" + wantScope := strings.Join(cliOAuthScopes, " ") if got := <-registrationScopes; got != wantScope { t.Fatalf("registration scope = %q, want %q", got, wantScope) } @@ -231,6 +243,24 @@ func TestLoginDeviceCodeAcceptsOAuthTokenWithoutIDToken(t *testing.T) { } } +func TestBrowserAuthorizationURLForcesFreshLogin(t *testing.T) { + conf := &oauth2.Config{ + ClientID: "client-1", + Endpoint: oauth2.Endpoint{AuthURL: "https://example.test/oauth/authorize"}, + } + authURL, err := url.Parse(browserAuthorizationURL(conf, "state-1", "challenge-1")) + if err != nil { + t.Fatal(err) + } + query := authURL.Query() + if query.Get("prompt") != "login" { + t.Fatalf("prompt = %q, want login", query.Get("prompt")) + } + if query.Get("code_challenge") != "challenge-1" || query.Get("code_challenge_method") != "S256" { + t.Fatalf("PKCE query = %q", authURL.RawQuery) + } +} + func TestOAuthCallbackHandlerDeliversOnlyFirstRequest(t *testing.T) { results := make(chan callbackResult, 1) handler := oauthCallbackHandler(results) diff --git a/internal/cmd/apicmd/api_paths_gen.go b/internal/cmd/apicmd/api_paths_gen.go index a65e443..f91f671 100644 --- a/internal/cmd/apicmd/api_paths_gen.go +++ b/internal/cmd/apicmd/api_paths_gen.go @@ -11,6 +11,7 @@ var generatedAPIPaths = []string{ "/.well-known/openid-configuration", "/.well-known/openid-configuration/api/auth", "/.well-known/openid-configuration/api/mcp", + "/api/account/client-activity", "/api/account/preferences", "/api/account/profile", "/api/admin/comments", diff --git a/internal/cmd/calendar/calendar.go b/internal/cmd/calendar/calendar.go index 6fb0798..7cae102 100644 --- a/internal/cmd/calendar/calendar.go +++ b/internal/cmd/calendar/calendar.go @@ -74,12 +74,7 @@ func runCalendarGet(cmd *cobra.Command) error { return nil } - calURL, _ := sub["calendarUrl"].(string) - note, _ := sub["note"].(string) - output.KVWithTitle([]output.KVPair{ - {Key: "URL", Value: output.Hyperlink(calURL, calURL)}, - {Key: "Note", Value: note}, - }, "Calendar subscription") + output.KVWithTitle(calendarSubscriptionDetails(sub), "Calendar subscription") if sections, ok := sub["sections"].([]any); ok && len(sections) > 0 { fmt.Println() @@ -95,6 +90,18 @@ func runCalendarGet(cmd *cobra.Command) error { return nil } +func calendarSubscriptionDetails(sub map[string]any) []output.KVPair { + calendarFeed := "Unavailable (log in again to grant workspace.calendar-feed:read)" + if calendarURL, ok := sub["calendarUrl"].(string); ok && strings.TrimSpace(calendarURL) != "" { + calendarFeed = output.Hyperlink(calendarURL, calendarURL) + } + note, _ := sub["note"].(string) + return []output.KVPair{ + {Key: "URL", Value: calendarFeed}, + {Key: "Note", Value: note}, + } +} + func newCmdGet() *cobra.Command { return &cobra.Command{ Use: "get", diff --git a/internal/cmd/calendar/calendar_test.go b/internal/cmd/calendar/calendar_test.go index 9cb40a5..b7b6b14 100644 --- a/internal/cmd/calendar/calendar_test.go +++ b/internal/cmd/calendar/calendar_test.go @@ -5,6 +5,33 @@ import ( "testing" ) +func TestCalendarSubscriptionDetailsUseOnlyScopeGatedURL(t *testing.T) { + const calendarURL = "https://life.example/api/calendar-feeds/private-token.ics" + details := calendarSubscriptionDetails(map[string]any{ + "calendarUrl": calendarURL, + "userId": "must-not-be-used-to-build-a-url", + }) + if got := details[0].Value; !strings.Contains(got.(string), calendarURL) { + t.Fatalf("URL detail = %#v, want returned calendarUrl", got) + } +} + +func TestCalendarSubscriptionDetailsExplainMissingScopeGatedURL(t *testing.T) { + for _, calendarURL := range []any{nil, ""} { + details := calendarSubscriptionDetails(map[string]any{ + "calendarUrl": calendarURL, + "userId": "must-not-be-used-to-build-a-url", + }) + got, _ := details[0].Value.(string) + if !strings.Contains(got, "Unavailable") || !strings.Contains(got, "workspace.calendar-feed:read") { + t.Fatalf("URL detail = %q, want clear missing-scope message", got) + } + if strings.Contains(got, "must-not-be-used") { + t.Fatalf("URL detail synthesized a fallback feed: %q", got) + } + } +} + func TestSetRequiresSemesterID(t *testing.T) { for _, args := range [][]string{ {"999999"}, diff --git a/internal/cmd/homework/homework.go b/internal/cmd/homework/homework.go index a550005..1afde1a 100644 --- a/internal/cmd/homework/homework.go +++ b/internal/cmd/homework/homework.go @@ -237,7 +237,7 @@ func loadSubscribedSections(cmd *cobra.Command) ([]map[string]any, error) { } } - data, err = api.ParseResponseRaw(c.GetSubscribedHomeworks(api.Ctx())) + data, err = api.ParseResponseRaw(c.GetSubscribedHomeworks(api.Ctx(), nil)) if err != nil { return nil, fmt.Errorf("could not load subscribed sections: %w", err) } @@ -386,7 +386,7 @@ func runMyHomeworkList(cmd *cobra.Command, opts myHomeworkListOpts) error { } } else { // All subscribed sections — use the combined endpoint - data, err = api.ParseResponseRaw(c.GetSubscribedHomeworks(api.Ctx())) + data, err = api.ParseResponseRaw(c.GetSubscribedHomeworks(api.Ctx(), nil)) if err != nil { return err } @@ -550,7 +550,7 @@ func fetchHomeworkPickList(cmd *cobra.Command, opts myHomeworkListOpts) ([]map[s if err != nil { return nil, err } - data, err := api.ParseResponseRaw(c.GetSubscribedHomeworks(api.Ctx())) + data, err := api.ParseResponseRaw(c.GetSubscribedHomeworks(api.Ctx(), nil)) if err != nil { return nil, err } diff --git a/internal/cmd/me/me.go b/internal/cmd/me/me.go index 7e0530c..e848f12 100644 --- a/internal/cmd/me/me.go +++ b/internal/cmd/me/me.go @@ -29,15 +29,18 @@ func NewCmdProfile() *cobra.Command { if err != nil { return err } - return output.OutputDetail(data, []output.FieldDef{ - {Key: "id", Label: "ID"}, - {Key: "name", Label: "Name"}, - {Key: "email", Label: "Email"}, - {Key: "username", Label: "Username"}, - {Key: "isAdmin", Label: "Admin"}, - }, "Profile") + return output.OutputDetail(data, profileFields(), "Profile") }, } return cmd } + +func profileFields() []output.FieldDef { + return []output.FieldDef{ + {Key: "id", Label: "ID"}, + {Key: "name", Label: "Name"}, + {Key: "email", Label: "Email"}, + {Key: "username", Label: "Username"}, + } +} diff --git a/internal/cmd/me/me_test.go b/internal/cmd/me/me_test.go new file mode 100644 index 0000000..b9ea61e --- /dev/null +++ b/internal/cmd/me/me_test.go @@ -0,0 +1,16 @@ +package me + +import "testing" + +func TestProfileFieldsPreserveEmailWithoutNullableAdminStatus(t *testing.T) { + keys := make(map[string]bool) + for _, field := range profileFields() { + keys[field.Key] = true + } + if !keys["email"] { + t.Fatal("human profile output must include email") + } + if keys["isAdmin"] { + t.Fatal("human profile output must not present nullable OAuth isAdmin") + } +} diff --git a/internal/openapi/client.gen.go b/internal/openapi/client.gen.go index c20adfa..aa82f94 100644 --- a/internal/openapi/client.gen.go +++ b/internal/openapi/client.gen.go @@ -23,6 +23,60 @@ const ( SessionCookieScopes = "sessionCookie.Scopes" ) +// Defines values for AccountClientActivityResponseSchemaItemsChannel. +const ( + Auth AccountClientActivityResponseSchemaItemsChannel = "auth" + Graphql AccountClientActivityResponseSchemaItemsChannel = "graphql" + Mcp AccountClientActivityResponseSchemaItemsChannel = "mcp" + Rest AccountClientActivityResponseSchemaItemsChannel = "rest" + System AccountClientActivityResponseSchemaItemsChannel = "system" + Web AccountClientActivityResponseSchemaItemsChannel = "web" + Webhook AccountClientActivityResponseSchemaItemsChannel = "webhook" +) + +// Valid indicates whether the value is a known member of the AccountClientActivityResponseSchemaItemsChannel enum. +func (e AccountClientActivityResponseSchemaItemsChannel) Valid() bool { + switch e { + case Auth: + return true + case Graphql: + return true + case Mcp: + return true + case Rest: + return true + case System: + return true + case Web: + return true + case Webhook: + return true + default: + return false + } +} + +// Defines values for AccountClientActivityResponseSchemaItemsOutcome. +const ( + Denied AccountClientActivityResponseSchemaItemsOutcome = "denied" + Failure AccountClientActivityResponseSchemaItemsOutcome = "failure" + Success AccountClientActivityResponseSchemaItemsOutcome = "success" +) + +// Valid indicates whether the value is a known member of the AccountClientActivityResponseSchemaItemsOutcome enum. +func (e AccountClientActivityResponseSchemaItemsOutcome) Valid() bool { + switch e { + case Denied: + return true + case Failure: + return true + case Success: + return true + default: + return false + } +} + // Defines values for AdminCommentsResponseSchemaDataStatus. const ( AdminCommentsResponseSchemaDataStatusActive AdminCommentsResponseSchemaDataStatus = "active" @@ -933,6 +987,7 @@ func (e HomeworkUpdateRequestSchemaSubmissionStartAt1) Valid() bool { const ( HomeworksListResponseSchemaAuditLogsActionCreated HomeworksListResponseSchemaAuditLogsAction = "created" HomeworksListResponseSchemaAuditLogsActionDeleted HomeworksListResponseSchemaAuditLogsAction = "deleted" + HomeworksListResponseSchemaAuditLogsActionUpdated HomeworksListResponseSchemaAuditLogsAction = "updated" ) // Valid indicates whether the value is a known member of the HomeworksListResponseSchemaAuditLogsAction enum. @@ -942,6 +997,8 @@ func (e HomeworksListResponseSchemaAuditLogsAction) Valid() bool { return true case HomeworksListResponseSchemaAuditLogsActionDeleted: return true + case HomeworksListResponseSchemaAuditLogsActionUpdated: + return true default: return false } @@ -980,24 +1037,6 @@ func (e OauthTokenResponseSchemaTokenType) Valid() bool { } } -// Defines values for SubscribedHomeworksResponseSchemaAuditLogsAction. -const ( - SubscribedHomeworksResponseSchemaAuditLogsActionCreated SubscribedHomeworksResponseSchemaAuditLogsAction = "created" - SubscribedHomeworksResponseSchemaAuditLogsActionDeleted SubscribedHomeworksResponseSchemaAuditLogsAction = "deleted" -) - -// Valid indicates whether the value is a known member of the SubscribedHomeworksResponseSchemaAuditLogsAction enum. -func (e SubscribedHomeworksResponseSchemaAuditLogsAction) Valid() bool { - switch e { - case SubscribedHomeworksResponseSchemaAuditLogsActionCreated: - return true - case SubscribedHomeworksResponseSchemaAuditLogsActionDeleted: - return true - default: - return false - } -} - // Defines values for TodoBatchDeleteResponseSchemaResults0Success. const ( TodoBatchDeleteResponseSchemaResults0SuccessTrue TodoBatchDeleteResponseSchemaResults0Success = true @@ -1342,19 +1381,19 @@ func (e ListAdminDescriptionsParamsHasContent) Valid() bool { // Defines values for ListAdminHomeworksParamsStatus. const ( - Active ListAdminHomeworksParamsStatus = "active" - All ListAdminHomeworksParamsStatus = "all" - Deleted ListAdminHomeworksParamsStatus = "deleted" + ListAdminHomeworksParamsStatusActive ListAdminHomeworksParamsStatus = "active" + ListAdminHomeworksParamsStatusAll ListAdminHomeworksParamsStatus = "all" + ListAdminHomeworksParamsStatusDeleted ListAdminHomeworksParamsStatus = "deleted" ) // Valid indicates whether the value is a known member of the ListAdminHomeworksParamsStatus enum. func (e ListAdminHomeworksParamsStatus) Valid() bool { switch e { - case Active: + case ListAdminHomeworksParamsStatusActive: return true - case All: + case ListAdminHomeworksParamsStatusAll: return true - case Deleted: + case ListAdminHomeworksParamsStatusDeleted: return true default: return false @@ -1918,6 +1957,25 @@ type UnderscoreUnderscoreSchema1 struct { Visibility string `json:"visibility"` } +// AccountClientActivityResponseSchema defines model for accountClientActivityResponseSchema. +type AccountClientActivityResponseSchema struct { + Items []struct { + Action string `json:"action"` + Channel AccountClientActivityResponseSchemaItemsChannel `json:"channel"` + CreatedAt time.Time `json:"createdAt"` + Id string `json:"id"` + Outcome AccountClientActivityResponseSchemaItemsOutcome `json:"outcome"` + TargetType *string `json:"targetType"` + } `json:"items"` + NextCursor *string `json:"nextCursor"` +} + +// AccountClientActivityResponseSchemaItemsChannel defines model for AccountClientActivityResponseSchema.Items.Channel. +type AccountClientActivityResponseSchemaItemsChannel string + +// AccountClientActivityResponseSchemaItemsOutcome defines model for AccountClientActivityResponseSchema.Items.Outcome. +type AccountClientActivityResponseSchemaItemsOutcome string + // AdminCommentsResponseSchema defines model for adminCommentsResponseSchema. type AdminCommentsResponseSchema struct { Data []struct { @@ -2611,16 +2669,14 @@ type CalendarSubscriptionAppendResponseSchema struct { AddedCount int `json:"addedCount"` AlreadySubscribedCount int `json:"alreadySubscribedCount"` Subscription *struct { - CalendarPath string `json:"calendarPath"` - CalendarUrl string `json:"calendarUrl"` - Note string `json:"note"` - Sections []struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` + Note string `json:"note"` + Sections []struct { + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` Campus *struct { Code *string `json:"code"` Id int `json:"id"` - JwId *int `json:"jwId"` + JwId int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -2630,34 +2686,44 @@ type CalendarSubscriptionAppendResponseSchema struct { Code string `json:"code"` Course struct { Category *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"category"` CategoryId *int `json:"categoryId"` ClassType *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classType"` ClassTypeId *int `json:"classTypeId"` Classify *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classify"` ClassifyId *int `json:"classifyId"` Code string `json:"code"` EducationLevel *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"educationLevel"` EducationLevelId *int `json:"educationLevelId"` Gradation *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"gradation"` GradationId *int `json:"gradationId"` Id int `json:"id"` @@ -2667,9 +2733,11 @@ type CalendarSubscriptionAppendResponseSchema struct { NamePrimary string `json:"namePrimary"` NameSecondary *string `json:"nameSecondary"` Type *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"type"` TypeId *int `json:"typeId"` } `json:"course"` @@ -2689,6 +2757,7 @@ type CalendarSubscriptionAppendResponseSchema struct { Code string `json:"code"` Id int `json:"id"` IsCollege *bool `json:"isCollege"` + JwId *int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -2696,10 +2765,10 @@ type CalendarSubscriptionAppendResponseSchema struct { } `json:"openDepartment"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -2707,26 +2776,19 @@ type CalendarSubscriptionAppendResponseSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` TeachLanguageId *int `json:"teachLanguageId"` Teachers []struct { - Address *string `json:"address"` - Code *string `json:"code"` - DepartmentId *int `json:"departmentId"` - Email *string `json:"email"` - Id int `json:"id"` - Mobile *string `json:"mobile"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - NamePrimary string `json:"namePrimary"` - NameSecondary *string `json:"nameSecondary"` - PersonId *int `json:"personId"` - TeacherId *int `json:"teacherId"` - TeacherTitleId *int `json:"teacherTitleId"` - Telephone *string `json:"telephone"` + Code *string `json:"code"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + PersonId *int `json:"personId"` } `json:"teachers"` TestPeriods *float32 `json:"testPeriods"` TheoryPeriods *float32 `json:"theoryPeriods"` @@ -2766,12 +2828,12 @@ type CalendarSubscriptionBatchResponseSchema struct { MatchedSectionIds []int `json:"matchedSectionIds"` RemovedCount int `json:"removedCount"` Sections []struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` Campus *struct { Code *string `json:"code"` Id int `json:"id"` - JwId *int `json:"jwId"` + JwId int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -2781,34 +2843,44 @@ type CalendarSubscriptionBatchResponseSchema struct { Code string `json:"code"` Course struct { Category *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"category"` CategoryId *int `json:"categoryId"` ClassType *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classType"` ClassTypeId *int `json:"classTypeId"` Classify *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classify"` ClassifyId *int `json:"classifyId"` Code string `json:"code"` EducationLevel *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"educationLevel"` EducationLevelId *int `json:"educationLevelId"` Gradation *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"gradation"` GradationId *int `json:"gradationId"` Id int `json:"id"` @@ -2818,9 +2890,11 @@ type CalendarSubscriptionBatchResponseSchema struct { NamePrimary string `json:"namePrimary"` NameSecondary *string `json:"nameSecondary"` Type *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"type"` TypeId *int `json:"typeId"` } `json:"course"` @@ -2840,6 +2914,7 @@ type CalendarSubscriptionBatchResponseSchema struct { Code string `json:"code"` Id int `json:"id"` IsCollege *bool `json:"isCollege"` + JwId *int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -2847,10 +2922,10 @@ type CalendarSubscriptionBatchResponseSchema struct { } `json:"openDepartment"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -2858,26 +2933,19 @@ type CalendarSubscriptionBatchResponseSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` TeachLanguageId *int `json:"teachLanguageId"` Teachers []struct { - Address *string `json:"address"` - Code *string `json:"code"` - DepartmentId *int `json:"departmentId"` - Email *string `json:"email"` - Id int `json:"id"` - Mobile *string `json:"mobile"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - NamePrimary string `json:"namePrimary"` - NameSecondary *string `json:"nameSecondary"` - PersonId *int `json:"personId"` - TeacherId *int `json:"teacherId"` - TeacherTitleId *int `json:"teacherTitleId"` - Telephone *string `json:"telephone"` + Code *string `json:"code"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + PersonId *int `json:"personId"` } `json:"teachers"` TestPeriods *float32 `json:"testPeriods"` TheoryPeriods *float32 `json:"theoryPeriods"` @@ -2889,16 +2957,14 @@ type CalendarSubscriptionBatchResponseSchema struct { NameCn *string `json:"nameCn"` } `json:"semester"` Subscription *struct { - CalendarPath string `json:"calendarPath"` - CalendarUrl string `json:"calendarUrl"` - Note string `json:"note"` - Sections []struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` + Note string `json:"note"` + Sections []struct { + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` Campus *struct { Code *string `json:"code"` Id int `json:"id"` - JwId *int `json:"jwId"` + JwId int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -2908,34 +2974,44 @@ type CalendarSubscriptionBatchResponseSchema struct { Code string `json:"code"` Course struct { Category *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"category"` CategoryId *int `json:"categoryId"` ClassType *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classType"` ClassTypeId *int `json:"classTypeId"` Classify *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classify"` ClassifyId *int `json:"classifyId"` Code string `json:"code"` EducationLevel *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"educationLevel"` EducationLevelId *int `json:"educationLevelId"` Gradation *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"gradation"` GradationId *int `json:"gradationId"` Id int `json:"id"` @@ -2945,9 +3021,11 @@ type CalendarSubscriptionBatchResponseSchema struct { NamePrimary string `json:"namePrimary"` NameSecondary *string `json:"nameSecondary"` Type *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"type"` TypeId *int `json:"typeId"` } `json:"course"` @@ -2967,6 +3045,7 @@ type CalendarSubscriptionBatchResponseSchema struct { Code string `json:"code"` Id int `json:"id"` IsCollege *bool `json:"isCollege"` + JwId *int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -2974,10 +3053,10 @@ type CalendarSubscriptionBatchResponseSchema struct { } `json:"openDepartment"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -2985,26 +3064,19 @@ type CalendarSubscriptionBatchResponseSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` TeachLanguageId *int `json:"teachLanguageId"` Teachers []struct { - Address *string `json:"address"` - Code *string `json:"code"` - DepartmentId *int `json:"departmentId"` - Email *string `json:"email"` - Id int `json:"id"` - Mobile *string `json:"mobile"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - NamePrimary string `json:"namePrimary"` - NameSecondary *string `json:"nameSecondary"` - PersonId *int `json:"personId"` - TeacherId *int `json:"teacherId"` - TeacherTitleId *int `json:"teacherTitleId"` - Telephone *string `json:"telephone"` + Code *string `json:"code"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + PersonId *int `json:"personId"` } `json:"teachers"` TestPeriods *float32 `json:"testPeriods"` TheoryPeriods *float32 `json:"theoryPeriods"` @@ -3030,16 +3102,14 @@ type CalendarSubscriptionCreateRequestSchema struct { // CalendarSubscriptionCreateResponseSchema defines model for calendarSubscriptionCreateResponseSchema. type CalendarSubscriptionCreateResponseSchema struct { Subscription *struct { - CalendarPath string `json:"calendarPath"` - CalendarUrl string `json:"calendarUrl"` - Note string `json:"note"` - Sections []struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` + Note string `json:"note"` + Sections []struct { + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` Campus *struct { Code *string `json:"code"` Id int `json:"id"` - JwId *int `json:"jwId"` + JwId int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -3049,34 +3119,44 @@ type CalendarSubscriptionCreateResponseSchema struct { Code string `json:"code"` Course struct { Category *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"category"` CategoryId *int `json:"categoryId"` ClassType *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classType"` ClassTypeId *int `json:"classTypeId"` Classify *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classify"` ClassifyId *int `json:"classifyId"` Code string `json:"code"` EducationLevel *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"educationLevel"` EducationLevelId *int `json:"educationLevelId"` Gradation *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"gradation"` GradationId *int `json:"gradationId"` Id int `json:"id"` @@ -3086,9 +3166,11 @@ type CalendarSubscriptionCreateResponseSchema struct { NamePrimary string `json:"namePrimary"` NameSecondary *string `json:"nameSecondary"` Type *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"type"` TypeId *int `json:"typeId"` } `json:"course"` @@ -3108,6 +3190,7 @@ type CalendarSubscriptionCreateResponseSchema struct { Code string `json:"code"` Id int `json:"id"` IsCollege *bool `json:"isCollege"` + JwId *int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -3115,10 +3198,10 @@ type CalendarSubscriptionCreateResponseSchema struct { } `json:"openDepartment"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -3126,26 +3209,19 @@ type CalendarSubscriptionCreateResponseSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` TeachLanguageId *int `json:"teachLanguageId"` Teachers []struct { - Address *string `json:"address"` - Code *string `json:"code"` - DepartmentId *int `json:"departmentId"` - Email *string `json:"email"` - Id int `json:"id"` - Mobile *string `json:"mobile"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - NamePrimary string `json:"namePrimary"` - NameSecondary *string `json:"nameSecondary"` - PersonId *int `json:"personId"` - TeacherId *int `json:"teacherId"` - TeacherTitleId *int `json:"teacherTitleId"` - Telephone *string `json:"telephone"` + Code *string `json:"code"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + PersonId *int `json:"personId"` } `json:"teachers"` TestPeriods *float32 `json:"testPeriods"` TheoryPeriods *float32 `json:"theoryPeriods"` @@ -3159,12 +3235,12 @@ type CalendarSubscriptionCreateResponseSchema struct { type CalendarSubscriptionImportResponseSchema struct { AddedCount int `json:"addedCount"` AddedSections []struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` Campus *struct { Code *string `json:"code"` Id int `json:"id"` - JwId *int `json:"jwId"` + JwId int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -3174,34 +3250,44 @@ type CalendarSubscriptionImportResponseSchema struct { Code string `json:"code"` Course struct { Category *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"category"` CategoryId *int `json:"categoryId"` ClassType *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classType"` ClassTypeId *int `json:"classTypeId"` Classify *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classify"` ClassifyId *int `json:"classifyId"` Code string `json:"code"` EducationLevel *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"educationLevel"` EducationLevelId *int `json:"educationLevelId"` Gradation *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"gradation"` GradationId *int `json:"gradationId"` Id int `json:"id"` @@ -3211,9 +3297,11 @@ type CalendarSubscriptionImportResponseSchema struct { NamePrimary string `json:"namePrimary"` NameSecondary *string `json:"nameSecondary"` Type *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"type"` TypeId *int `json:"typeId"` } `json:"course"` @@ -3233,6 +3321,7 @@ type CalendarSubscriptionImportResponseSchema struct { Code string `json:"code"` Id int `json:"id"` IsCollege *bool `json:"isCollege"` + JwId *int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -3240,10 +3329,10 @@ type CalendarSubscriptionImportResponseSchema struct { } `json:"openDepartment"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -3251,26 +3340,19 @@ type CalendarSubscriptionImportResponseSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` TeachLanguageId *int `json:"teachLanguageId"` Teachers []struct { - Address *string `json:"address"` - Code *string `json:"code"` - DepartmentId *int `json:"departmentId"` - Email *string `json:"email"` - Id int `json:"id"` - Mobile *string `json:"mobile"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - NamePrimary string `json:"namePrimary"` - NameSecondary *string `json:"nameSecondary"` - PersonId *int `json:"personId"` - TeacherId *int `json:"teacherId"` - TeacherTitleId *int `json:"teacherTitleId"` - Telephone *string `json:"telephone"` + Code *string `json:"code"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + PersonId *int `json:"personId"` } `json:"teachers"` TestPeriods *float32 `json:"testPeriods"` TheoryPeriods *float32 `json:"theoryPeriods"` @@ -3278,12 +3360,12 @@ type CalendarSubscriptionImportResponseSchema struct { } `json:"addedSections"` AlreadySubscribedCount int `json:"alreadySubscribedCount"` AlreadySubscribedSections []struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` Campus *struct { Code *string `json:"code"` Id int `json:"id"` - JwId *int `json:"jwId"` + JwId int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -3293,34 +3375,44 @@ type CalendarSubscriptionImportResponseSchema struct { Code string `json:"code"` Course struct { Category *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - } `json:"category"` - CategoryId *int `json:"categoryId"` - ClassType *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + } `json:"category"` + CategoryId *int `json:"categoryId"` + ClassType *struct { + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classType"` ClassTypeId *int `json:"classTypeId"` Classify *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classify"` ClassifyId *int `json:"classifyId"` Code string `json:"code"` EducationLevel *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"educationLevel"` EducationLevelId *int `json:"educationLevelId"` Gradation *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"gradation"` GradationId *int `json:"gradationId"` Id int `json:"id"` @@ -3330,9 +3422,11 @@ type CalendarSubscriptionImportResponseSchema struct { NamePrimary string `json:"namePrimary"` NameSecondary *string `json:"nameSecondary"` Type *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"type"` TypeId *int `json:"typeId"` } `json:"course"` @@ -3352,6 +3446,7 @@ type CalendarSubscriptionImportResponseSchema struct { Code string `json:"code"` Id int `json:"id"` IsCollege *bool `json:"isCollege"` + JwId *int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -3359,10 +3454,10 @@ type CalendarSubscriptionImportResponseSchema struct { } `json:"openDepartment"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -3370,26 +3465,19 @@ type CalendarSubscriptionImportResponseSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` TeachLanguageId *int `json:"teachLanguageId"` Teachers []struct { - Address *string `json:"address"` - Code *string `json:"code"` - DepartmentId *int `json:"departmentId"` - Email *string `json:"email"` - Id int `json:"id"` - Mobile *string `json:"mobile"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - NamePrimary string `json:"namePrimary"` - NameSecondary *string `json:"nameSecondary"` - PersonId *int `json:"personId"` - TeacherId *int `json:"teacherId"` - TeacherTitleId *int `json:"teacherTitleId"` - Telephone *string `json:"telephone"` + Code *string `json:"code"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + PersonId *int `json:"personId"` } `json:"teachers"` TestPeriods *float32 `json:"testPeriods"` TheoryPeriods *float32 `json:"theoryPeriods"` @@ -3398,12 +3486,12 @@ type CalendarSubscriptionImportResponseSchema struct { AmbiguousCodes []string `json:"ambiguousCodes"` MatchedCodes []string `json:"matchedCodes"` Sections []struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` Campus *struct { Code *string `json:"code"` Id int `json:"id"` - JwId *int `json:"jwId"` + JwId int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -3413,34 +3501,44 @@ type CalendarSubscriptionImportResponseSchema struct { Code string `json:"code"` Course struct { Category *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"category"` CategoryId *int `json:"categoryId"` ClassType *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classType"` ClassTypeId *int `json:"classTypeId"` Classify *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classify"` ClassifyId *int `json:"classifyId"` Code string `json:"code"` EducationLevel *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"educationLevel"` EducationLevelId *int `json:"educationLevelId"` Gradation *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"gradation"` GradationId *int `json:"gradationId"` Id int `json:"id"` @@ -3450,9 +3548,11 @@ type CalendarSubscriptionImportResponseSchema struct { NamePrimary string `json:"namePrimary"` NameSecondary *string `json:"nameSecondary"` Type *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"type"` TypeId *int `json:"typeId"` } `json:"course"` @@ -3472,6 +3572,7 @@ type CalendarSubscriptionImportResponseSchema struct { Code string `json:"code"` Id int `json:"id"` IsCollege *bool `json:"isCollege"` + JwId *int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -3479,10 +3580,10 @@ type CalendarSubscriptionImportResponseSchema struct { } `json:"openDepartment"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -3490,26 +3591,19 @@ type CalendarSubscriptionImportResponseSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` TeachLanguageId *int `json:"teachLanguageId"` Teachers []struct { - Address *string `json:"address"` - Code *string `json:"code"` - DepartmentId *int `json:"departmentId"` - Email *string `json:"email"` - Id int `json:"id"` - Mobile *string `json:"mobile"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - NamePrimary string `json:"namePrimary"` - NameSecondary *string `json:"nameSecondary"` - PersonId *int `json:"personId"` - TeacherId *int `json:"teacherId"` - TeacherTitleId *int `json:"teacherTitleId"` - Telephone *string `json:"telephone"` + Code *string `json:"code"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + PersonId *int `json:"personId"` } `json:"teachers"` TestPeriods *float32 `json:"testPeriods"` TheoryPeriods *float32 `json:"theoryPeriods"` @@ -3521,16 +3615,14 @@ type CalendarSubscriptionImportResponseSchema struct { NameCn *string `json:"nameCn"` } `json:"semester"` Subscription *struct { - CalendarPath string `json:"calendarPath"` - CalendarUrl string `json:"calendarUrl"` - Note string `json:"note"` - Sections []struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` + Note string `json:"note"` + Sections []struct { + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` Campus *struct { Code *string `json:"code"` Id int `json:"id"` - JwId *int `json:"jwId"` + JwId int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -3540,34 +3632,44 @@ type CalendarSubscriptionImportResponseSchema struct { Code string `json:"code"` Course struct { Category *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"category"` CategoryId *int `json:"categoryId"` ClassType *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classType"` ClassTypeId *int `json:"classTypeId"` Classify *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classify"` ClassifyId *int `json:"classifyId"` Code string `json:"code"` EducationLevel *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"educationLevel"` EducationLevelId *int `json:"educationLevelId"` Gradation *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"gradation"` GradationId *int `json:"gradationId"` Id int `json:"id"` @@ -3577,9 +3679,11 @@ type CalendarSubscriptionImportResponseSchema struct { NamePrimary string `json:"namePrimary"` NameSecondary *string `json:"nameSecondary"` Type *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"type"` TypeId *int `json:"typeId"` } `json:"course"` @@ -3599,6 +3703,7 @@ type CalendarSubscriptionImportResponseSchema struct { Code string `json:"code"` Id int `json:"id"` IsCollege *bool `json:"isCollege"` + JwId *int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -3606,10 +3711,10 @@ type CalendarSubscriptionImportResponseSchema struct { } `json:"openDepartment"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -3617,26 +3722,19 @@ type CalendarSubscriptionImportResponseSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` TeachLanguageId *int `json:"teachLanguageId"` Teachers []struct { - Address *string `json:"address"` - Code *string `json:"code"` - DepartmentId *int `json:"departmentId"` - Email *string `json:"email"` - Id int `json:"id"` - Mobile *string `json:"mobile"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - NamePrimary string `json:"namePrimary"` - NameSecondary *string `json:"nameSecondary"` - PersonId *int `json:"personId"` - TeacherId *int `json:"teacherId"` - TeacherTitleId *int `json:"teacherTitleId"` - Telephone *string `json:"telephone"` + Code *string `json:"code"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + PersonId *int `json:"personId"` } `json:"teachers"` TestPeriods *float32 `json:"testPeriods"` TheoryPeriods *float32 `json:"theoryPeriods"` @@ -3671,12 +3769,12 @@ type CalendarSubscriptionQueryResponseSchema struct { MatchedCodes []string `json:"matchedCodes"` MatchedSectionIds []int `json:"matchedSectionIds"` Sections []struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` Campus *struct { Code *string `json:"code"` Id int `json:"id"` - JwId *int `json:"jwId"` + JwId int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -3686,34 +3784,44 @@ type CalendarSubscriptionQueryResponseSchema struct { Code string `json:"code"` Course struct { Category *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"category"` CategoryId *int `json:"categoryId"` ClassType *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classType"` ClassTypeId *int `json:"classTypeId"` Classify *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classify"` ClassifyId *int `json:"classifyId"` Code string `json:"code"` EducationLevel *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"educationLevel"` EducationLevelId *int `json:"educationLevelId"` Gradation *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"gradation"` GradationId *int `json:"gradationId"` Id int `json:"id"` @@ -3723,9 +3831,11 @@ type CalendarSubscriptionQueryResponseSchema struct { NamePrimary string `json:"namePrimary"` NameSecondary *string `json:"nameSecondary"` Type *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"type"` TypeId *int `json:"typeId"` } `json:"course"` @@ -3745,6 +3855,7 @@ type CalendarSubscriptionQueryResponseSchema struct { Code string `json:"code"` Id int `json:"id"` IsCollege *bool `json:"isCollege"` + JwId *int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -3752,10 +3863,10 @@ type CalendarSubscriptionQueryResponseSchema struct { } `json:"openDepartment"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -3763,26 +3874,19 @@ type CalendarSubscriptionQueryResponseSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` TeachLanguageId *int `json:"teachLanguageId"` Teachers []struct { - Address *string `json:"address"` - Code *string `json:"code"` - DepartmentId *int `json:"departmentId"` - Email *string `json:"email"` - Id int `json:"id"` - Mobile *string `json:"mobile"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - NamePrimary string `json:"namePrimary"` - NameSecondary *string `json:"nameSecondary"` - PersonId *int `json:"personId"` - TeacherId *int `json:"teacherId"` - TeacherTitleId *int `json:"teacherTitleId"` - Telephone *string `json:"telephone"` + Code *string `json:"code"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + PersonId *int `json:"personId"` } `json:"teachers"` TestPeriods *float32 `json:"testPeriods"` TheoryPeriods *float32 `json:"theoryPeriods"` @@ -3807,16 +3911,14 @@ type CalendarSubscriptionRemoveRequestSchema struct { // CalendarSubscriptionRemoveResponseSchema defines model for calendarSubscriptionRemoveResponseSchema. type CalendarSubscriptionRemoveResponseSchema struct { Subscription *struct { - CalendarPath string `json:"calendarPath"` - CalendarUrl string `json:"calendarUrl"` - Note string `json:"note"` - Sections []struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` + Note string `json:"note"` + Sections []struct { + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` Campus *struct { Code *string `json:"code"` Id int `json:"id"` - JwId *int `json:"jwId"` + JwId int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -3826,34 +3928,44 @@ type CalendarSubscriptionRemoveResponseSchema struct { Code string `json:"code"` Course struct { Category *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"category"` CategoryId *int `json:"categoryId"` ClassType *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classType"` ClassTypeId *int `json:"classTypeId"` Classify *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classify"` ClassifyId *int `json:"classifyId"` Code string `json:"code"` EducationLevel *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"educationLevel"` EducationLevelId *int `json:"educationLevelId"` Gradation *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"gradation"` GradationId *int `json:"gradationId"` Id int `json:"id"` @@ -3863,9 +3975,11 @@ type CalendarSubscriptionRemoveResponseSchema struct { NamePrimary string `json:"namePrimary"` NameSecondary *string `json:"nameSecondary"` Type *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"type"` TypeId *int `json:"typeId"` } `json:"course"` @@ -3885,6 +3999,7 @@ type CalendarSubscriptionRemoveResponseSchema struct { Code string `json:"code"` Id int `json:"id"` IsCollege *bool `json:"isCollege"` + JwId *int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -3892,10 +4007,10 @@ type CalendarSubscriptionRemoveResponseSchema struct { } `json:"openDepartment"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -3903,26 +4018,19 @@ type CalendarSubscriptionRemoveResponseSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` TeachLanguageId *int `json:"teachLanguageId"` Teachers []struct { - Address *string `json:"address"` - Code *string `json:"code"` - DepartmentId *int `json:"departmentId"` - Email *string `json:"email"` - Id int `json:"id"` - Mobile *string `json:"mobile"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - NamePrimary string `json:"namePrimary"` - NameSecondary *string `json:"nameSecondary"` - PersonId *int `json:"personId"` - TeacherId *int `json:"teacherId"` - TeacherTitleId *int `json:"teacherTitleId"` - Telephone *string `json:"telephone"` + Code *string `json:"code"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + PersonId *int `json:"personId"` } `json:"teachers"` TestPeriods *float32 `json:"testPeriods"` TheoryPeriods *float32 `json:"theoryPeriods"` @@ -4250,9 +4358,12 @@ type CompactOverviewResponseSchema struct { Items []struct { EndTime *int `json:"endTime"` ExamBatch *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"examBatch"` ExamBatchId *int `json:"examBatchId"` ExamDate *time.Time `json:"examDate"` @@ -4268,10 +4379,10 @@ type CompactOverviewResponseSchema struct { Id int `json:"id"` JwId int `json:"jwId"` Section struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` - CampusId *int `json:"campusId"` - Code string `json:"code"` + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` + CampusId *int `json:"campusId"` + Code string `json:"code"` Course struct { CategoryId *int `json:"categoryId"` ClassTypeId *int `json:"classTypeId"` @@ -4301,10 +4412,10 @@ type CompactOverviewResponseSchema struct { MachinePeriods *float32 `json:"machinePeriods"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -4312,7 +4423,6 @@ type CompactOverviewResponseSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` @@ -4365,10 +4475,10 @@ type CompactOverviewResponseSchema struct { PublishedAt *time.Time `json:"publishedAt"` RequiresTeam bool `json:"requiresTeam"` Section struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` - CampusId *int `json:"campusId"` - Code string `json:"code"` + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` + CampusId *int `json:"campusId"` + Code string `json:"code"` Course struct { CategoryId *int `json:"categoryId"` ClassTypeId *int `json:"classTypeId"` @@ -4398,10 +4508,10 @@ type CompactOverviewResponseSchema struct { MachinePeriods *float32 `json:"machinePeriods"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -4409,7 +4519,6 @@ type CompactOverviewResponseSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` @@ -4443,13 +4552,13 @@ type CompactOverviewResponseSchema struct { Experiment *string `json:"experiment"` Id int `json:"id"` LessonType *string `json:"lessonType"` - Periods int `json:"periods"` + Periods float32 `json:"periods"` Room *struct { Building *struct { Campus *struct { Code *string `json:"code"` Id int `json:"id"` - JwId *int `json:"jwId"` + JwId int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -4490,21 +4599,21 @@ type CompactOverviewResponseSchema struct { } `json:"room"` RoomId *int `json:"roomId"` ScheduleGroup struct { - ActualPeriods int `json:"actualPeriods"` - Id int `json:"id"` - IsDefault bool `json:"isDefault"` - JwId int `json:"jwId"` - LimitCount int `json:"limitCount"` - No int `json:"no"` - SectionId int `json:"sectionId"` - StdCount int `json:"stdCount"` + ActualPeriods float32 `json:"actualPeriods"` + Id int `json:"id"` + IsDefault bool `json:"isDefault"` + JwId int `json:"jwId"` + LimitCount int `json:"limitCount"` + No int `json:"no"` + SectionId int `json:"sectionId"` + StdCount int `json:"stdCount"` } `json:"scheduleGroup"` ScheduleGroupId int `json:"scheduleGroupId"` Section struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` - CampusId *int `json:"campusId"` - Code string `json:"code"` + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` + CampusId *int `json:"campusId"` + Code string `json:"code"` Course struct { CategoryId *int `json:"categoryId"` ClassTypeId *int `json:"classTypeId"` @@ -4534,10 +4643,10 @@ type CompactOverviewResponseSchema struct { MachinePeriods *float32 `json:"machinePeriods"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -4545,7 +4654,6 @@ type CompactOverviewResponseSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` @@ -4558,9 +4666,6 @@ type CompactOverviewResponseSchema struct { StartTime string `json:"startTime"` StartUnit int `json:"startUnit"` Teachers []struct { - UnderscoreCount *struct { - Sections int `json:"sections"` - } `json:"_count,omitempty"` Code *string `json:"code"` Department *struct { Code string `json:"code"` @@ -4572,22 +4677,12 @@ type CompactOverviewResponseSchema struct { NameSecondary *string `json:"nameSecondary"` } `json:"department"` Id int `json:"id"` + JwId int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` NameSecondary *string `json:"nameSecondary"` PersonId *int `json:"personId"` - TeacherId *int `json:"teacherId"` - TeacherTitle *struct { - Code string `json:"code"` - Enabled *bool `json:"enabled"` - Id int `json:"id"` - JwId int `json:"jwId"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - NamePrimary string `json:"namePrimary"` - NameSecondary *string `json:"nameSecondary"` - } `json:"teacherTitle,omitempty"` } `json:"teachers"` WeekIndex int `json:"weekIndex"` Weekday int `json:"weekday"` @@ -4627,50 +4722,67 @@ type CompactOverviewResponseSchemaTodosItemsPriority string // CourseDetailSchema defines model for courseDetailSchema. type CourseDetailSchema struct { + UnderscoreCount struct { + Sections int `json:"sections"` + } `json:"_count"` Category *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"category"` CategoryId *int `json:"categoryId"` ClassType *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classType"` ClassTypeId *int `json:"classTypeId"` Classify *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classify"` ClassifyId *int `json:"classifyId"` Code string `json:"code"` EducationLevel *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"educationLevel"` EducationLevelId *int `json:"educationLevelId"` Gradation *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"gradation"` - GradationId *int `json:"gradationId"` - Id int `json:"id"` - JwId int `json:"jwId"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - Sections []struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` + GradationId *int `json:"gradationId"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + Sections []struct { + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` Campus *struct { - Code *string `json:"code"` - Id int `json:"id"` - JwId *int `json:"jwId"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Code *string `json:"code"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"campus"` CampusId *int `json:"campusId"` Code string `json:"code"` @@ -4688,10 +4800,10 @@ type CourseDetailSchema struct { MachinePeriods *float32 `json:"machinePeriods"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -4699,33 +4811,30 @@ type CourseDetailSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` TeachLanguageId *int `json:"teachLanguageId"` Teachers []struct { - Address *string `json:"address"` - Code *string `json:"code"` - DepartmentId *int `json:"departmentId"` - Email *string `json:"email"` - Id int `json:"id"` - Mobile *string `json:"mobile"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - PersonId *int `json:"personId"` - TeacherId *int `json:"teacherId"` - TeacherTitleId *int `json:"teacherTitleId"` - Telephone *string `json:"telephone"` + Code *string `json:"code"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + PersonId *int `json:"personId"` } `json:"teachers"` TestPeriods *float32 `json:"testPeriods"` TheoryPeriods *float32 `json:"theoryPeriods"` TimesPerWeek *int `json:"timesPerWeek"` } `json:"sections"` Type *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"type"` TypeId *int `json:"typeId"` } @@ -4733,16 +4842,19 @@ type CourseDetailSchema struct { // CurrentCalendarSubscriptionResponseSchema defines model for currentCalendarSubscriptionResponseSchema. type CurrentCalendarSubscriptionResponseSchema struct { Subscription *struct { - CalendarPath string `json:"calendarPath"` - CalendarUrl string `json:"calendarUrl"` - Note string `json:"note"` - Sections []struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` + // CalendarPath Private calendar feed path. Populated only for OAuth tokens with workspace.calendar-feed:read. + CalendarPath *string `json:"calendarPath"` + + // CalendarUrl Private calendar feed URL. Populated only for OAuth tokens with workspace.calendar-feed:read. + CalendarUrl *string `json:"calendarUrl"` + Note string `json:"note"` + Sections []struct { + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` Campus *struct { Code *string `json:"code"` Id int `json:"id"` - JwId *int `json:"jwId"` + JwId int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -4752,34 +4864,44 @@ type CurrentCalendarSubscriptionResponseSchema struct { Code string `json:"code"` Course struct { Category *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"category"` CategoryId *int `json:"categoryId"` ClassType *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classType"` ClassTypeId *int `json:"classTypeId"` Classify *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classify"` ClassifyId *int `json:"classifyId"` Code string `json:"code"` EducationLevel *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"educationLevel"` EducationLevelId *int `json:"educationLevelId"` Gradation *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"gradation"` GradationId *int `json:"gradationId"` Id int `json:"id"` @@ -4789,9 +4911,11 @@ type CurrentCalendarSubscriptionResponseSchema struct { NamePrimary string `json:"namePrimary"` NameSecondary *string `json:"nameSecondary"` Type *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"type"` TypeId *int `json:"typeId"` } `json:"course"` @@ -4811,6 +4935,7 @@ type CurrentCalendarSubscriptionResponseSchema struct { Code string `json:"code"` Id int `json:"id"` IsCollege *bool `json:"isCollege"` + JwId *int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -4818,10 +4943,10 @@ type CurrentCalendarSubscriptionResponseSchema struct { } `json:"openDepartment"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -4829,26 +4954,19 @@ type CurrentCalendarSubscriptionResponseSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` TeachLanguageId *int `json:"teachLanguageId"` Teachers []struct { - Address *string `json:"address"` - Code *string `json:"code"` - DepartmentId *int `json:"departmentId"` - Email *string `json:"email"` - Id int `json:"id"` - Mobile *string `json:"mobile"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - NamePrimary string `json:"namePrimary"` - NameSecondary *string `json:"nameSecondary"` - PersonId *int `json:"personId"` - TeacherId *int `json:"teacherId"` - TeacherTitleId *int `json:"teacherTitleId"` - Telephone *string `json:"telephone"` + Code *string `json:"code"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + PersonId *int `json:"personId"` } `json:"teachers"` TestPeriods *float32 `json:"testPeriods"` TheoryPeriods *float32 `json:"theoryPeriods"` @@ -5235,10 +5353,10 @@ type HomeworkCreateResponseSchema struct { PublishedAt *time.Time `json:"publishedAt"` RequiresTeam bool `json:"requiresTeam"` Section struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` - CampusId *int `json:"campusId"` - Code string `json:"code"` + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` + CampusId *int `json:"campusId"` + Code string `json:"code"` Course struct { CategoryId *int `json:"categoryId"` ClassTypeId *int `json:"classTypeId"` @@ -5268,10 +5386,10 @@ type HomeworkCreateResponseSchema struct { MachinePeriods *float32 `json:"machinePeriods"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -5279,7 +5397,6 @@ type HomeworkCreateResponseSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` @@ -5388,10 +5505,10 @@ type HomeworkUpdateResponseSchema struct { PublishedAt *time.Time `json:"publishedAt"` RequiresTeam bool `json:"requiresTeam"` Section struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` - CampusId *int `json:"campusId"` - Code string `json:"code"` + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` + CampusId *int `json:"campusId"` + Code string `json:"code"` Course struct { CategoryId *int `json:"categoryId"` ClassTypeId *int `json:"classTypeId"` @@ -5421,10 +5538,10 @@ type HomeworkUpdateResponseSchema struct { MachinePeriods *float32 `json:"machinePeriods"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -5432,7 +5549,6 @@ type HomeworkUpdateResponseSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` @@ -5472,9 +5588,9 @@ type HomeworksListResponseSchema struct { HomeworkId *string `json:"homeworkId"` Id string `json:"id"` SectionId int `json:"sectionId"` - TitleSnapshot string `json:"titleSnapshot"` + TitleSnapshot *string `json:"titleSnapshot"` } `json:"auditLogs"` - Homeworks []struct { + Data []struct { CommentCount int `json:"commentCount"` Completion *struct { CompletedAt time.Time `json:"completedAt"` @@ -5512,10 +5628,10 @@ type HomeworksListResponseSchema struct { PublishedAt *time.Time `json:"publishedAt"` RequiresTeam bool `json:"requiresTeam"` Section struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` - CampusId *int `json:"campusId"` - Code string `json:"code"` + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` + CampusId *int `json:"campusId"` + Code string `json:"code"` Course struct { CategoryId *int `json:"categoryId"` ClassTypeId *int `json:"classTypeId"` @@ -5545,10 +5661,10 @@ type HomeworksListResponseSchema struct { MachinePeriods *float32 `json:"machinePeriods"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -5556,7 +5672,6 @@ type HomeworksListResponseSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` @@ -5577,7 +5692,13 @@ type HomeworksListResponseSchema struct { Username *string `json:"username"` } `json:"updatedBy"` UpdatedById *string `json:"updatedById"` - } `json:"homeworks"` + } `json:"data"` + Pagination struct { + Page int `json:"page"` + PageSize int `json:"pageSize"` + Total int `json:"total"` + TotalPages int `json:"totalPages"` + } `json:"pagination"` Viewer struct { Image *string `json:"image"` IsAdmin bool `json:"isAdmin"` @@ -5627,12 +5748,12 @@ type MatchSectionCodesRequestSchema_SemesterId struct { type MatchSectionCodesResponseSchema struct { MatchedCodes []string `json:"matchedCodes"` Sections []struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` Campus *struct { Code *string `json:"code"` Id int `json:"id"` - JwId *int `json:"jwId"` + JwId int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -5642,34 +5763,44 @@ type MatchSectionCodesResponseSchema struct { Code string `json:"code"` Course struct { Category *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"category"` CategoryId *int `json:"categoryId"` ClassType *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classType"` ClassTypeId *int `json:"classTypeId"` Classify *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classify"` ClassifyId *int `json:"classifyId"` Code string `json:"code"` EducationLevel *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"educationLevel"` EducationLevelId *int `json:"educationLevelId"` Gradation *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"gradation"` GradationId *int `json:"gradationId"` Id int `json:"id"` @@ -5679,9 +5810,11 @@ type MatchSectionCodesResponseSchema struct { NamePrimary string `json:"namePrimary"` NameSecondary *string `json:"nameSecondary"` Type *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"type"` TypeId *int `json:"typeId"` } `json:"course"` @@ -5701,6 +5834,7 @@ type MatchSectionCodesResponseSchema struct { Code string `json:"code"` Id int `json:"id"` IsCollege *bool `json:"isCollege"` + JwId *int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -5708,10 +5842,10 @@ type MatchSectionCodesResponseSchema struct { } `json:"openDepartment"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -5719,26 +5853,19 @@ type MatchSectionCodesResponseSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` TeachLanguageId *int `json:"teachLanguageId"` Teachers []struct { - Address *string `json:"address"` - Code *string `json:"code"` - DepartmentId *int `json:"departmentId"` - Email *string `json:"email"` - Id int `json:"id"` - Mobile *string `json:"mobile"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - NamePrimary string `json:"namePrimary"` - NameSecondary *string `json:"nameSecondary"` - PersonId *int `json:"personId"` - TeacherId *int `json:"teacherId"` - TeacherTitleId *int `json:"teacherTitleId"` - Telephone *string `json:"telephone"` + Code *string `json:"code"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + PersonId *int `json:"personId"` } `json:"teachers"` TestPeriods *float32 `json:"testPeriods"` TheoryPeriods *float32 `json:"theoryPeriods"` @@ -5760,7 +5887,7 @@ type MeResponseSchema struct { Email *string `json:"email"` Id string `json:"id"` Image *string `json:"image"` - IsAdmin bool `json:"isAdmin"` + IsAdmin *bool `json:"isAdmin"` Name *string `json:"name"` UpdatedAt time.Time `json:"updatedAt"` Username *string `json:"username"` @@ -5770,58 +5897,78 @@ type MeResponseSchema struct { type MetadataResponseSchema struct { Campuses []struct { Buildings []struct { - CampusId *int `json:"campusId"` - Code string `json:"code"` - Id int `json:"id"` - JwId int `json:"jwId"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + CampusId *int `json:"campusId"` + Code string `json:"code"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"buildings"` - Code *string `json:"code"` - Id int `json:"id"` - JwId *int `json:"jwId"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Code *string `json:"code"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"campuses"` ClassTypes []struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classTypes"` CourseCategories []struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"courseCategories"` CourseClassifies []struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"courseClassifies"` CourseGradations []struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"courseGradations"` CourseTypes []struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"courseTypes"` EducationLevels []struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"educationLevels"` ExamModes []struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"examModes"` TeachLanguages []struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"teachLanguages"` } @@ -5922,44 +6069,58 @@ type OpenApiErrorSchema struct { type PaginatedCourseResponseSchema struct { Data []struct { Category *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"category"` CategoryId *int `json:"categoryId"` ClassType *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classType"` ClassTypeId *int `json:"classTypeId"` Classify *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classify"` ClassifyId *int `json:"classifyId"` Code string `json:"code"` EducationLevel *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"educationLevel"` EducationLevelId *int `json:"educationLevelId"` Gradation *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"gradation"` - GradationId *int `json:"gradationId"` - Id int `json:"id"` - JwId int `json:"jwId"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - Type *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + GradationId *int `json:"gradationId"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + Type *struct { + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"type"` TypeId *int `json:"typeId"` } `json:"data"` @@ -5982,13 +6143,13 @@ type PaginatedScheduleResponseSchema struct { Experiment *string `json:"experiment"` Id int `json:"id"` LessonType *string `json:"lessonType"` - Periods int `json:"periods"` + Periods float32 `json:"periods"` Room *struct { Building *struct { Campus *struct { Code *string `json:"code"` Id int `json:"id"` - JwId *int `json:"jwId"` + JwId int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -6029,21 +6190,21 @@ type PaginatedScheduleResponseSchema struct { } `json:"room"` RoomId *int `json:"roomId"` ScheduleGroup struct { - ActualPeriods int `json:"actualPeriods"` - Id int `json:"id"` - IsDefault bool `json:"isDefault"` - JwId int `json:"jwId"` - LimitCount int `json:"limitCount"` - No int `json:"no"` - SectionId int `json:"sectionId"` - StdCount int `json:"stdCount"` + ActualPeriods float32 `json:"actualPeriods"` + Id int `json:"id"` + IsDefault bool `json:"isDefault"` + JwId int `json:"jwId"` + LimitCount int `json:"limitCount"` + No int `json:"no"` + SectionId int `json:"sectionId"` + StdCount int `json:"stdCount"` } `json:"scheduleGroup"` ScheduleGroupId int `json:"scheduleGroupId"` Section struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` - CampusId *int `json:"campusId"` - Code string `json:"code"` + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` + CampusId *int `json:"campusId"` + Code string `json:"code"` Course struct { CategoryId *int `json:"categoryId"` ClassTypeId *int `json:"classTypeId"` @@ -6073,10 +6234,10 @@ type PaginatedScheduleResponseSchema struct { MachinePeriods *float32 `json:"machinePeriods"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -6084,7 +6245,6 @@ type PaginatedScheduleResponseSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` @@ -6097,9 +6257,6 @@ type PaginatedScheduleResponseSchema struct { StartTime string `json:"startTime"` StartUnit int `json:"startUnit"` Teachers []struct { - UnderscoreCount *struct { - Sections int `json:"sections"` - } `json:"_count,omitempty"` Code *string `json:"code"` Department *struct { Code string `json:"code"` @@ -6111,22 +6268,12 @@ type PaginatedScheduleResponseSchema struct { NameSecondary *string `json:"nameSecondary"` } `json:"department"` Id int `json:"id"` + JwId int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` NameSecondary *string `json:"nameSecondary"` PersonId *int `json:"personId"` - TeacherId *int `json:"teacherId"` - TeacherTitle *struct { - Code string `json:"code"` - Enabled *bool `json:"enabled"` - Id int `json:"id"` - JwId int `json:"jwId"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - NamePrimary string `json:"namePrimary"` - NameSecondary *string `json:"nameSecondary"` - } `json:"teacherTitle,omitempty"` } `json:"teachers"` WeekIndex int `json:"weekIndex"` Weekday int `json:"weekday"` @@ -6143,20 +6290,24 @@ type PaginatedScheduleResponseSchema struct { type PaginatedSectionResponseSchema struct { Data []struct { Campus *struct { - Code *string `json:"code"` - Id int `json:"id"` - JwId *int `json:"jwId"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Code *string `json:"code"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"campus"` CampusId *int `json:"campusId"` Code string `json:"code"` Course struct { - Code string `json:"code"` - Id int `json:"id"` - JwId int `json:"jwId"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Code string `json:"code"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"course"` CourseId int `json:"courseId"` Credits *float32 `json:"credits"` @@ -6173,12 +6324,14 @@ type PaginatedSectionResponseSchema struct { SemesterId *int `json:"semesterId"` StdCount *int `json:"stdCount"` Teachers []struct { - Code *string `json:"code"` - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - PersonId *int `json:"personId"` - TeacherId *int `json:"teacherId"` + Code *string `json:"code"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + PersonId *int `json:"personId"` } `json:"teachers"` } `json:"data"` Pagination struct { @@ -6209,27 +6362,33 @@ type PaginatedTeacherResponseSchema struct { Address *string `json:"address"` Code *string `json:"code"` Department *struct { - Code string `json:"code"` - Id int `json:"id"` - IsCollege *bool `json:"isCollege"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Code string `json:"code"` + Id int `json:"id"` + IsCollege *bool `json:"isCollege"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"department"` - DepartmentId *int `json:"departmentId"` - Email *string `json:"email"` - Id int `json:"id"` - Mobile *string `json:"mobile"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - PersonId *int `json:"personId"` - TeacherId *int `json:"teacherId"` - TeacherTitle *struct { - Code string `json:"code"` - Enabled *bool `json:"enabled"` - Id int `json:"id"` - JwId int `json:"jwId"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + DepartmentId *int `json:"departmentId"` + Email *string `json:"email"` + Id int `json:"id"` + JwId int `json:"jwId"` + Mobile *string `json:"mobile"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + PersonId *int `json:"personId"` + TeacherTitle *struct { + Code string `json:"code"` + Enabled *bool `json:"enabled"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"teacherTitle"` TeacherTitleId *int `json:"teacherTitleId"` Telephone *string `json:"telephone"` @@ -6267,7 +6426,7 @@ type PublicUserProfileResponseSchema struct { // SectionDetailSchema defines model for sectionDetailSchema. type SectionDetailSchema struct { - ActualPeriods *int `json:"actualPeriods"` + ActualPeriods *float32 `json:"actualPeriods"` AdminClasses []struct { AbbrEn *string `json:"abbrEn"` AbbrZh *string `json:"abbrZh"` @@ -6275,7 +6434,7 @@ type SectionDetailSchema struct { Enabled *bool `json:"enabled"` Grade *string `json:"grade"` Id int `json:"id"` - JwId *int `json:"jwId"` + JwId int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` PlanCount *int `json:"planCount"` @@ -6283,54 +6442,70 @@ type SectionDetailSchema struct { } `json:"adminClasses"` BizTypeId *int `json:"bizTypeId"` Campus *struct { - Code *string `json:"code"` - Id int `json:"id"` - JwId *int `json:"jwId"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Code *string `json:"code"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"campus"` CampusId *int `json:"campusId"` Code string `json:"code"` Course struct { Category *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"category"` CategoryId *int `json:"categoryId"` ClassType *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classType"` ClassTypeId *int `json:"classTypeId"` Classify *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classify"` ClassifyId *int `json:"classifyId"` Code string `json:"code"` EducationLevel *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"educationLevel"` EducationLevelId *int `json:"educationLevelId"` Gradation *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"gradation"` - GradationId *int `json:"gradationId"` - Id int `json:"id"` - JwId int `json:"jwId"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - Type *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + GradationId *int `json:"gradationId"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + Type *struct { + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"type"` TypeId *int `json:"typeId"` } `json:"course"` @@ -6340,17 +6515,22 @@ type SectionDetailSchema struct { DateTimePlaceText *string `json:"dateTimePlaceText"` DesignPeriods *float32 `json:"designPeriods"` ExamMode *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"examMode"` ExamModeId *int `json:"examModeId"` Exams []struct { EndTime *int `json:"endTime"` ExamBatch *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"examBatch"` ExamBatchId *int `json:"examBatchId"` ExamDate *time.Time `json:"examDate"` @@ -6375,35 +6555,40 @@ type SectionDetailSchema struct { LimitCount *int `json:"limitCount"` MachinePeriods *float32 `json:"machinePeriods"` OpenDepartment *struct { - Code string `json:"code"` - Id int `json:"id"` - IsCollege *bool `json:"isCollege"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Code string `json:"code"` + Id int `json:"id"` + IsCollege *bool `json:"isCollege"` + JwId *int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"openDepartment"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomType *struct { - Code string `json:"code"` - Id int `json:"id"` - JwId int `json:"jwId"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Code string `json:"code"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"roomType"` RoomTypeId *int `json:"roomTypeId"` ScheduleGroups []struct { - ActualPeriods int `json:"actualPeriods"` - Id int `json:"id"` - IsDefault bool `json:"isDefault"` - JwId int `json:"jwId"` - LimitCount int `json:"limitCount"` - No int `json:"no"` - SectionId int `json:"sectionId"` - StdCount int `json:"stdCount"` + ActualPeriods float32 `json:"actualPeriods"` + Id int `json:"id"` + IsDefault bool `json:"isDefault"` + JwId int `json:"jwId"` + LimitCount int `json:"limitCount"` + No int `json:"no"` + SectionId int `json:"sectionId"` + StdCount int `json:"stdCount"` } `json:"scheduleGroups"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -6417,7 +6602,7 @@ type SectionDetailSchema struct { Experiment *string `json:"experiment"` Id int `json:"id"` LessonType *string `json:"lessonType"` - Periods int `json:"periods"` + Periods float32 `json:"periods"` RoomId *int `json:"roomId"` ScheduleGroupId int `json:"scheduleGroupId"` SectionId int `json:"sectionId"` @@ -6429,36 +6614,23 @@ type SectionDetailSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` TeachLanguage *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"teachLanguage"` TeachLanguageId *int `json:"teachLanguageId"` TeacherAssignments []struct { - Id int `json:"id"` - Period *int `json:"period"` - Role *string `json:"role"` - SectionId int `json:"sectionId"` - Teacher struct { - Address *string `json:"address"` - Code *string `json:"code"` - DepartmentId *int `json:"departmentId"` - Email *string `json:"email"` - Id int `json:"id"` - Mobile *string `json:"mobile"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - PersonId *int `json:"personId"` - TeacherId *int `json:"teacherId"` - TeacherTitleId *int `json:"teacherTitleId"` - Telephone *string `json:"telephone"` - } `json:"teacher"` - TeacherId int `json:"teacherId"` + Id int `json:"id"` + Period *float32 `json:"period"` + Role *string `json:"role"` + SectionId int `json:"sectionId"` + TeacherId int `json:"teacherId"` TeacherLessonType *struct { Code string `json:"code"` Enabled *bool `json:"enabled"` @@ -6468,38 +6640,49 @@ type SectionDetailSchema struct { NameEn *string `json:"nameEn"` Role *string `json:"role"` } `json:"teacherLessonType"` - TeacherLessonTypeId *int `json:"teacherLessonTypeId"` - WeekIndices *[]int `json:"weekIndices"` - WeekIndicesMsg *string `json:"weekIndicesMsg"` + TeacherLessonTypeId *int `json:"teacherLessonTypeId"` + TeacherTitle *struct { + Code string `json:"code"` + Enabled *bool `json:"enabled"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + } `json:"teacherTitle"` + TeacherTitleId *int `json:"teacherTitleId"` + WeekIndices *[]int `json:"weekIndices"` + WeekIndicesMsg *string `json:"weekIndicesMsg"` } `json:"teacherAssignments"` Teachers []struct { - Address *string `json:"address"` Code *string `json:"code"` Department *struct { - Code string `json:"code"` - Id int `json:"id"` - IsCollege *bool `json:"isCollege"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Code string `json:"code"` + Id int `json:"id"` + IsCollege *bool `json:"isCollege"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"department"` - DepartmentId *int `json:"departmentId"` - Email *string `json:"email"` - Id int `json:"id"` - Mobile *string `json:"mobile"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - PersonId *int `json:"personId"` - TeacherId *int `json:"teacherId"` - TeacherTitle *struct { - Code string `json:"code"` - Enabled *bool `json:"enabled"` - Id int `json:"id"` - JwId int `json:"jwId"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + PersonId *int `json:"personId"` + TeacherTitle *struct { + Code string `json:"code"` + Enabled *bool `json:"enabled"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"teacherTitle"` - TeacherTitleId *int `json:"teacherTitleId"` - Telephone *string `json:"telephone"` } `json:"teachers"` TestPeriods *float32 `json:"testPeriods"` TheoryPeriods *float32 `json:"theoryPeriods"` @@ -6518,22 +6701,7 @@ type SemesterSchema struct { // SubscribedHomeworksResponseSchema defines model for subscribedHomeworksResponseSchema. type SubscribedHomeworksResponseSchema struct { - AuditLogs []struct { - Action SubscribedHomeworksResponseSchemaAuditLogsAction `json:"action"` - Actor *struct { - Id string `json:"id"` - Image *string `json:"image"` - Name *string `json:"name"` - Username *string `json:"username"` - } `json:"actor"` - ActorId *string `json:"actorId"` - CreatedAt time.Time `json:"createdAt"` - HomeworkId *string `json:"homeworkId"` - Id string `json:"id"` - SectionId int `json:"sectionId"` - TitleSnapshot string `json:"titleSnapshot"` - } `json:"auditLogs"` - Homeworks []struct { + Data []struct { CommentCount int `json:"commentCount"` Completion *struct { CompletedAt time.Time `json:"completedAt"` @@ -6571,10 +6739,10 @@ type SubscribedHomeworksResponseSchema struct { PublishedAt *time.Time `json:"publishedAt"` RequiresTeam bool `json:"requiresTeam"` Section struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` - CampusId *int `json:"campusId"` - Code string `json:"code"` + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` + CampusId *int `json:"campusId"` + Code string `json:"code"` Course struct { CategoryId *int `json:"categoryId"` ClassTypeId *int `json:"classTypeId"` @@ -6604,10 +6772,10 @@ type SubscribedHomeworksResponseSchema struct { MachinePeriods *float32 `json:"machinePeriods"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -6615,7 +6783,6 @@ type SubscribedHomeworksResponseSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` @@ -6636,23 +6803,15 @@ type SubscribedHomeworksResponseSchema struct { Username *string `json:"username"` } `json:"updatedBy"` UpdatedById *string `json:"updatedById"` - } `json:"homeworks"` - SectionIds []int `json:"sectionIds"` - Viewer struct { - Image *string `json:"image"` - IsAdmin bool `json:"isAdmin"` - IsAuthenticated bool `json:"isAuthenticated"` - IsSuspended bool `json:"isSuspended"` - Name *string `json:"name"` - SuspensionExpiresAt *time.Time `json:"suspensionExpiresAt"` - SuspensionReason *string `json:"suspensionReason"` - UserId *string `json:"userId"` - } `json:"viewer"` + } `json:"data"` + Pagination struct { + Page int `json:"page"` + PageSize int `json:"pageSize"` + Total int `json:"total"` + TotalPages int `json:"totalPages"` + } `json:"pagination"` } -// SubscribedHomeworksResponseSchemaAuditLogsAction defines model for SubscribedHomeworksResponseSchema.AuditLogs.Action. -type SubscribedHomeworksResponseSchemaAuditLogsAction string - // SubscribedSchedulesResponseSchema defines model for subscribedSchedulesResponseSchema. type SubscribedSchedulesResponseSchema struct { Schedules []struct { @@ -6664,13 +6823,13 @@ type SubscribedSchedulesResponseSchema struct { Experiment *string `json:"experiment"` Id int `json:"id"` LessonType *string `json:"lessonType"` - Periods int `json:"periods"` + Periods float32 `json:"periods"` Room *struct { Building *struct { Campus *struct { Code *string `json:"code"` Id int `json:"id"` - JwId *int `json:"jwId"` + JwId int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` @@ -6711,21 +6870,21 @@ type SubscribedSchedulesResponseSchema struct { } `json:"room"` RoomId *int `json:"roomId"` ScheduleGroup struct { - ActualPeriods int `json:"actualPeriods"` - Id int `json:"id"` - IsDefault bool `json:"isDefault"` - JwId int `json:"jwId"` - LimitCount int `json:"limitCount"` - No int `json:"no"` - SectionId int `json:"sectionId"` - StdCount int `json:"stdCount"` + ActualPeriods float32 `json:"actualPeriods"` + Id int `json:"id"` + IsDefault bool `json:"isDefault"` + JwId int `json:"jwId"` + LimitCount int `json:"limitCount"` + No int `json:"no"` + SectionId int `json:"sectionId"` + StdCount int `json:"stdCount"` } `json:"scheduleGroup"` ScheduleGroupId int `json:"scheduleGroupId"` Section struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` - CampusId *int `json:"campusId"` - Code string `json:"code"` + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` + CampusId *int `json:"campusId"` + Code string `json:"code"` Course struct { CategoryId *int `json:"categoryId"` ClassTypeId *int `json:"classTypeId"` @@ -6755,10 +6914,10 @@ type SubscribedSchedulesResponseSchema struct { MachinePeriods *float32 `json:"machinePeriods"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -6766,7 +6925,6 @@ type SubscribedSchedulesResponseSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` @@ -6779,9 +6937,9 @@ type SubscribedSchedulesResponseSchema struct { StartTime string `json:"startTime"` StartUnit int `json:"startUnit"` Teachers []struct { - UnderscoreCount *struct { + UnderscoreCount struct { Sections int `json:"sections"` - } `json:"_count,omitempty"` + } `json:"_count"` Code *string `json:"code"` Department *struct { Code string `json:"code"` @@ -6793,12 +6951,12 @@ type SubscribedSchedulesResponseSchema struct { NameSecondary *string `json:"nameSecondary"` } `json:"department"` Id int `json:"id"` + JwId int `json:"jwId"` NameCn string `json:"nameCn"` NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` NameSecondary *string `json:"nameSecondary"` PersonId *int `json:"personId"` - TeacherId *int `json:"teacherId"` TeacherTitle *struct { Code string `json:"code"` Enabled *bool `json:"enabled"` @@ -6808,7 +6966,7 @@ type SubscribedSchedulesResponseSchema struct { NameEn *string `json:"nameEn"` NamePrimary string `json:"namePrimary"` NameSecondary *string `json:"nameSecondary"` - } `json:"teacherTitle,omitempty"` + } `json:"teacherTitle"` } `json:"teachers"` WeekIndex int `json:"weekIndex"` Weekday int `json:"weekday"` @@ -6828,64 +6986,83 @@ type TeacherDetailSchema struct { Address *string `json:"address"` Code *string `json:"code"` Department *struct { - Code string `json:"code"` - Id int `json:"id"` - IsCollege *bool `json:"isCollege"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Code string `json:"code"` + Id int `json:"id"` + IsCollege *bool `json:"isCollege"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"department"` - DepartmentId *int `json:"departmentId"` - Email *string `json:"email"` - Id int `json:"id"` - Mobile *string `json:"mobile"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - PersonId *int `json:"personId"` - Sections []struct { - ActualPeriods *int `json:"actualPeriods"` - BizTypeId *int `json:"bizTypeId"` - CampusId *int `json:"campusId"` - Code string `json:"code"` + DepartmentId *int `json:"departmentId"` + Email *string `json:"email"` + Id int `json:"id"` + JwId int `json:"jwId"` + Mobile *string `json:"mobile"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + PersonId *int `json:"personId"` + Sections []struct { + ActualPeriods *float32 `json:"actualPeriods"` + BizTypeId *int `json:"bizTypeId"` + CampusId *int `json:"campusId"` + Code string `json:"code"` Course struct { Category *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"category"` CategoryId *int `json:"categoryId"` ClassType *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classType"` ClassTypeId *int `json:"classTypeId"` Classify *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"classify"` ClassifyId *int `json:"classifyId"` Code string `json:"code"` EducationLevel *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"educationLevel"` EducationLevelId *int `json:"educationLevelId"` Gradation *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"gradation"` - GradationId *int `json:"gradationId"` - Id int `json:"id"` - JwId int `json:"jwId"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` - Type *struct { - Id int `json:"id"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + GradationId *int `json:"gradationId"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` + Type *struct { + Id int `json:"id"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"type"` TypeId *int `json:"typeId"` } `json:"course"` @@ -6903,10 +7080,10 @@ type TeacherDetailSchema struct { MachinePeriods *float32 `json:"machinePeriods"` OpenDepartmentId *int `json:"openDepartmentId"` Period *int `json:"period"` - PeriodsPerWeek *int `json:"periodsPerWeek"` + PeriodsPerWeek *float32 `json:"periodsPerWeek"` PracticePeriods *float32 `json:"practicePeriods"` Remark *string `json:"remark"` - RetiredAt *time.Time `json:"retiredAt,omitempty"` + RetiredAt *time.Time `json:"retiredAt"` RoomTypeId *int `json:"roomTypeId"` ScheduleJsonParams interface{} `json:"scheduleJsonParams"` ScheduleRemark *string `json:"scheduleRemark"` @@ -6914,7 +7091,6 @@ type TeacherDetailSchema struct { SelectedStdCount *int `json:"selectedStdCount"` Semester *SemesterSchema `json:"semester"` SemesterId *int `json:"semesterId"` - SourceLastSeenAt *time.Time `json:"sourceLastSeenAt,omitempty"` StdCount *int `json:"stdCount"` SuggestScheduleWeekInfo *string `json:"suggestScheduleWeekInfo"` SuggestScheduleWeeks interface{} `json:"suggestScheduleWeeks"` @@ -6923,14 +7099,15 @@ type TeacherDetailSchema struct { TheoryPeriods *float32 `json:"theoryPeriods"` TimesPerWeek *int `json:"timesPerWeek"` } `json:"sections"` - TeacherId *int `json:"teacherId"` TeacherTitle *struct { - Code string `json:"code"` - Enabled *bool `json:"enabled"` - Id int `json:"id"` - JwId int `json:"jwId"` - NameCn string `json:"nameCn"` - NameEn *string `json:"nameEn"` + Code string `json:"code"` + Enabled *bool `json:"enabled"` + Id int `json:"id"` + JwId int `json:"jwId"` + NameCn string `json:"nameCn"` + NameEn *string `json:"nameEn"` + NamePrimary string `json:"namePrimary"` + NameSecondary *string `json:"nameSecondary"` } `json:"teacherTitle"` TeacherTitleId *int `json:"teacherTitleId"` Telephone *string `json:"telephone"` @@ -7238,6 +7415,12 @@ type WorkspaceLinkPinResponseSchema struct { PinnedSlugs []string `json:"pinnedSlugs"` } +// AccountClientActivityListParams defines parameters for AccountClientActivityList. +type AccountClientActivityListParams struct { + Cursor *string `form:"cursor,omitempty" json:"cursor,omitempty"` + Limit *int64 `form:"limit,omitempty" json:"limit,omitempty"` +} + // ListAdminCommentsParams defines parameters for ListAdminComments. type ListAdminCommentsParams struct { Status *ListAdminCommentsParamsStatus `form:"status,omitempty" json:"status,omitempty"` @@ -7423,6 +7606,7 @@ type ListSectionsParamsLocale string // GetSectionsCalendarParams defines parameters for GetSectionsCalendar. type GetSectionsCalendarParams struct { + // SectionIds Comma-separated positive Section database IDs; at most 50 unique IDs. SectionIds string `form:"sectionIds" json:"sectionIds"` } @@ -7550,11 +7734,23 @@ type CommunitySectionHomeworkListParams struct { SectionIds *string `form:"sectionIds,omitempty" json:"sectionIds,omitempty"` SectionJwId *int64 `form:"sectionJwId,omitempty" json:"sectionJwId,omitempty"` IncludeDeleted *CommunitySectionHomeworkListParamsIncludeDeleted `form:"includeDeleted,omitempty" json:"includeDeleted,omitempty"` + Page *int64 `form:"page,omitempty" json:"page,omitempty"` + + // PageSize Number of items per page. + PageSize *int64 `form:"pageSize,omitempty" json:"pageSize,omitempty"` } // CommunitySectionHomeworkListParamsIncludeDeleted defines parameters for CommunitySectionHomeworkList. type CommunitySectionHomeworkListParamsIncludeDeleted string +// GetSubscribedHomeworksParams defines parameters for GetSubscribedHomeworks. +type GetSubscribedHomeworksParams struct { + Page *int64 `form:"page,omitempty" json:"page,omitempty"` + + // PageSize Number of items per page. + PageSize *int64 `form:"pageSize,omitempty" json:"pageSize,omitempty"` +} + // WorkspaceOverviewGetParams defines parameters for WorkspaceOverviewGet. type WorkspaceOverviewGetParams struct { AtTime *string `form:"atTime,omitempty" json:"atTime,omitempty"` @@ -10535,6 +10731,9 @@ func WithRequestEditorFn(fn RequestEditorFn) ClientOption { // The interface specification for the client above. type ClientInterface interface { + // AccountClientActivityList request + AccountClientActivityList(ctx context.Context, params *AccountClientActivityListParams, reqEditors ...RequestEditorFn) (*http.Response, error) + // SetLocaleWithBody request with any body SetLocaleWithBody(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) @@ -10720,7 +10919,7 @@ type ClientInterface interface { WorkspaceBusPreferencesSet(ctx context.Context, body WorkspaceBusPreferencesSetJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) // GetSubscribedHomeworks request - GetSubscribedHomeworks(ctx context.Context, reqEditors ...RequestEditorFn) (*http.Response, error) + GetSubscribedHomeworks(ctx context.Context, params *GetSubscribedHomeworksParams, reqEditors ...RequestEditorFn) (*http.Response, error) // PutApiHomeworksCompletionsWithBody request with any body PutApiHomeworksCompletionsWithBody(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) @@ -10838,6 +11037,18 @@ type ClientInterface interface { DownloadUpload(ctx context.Context, id string, reqEditors ...RequestEditorFn) (*http.Response, error) } +func (c *Client) AccountClientActivityList(ctx context.Context, params *AccountClientActivityListParams, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewAccountClientActivityListRequest(c.Server, params) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if err := c.applyEditors(ctx, req, reqEditors); err != nil { + return nil, err + } + return c.Client.Do(req) +} + func (c *Client) SetLocaleWithBody(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) { req, err := NewSetLocaleRequestWithBody(c.Server, contentType, body) if err != nil { @@ -11630,8 +11841,8 @@ func (c *Client) WorkspaceBusPreferencesSet(ctx context.Context, body WorkspaceB return c.Client.Do(req) } -func (c *Client) GetSubscribedHomeworks(ctx context.Context, reqEditors ...RequestEditorFn) (*http.Response, error) { - req, err := NewGetSubscribedHomeworksRequest(c.Server) +func (c *Client) GetSubscribedHomeworks(ctx context.Context, params *GetSubscribedHomeworksParams, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewGetSubscribedHomeworksRequest(c.Server, params) if err != nil { return nil, err } @@ -12170,6 +12381,71 @@ func (c *Client) DownloadUpload(ctx context.Context, id string, reqEditors ...Re return c.Client.Do(req) } +// NewAccountClientActivityListRequest generates requests for AccountClientActivityList +func NewAccountClientActivityListRequest(server string, params *AccountClientActivityListParams) (*http.Request, error) { + var err error + + serverURL, err := url.Parse(server) + if err != nil { + return nil, err + } + + operationPath := fmt.Sprintf("/api/account/client-activity") + if operationPath[0] == '/' { + operationPath = "." + operationPath + } + + queryURL, err := serverURL.Parse(operationPath) + if err != nil { + return nil, err + } + + if params != nil { + queryValues := queryURL.Query() + + if params.Cursor != nil { + + if queryFrag, err := runtime.StyleParamWithOptions("form", true, "cursor", *params.Cursor, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "string", Format: ""}); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } + + } + + if params.Limit != nil { + + if queryFrag, err := runtime.StyleParamWithOptions("form", true, "limit", *params.Limit, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "integer", Format: "int64"}); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } + + } + + queryURL.RawQuery = queryValues.Encode() + } + + req, err := http.NewRequest("GET", queryURL.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + // NewSetLocaleRequest calls the generic SetLocale builder with application/json body func NewSetLocaleRequest(server string, body SetLocaleJSONRequestBody) (*http.Request, error) { var bodyReader io.Reader @@ -15554,6 +15830,38 @@ func NewCommunitySectionHomeworkListRequest(server string, params *CommunitySect } + if params.Page != nil { + + if queryFrag, err := runtime.StyleParamWithOptions("form", true, "page", *params.Page, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "integer", Format: "int64"}); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } + + } + + if params.PageSize != nil { + + if queryFrag, err := runtime.StyleParamWithOptions("form", true, "pageSize", *params.PageSize, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "integer", Format: "int64"}); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } + + } + queryURL.RawQuery = queryValues.Encode() } @@ -15815,7 +16123,7 @@ func NewWorkspaceBusPreferencesSetRequestWithBody(server string, contentType str } // NewGetSubscribedHomeworksRequest generates requests for GetSubscribedHomeworks -func NewGetSubscribedHomeworksRequest(server string) (*http.Request, error) { +func NewGetSubscribedHomeworksRequest(server string, params *GetSubscribedHomeworksParams) (*http.Request, error) { var err error serverURL, err := url.Parse(server) @@ -15833,6 +16141,44 @@ func NewGetSubscribedHomeworksRequest(server string) (*http.Request, error) { return nil, err } + if params != nil { + queryValues := queryURL.Query() + + if params.Page != nil { + + if queryFrag, err := runtime.StyleParamWithOptions("form", true, "page", *params.Page, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "integer", Format: "int64"}); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } + + } + + if params.PageSize != nil { + + if queryFrag, err := runtime.StyleParamWithOptions("form", true, "pageSize", *params.PageSize, runtime.StyleParamOptions{ParamLocation: runtime.ParamLocationQuery, Type: "integer", Format: "int64"}); err != nil { + return nil, err + } else if parsed, err := url.ParseQuery(queryFrag); err != nil { + return nil, err + } else { + for k, v := range parsed { + for _, v2 := range v { + queryValues.Add(k, v2) + } + } + } + + } + + queryURL.RawQuery = queryValues.Encode() + } + req, err := http.NewRequest("GET", queryURL.String(), nil) if err != nil { return nil, err @@ -17192,6 +17538,9 @@ func WithBaseURL(baseURL string) ClientOption { // ClientWithResponsesInterface is the interface specification for the client with responses above. type ClientWithResponsesInterface interface { + // AccountClientActivityListWithResponse request + AccountClientActivityListWithResponse(ctx context.Context, params *AccountClientActivityListParams, reqEditors ...RequestEditorFn) (*AccountClientActivityListResponse, error) + // SetLocaleWithBodyWithResponse request with any body SetLocaleWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*SetLocaleResponse, error) @@ -17377,7 +17726,7 @@ type ClientWithResponsesInterface interface { WorkspaceBusPreferencesSetWithResponse(ctx context.Context, body WorkspaceBusPreferencesSetJSONRequestBody, reqEditors ...RequestEditorFn) (*WorkspaceBusPreferencesSetResponse, error) // GetSubscribedHomeworksWithResponse request - GetSubscribedHomeworksWithResponse(ctx context.Context, reqEditors ...RequestEditorFn) (*GetSubscribedHomeworksResponse, error) + GetSubscribedHomeworksWithResponse(ctx context.Context, params *GetSubscribedHomeworksParams, reqEditors ...RequestEditorFn) (*GetSubscribedHomeworksResponse, error) // PutApiHomeworksCompletionsWithBodyWithResponse request with any body PutApiHomeworksCompletionsWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*PutApiHomeworksCompletionsResponse, error) @@ -17495,6 +17844,30 @@ type ClientWithResponsesInterface interface { DownloadUploadWithResponse(ctx context.Context, id string, reqEditors ...RequestEditorFn) (*DownloadUploadResponse, error) } +type AccountClientActivityListResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *AccountClientActivityResponseSchema + JSON400 *OpenApiErrorSchema + JSON401 *OpenApiErrorSchema +} + +// Status returns HTTPResponse.Status +func (r AccountClientActivityListResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r AccountClientActivityListResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + type SetLocaleResponse struct { Body []byte HTTPResponse *http.Response @@ -18784,6 +19157,7 @@ type GetSubscribedHomeworksResponse struct { Body []byte HTTPResponse *http.Response JSON200 *SubscribedHomeworksResponseSchema + JSON400 *OpenApiErrorSchema JSON401 *OpenApiErrorSchema } @@ -19506,6 +19880,15 @@ func (r DownloadUploadResponse) StatusCode() int { return 0 } +// AccountClientActivityListWithResponse request returning *AccountClientActivityListResponse +func (c *ClientWithResponses) AccountClientActivityListWithResponse(ctx context.Context, params *AccountClientActivityListParams, reqEditors ...RequestEditorFn) (*AccountClientActivityListResponse, error) { + rsp, err := c.AccountClientActivityList(ctx, params, reqEditors...) + if err != nil { + return nil, err + } + return ParseAccountClientActivityListResponse(rsp) +} + // SetLocaleWithBodyWithResponse request with arbitrary body returning *SetLocaleResponse func (c *ClientWithResponses) SetLocaleWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*SetLocaleResponse, error) { rsp, err := c.SetLocaleWithBody(ctx, contentType, body, reqEditors...) @@ -20087,8 +20470,8 @@ func (c *ClientWithResponses) WorkspaceBusPreferencesSetWithResponse(ctx context } // GetSubscribedHomeworksWithResponse request returning *GetSubscribedHomeworksResponse -func (c *ClientWithResponses) GetSubscribedHomeworksWithResponse(ctx context.Context, reqEditors ...RequestEditorFn) (*GetSubscribedHomeworksResponse, error) { - rsp, err := c.GetSubscribedHomeworks(ctx, reqEditors...) +func (c *ClientWithResponses) GetSubscribedHomeworksWithResponse(ctx context.Context, params *GetSubscribedHomeworksParams, reqEditors ...RequestEditorFn) (*GetSubscribedHomeworksResponse, error) { + rsp, err := c.GetSubscribedHomeworks(ctx, params, reqEditors...) if err != nil { return nil, err } @@ -20474,6 +20857,46 @@ func (c *ClientWithResponses) DownloadUploadWithResponse(ctx context.Context, id return ParseDownloadUploadResponse(rsp) } +// ParseAccountClientActivityListResponse parses an HTTP response from a AccountClientActivityListWithResponse call +func ParseAccountClientActivityListResponse(rsp *http.Response) (*AccountClientActivityListResponse, error) { + bodyBytes, err := io.ReadAll(rsp.Body) + defer func() { _ = rsp.Body.Close() }() + if err != nil { + return nil, err + } + + response := &AccountClientActivityListResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest AccountClientActivityResponseSchema + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400: + var dest OpenApiErrorSchema + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON400 = &dest + + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401: + var dest OpenApiErrorSchema + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON401 = &dest + + } + + return response, nil +} + // ParseSetLocaleResponse parses an HTTP response from a SetLocaleWithResponse call func ParseSetLocaleResponse(rsp *http.Response) (*SetLocaleResponse, error) { bodyBytes, err := io.ReadAll(rsp.Body) @@ -22831,6 +23254,13 @@ func ParseGetSubscribedHomeworksResponse(rsp *http.Response) (*GetSubscribedHome } response.JSON200 = &dest + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 400: + var dest OpenApiErrorSchema + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON400 = &dest + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 401: var dest OpenApiErrorSchema if err := json.Unmarshal(bodyBytes, &dest); err != nil { diff --git a/scripts/openapi-contract b/scripts/openapi-contract index 157b4b2..3cc8eaa 100755 --- a/scripts/openapi-contract +++ b/scripts/openapi-contract @@ -95,13 +95,6 @@ sync() { exit 1 } - # Keep the existing immutable pin when an unrelated server commit leaves the - # contract unchanged. This avoids provenance-only update PRs. - if cmp -s "$source_spec" "$spec" && verify >/dev/null 2>&1; then - echo "OpenAPI contract is unchanged at pinned commit $(pinned_sha)" - return - fi - cp "$source_spec" "$spec" hash="$(sha256_file "$spec")" printf '{\n "repository": "%s",\n "commit": "%s",\n "sha256": "%s"\n}\n' \