@fivenet-app/gen 2025.5.3 → 2026.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/README.md +1 -1
  2. package/buf/validate/validate.ts +11301 -0
  3. package/clients.ts +193 -154
  4. package/codegen/dbscanner/dbscanner.ts +91 -0
  5. package/codegen/perms/perms.ts +287 -0
  6. package/codegen/sanitizer/sanitizer.ts +113 -0
  7. package/google/protobuf/any.ts +4 -3
  8. package/google/protobuf/descriptor.ts +393 -239
  9. package/google/protobuf/duration.ts +4 -3
  10. package/google/protobuf/struct.ts +485 -0
  11. package/google/protobuf/timestamp.ts +4 -3
  12. package/package.json +3 -3
  13. package/perms.ts +217 -160
  14. package/resources/accounts/accounts.ts +115 -47
  15. package/resources/accounts/{oauth2.ts → oauth2/oauth2.ts} +33 -32
  16. package/resources/audit/audit.ts +172 -53
  17. package/resources/calendar/{access.ts → access/access.ts} +72 -71
  18. package/resources/calendar/calendar.ts +79 -543
  19. package/resources/calendar/entries/entries.ts +474 -0
  20. package/resources/centrum/access/access.ts +345 -0
  21. package/resources/centrum/dispatchers/dispatchers.ts +149 -0
  22. package/resources/centrum/{dispatches.ts → dispatches/dispatches.ts} +267 -164
  23. package/resources/centrum/joblist.ts +136 -0
  24. package/resources/centrum/settings/settings.ts +657 -0
  25. package/resources/centrum/{units_access.ts → units/access/access.ts} +78 -79
  26. package/resources/centrum/{units.ts → units/units.ts} +230 -130
  27. package/resources/clientconfig/clientconfig.ts +1015 -0
  28. package/resources/collab/collab.ts +805 -0
  29. package/resources/common/content/content.ts +169 -63
  30. package/resources/common/content/diff_activity.ts +267 -0
  31. package/resources/common/database/database.ts +92 -35
  32. package/resources/common/error.ts +17 -16
  33. package/resources/common/i18n.ts +20 -24
  34. package/resources/common/id_mapping.ts +69 -0
  35. package/resources/common/tests/objects.ts +4 -3
  36. package/resources/{common/cron → cron}/cron.ts +77 -65
  37. package/resources/discord/discord.ts +209 -0
  38. package/resources/documents/{access.ts → access/access.ts} +75 -76
  39. package/resources/documents/{activity.ts → activity/activity.ts} +349 -124
  40. package/resources/documents/approval/approval.ts +945 -0
  41. package/resources/documents/{category.ts → category/category.ts} +25 -32
  42. package/resources/documents/{comment.ts → comment/comment.ts} +35 -34
  43. package/resources/documents/data/data.ts +303 -0
  44. package/resources/documents/documents.ts +374 -686
  45. package/resources/{common/uuid.ts → documents/forms/forms.ts} +22 -21
  46. package/resources/documents/pins/pins.ts +127 -0
  47. package/resources/documents/references/references.ts +187 -0
  48. package/resources/documents/relations/relations.ts +184 -0
  49. package/resources/documents/{requests.ts → requests/requests.ts} +45 -44
  50. package/resources/documents/stamps/stamp.ts +355 -0
  51. package/resources/documents/{templates.ts → templates/templates.ts} +524 -199
  52. package/resources/documents/workflow/workflow.ts +600 -0
  53. package/resources/file/file.ts +152 -0
  54. package/{services/settings → resources/file}/filestore.ts +179 -165
  55. package/resources/file/meta.ts +148 -0
  56. package/resources/{common/grpcws → grpcws}/grpcws.ts +66 -65
  57. package/resources/jobs/{activity.ts → colleagues/activity/activity.ts} +83 -86
  58. package/resources/jobs/{colleagues.ts → colleagues/colleagues.ts} +76 -80
  59. package/resources/jobs/{conduct.ts → conduct/conduct.ts} +86 -62
  60. package/resources/jobs/jobs.ts +14 -13
  61. package/resources/jobs/{labels.ts → labels/labels.ts} +36 -37
  62. package/resources/jobs/{job_props.ts → props/props.ts} +63 -65
  63. package/resources/jobs/{job_settings.ts → settings/settings.ts} +89 -96
  64. package/resources/jobs/{timeclock.ts → timeclock/timeclock.ts} +42 -41
  65. package/resources/laws/laws.ts +40 -49
  66. package/resources/livemap/coords.ts +81 -0
  67. package/resources/livemap/heatmap/heatmap.ts +93 -0
  68. package/resources/livemap/{livemap.ts → markers/marker_marker.ts} +68 -335
  69. package/resources/livemap/markers/user_marker.ts +377 -0
  70. package/resources/mailer/{access.ts → access/access.ts} +119 -118
  71. package/resources/mailer/{email.ts → emails/email.ts} +38 -41
  72. package/resources/mailer/{events.ts → events/events.ts} +44 -43
  73. package/resources/mailer/{message.ts → messages/message.ts} +69 -74
  74. package/resources/mailer/{settings.ts → settings/settings.ts} +23 -25
  75. package/resources/mailer/{template.ts → templates/template.ts} +37 -40
  76. package/resources/mailer/{thread.ts → threads/thread.ts} +93 -94
  77. package/resources/notifications/clientview/clientview.ts +239 -0
  78. package/resources/notifications/{events.ts → events/events.ts} +67 -130
  79. package/resources/notifications/notifications.ts +55 -60
  80. package/resources/permissions/{attributes.ts → attributes/attributes.ts} +94 -237
  81. package/resources/permissions/events/events.ts +149 -0
  82. package/resources/permissions/{permissions.ts → permissions/permissions.ts} +127 -47
  83. package/resources/qualifications/{access.ts → access/access.ts} +43 -42
  84. package/resources/qualifications/{exam.ts → exam/exam.ts} +419 -229
  85. package/resources/qualifications/qualifications.ts +327 -388
  86. package/resources/settings/banner.ts +14 -21
  87. package/resources/settings/config.ts +663 -79
  88. package/resources/settings/data.ts +90 -0
  89. package/resources/settings/perms.ts +151 -0
  90. package/resources/settings/status.ts +533 -0
  91. package/resources/stats/stats.ts +382 -2
  92. package/resources/sync/{activity.ts → activity/activity.ts} +126 -46
  93. package/resources/sync/data/data.ts +1001 -0
  94. package/resources/sync/data/v2/data.ts +220 -0
  95. package/resources/timestamp/timestamp.ts +3 -2
  96. package/resources/{centrum/user_unit.ts → tracker/mapping.ts} +44 -44
  97. package/resources/userinfo/userinfo.ts +442 -0
  98. package/resources/users/{activity.ts → activity/activity.ts} +182 -166
  99. package/resources/users/{labels.ts → labels/labels.ts} +27 -30
  100. package/resources/users/{licenses.ts → licenses/licenses.ts} +18 -17
  101. package/resources/users/{props.ts → props/props.ts} +109 -77
  102. package/resources/users/short/user.ts +184 -0
  103. package/resources/users/user.ts +528 -0
  104. package/resources/vehicles/activity/activity.ts +231 -0
  105. package/resources/vehicles/props/props.ts +125 -0
  106. package/resources/vehicles/vehicles.ts +43 -18
  107. package/resources/wiki/{access.ts → access/access.ts} +72 -71
  108. package/resources/wiki/{activity.ts → activity/activity.ts} +218 -102
  109. package/resources/wiki/page.ts +164 -93
  110. package/services/auth/auth.client.ts +45 -35
  111. package/services/auth/auth.ts +498 -288
  112. package/services/calendar/calendar.client.ts +32 -91
  113. package/services/calendar/calendar.ts +157 -134
  114. package/services/centrum/centrum.client.ts +97 -137
  115. package/services/centrum/centrum.ts +755 -352
  116. package/services/citizens/citizens.client.ts +70 -39
  117. package/services/citizens/citizens.ts +226 -112
  118. package/services/completor/completor.client.ts +16 -35
  119. package/services/completor/completor.ts +95 -54
  120. package/services/documents/approval.client.ts +188 -0
  121. package/services/documents/approval.ts +1776 -0
  122. package/services/documents/collab.client.ts +46 -0
  123. package/services/documents/collab.ts +13 -0
  124. package/services/documents/documents.client.ts +88 -217
  125. package/services/documents/documents.ts +579 -619
  126. package/services/documents/forms.client.ts +51 -0
  127. package/services/documents/forms.ts +232 -0
  128. package/services/documents/stamps.client.ts +77 -0
  129. package/services/documents/stamps.ts +481 -0
  130. package/services/documents/stats.client.ts +38 -0
  131. package/services/documents/stats.ts +245 -0
  132. package/services/filestore/filestore.client.ts +86 -0
  133. package/services/filestore/filestore.ts +262 -0
  134. package/services/jobs/conduct.client.ts +40 -28
  135. package/services/jobs/conduct.ts +183 -56
  136. package/services/jobs/jobs.client.ts +22 -61
  137. package/services/jobs/jobs.ts +138 -121
  138. package/services/jobs/stats.client.ts +38 -0
  139. package/services/jobs/stats.ts +207 -0
  140. package/services/jobs/timeclock.client.ts +8 -19
  141. package/services/jobs/timeclock.ts +76 -75
  142. package/services/livemap/livemap.client.ts +8 -19
  143. package/services/livemap/livemap.ts +297 -126
  144. package/services/mailer/mailer.client.ts +44 -127
  145. package/services/mailer/mailer.ts +266 -269
  146. package/services/notifications/notifications.client.ts +65 -0
  147. package/services/{notificator/notificator.ts → notifications/notifications.ts} +126 -83
  148. package/services/qualifications/qualifications.client.ts +46 -91
  149. package/services/qualifications/qualifications.ts +250 -209
  150. package/services/settings/accounts.client.ts +31 -33
  151. package/services/settings/accounts.ts +251 -67
  152. package/services/settings/config.client.ts +6 -13
  153. package/services/settings/config.ts +8 -7
  154. package/services/settings/cron.client.ts +4 -7
  155. package/services/settings/cron.ts +7 -6
  156. package/services/settings/laws.client.ts +10 -25
  157. package/services/settings/laws.ts +30 -29
  158. package/services/settings/settings.client.ts +57 -103
  159. package/services/settings/settings.ts +237 -633
  160. package/services/settings/system.client.ts +103 -0
  161. package/services/settings/system.ts +718 -0
  162. package/services/stats/stats.client.ts +9 -8
  163. package/services/stats/stats.ts +27 -26
  164. package/services/sync/sync.client.ts +16 -15
  165. package/services/sync/sync.ts +174 -97
  166. package/services/sync/v2/sync.client.ts +331 -0
  167. package/services/sync/v2/sync.ts +1766 -0
  168. package/services/vehicles/vehicles.client.ts +17 -7
  169. package/services/vehicles/vehicles.ts +170 -25
  170. package/services/wiki/collab.client.ts +46 -0
  171. package/services/wiki/collab.ts +13 -0
  172. package/services/wiki/wiki.client.ts +28 -37
  173. package/services/wiki/wiki.ts +97 -67
  174. package/svcs.ts +174 -106
  175. package/resources/centrum/attributes.ts +0 -186
  176. package/resources/centrum/disponents.ts +0 -81
  177. package/resources/centrum/settings.ts +0 -307
  178. package/resources/documents/workflow.ts +0 -351
  179. package/resources/filestore/file.ts +0 -204
  180. package/resources/internet/access.ts +0 -358
  181. package/resources/internet/ads.ts +0 -257
  182. package/resources/internet/domain.ts +0 -328
  183. package/resources/internet/page.ts +0 -428
  184. package/resources/internet/search.ts +0 -128
  185. package/resources/livemap/tracker.ts +0 -81
  186. package/resources/sync/data.ts +0 -587
  187. package/resources/users/users.ts +0 -435
  188. package/services/internet/ads.client.ts +0 -41
  189. package/services/internet/ads.ts +0 -145
  190. package/services/internet/domain.client.ts +0 -109
  191. package/services/internet/domain.ts +0 -658
  192. package/services/internet/internet.client.ts +0 -58
  193. package/services/internet/internet.ts +0 -268
  194. package/services/notificator/notificator.client.ts +0 -76
  195. package/services/settings/filestore.client.ts +0 -75
@@ -1,5 +1,6 @@
1
- // @generated by protobuf-ts 2.10.0 with parameter optimize_speed,long_type_number,force_server_none
2
- // @generated from protobuf file "resources/qualifications/exam.proto" (package "resources.qualifications", syntax proto3)
1
+ // @generated by protobuf-ts 2.11.1 with parameter force_server_none,long_type_number,optimize_speed,ts_nocheck
2
+ // @generated from protobuf file "resources/qualifications/exam/exam.proto" (package "resources.qualifications.exam", syntax proto3)
3
+ // tslint:disable
3
4
  // @ts-nocheck
4
5
  import type { BinaryWriteOptions } from "@protobuf-ts/runtime";
5
6
  import type { IBinaryWriter } from "@protobuf-ts/runtime";
@@ -10,68 +11,86 @@ import { UnknownFieldHandler } from "@protobuf-ts/runtime";
10
11
  import type { PartialMessage } from "@protobuf-ts/runtime";
11
12
  import { reflectionMergePartial } from "@protobuf-ts/runtime";
12
13
  import { MessageType } from "@protobuf-ts/runtime";
13
- import { File } from "../filestore/file";
14
- import { Timestamp } from "../timestamp/timestamp";
15
- // Exam / Questions
16
-
14
+ import { File } from "../../file/file";
15
+ import { Timestamp } from "../../timestamp/timestamp";
16
+ import { Duration } from "../../../google/protobuf/duration";
17
+ /**
18
+ * @generated from protobuf message resources.qualifications.exam.QualificationExamSettings
19
+ */
20
+ export interface QualificationExamSettings {
21
+ /**
22
+ * @generated from protobuf field: google.protobuf.Duration time = 1
23
+ */
24
+ time?: Duration;
25
+ /**
26
+ * @generated from protobuf field: bool auto_grade = 2
27
+ */
28
+ autoGrade: boolean;
29
+ /**
30
+ * @generated from protobuf field: resources.qualifications.exam.AutoGradeMode auto_grade_mode = 3
31
+ */
32
+ autoGradeMode: AutoGradeMode;
33
+ /**
34
+ * @generated from protobuf field: int32 minimum_points = 4
35
+ */
36
+ minimumPoints: number;
37
+ }
17
38
  /**
18
- * @generated from protobuf message resources.qualifications.ExamQuestions
39
+ * @generated from protobuf message resources.qualifications.exam.ExamQuestions
19
40
  */
20
41
  export interface ExamQuestions {
21
42
  /**
22
- * @generated from protobuf field: repeated resources.qualifications.ExamQuestion questions = 1;
43
+ * @generated from protobuf field: repeated resources.qualifications.exam.ExamQuestion questions = 1
23
44
  */
24
45
  questions: ExamQuestion[];
25
46
  }
26
47
  /**
27
- * @generated from protobuf message resources.qualifications.ExamQuestion
48
+ * @generated from protobuf message resources.qualifications.exam.ExamQuestion
28
49
  */
29
50
  export interface ExamQuestion {
30
51
  /**
31
- * @generated from protobuf field: uint64 id = 1;
52
+ * @generated from protobuf field: int64 id = 1
32
53
  */
33
54
  id: number;
34
55
  /**
35
- * @generated from protobuf field: uint64 qualification_id = 2;
56
+ * @generated from protobuf field: int64 qualification_id = 2
36
57
  */
37
58
  qualificationId: number;
38
59
  /**
39
- * @generated from protobuf field: optional resources.timestamp.Timestamp created_at = 3;
60
+ * @generated from protobuf field: optional resources.timestamp.Timestamp created_at = 3
40
61
  */
41
62
  createdAt?: Timestamp;
42
63
  /**
43
- * @generated from protobuf field: optional resources.timestamp.Timestamp updated_at = 4;
64
+ * @generated from protobuf field: optional resources.timestamp.Timestamp updated_at = 4
44
65
  */
45
66
  updatedAt?: Timestamp;
46
67
  /**
47
- * @sanitize: method=StripTags
48
- *
49
- * @generated from protobuf field: string title = 5;
68
+ * @generated from protobuf field: string title = 5
50
69
  */
51
70
  title: string;
52
71
  /**
53
- * @sanitize: method=StripTags
54
- *
55
- * @generated from protobuf field: optional string description = 6;
72
+ * @generated from protobuf field: optional string description = 6
56
73
  */
57
74
  description?: string;
58
75
  /**
59
- * @generated from protobuf field: resources.qualifications.ExamQuestionData data = 7;
76
+ * @generated from protobuf field: resources.qualifications.exam.ExamQuestionData data = 7
60
77
  */
61
78
  data?: ExamQuestionData;
62
79
  /**
63
- * @generated from protobuf field: optional resources.qualifications.ExamQuestionAnswerData answer = 8;
80
+ * @generated from protobuf field: optional resources.qualifications.exam.ExamQuestionAnswerData answer = 8
64
81
  */
65
82
  answer?: ExamQuestionAnswerData;
66
83
  /**
67
- * @generated from protobuf field: optional int32 points = 9;
84
+ * @generated from protobuf field: optional int32 points = 9
68
85
  */
69
86
  points?: number;
87
+ /**
88
+ * @generated from protobuf field: int32 order = 10
89
+ */
90
+ order: number;
70
91
  }
71
92
  /**
72
- * @dbscanner: json
73
- *
74
- * @generated from protobuf message resources.qualifications.ExamQuestionData
93
+ * @generated from protobuf message resources.qualifications.exam.ExamQuestionData
75
94
  */
76
95
  export interface ExamQuestionData {
77
96
  /**
@@ -80,37 +99,37 @@ export interface ExamQuestionData {
80
99
  data: {
81
100
  oneofKind: "separator";
82
101
  /**
83
- * @generated from protobuf field: resources.qualifications.ExamQuestionSeparator separator = 1;
102
+ * @generated from protobuf field: resources.qualifications.exam.ExamQuestionSeparator separator = 1
84
103
  */
85
104
  separator: ExamQuestionSeparator;
86
105
  } | {
87
106
  oneofKind: "image";
88
107
  /**
89
- * @generated from protobuf field: resources.qualifications.ExamQuestionImage image = 6;
108
+ * @generated from protobuf field: resources.qualifications.exam.ExamQuestionImage image = 6
90
109
  */
91
110
  image: ExamQuestionImage;
92
111
  } | {
93
112
  oneofKind: "yesno";
94
113
  /**
95
- * @generated from protobuf field: resources.qualifications.ExamQuestionYesNo yesno = 2;
114
+ * @generated from protobuf field: resources.qualifications.exam.ExamQuestionYesNo yesno = 2
96
115
  */
97
116
  yesno: ExamQuestionYesNo;
98
117
  } | {
99
118
  oneofKind: "freeText";
100
119
  /**
101
- * @generated from protobuf field: resources.qualifications.ExamQuestionText free_text = 3;
120
+ * @generated from protobuf field: resources.qualifications.exam.ExamQuestionText free_text = 3
102
121
  */
103
122
  freeText: ExamQuestionText;
104
123
  } | {
105
124
  oneofKind: "singleChoice";
106
125
  /**
107
- * @generated from protobuf field: resources.qualifications.ExamQuestionSingleChoice single_choice = 4;
126
+ * @generated from protobuf field: resources.qualifications.exam.ExamQuestionSingleChoice single_choice = 4
108
127
  */
109
128
  singleChoice: ExamQuestionSingleChoice;
110
129
  } | {
111
130
  oneofKind: "multipleChoice";
112
131
  /**
113
- * @generated from protobuf field: resources.qualifications.ExamQuestionMultipleChoice multiple_choice = 5;
132
+ * @generated from protobuf field: resources.qualifications.exam.ExamQuestionMultipleChoice multiple_choice = 5
114
133
  */
115
134
  multipleChoice: ExamQuestionMultipleChoice;
116
135
  } | {
@@ -118,151 +137,173 @@ export interface ExamQuestionData {
118
137
  };
119
138
  }
120
139
  /**
121
- * @generated from protobuf message resources.qualifications.ExamQuestionSeparator
140
+ * @generated from protobuf message resources.qualifications.exam.ExamQuestionSeparator
122
141
  */
123
142
  export interface ExamQuestionSeparator {
124
143
  }
125
144
  /**
126
- * @generated from protobuf message resources.qualifications.ExamQuestionImage
145
+ * @generated from protobuf message resources.qualifications.exam.ExamQuestionImage
127
146
  */
128
147
  export interface ExamQuestionImage {
129
148
  /**
130
- * @generated from protobuf field: resources.filestore.File image = 1;
149
+ * @generated from protobuf field: resources.file.File image = 1
131
150
  */
132
151
  image?: File;
133
152
  /**
134
- * @generated from protobuf field: optional string alt = 2;
153
+ * @generated from protobuf field: optional string alt = 2
135
154
  */
136
155
  alt?: string;
137
156
  }
138
157
  /**
139
- * @generated from protobuf message resources.qualifications.ExamQuestionYesNo
158
+ * @generated from protobuf message resources.qualifications.exam.ExamQuestionYesNo
140
159
  */
141
160
  export interface ExamQuestionYesNo {
142
161
  }
143
162
  /**
144
- * @generated from protobuf message resources.qualifications.ExamQuestionText
163
+ * @generated from protobuf message resources.qualifications.exam.ExamQuestionText
145
164
  */
146
165
  export interface ExamQuestionText {
147
166
  /**
148
- * @generated from protobuf field: int32 min_length = 1;
167
+ * @generated from protobuf field: int32 min_length = 1
149
168
  */
150
169
  minLength: number;
151
170
  /**
152
- * @generated from protobuf field: int32 max_length = 2;
171
+ * @generated from protobuf field: int32 max_length = 2
153
172
  */
154
173
  maxLength: number;
155
174
  }
156
175
  /**
157
- * @generated from protobuf message resources.qualifications.ExamQuestionSingleChoice
176
+ * @generated from protobuf message resources.qualifications.exam.ExamQuestionSingleChoice
158
177
  */
159
178
  export interface ExamQuestionSingleChoice {
160
179
  /**
161
- * @sanitize: method=StripTags
162
- *
163
- * @generated from protobuf field: repeated string choices = 1;
180
+ * @generated from protobuf field: repeated string choices = 1
164
181
  */
165
182
  choices: string[];
166
183
  }
167
184
  /**
168
- * @generated from protobuf message resources.qualifications.ExamQuestionMultipleChoice
185
+ * @generated from protobuf message resources.qualifications.exam.ExamQuestionMultipleChoice
169
186
  */
170
187
  export interface ExamQuestionMultipleChoice {
171
188
  /**
172
- * @sanitize: method=StripTags
173
- *
174
- * @generated from protobuf field: repeated string choices = 1;
189
+ * @generated from protobuf field: repeated string choices = 1
175
190
  */
176
191
  choices: string[];
177
192
  /**
178
- * @generated from protobuf field: optional int32 limit = 2;
193
+ * @generated from protobuf field: optional int32 limit = 2
179
194
  */
180
195
  limit?: number;
181
196
  }
182
197
  /**
183
- * @dbscanner: json
184
- *
185
- * @generated from protobuf message resources.qualifications.ExamQuestionAnswerData
198
+ * @generated from protobuf message resources.qualifications.exam.ExamQuestionAnswerData
186
199
  */
187
200
  export interface ExamQuestionAnswerData {
188
201
  /**
189
- * @generated from protobuf field: string answer_key = 1;
202
+ * @generated from protobuf field: string answer_key = 1
190
203
  */
191
204
  answerKey: string;
205
+ /**
206
+ * @generated from protobuf oneof: answer
207
+ */
208
+ answer: {
209
+ oneofKind: "yesno";
210
+ /**
211
+ * @generated from protobuf field: resources.qualifications.exam.ExamResponseYesNo yesno = 4
212
+ */
213
+ yesno: ExamResponseYesNo;
214
+ } | {
215
+ oneofKind: "freeText";
216
+ /**
217
+ * @generated from protobuf field: resources.qualifications.exam.ExamResponseText free_text = 5
218
+ */
219
+ freeText: ExamResponseText;
220
+ } | {
221
+ oneofKind: "singleChoice";
222
+ /**
223
+ * @generated from protobuf field: resources.qualifications.exam.ExamResponseSingleChoice single_choice = 6
224
+ */
225
+ singleChoice: ExamResponseSingleChoice;
226
+ } | {
227
+ oneofKind: "multipleChoice";
228
+ /**
229
+ * @generated from protobuf field: resources.qualifications.exam.ExamResponseMultipleChoice multiple_choice = 7
230
+ */
231
+ multipleChoice: ExamResponseMultipleChoice;
232
+ } | {
233
+ oneofKind: undefined;
234
+ };
192
235
  }
193
236
  // User Response
194
237
 
195
238
  /**
196
- * @generated from protobuf message resources.qualifications.ExamUser
239
+ * @generated from protobuf message resources.qualifications.exam.ExamUser
197
240
  */
198
241
  export interface ExamUser {
199
242
  /**
200
- * @generated from protobuf field: uint64 qualification_id = 1;
243
+ * @generated from protobuf field: int64 qualification_id = 1
201
244
  */
202
245
  qualificationId: number;
203
246
  /**
204
- * @generated from protobuf field: int32 user_id = 2;
247
+ * @generated from protobuf field: int32 user_id = 2
205
248
  */
206
249
  userId: number;
207
250
  /**
208
- * @generated from protobuf field: optional resources.timestamp.Timestamp created_at = 3;
251
+ * @generated from protobuf field: optional resources.timestamp.Timestamp created_at = 3
209
252
  */
210
253
  createdAt?: Timestamp;
211
254
  /**
212
- * @generated from protobuf field: optional resources.timestamp.Timestamp started_at = 4;
255
+ * @generated from protobuf field: optional resources.timestamp.Timestamp started_at = 4
213
256
  */
214
257
  startedAt?: Timestamp;
215
258
  /**
216
- * @generated from protobuf field: optional resources.timestamp.Timestamp ends_at = 5;
259
+ * @generated from protobuf field: optional resources.timestamp.Timestamp ends_at = 5
217
260
  */
218
261
  endsAt?: Timestamp;
219
262
  /**
220
- * @generated from protobuf field: optional resources.timestamp.Timestamp ended_at = 6;
263
+ * @generated from protobuf field: optional resources.timestamp.Timestamp ended_at = 6
221
264
  */
222
265
  endedAt?: Timestamp;
223
266
  }
224
267
  /**
225
- * @dbscanner: json
226
- *
227
- * @generated from protobuf message resources.qualifications.ExamResponses
268
+ * @generated from protobuf message resources.qualifications.exam.ExamResponses
228
269
  */
229
270
  export interface ExamResponses {
230
271
  /**
231
- * @generated from protobuf field: uint64 qualification_id = 1;
272
+ * @generated from protobuf field: int64 qualification_id = 1
232
273
  */
233
274
  qualificationId: number;
234
275
  /**
235
- * @generated from protobuf field: int32 user_id = 2;
276
+ * @generated from protobuf field: int32 user_id = 2
236
277
  */
237
278
  userId: number;
238
279
  /**
239
- * @generated from protobuf field: repeated resources.qualifications.ExamResponse responses = 3;
280
+ * @generated from protobuf field: repeated resources.qualifications.exam.ExamResponse responses = 3
240
281
  */
241
282
  responses: ExamResponse[];
242
283
  }
243
284
  /**
244
- * @generated from protobuf message resources.qualifications.ExamResponse
285
+ * @generated from protobuf message resources.qualifications.exam.ExamResponse
245
286
  */
246
287
  export interface ExamResponse {
247
288
  /**
248
- * @generated from protobuf field: uint64 question_id = 1;
289
+ * @generated from protobuf field: int64 question_id = 1
249
290
  */
250
291
  questionId: number;
251
292
  /**
252
- * @generated from protobuf field: int32 user_id = 2;
293
+ * @generated from protobuf field: int32 user_id = 2
253
294
  */
254
295
  userId: number;
255
296
  /**
256
- * @generated from protobuf field: resources.qualifications.ExamQuestion question = 3;
297
+ * @generated from protobuf field: resources.qualifications.exam.ExamQuestion question = 3
257
298
  */
258
299
  question?: ExamQuestion;
259
300
  /**
260
- * @generated from protobuf field: resources.qualifications.ExamResponseData response = 4;
301
+ * @generated from protobuf field: resources.qualifications.exam.ExamResponseData response = 4
261
302
  */
262
303
  response?: ExamResponseData;
263
304
  }
264
305
  /**
265
- * @generated from protobuf message resources.qualifications.ExamResponseData
306
+ * @generated from protobuf message resources.qualifications.exam.ExamResponseData
266
307
  */
267
308
  export interface ExamResponseData {
268
309
  /**
@@ -271,31 +312,31 @@ export interface ExamResponseData {
271
312
  response: {
272
313
  oneofKind: "separator";
273
314
  /**
274
- * @generated from protobuf field: resources.qualifications.ExamResponseSeparator separator = 3;
315
+ * @generated from protobuf field: resources.qualifications.exam.ExamResponseSeparator separator = 3
275
316
  */
276
317
  separator: ExamResponseSeparator;
277
318
  } | {
278
319
  oneofKind: "yesno";
279
320
  /**
280
- * @generated from protobuf field: resources.qualifications.ExamResponseYesNo yesno = 4;
321
+ * @generated from protobuf field: resources.qualifications.exam.ExamResponseYesNo yesno = 4
281
322
  */
282
323
  yesno: ExamResponseYesNo;
283
324
  } | {
284
325
  oneofKind: "freeText";
285
326
  /**
286
- * @generated from protobuf field: resources.qualifications.ExamResponseText free_text = 5;
327
+ * @generated from protobuf field: resources.qualifications.exam.ExamResponseText free_text = 5
287
328
  */
288
329
  freeText: ExamResponseText;
289
330
  } | {
290
331
  oneofKind: "singleChoice";
291
332
  /**
292
- * @generated from protobuf field: resources.qualifications.ExamResponseSingleChoice single_choice = 6;
333
+ * @generated from protobuf field: resources.qualifications.exam.ExamResponseSingleChoice single_choice = 6
293
334
  */
294
335
  singleChoice: ExamResponseSingleChoice;
295
336
  } | {
296
337
  oneofKind: "multipleChoice";
297
338
  /**
298
- * @generated from protobuf field: resources.qualifications.ExamResponseMultipleChoice multiple_choice = 7;
339
+ * @generated from protobuf field: resources.qualifications.exam.ExamResponseMultipleChoice multiple_choice = 7
299
340
  */
300
341
  multipleChoice: ExamResponseMultipleChoice;
301
342
  } | {
@@ -303,85 +344,185 @@ export interface ExamResponseData {
303
344
  };
304
345
  }
305
346
  /**
306
- * @generated from protobuf message resources.qualifications.ExamResponseSeparator
347
+ * @generated from protobuf message resources.qualifications.exam.ExamResponseSeparator
307
348
  */
308
349
  export interface ExamResponseSeparator {
309
350
  }
310
351
  /**
311
- * @generated from protobuf message resources.qualifications.ExamResponseYesNo
352
+ * @generated from protobuf message resources.qualifications.exam.ExamResponseYesNo
312
353
  */
313
354
  export interface ExamResponseYesNo {
314
355
  /**
315
- * @generated from protobuf field: bool value = 1;
356
+ * @generated from protobuf field: bool value = 1
316
357
  */
317
358
  value: boolean;
318
359
  }
319
360
  /**
320
- * @generated from protobuf message resources.qualifications.ExamResponseText
361
+ * @generated from protobuf message resources.qualifications.exam.ExamResponseText
321
362
  */
322
363
  export interface ExamResponseText {
323
364
  /**
324
- * @sanitize: method=StripTags
325
- *
326
- * @generated from protobuf field: string text = 1;
365
+ * @generated from protobuf field: string text = 1
327
366
  */
328
367
  text: string; // 0.5 Megabyte
329
368
  }
330
369
  /**
331
- * @generated from protobuf message resources.qualifications.ExamResponseSingleChoice
370
+ * @generated from protobuf message resources.qualifications.exam.ExamResponseSingleChoice
332
371
  */
333
372
  export interface ExamResponseSingleChoice {
334
373
  /**
335
- * @sanitize: method=StripTags
336
- *
337
- * @generated from protobuf field: string choice = 1;
374
+ * @generated from protobuf field: string choice = 1
338
375
  */
339
376
  choice: string;
340
377
  }
341
378
  /**
342
- * @generated from protobuf message resources.qualifications.ExamResponseMultipleChoice
379
+ * @generated from protobuf message resources.qualifications.exam.ExamResponseMultipleChoice
343
380
  */
344
381
  export interface ExamResponseMultipleChoice {
345
382
  /**
346
- * @sanitize: method=StripTags
347
- *
348
- * @generated from protobuf field: repeated string choices = 1;
383
+ * @generated from protobuf field: repeated string choices = 1
349
384
  */
350
385
  choices: string[];
351
386
  }
352
387
  /**
353
- * @dbscanner: json
354
- *
355
- * @generated from protobuf message resources.qualifications.ExamGrading
388
+ * @generated from protobuf message resources.qualifications.exam.ExamGrading
356
389
  */
357
390
  export interface ExamGrading {
358
391
  /**
359
- * @generated from protobuf field: repeated resources.qualifications.ExamGradingResponse responses = 1;
392
+ * @generated from protobuf field: repeated resources.qualifications.exam.ExamGradingResponse responses = 1
360
393
  */
361
394
  responses: ExamGradingResponse[];
362
395
  }
363
396
  /**
364
- * @generated from protobuf message resources.qualifications.ExamGradingResponse
397
+ * @generated from protobuf message resources.qualifications.exam.ExamGradingResponse
365
398
  */
366
399
  export interface ExamGradingResponse {
367
400
  /**
368
- * @generated from protobuf field: uint64 question_id = 1;
401
+ * @generated from protobuf field: int64 question_id = 1
369
402
  */
370
403
  questionId: number;
371
404
  /**
372
- * @generated from protobuf field: float points = 2;
405
+ * @generated from protobuf field: float points = 2
373
406
  */
374
407
  points: number;
375
408
  /**
376
- * @generated from protobuf field: optional bool checked = 3;
409
+ * @generated from protobuf field: optional bool checked = 3
377
410
  */
378
411
  checked?: boolean;
379
412
  }
413
+ /**
414
+ * @generated from protobuf enum resources.qualifications.exam.QualificationExamMode
415
+ */
416
+ export enum QualificationExamMode {
417
+ /**
418
+ * @generated from protobuf enum value: QUALIFICATION_EXAM_MODE_UNSPECIFIED = 0;
419
+ */
420
+ UNSPECIFIED = 0,
421
+ /**
422
+ * @generated from protobuf enum value: QUALIFICATION_EXAM_MODE_DISABLED = 1;
423
+ */
424
+ DISABLED = 1,
425
+ /**
426
+ * @generated from protobuf enum value: QUALIFICATION_EXAM_MODE_REQUEST_NEEDED = 2;
427
+ */
428
+ REQUEST_NEEDED = 2,
429
+ /**
430
+ * @generated from protobuf enum value: QUALIFICATION_EXAM_MODE_ENABLED = 3;
431
+ */
432
+ ENABLED = 3
433
+ }
434
+ /**
435
+ * @generated from protobuf enum resources.qualifications.exam.AutoGradeMode
436
+ */
437
+ export enum AutoGradeMode {
438
+ /**
439
+ * @generated from protobuf enum value: AUTO_GRADE_MODE_UNSPECIFIED = 0;
440
+ */
441
+ UNSPECIFIED = 0,
442
+ /**
443
+ * @generated from protobuf enum value: AUTO_GRADE_MODE_STRICT = 1;
444
+ */
445
+ STRICT = 1,
446
+ /**
447
+ * @generated from protobuf enum value: AUTO_GRADE_MODE_PARTIAL_CREDIT = 2;
448
+ */
449
+ PARTIAL_CREDIT = 2
450
+ }
451
+ // @generated message type with reflection information, may provide speed optimized methods
452
+ class QualificationExamSettings$Type extends MessageType<QualificationExamSettings> {
453
+ constructor() {
454
+ super("resources.qualifications.exam.QualificationExamSettings", [
455
+ { no: 1, name: "time", kind: "message", T: () => Duration, options: { "buf.validate.field": { required: true, duration: { lt: { seconds: "1036800" }, gte: { seconds: "300" } } } } },
456
+ { no: 2, name: "auto_grade", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
457
+ { no: 3, name: "auto_grade_mode", kind: "enum", T: () => ["resources.qualifications.exam.AutoGradeMode", AutoGradeMode, "AUTO_GRADE_MODE_"], options: { "buf.validate.field": { enum: { definedOnly: true } } } },
458
+ { no: 4, name: "minimum_points", kind: "scalar", T: 5 /*ScalarType.INT32*/ }
459
+ ], { "codegen.dbscanner.dbscanner": { enabled: true } });
460
+ }
461
+ create(value?: PartialMessage<QualificationExamSettings>): QualificationExamSettings {
462
+ const message = globalThis.Object.create((this.messagePrototype!));
463
+ message.autoGrade = false;
464
+ message.autoGradeMode = 0;
465
+ message.minimumPoints = 0;
466
+ if (value !== undefined)
467
+ reflectionMergePartial<QualificationExamSettings>(this, message, value);
468
+ return message;
469
+ }
470
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: QualificationExamSettings): QualificationExamSettings {
471
+ let message = target ?? this.create(), end = reader.pos + length;
472
+ while (reader.pos < end) {
473
+ let [fieldNo, wireType] = reader.tag();
474
+ switch (fieldNo) {
475
+ case /* google.protobuf.Duration time */ 1:
476
+ message.time = Duration.internalBinaryRead(reader, reader.uint32(), options, message.time);
477
+ break;
478
+ case /* bool auto_grade */ 2:
479
+ message.autoGrade = reader.bool();
480
+ break;
481
+ case /* resources.qualifications.exam.AutoGradeMode auto_grade_mode */ 3:
482
+ message.autoGradeMode = reader.int32();
483
+ break;
484
+ case /* int32 minimum_points */ 4:
485
+ message.minimumPoints = reader.int32();
486
+ break;
487
+ default:
488
+ let u = options.readUnknownField;
489
+ if (u === "throw")
490
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
491
+ let d = reader.skip(wireType);
492
+ if (u !== false)
493
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
494
+ }
495
+ }
496
+ return message;
497
+ }
498
+ internalBinaryWrite(message: QualificationExamSettings, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
499
+ /* google.protobuf.Duration time = 1; */
500
+ if (message.time)
501
+ Duration.internalBinaryWrite(message.time, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
502
+ /* bool auto_grade = 2; */
503
+ if (message.autoGrade !== false)
504
+ writer.tag(2, WireType.Varint).bool(message.autoGrade);
505
+ /* resources.qualifications.exam.AutoGradeMode auto_grade_mode = 3; */
506
+ if (message.autoGradeMode !== 0)
507
+ writer.tag(3, WireType.Varint).int32(message.autoGradeMode);
508
+ /* int32 minimum_points = 4; */
509
+ if (message.minimumPoints !== 0)
510
+ writer.tag(4, WireType.Varint).int32(message.minimumPoints);
511
+ let u = options.writeUnknownFields;
512
+ if (u !== false)
513
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
514
+ return writer;
515
+ }
516
+ }
517
+ /**
518
+ * @generated MessageType for protobuf message resources.qualifications.exam.QualificationExamSettings
519
+ */
520
+ export const QualificationExamSettings = new QualificationExamSettings$Type();
380
521
  // @generated message type with reflection information, may provide speed optimized methods
381
522
  class ExamQuestions$Type extends MessageType<ExamQuestions> {
382
523
  constructor() {
383
- super("resources.qualifications.ExamQuestions", [
384
- { no: 1, name: "questions", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => ExamQuestion, options: { "validate.rules": { repeated: { maxItems: "50" } } } }
524
+ super("resources.qualifications.exam.ExamQuestions", [
525
+ { no: 1, name: "questions", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => ExamQuestion, options: { "buf.validate.field": { repeated: { maxItems: "100" } } } }
385
526
  ]);
386
527
  }
387
528
  create(value?: PartialMessage<ExamQuestions>): ExamQuestions {
@@ -396,7 +537,7 @@ class ExamQuestions$Type extends MessageType<ExamQuestions> {
396
537
  while (reader.pos < end) {
397
538
  let [fieldNo, wireType] = reader.tag();
398
539
  switch (fieldNo) {
399
- case /* repeated resources.qualifications.ExamQuestion questions */ 1:
540
+ case /* repeated resources.qualifications.exam.ExamQuestion questions */ 1:
400
541
  message.questions.push(ExamQuestion.internalBinaryRead(reader, reader.uint32(), options));
401
542
  break;
402
543
  default:
@@ -411,7 +552,7 @@ class ExamQuestions$Type extends MessageType<ExamQuestions> {
411
552
  return message;
412
553
  }
413
554
  internalBinaryWrite(message: ExamQuestions, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
414
- /* repeated resources.qualifications.ExamQuestion questions = 1; */
555
+ /* repeated resources.qualifications.exam.ExamQuestion questions = 1; */
415
556
  for (let i = 0; i < message.questions.length; i++)
416
557
  ExamQuestion.internalBinaryWrite(message.questions[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();
417
558
  let u = options.writeUnknownFields;
@@ -421,22 +562,23 @@ class ExamQuestions$Type extends MessageType<ExamQuestions> {
421
562
  }
422
563
  }
423
564
  /**
424
- * @generated MessageType for protobuf message resources.qualifications.ExamQuestions
565
+ * @generated MessageType for protobuf message resources.qualifications.exam.ExamQuestions
425
566
  */
426
567
  export const ExamQuestions = new ExamQuestions$Type();
427
568
  // @generated message type with reflection information, may provide speed optimized methods
428
569
  class ExamQuestion$Type extends MessageType<ExamQuestion> {
429
570
  constructor() {
430
- super("resources.qualifications.ExamQuestion", [
431
- { no: 1, name: "id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
432
- { no: 2, name: "qualification_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
571
+ super("resources.qualifications.exam.ExamQuestion", [
572
+ { no: 1, name: "id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
573
+ { no: 2, name: "qualification_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
433
574
  { no: 3, name: "created_at", kind: "message", T: () => Timestamp },
434
575
  { no: 4, name: "updated_at", kind: "message", T: () => Timestamp },
435
- { no: 5, name: "title", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { minLen: "3", maxLen: "512" } } } },
436
- { no: 6, name: "description", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxLen: "1024" } } } },
437
- { no: 7, name: "data", kind: "message", T: () => ExamQuestionData, options: { "validate.rules": { message: { required: true } } } },
576
+ { no: 5, name: "title", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "512" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } },
577
+ { no: 6, name: "description", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "1024" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } },
578
+ { no: 7, name: "data", kind: "message", T: () => ExamQuestionData, options: { "buf.validate.field": { required: true } } },
438
579
  { no: 8, name: "answer", kind: "message", T: () => ExamQuestionAnswerData },
439
- { no: 9, name: "points", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/, options: { "validate.rules": { int32: { gte: 0 } } } }
580
+ { no: 9, name: "points", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { int32: { gte: 0 } } } },
581
+ { no: 10, name: "order", kind: "scalar", T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { int32: { lte: 1000, gte: 0 } } } }
440
582
  ]);
441
583
  }
442
584
  create(value?: PartialMessage<ExamQuestion>): ExamQuestion {
@@ -444,6 +586,7 @@ class ExamQuestion$Type extends MessageType<ExamQuestion> {
444
586
  message.id = 0;
445
587
  message.qualificationId = 0;
446
588
  message.title = "";
589
+ message.order = 0;
447
590
  if (value !== undefined)
448
591
  reflectionMergePartial<ExamQuestion>(this, message, value);
449
592
  return message;
@@ -453,11 +596,11 @@ class ExamQuestion$Type extends MessageType<ExamQuestion> {
453
596
  while (reader.pos < end) {
454
597
  let [fieldNo, wireType] = reader.tag();
455
598
  switch (fieldNo) {
456
- case /* uint64 id */ 1:
457
- message.id = reader.uint64().toNumber();
599
+ case /* int64 id */ 1:
600
+ message.id = reader.int64().toNumber();
458
601
  break;
459
- case /* uint64 qualification_id */ 2:
460
- message.qualificationId = reader.uint64().toNumber();
602
+ case /* int64 qualification_id */ 2:
603
+ message.qualificationId = reader.int64().toNumber();
461
604
  break;
462
605
  case /* optional resources.timestamp.Timestamp created_at */ 3:
463
606
  message.createdAt = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.createdAt);
@@ -471,15 +614,18 @@ class ExamQuestion$Type extends MessageType<ExamQuestion> {
471
614
  case /* optional string description */ 6:
472
615
  message.description = reader.string();
473
616
  break;
474
- case /* resources.qualifications.ExamQuestionData data */ 7:
617
+ case /* resources.qualifications.exam.ExamQuestionData data */ 7:
475
618
  message.data = ExamQuestionData.internalBinaryRead(reader, reader.uint32(), options, message.data);
476
619
  break;
477
- case /* optional resources.qualifications.ExamQuestionAnswerData answer */ 8:
620
+ case /* optional resources.qualifications.exam.ExamQuestionAnswerData answer */ 8:
478
621
  message.answer = ExamQuestionAnswerData.internalBinaryRead(reader, reader.uint32(), options, message.answer);
479
622
  break;
480
623
  case /* optional int32 points */ 9:
481
624
  message.points = reader.int32();
482
625
  break;
626
+ case /* int32 order */ 10:
627
+ message.order = reader.int32();
628
+ break;
483
629
  default:
484
630
  let u = options.readUnknownField;
485
631
  if (u === "throw")
@@ -492,12 +638,12 @@ class ExamQuestion$Type extends MessageType<ExamQuestion> {
492
638
  return message;
493
639
  }
494
640
  internalBinaryWrite(message: ExamQuestion, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
495
- /* uint64 id = 1; */
641
+ /* int64 id = 1; */
496
642
  if (message.id !== 0)
497
- writer.tag(1, WireType.Varint).uint64(message.id);
498
- /* uint64 qualification_id = 2; */
643
+ writer.tag(1, WireType.Varint).int64(message.id);
644
+ /* int64 qualification_id = 2; */
499
645
  if (message.qualificationId !== 0)
500
- writer.tag(2, WireType.Varint).uint64(message.qualificationId);
646
+ writer.tag(2, WireType.Varint).int64(message.qualificationId);
501
647
  /* optional resources.timestamp.Timestamp created_at = 3; */
502
648
  if (message.createdAt)
503
649
  Timestamp.internalBinaryWrite(message.createdAt, writer.tag(3, WireType.LengthDelimited).fork(), options).join();
@@ -510,15 +656,18 @@ class ExamQuestion$Type extends MessageType<ExamQuestion> {
510
656
  /* optional string description = 6; */
511
657
  if (message.description !== undefined)
512
658
  writer.tag(6, WireType.LengthDelimited).string(message.description);
513
- /* resources.qualifications.ExamQuestionData data = 7; */
659
+ /* resources.qualifications.exam.ExamQuestionData data = 7; */
514
660
  if (message.data)
515
661
  ExamQuestionData.internalBinaryWrite(message.data, writer.tag(7, WireType.LengthDelimited).fork(), options).join();
516
- /* optional resources.qualifications.ExamQuestionAnswerData answer = 8; */
662
+ /* optional resources.qualifications.exam.ExamQuestionAnswerData answer = 8; */
517
663
  if (message.answer)
518
664
  ExamQuestionAnswerData.internalBinaryWrite(message.answer, writer.tag(8, WireType.LengthDelimited).fork(), options).join();
519
665
  /* optional int32 points = 9; */
520
666
  if (message.points !== undefined)
521
667
  writer.tag(9, WireType.Varint).int32(message.points);
668
+ /* int32 order = 10; */
669
+ if (message.order !== 0)
670
+ writer.tag(10, WireType.Varint).int32(message.order);
522
671
  let u = options.writeUnknownFields;
523
672
  if (u !== false)
524
673
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -526,20 +675,20 @@ class ExamQuestion$Type extends MessageType<ExamQuestion> {
526
675
  }
527
676
  }
528
677
  /**
529
- * @generated MessageType for protobuf message resources.qualifications.ExamQuestion
678
+ * @generated MessageType for protobuf message resources.qualifications.exam.ExamQuestion
530
679
  */
531
680
  export const ExamQuestion = new ExamQuestion$Type();
532
681
  // @generated message type with reflection information, may provide speed optimized methods
533
682
  class ExamQuestionData$Type extends MessageType<ExamQuestionData> {
534
683
  constructor() {
535
- super("resources.qualifications.ExamQuestionData", [
684
+ super("resources.qualifications.exam.ExamQuestionData", [
536
685
  { no: 1, name: "separator", kind: "message", oneof: "data", T: () => ExamQuestionSeparator },
537
686
  { no: 6, name: "image", kind: "message", oneof: "data", T: () => ExamQuestionImage },
538
687
  { no: 2, name: "yesno", kind: "message", oneof: "data", T: () => ExamQuestionYesNo },
539
688
  { no: 3, name: "free_text", kind: "message", oneof: "data", T: () => ExamQuestionText },
540
689
  { no: 4, name: "single_choice", kind: "message", oneof: "data", T: () => ExamQuestionSingleChoice },
541
690
  { no: 5, name: "multiple_choice", kind: "message", oneof: "data", T: () => ExamQuestionMultipleChoice }
542
- ]);
691
+ ], { "codegen.dbscanner.dbscanner": { enabled: true } });
543
692
  }
544
693
  create(value?: PartialMessage<ExamQuestionData>): ExamQuestionData {
545
694
  const message = globalThis.Object.create((this.messagePrototype!));
@@ -553,37 +702,37 @@ class ExamQuestionData$Type extends MessageType<ExamQuestionData> {
553
702
  while (reader.pos < end) {
554
703
  let [fieldNo, wireType] = reader.tag();
555
704
  switch (fieldNo) {
556
- case /* resources.qualifications.ExamQuestionSeparator separator */ 1:
705
+ case /* resources.qualifications.exam.ExamQuestionSeparator separator */ 1:
557
706
  message.data = {
558
707
  oneofKind: "separator",
559
708
  separator: ExamQuestionSeparator.internalBinaryRead(reader, reader.uint32(), options, (message.data as any).separator)
560
709
  };
561
710
  break;
562
- case /* resources.qualifications.ExamQuestionImage image */ 6:
711
+ case /* resources.qualifications.exam.ExamQuestionImage image */ 6:
563
712
  message.data = {
564
713
  oneofKind: "image",
565
714
  image: ExamQuestionImage.internalBinaryRead(reader, reader.uint32(), options, (message.data as any).image)
566
715
  };
567
716
  break;
568
- case /* resources.qualifications.ExamQuestionYesNo yesno */ 2:
717
+ case /* resources.qualifications.exam.ExamQuestionYesNo yesno */ 2:
569
718
  message.data = {
570
719
  oneofKind: "yesno",
571
720
  yesno: ExamQuestionYesNo.internalBinaryRead(reader, reader.uint32(), options, (message.data as any).yesno)
572
721
  };
573
722
  break;
574
- case /* resources.qualifications.ExamQuestionText free_text */ 3:
723
+ case /* resources.qualifications.exam.ExamQuestionText free_text */ 3:
575
724
  message.data = {
576
725
  oneofKind: "freeText",
577
726
  freeText: ExamQuestionText.internalBinaryRead(reader, reader.uint32(), options, (message.data as any).freeText)
578
727
  };
579
728
  break;
580
- case /* resources.qualifications.ExamQuestionSingleChoice single_choice */ 4:
729
+ case /* resources.qualifications.exam.ExamQuestionSingleChoice single_choice */ 4:
581
730
  message.data = {
582
731
  oneofKind: "singleChoice",
583
732
  singleChoice: ExamQuestionSingleChoice.internalBinaryRead(reader, reader.uint32(), options, (message.data as any).singleChoice)
584
733
  };
585
734
  break;
586
- case /* resources.qualifications.ExamQuestionMultipleChoice multiple_choice */ 5:
735
+ case /* resources.qualifications.exam.ExamQuestionMultipleChoice multiple_choice */ 5:
587
736
  message.data = {
588
737
  oneofKind: "multipleChoice",
589
738
  multipleChoice: ExamQuestionMultipleChoice.internalBinaryRead(reader, reader.uint32(), options, (message.data as any).multipleChoice)
@@ -601,22 +750,22 @@ class ExamQuestionData$Type extends MessageType<ExamQuestionData> {
601
750
  return message;
602
751
  }
603
752
  internalBinaryWrite(message: ExamQuestionData, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
604
- /* resources.qualifications.ExamQuestionSeparator separator = 1; */
753
+ /* resources.qualifications.exam.ExamQuestionSeparator separator = 1; */
605
754
  if (message.data.oneofKind === "separator")
606
755
  ExamQuestionSeparator.internalBinaryWrite(message.data.separator, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
607
- /* resources.qualifications.ExamQuestionYesNo yesno = 2; */
756
+ /* resources.qualifications.exam.ExamQuestionYesNo yesno = 2; */
608
757
  if (message.data.oneofKind === "yesno")
609
758
  ExamQuestionYesNo.internalBinaryWrite(message.data.yesno, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
610
- /* resources.qualifications.ExamQuestionText free_text = 3; */
759
+ /* resources.qualifications.exam.ExamQuestionText free_text = 3; */
611
760
  if (message.data.oneofKind === "freeText")
612
761
  ExamQuestionText.internalBinaryWrite(message.data.freeText, writer.tag(3, WireType.LengthDelimited).fork(), options).join();
613
- /* resources.qualifications.ExamQuestionSingleChoice single_choice = 4; */
762
+ /* resources.qualifications.exam.ExamQuestionSingleChoice single_choice = 4; */
614
763
  if (message.data.oneofKind === "singleChoice")
615
764
  ExamQuestionSingleChoice.internalBinaryWrite(message.data.singleChoice, writer.tag(4, WireType.LengthDelimited).fork(), options).join();
616
- /* resources.qualifications.ExamQuestionMultipleChoice multiple_choice = 5; */
765
+ /* resources.qualifications.exam.ExamQuestionMultipleChoice multiple_choice = 5; */
617
766
  if (message.data.oneofKind === "multipleChoice")
618
767
  ExamQuestionMultipleChoice.internalBinaryWrite(message.data.multipleChoice, writer.tag(5, WireType.LengthDelimited).fork(), options).join();
619
- /* resources.qualifications.ExamQuestionImage image = 6; */
768
+ /* resources.qualifications.exam.ExamQuestionImage image = 6; */
620
769
  if (message.data.oneofKind === "image")
621
770
  ExamQuestionImage.internalBinaryWrite(message.data.image, writer.tag(6, WireType.LengthDelimited).fork(), options).join();
622
771
  let u = options.writeUnknownFields;
@@ -626,13 +775,13 @@ class ExamQuestionData$Type extends MessageType<ExamQuestionData> {
626
775
  }
627
776
  }
628
777
  /**
629
- * @generated MessageType for protobuf message resources.qualifications.ExamQuestionData
778
+ * @generated MessageType for protobuf message resources.qualifications.exam.ExamQuestionData
630
779
  */
631
780
  export const ExamQuestionData = new ExamQuestionData$Type();
632
781
  // @generated message type with reflection information, may provide speed optimized methods
633
782
  class ExamQuestionSeparator$Type extends MessageType<ExamQuestionSeparator> {
634
783
  constructor() {
635
- super("resources.qualifications.ExamQuestionSeparator", []);
784
+ super("resources.qualifications.exam.ExamQuestionSeparator", []);
636
785
  }
637
786
  create(value?: PartialMessage<ExamQuestionSeparator>): ExamQuestionSeparator {
638
787
  const message = globalThis.Object.create((this.messagePrototype!));
@@ -664,15 +813,15 @@ class ExamQuestionSeparator$Type extends MessageType<ExamQuestionSeparator> {
664
813
  }
665
814
  }
666
815
  /**
667
- * @generated MessageType for protobuf message resources.qualifications.ExamQuestionSeparator
816
+ * @generated MessageType for protobuf message resources.qualifications.exam.ExamQuestionSeparator
668
817
  */
669
818
  export const ExamQuestionSeparator = new ExamQuestionSeparator$Type();
670
819
  // @generated message type with reflection information, may provide speed optimized methods
671
820
  class ExamQuestionImage$Type extends MessageType<ExamQuestionImage> {
672
821
  constructor() {
673
- super("resources.qualifications.ExamQuestionImage", [
822
+ super("resources.qualifications.exam.ExamQuestionImage", [
674
823
  { no: 1, name: "image", kind: "message", T: () => File },
675
- { no: 2, name: "alt", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxLen: "128" } } } }
824
+ { no: 2, name: "alt", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "128" } } } }
676
825
  ]);
677
826
  }
678
827
  create(value?: PartialMessage<ExamQuestionImage>): ExamQuestionImage {
@@ -686,7 +835,7 @@ class ExamQuestionImage$Type extends MessageType<ExamQuestionImage> {
686
835
  while (reader.pos < end) {
687
836
  let [fieldNo, wireType] = reader.tag();
688
837
  switch (fieldNo) {
689
- case /* resources.filestore.File image */ 1:
838
+ case /* resources.file.File image */ 1:
690
839
  message.image = File.internalBinaryRead(reader, reader.uint32(), options, message.image);
691
840
  break;
692
841
  case /* optional string alt */ 2:
@@ -704,7 +853,7 @@ class ExamQuestionImage$Type extends MessageType<ExamQuestionImage> {
704
853
  return message;
705
854
  }
706
855
  internalBinaryWrite(message: ExamQuestionImage, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
707
- /* resources.filestore.File image = 1; */
856
+ /* resources.file.File image = 1; */
708
857
  if (message.image)
709
858
  File.internalBinaryWrite(message.image, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
710
859
  /* optional string alt = 2; */
@@ -717,13 +866,13 @@ class ExamQuestionImage$Type extends MessageType<ExamQuestionImage> {
717
866
  }
718
867
  }
719
868
  /**
720
- * @generated MessageType for protobuf message resources.qualifications.ExamQuestionImage
869
+ * @generated MessageType for protobuf message resources.qualifications.exam.ExamQuestionImage
721
870
  */
722
871
  export const ExamQuestionImage = new ExamQuestionImage$Type();
723
872
  // @generated message type with reflection information, may provide speed optimized methods
724
873
  class ExamQuestionYesNo$Type extends MessageType<ExamQuestionYesNo> {
725
874
  constructor() {
726
- super("resources.qualifications.ExamQuestionYesNo", []);
875
+ super("resources.qualifications.exam.ExamQuestionYesNo", []);
727
876
  }
728
877
  create(value?: PartialMessage<ExamQuestionYesNo>): ExamQuestionYesNo {
729
878
  const message = globalThis.Object.create((this.messagePrototype!));
@@ -755,13 +904,13 @@ class ExamQuestionYesNo$Type extends MessageType<ExamQuestionYesNo> {
755
904
  }
756
905
  }
757
906
  /**
758
- * @generated MessageType for protobuf message resources.qualifications.ExamQuestionYesNo
907
+ * @generated MessageType for protobuf message resources.qualifications.exam.ExamQuestionYesNo
759
908
  */
760
909
  export const ExamQuestionYesNo = new ExamQuestionYesNo$Type();
761
910
  // @generated message type with reflection information, may provide speed optimized methods
762
911
  class ExamQuestionText$Type extends MessageType<ExamQuestionText> {
763
912
  constructor() {
764
- super("resources.qualifications.ExamQuestionText", [
913
+ super("resources.qualifications.exam.ExamQuestionText", [
765
914
  { no: 1, name: "min_length", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
766
915
  { no: 2, name: "max_length", kind: "scalar", T: 5 /*ScalarType.INT32*/ }
767
916
  ]);
@@ -810,14 +959,14 @@ class ExamQuestionText$Type extends MessageType<ExamQuestionText> {
810
959
  }
811
960
  }
812
961
  /**
813
- * @generated MessageType for protobuf message resources.qualifications.ExamQuestionText
962
+ * @generated MessageType for protobuf message resources.qualifications.exam.ExamQuestionText
814
963
  */
815
964
  export const ExamQuestionText = new ExamQuestionText$Type();
816
965
  // @generated message type with reflection information, may provide speed optimized methods
817
966
  class ExamQuestionSingleChoice$Type extends MessageType<ExamQuestionSingleChoice> {
818
967
  constructor() {
819
- super("resources.qualifications.ExamQuestionSingleChoice", [
820
- { no: 1, name: "choices", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { repeated: { maxItems: "10" } } } }
968
+ super("resources.qualifications.exam.ExamQuestionSingleChoice", [
969
+ { no: 1, name: "choices", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { repeated: { maxItems: "10" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } }
821
970
  ]);
822
971
  }
823
972
  create(value?: PartialMessage<ExamQuestionSingleChoice>): ExamQuestionSingleChoice {
@@ -857,15 +1006,15 @@ class ExamQuestionSingleChoice$Type extends MessageType<ExamQuestionSingleChoice
857
1006
  }
858
1007
  }
859
1008
  /**
860
- * @generated MessageType for protobuf message resources.qualifications.ExamQuestionSingleChoice
1009
+ * @generated MessageType for protobuf message resources.qualifications.exam.ExamQuestionSingleChoice
861
1010
  */
862
1011
  export const ExamQuestionSingleChoice = new ExamQuestionSingleChoice$Type();
863
1012
  // @generated message type with reflection information, may provide speed optimized methods
864
1013
  class ExamQuestionMultipleChoice$Type extends MessageType<ExamQuestionMultipleChoice> {
865
1014
  constructor() {
866
- super("resources.qualifications.ExamQuestionMultipleChoice", [
867
- { no: 1, name: "choices", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { repeated: { maxItems: "10" } } } },
868
- { no: 2, name: "limit", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/, options: { "validate.rules": { int32: { lte: 10, gte: 0 } } } }
1015
+ super("resources.qualifications.exam.ExamQuestionMultipleChoice", [
1016
+ { no: 1, name: "choices", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { repeated: { maxItems: "10" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } },
1017
+ { no: 2, name: "limit", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { int32: { lte: 10, gte: 0 } } } }
869
1018
  ]);
870
1019
  }
871
1020
  create(value?: PartialMessage<ExamQuestionMultipleChoice>): ExamQuestionMultipleChoice {
@@ -911,19 +1060,24 @@ class ExamQuestionMultipleChoice$Type extends MessageType<ExamQuestionMultipleCh
911
1060
  }
912
1061
  }
913
1062
  /**
914
- * @generated MessageType for protobuf message resources.qualifications.ExamQuestionMultipleChoice
1063
+ * @generated MessageType for protobuf message resources.qualifications.exam.ExamQuestionMultipleChoice
915
1064
  */
916
1065
  export const ExamQuestionMultipleChoice = new ExamQuestionMultipleChoice$Type();
917
1066
  // @generated message type with reflection information, may provide speed optimized methods
918
1067
  class ExamQuestionAnswerData$Type extends MessageType<ExamQuestionAnswerData> {
919
1068
  constructor() {
920
- super("resources.qualifications.ExamQuestionAnswerData", [
921
- { no: 1, name: "answer_key", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxLen: "1024" } } } }
922
- ]);
1069
+ super("resources.qualifications.exam.ExamQuestionAnswerData", [
1070
+ { no: 1, name: "answer_key", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "1024" } } } },
1071
+ { no: 4, name: "yesno", kind: "message", oneof: "answer", T: () => ExamResponseYesNo },
1072
+ { no: 5, name: "free_text", kind: "message", oneof: "answer", T: () => ExamResponseText },
1073
+ { no: 6, name: "single_choice", kind: "message", oneof: "answer", T: () => ExamResponseSingleChoice },
1074
+ { no: 7, name: "multiple_choice", kind: "message", oneof: "answer", T: () => ExamResponseMultipleChoice }
1075
+ ], { "codegen.dbscanner.dbscanner": { enabled: true } });
923
1076
  }
924
1077
  create(value?: PartialMessage<ExamQuestionAnswerData>): ExamQuestionAnswerData {
925
1078
  const message = globalThis.Object.create((this.messagePrototype!));
926
1079
  message.answerKey = "";
1080
+ message.answer = { oneofKind: undefined };
927
1081
  if (value !== undefined)
928
1082
  reflectionMergePartial<ExamQuestionAnswerData>(this, message, value);
929
1083
  return message;
@@ -936,6 +1090,30 @@ class ExamQuestionAnswerData$Type extends MessageType<ExamQuestionAnswerData> {
936
1090
  case /* string answer_key */ 1:
937
1091
  message.answerKey = reader.string();
938
1092
  break;
1093
+ case /* resources.qualifications.exam.ExamResponseYesNo yesno */ 4:
1094
+ message.answer = {
1095
+ oneofKind: "yesno",
1096
+ yesno: ExamResponseYesNo.internalBinaryRead(reader, reader.uint32(), options, (message.answer as any).yesno)
1097
+ };
1098
+ break;
1099
+ case /* resources.qualifications.exam.ExamResponseText free_text */ 5:
1100
+ message.answer = {
1101
+ oneofKind: "freeText",
1102
+ freeText: ExamResponseText.internalBinaryRead(reader, reader.uint32(), options, (message.answer as any).freeText)
1103
+ };
1104
+ break;
1105
+ case /* resources.qualifications.exam.ExamResponseSingleChoice single_choice */ 6:
1106
+ message.answer = {
1107
+ oneofKind: "singleChoice",
1108
+ singleChoice: ExamResponseSingleChoice.internalBinaryRead(reader, reader.uint32(), options, (message.answer as any).singleChoice)
1109
+ };
1110
+ break;
1111
+ case /* resources.qualifications.exam.ExamResponseMultipleChoice multiple_choice */ 7:
1112
+ message.answer = {
1113
+ oneofKind: "multipleChoice",
1114
+ multipleChoice: ExamResponseMultipleChoice.internalBinaryRead(reader, reader.uint32(), options, (message.answer as any).multipleChoice)
1115
+ };
1116
+ break;
939
1117
  default:
940
1118
  let u = options.readUnknownField;
941
1119
  if (u === "throw")
@@ -951,6 +1129,18 @@ class ExamQuestionAnswerData$Type extends MessageType<ExamQuestionAnswerData> {
951
1129
  /* string answer_key = 1; */
952
1130
  if (message.answerKey !== "")
953
1131
  writer.tag(1, WireType.LengthDelimited).string(message.answerKey);
1132
+ /* resources.qualifications.exam.ExamResponseYesNo yesno = 4; */
1133
+ if (message.answer.oneofKind === "yesno")
1134
+ ExamResponseYesNo.internalBinaryWrite(message.answer.yesno, writer.tag(4, WireType.LengthDelimited).fork(), options).join();
1135
+ /* resources.qualifications.exam.ExamResponseText free_text = 5; */
1136
+ if (message.answer.oneofKind === "freeText")
1137
+ ExamResponseText.internalBinaryWrite(message.answer.freeText, writer.tag(5, WireType.LengthDelimited).fork(), options).join();
1138
+ /* resources.qualifications.exam.ExamResponseSingleChoice single_choice = 6; */
1139
+ if (message.answer.oneofKind === "singleChoice")
1140
+ ExamResponseSingleChoice.internalBinaryWrite(message.answer.singleChoice, writer.tag(6, WireType.LengthDelimited).fork(), options).join();
1141
+ /* resources.qualifications.exam.ExamResponseMultipleChoice multiple_choice = 7; */
1142
+ if (message.answer.oneofKind === "multipleChoice")
1143
+ ExamResponseMultipleChoice.internalBinaryWrite(message.answer.multipleChoice, writer.tag(7, WireType.LengthDelimited).fork(), options).join();
954
1144
  let u = options.writeUnknownFields;
955
1145
  if (u !== false)
956
1146
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -958,14 +1148,14 @@ class ExamQuestionAnswerData$Type extends MessageType<ExamQuestionAnswerData> {
958
1148
  }
959
1149
  }
960
1150
  /**
961
- * @generated MessageType for protobuf message resources.qualifications.ExamQuestionAnswerData
1151
+ * @generated MessageType for protobuf message resources.qualifications.exam.ExamQuestionAnswerData
962
1152
  */
963
1153
  export const ExamQuestionAnswerData = new ExamQuestionAnswerData$Type();
964
1154
  // @generated message type with reflection information, may provide speed optimized methods
965
1155
  class ExamUser$Type extends MessageType<ExamUser> {
966
1156
  constructor() {
967
- super("resources.qualifications.ExamUser", [
968
- { no: 1, name: "qualification_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
1157
+ super("resources.qualifications.exam.ExamUser", [
1158
+ { no: 1, name: "qualification_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
969
1159
  { no: 2, name: "user_id", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
970
1160
  { no: 3, name: "created_at", kind: "message", T: () => Timestamp },
971
1161
  { no: 4, name: "started_at", kind: "message", T: () => Timestamp },
@@ -986,8 +1176,8 @@ class ExamUser$Type extends MessageType<ExamUser> {
986
1176
  while (reader.pos < end) {
987
1177
  let [fieldNo, wireType] = reader.tag();
988
1178
  switch (fieldNo) {
989
- case /* uint64 qualification_id */ 1:
990
- message.qualificationId = reader.uint64().toNumber();
1179
+ case /* int64 qualification_id */ 1:
1180
+ message.qualificationId = reader.int64().toNumber();
991
1181
  break;
992
1182
  case /* int32 user_id */ 2:
993
1183
  message.userId = reader.int32();
@@ -1016,9 +1206,9 @@ class ExamUser$Type extends MessageType<ExamUser> {
1016
1206
  return message;
1017
1207
  }
1018
1208
  internalBinaryWrite(message: ExamUser, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
1019
- /* uint64 qualification_id = 1; */
1209
+ /* int64 qualification_id = 1; */
1020
1210
  if (message.qualificationId !== 0)
1021
- writer.tag(1, WireType.Varint).uint64(message.qualificationId);
1211
+ writer.tag(1, WireType.Varint).int64(message.qualificationId);
1022
1212
  /* int32 user_id = 2; */
1023
1213
  if (message.userId !== 0)
1024
1214
  writer.tag(2, WireType.Varint).int32(message.userId);
@@ -1041,17 +1231,17 @@ class ExamUser$Type extends MessageType<ExamUser> {
1041
1231
  }
1042
1232
  }
1043
1233
  /**
1044
- * @generated MessageType for protobuf message resources.qualifications.ExamUser
1234
+ * @generated MessageType for protobuf message resources.qualifications.exam.ExamUser
1045
1235
  */
1046
1236
  export const ExamUser = new ExamUser$Type();
1047
1237
  // @generated message type with reflection information, may provide speed optimized methods
1048
1238
  class ExamResponses$Type extends MessageType<ExamResponses> {
1049
1239
  constructor() {
1050
- super("resources.qualifications.ExamResponses", [
1051
- { no: 1, name: "qualification_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
1240
+ super("resources.qualifications.exam.ExamResponses", [
1241
+ { no: 1, name: "qualification_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
1052
1242
  { no: 2, name: "user_id", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
1053
- { no: 3, name: "responses", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => ExamResponse, options: { "validate.rules": { repeated: { maxItems: "50" } } } }
1054
- ]);
1243
+ { no: 3, name: "responses", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => ExamResponse, options: { "buf.validate.field": { repeated: { maxItems: "100" } } } }
1244
+ ], { "codegen.dbscanner.dbscanner": { enabled: true } });
1055
1245
  }
1056
1246
  create(value?: PartialMessage<ExamResponses>): ExamResponses {
1057
1247
  const message = globalThis.Object.create((this.messagePrototype!));
@@ -1067,13 +1257,13 @@ class ExamResponses$Type extends MessageType<ExamResponses> {
1067
1257
  while (reader.pos < end) {
1068
1258
  let [fieldNo, wireType] = reader.tag();
1069
1259
  switch (fieldNo) {
1070
- case /* uint64 qualification_id */ 1:
1071
- message.qualificationId = reader.uint64().toNumber();
1260
+ case /* int64 qualification_id */ 1:
1261
+ message.qualificationId = reader.int64().toNumber();
1072
1262
  break;
1073
1263
  case /* int32 user_id */ 2:
1074
1264
  message.userId = reader.int32();
1075
1265
  break;
1076
- case /* repeated resources.qualifications.ExamResponse responses */ 3:
1266
+ case /* repeated resources.qualifications.exam.ExamResponse responses */ 3:
1077
1267
  message.responses.push(ExamResponse.internalBinaryRead(reader, reader.uint32(), options));
1078
1268
  break;
1079
1269
  default:
@@ -1088,13 +1278,13 @@ class ExamResponses$Type extends MessageType<ExamResponses> {
1088
1278
  return message;
1089
1279
  }
1090
1280
  internalBinaryWrite(message: ExamResponses, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
1091
- /* uint64 qualification_id = 1; */
1281
+ /* int64 qualification_id = 1; */
1092
1282
  if (message.qualificationId !== 0)
1093
- writer.tag(1, WireType.Varint).uint64(message.qualificationId);
1283
+ writer.tag(1, WireType.Varint).int64(message.qualificationId);
1094
1284
  /* int32 user_id = 2; */
1095
1285
  if (message.userId !== 0)
1096
1286
  writer.tag(2, WireType.Varint).int32(message.userId);
1097
- /* repeated resources.qualifications.ExamResponse responses = 3; */
1287
+ /* repeated resources.qualifications.exam.ExamResponse responses = 3; */
1098
1288
  for (let i = 0; i < message.responses.length; i++)
1099
1289
  ExamResponse.internalBinaryWrite(message.responses[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();
1100
1290
  let u = options.writeUnknownFields;
@@ -1104,14 +1294,14 @@ class ExamResponses$Type extends MessageType<ExamResponses> {
1104
1294
  }
1105
1295
  }
1106
1296
  /**
1107
- * @generated MessageType for protobuf message resources.qualifications.ExamResponses
1297
+ * @generated MessageType for protobuf message resources.qualifications.exam.ExamResponses
1108
1298
  */
1109
1299
  export const ExamResponses = new ExamResponses$Type();
1110
1300
  // @generated message type with reflection information, may provide speed optimized methods
1111
1301
  class ExamResponse$Type extends MessageType<ExamResponse> {
1112
1302
  constructor() {
1113
- super("resources.qualifications.ExamResponse", [
1114
- { no: 1, name: "question_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
1303
+ super("resources.qualifications.exam.ExamResponse", [
1304
+ { no: 1, name: "question_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
1115
1305
  { no: 2, name: "user_id", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
1116
1306
  { no: 3, name: "question", kind: "message", T: () => ExamQuestion },
1117
1307
  { no: 4, name: "response", kind: "message", T: () => ExamResponseData }
@@ -1130,16 +1320,16 @@ class ExamResponse$Type extends MessageType<ExamResponse> {
1130
1320
  while (reader.pos < end) {
1131
1321
  let [fieldNo, wireType] = reader.tag();
1132
1322
  switch (fieldNo) {
1133
- case /* uint64 question_id */ 1:
1134
- message.questionId = reader.uint64().toNumber();
1323
+ case /* int64 question_id */ 1:
1324
+ message.questionId = reader.int64().toNumber();
1135
1325
  break;
1136
1326
  case /* int32 user_id */ 2:
1137
1327
  message.userId = reader.int32();
1138
1328
  break;
1139
- case /* resources.qualifications.ExamQuestion question */ 3:
1329
+ case /* resources.qualifications.exam.ExamQuestion question */ 3:
1140
1330
  message.question = ExamQuestion.internalBinaryRead(reader, reader.uint32(), options, message.question);
1141
1331
  break;
1142
- case /* resources.qualifications.ExamResponseData response */ 4:
1332
+ case /* resources.qualifications.exam.ExamResponseData response */ 4:
1143
1333
  message.response = ExamResponseData.internalBinaryRead(reader, reader.uint32(), options, message.response);
1144
1334
  break;
1145
1335
  default:
@@ -1154,16 +1344,16 @@ class ExamResponse$Type extends MessageType<ExamResponse> {
1154
1344
  return message;
1155
1345
  }
1156
1346
  internalBinaryWrite(message: ExamResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
1157
- /* uint64 question_id = 1; */
1347
+ /* int64 question_id = 1; */
1158
1348
  if (message.questionId !== 0)
1159
- writer.tag(1, WireType.Varint).uint64(message.questionId);
1349
+ writer.tag(1, WireType.Varint).int64(message.questionId);
1160
1350
  /* int32 user_id = 2; */
1161
1351
  if (message.userId !== 0)
1162
1352
  writer.tag(2, WireType.Varint).int32(message.userId);
1163
- /* resources.qualifications.ExamQuestion question = 3; */
1353
+ /* resources.qualifications.exam.ExamQuestion question = 3; */
1164
1354
  if (message.question)
1165
1355
  ExamQuestion.internalBinaryWrite(message.question, writer.tag(3, WireType.LengthDelimited).fork(), options).join();
1166
- /* resources.qualifications.ExamResponseData response = 4; */
1356
+ /* resources.qualifications.exam.ExamResponseData response = 4; */
1167
1357
  if (message.response)
1168
1358
  ExamResponseData.internalBinaryWrite(message.response, writer.tag(4, WireType.LengthDelimited).fork(), options).join();
1169
1359
  let u = options.writeUnknownFields;
@@ -1173,13 +1363,13 @@ class ExamResponse$Type extends MessageType<ExamResponse> {
1173
1363
  }
1174
1364
  }
1175
1365
  /**
1176
- * @generated MessageType for protobuf message resources.qualifications.ExamResponse
1366
+ * @generated MessageType for protobuf message resources.qualifications.exam.ExamResponse
1177
1367
  */
1178
1368
  export const ExamResponse = new ExamResponse$Type();
1179
1369
  // @generated message type with reflection information, may provide speed optimized methods
1180
1370
  class ExamResponseData$Type extends MessageType<ExamResponseData> {
1181
1371
  constructor() {
1182
- super("resources.qualifications.ExamResponseData", [
1372
+ super("resources.qualifications.exam.ExamResponseData", [
1183
1373
  { no: 3, name: "separator", kind: "message", oneof: "response", T: () => ExamResponseSeparator },
1184
1374
  { no: 4, name: "yesno", kind: "message", oneof: "response", T: () => ExamResponseYesNo },
1185
1375
  { no: 5, name: "free_text", kind: "message", oneof: "response", T: () => ExamResponseText },
@@ -1199,31 +1389,31 @@ class ExamResponseData$Type extends MessageType<ExamResponseData> {
1199
1389
  while (reader.pos < end) {
1200
1390
  let [fieldNo, wireType] = reader.tag();
1201
1391
  switch (fieldNo) {
1202
- case /* resources.qualifications.ExamResponseSeparator separator */ 3:
1392
+ case /* resources.qualifications.exam.ExamResponseSeparator separator */ 3:
1203
1393
  message.response = {
1204
1394
  oneofKind: "separator",
1205
1395
  separator: ExamResponseSeparator.internalBinaryRead(reader, reader.uint32(), options, (message.response as any).separator)
1206
1396
  };
1207
1397
  break;
1208
- case /* resources.qualifications.ExamResponseYesNo yesno */ 4:
1398
+ case /* resources.qualifications.exam.ExamResponseYesNo yesno */ 4:
1209
1399
  message.response = {
1210
1400
  oneofKind: "yesno",
1211
1401
  yesno: ExamResponseYesNo.internalBinaryRead(reader, reader.uint32(), options, (message.response as any).yesno)
1212
1402
  };
1213
1403
  break;
1214
- case /* resources.qualifications.ExamResponseText free_text */ 5:
1404
+ case /* resources.qualifications.exam.ExamResponseText free_text */ 5:
1215
1405
  message.response = {
1216
1406
  oneofKind: "freeText",
1217
1407
  freeText: ExamResponseText.internalBinaryRead(reader, reader.uint32(), options, (message.response as any).freeText)
1218
1408
  };
1219
1409
  break;
1220
- case /* resources.qualifications.ExamResponseSingleChoice single_choice */ 6:
1410
+ case /* resources.qualifications.exam.ExamResponseSingleChoice single_choice */ 6:
1221
1411
  message.response = {
1222
1412
  oneofKind: "singleChoice",
1223
1413
  singleChoice: ExamResponseSingleChoice.internalBinaryRead(reader, reader.uint32(), options, (message.response as any).singleChoice)
1224
1414
  };
1225
1415
  break;
1226
- case /* resources.qualifications.ExamResponseMultipleChoice multiple_choice */ 7:
1416
+ case /* resources.qualifications.exam.ExamResponseMultipleChoice multiple_choice */ 7:
1227
1417
  message.response = {
1228
1418
  oneofKind: "multipleChoice",
1229
1419
  multipleChoice: ExamResponseMultipleChoice.internalBinaryRead(reader, reader.uint32(), options, (message.response as any).multipleChoice)
@@ -1241,19 +1431,19 @@ class ExamResponseData$Type extends MessageType<ExamResponseData> {
1241
1431
  return message;
1242
1432
  }
1243
1433
  internalBinaryWrite(message: ExamResponseData, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
1244
- /* resources.qualifications.ExamResponseSeparator separator = 3; */
1434
+ /* resources.qualifications.exam.ExamResponseSeparator separator = 3; */
1245
1435
  if (message.response.oneofKind === "separator")
1246
1436
  ExamResponseSeparator.internalBinaryWrite(message.response.separator, writer.tag(3, WireType.LengthDelimited).fork(), options).join();
1247
- /* resources.qualifications.ExamResponseYesNo yesno = 4; */
1437
+ /* resources.qualifications.exam.ExamResponseYesNo yesno = 4; */
1248
1438
  if (message.response.oneofKind === "yesno")
1249
1439
  ExamResponseYesNo.internalBinaryWrite(message.response.yesno, writer.tag(4, WireType.LengthDelimited).fork(), options).join();
1250
- /* resources.qualifications.ExamResponseText free_text = 5; */
1440
+ /* resources.qualifications.exam.ExamResponseText free_text = 5; */
1251
1441
  if (message.response.oneofKind === "freeText")
1252
1442
  ExamResponseText.internalBinaryWrite(message.response.freeText, writer.tag(5, WireType.LengthDelimited).fork(), options).join();
1253
- /* resources.qualifications.ExamResponseSingleChoice single_choice = 6; */
1443
+ /* resources.qualifications.exam.ExamResponseSingleChoice single_choice = 6; */
1254
1444
  if (message.response.oneofKind === "singleChoice")
1255
1445
  ExamResponseSingleChoice.internalBinaryWrite(message.response.singleChoice, writer.tag(6, WireType.LengthDelimited).fork(), options).join();
1256
- /* resources.qualifications.ExamResponseMultipleChoice multiple_choice = 7; */
1446
+ /* resources.qualifications.exam.ExamResponseMultipleChoice multiple_choice = 7; */
1257
1447
  if (message.response.oneofKind === "multipleChoice")
1258
1448
  ExamResponseMultipleChoice.internalBinaryWrite(message.response.multipleChoice, writer.tag(7, WireType.LengthDelimited).fork(), options).join();
1259
1449
  let u = options.writeUnknownFields;
@@ -1263,13 +1453,13 @@ class ExamResponseData$Type extends MessageType<ExamResponseData> {
1263
1453
  }
1264
1454
  }
1265
1455
  /**
1266
- * @generated MessageType for protobuf message resources.qualifications.ExamResponseData
1456
+ * @generated MessageType for protobuf message resources.qualifications.exam.ExamResponseData
1267
1457
  */
1268
1458
  export const ExamResponseData = new ExamResponseData$Type();
1269
1459
  // @generated message type with reflection information, may provide speed optimized methods
1270
1460
  class ExamResponseSeparator$Type extends MessageType<ExamResponseSeparator> {
1271
1461
  constructor() {
1272
- super("resources.qualifications.ExamResponseSeparator", []);
1462
+ super("resources.qualifications.exam.ExamResponseSeparator", []);
1273
1463
  }
1274
1464
  create(value?: PartialMessage<ExamResponseSeparator>): ExamResponseSeparator {
1275
1465
  const message = globalThis.Object.create((this.messagePrototype!));
@@ -1301,13 +1491,13 @@ class ExamResponseSeparator$Type extends MessageType<ExamResponseSeparator> {
1301
1491
  }
1302
1492
  }
1303
1493
  /**
1304
- * @generated MessageType for protobuf message resources.qualifications.ExamResponseSeparator
1494
+ * @generated MessageType for protobuf message resources.qualifications.exam.ExamResponseSeparator
1305
1495
  */
1306
1496
  export const ExamResponseSeparator = new ExamResponseSeparator$Type();
1307
1497
  // @generated message type with reflection information, may provide speed optimized methods
1308
1498
  class ExamResponseYesNo$Type extends MessageType<ExamResponseYesNo> {
1309
1499
  constructor() {
1310
- super("resources.qualifications.ExamResponseYesNo", [
1500
+ super("resources.qualifications.exam.ExamResponseYesNo", [
1311
1501
  { no: 1, name: "value", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
1312
1502
  ]);
1313
1503
  }
@@ -1348,14 +1538,14 @@ class ExamResponseYesNo$Type extends MessageType<ExamResponseYesNo> {
1348
1538
  }
1349
1539
  }
1350
1540
  /**
1351
- * @generated MessageType for protobuf message resources.qualifications.ExamResponseYesNo
1541
+ * @generated MessageType for protobuf message resources.qualifications.exam.ExamResponseYesNo
1352
1542
  */
1353
1543
  export const ExamResponseYesNo = new ExamResponseYesNo$Type();
1354
1544
  // @generated message type with reflection information, may provide speed optimized methods
1355
1545
  class ExamResponseText$Type extends MessageType<ExamResponseText> {
1356
1546
  constructor() {
1357
- super("resources.qualifications.ExamResponseText", [
1358
- { no: 1, name: "text", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxBytes: "500000" } } } }
1547
+ super("resources.qualifications.exam.ExamResponseText", [
1548
+ { no: 1, name: "text", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxBytes: "500000" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } }
1359
1549
  ]);
1360
1550
  }
1361
1551
  create(value?: PartialMessage<ExamResponseText>): ExamResponseText {
@@ -1395,14 +1585,14 @@ class ExamResponseText$Type extends MessageType<ExamResponseText> {
1395
1585
  }
1396
1586
  }
1397
1587
  /**
1398
- * @generated MessageType for protobuf message resources.qualifications.ExamResponseText
1588
+ * @generated MessageType for protobuf message resources.qualifications.exam.ExamResponseText
1399
1589
  */
1400
1590
  export const ExamResponseText = new ExamResponseText$Type();
1401
1591
  // @generated message type with reflection information, may provide speed optimized methods
1402
1592
  class ExamResponseSingleChoice$Type extends MessageType<ExamResponseSingleChoice> {
1403
1593
  constructor() {
1404
- super("resources.qualifications.ExamResponseSingleChoice", [
1405
- { no: 1, name: "choice", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxLen: "512" } } } }
1594
+ super("resources.qualifications.exam.ExamResponseSingleChoice", [
1595
+ { no: 1, name: "choice", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "512" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } }
1406
1596
  ]);
1407
1597
  }
1408
1598
  create(value?: PartialMessage<ExamResponseSingleChoice>): ExamResponseSingleChoice {
@@ -1442,14 +1632,14 @@ class ExamResponseSingleChoice$Type extends MessageType<ExamResponseSingleChoice
1442
1632
  }
1443
1633
  }
1444
1634
  /**
1445
- * @generated MessageType for protobuf message resources.qualifications.ExamResponseSingleChoice
1635
+ * @generated MessageType for protobuf message resources.qualifications.exam.ExamResponseSingleChoice
1446
1636
  */
1447
1637
  export const ExamResponseSingleChoice = new ExamResponseSingleChoice$Type();
1448
1638
  // @generated message type with reflection information, may provide speed optimized methods
1449
1639
  class ExamResponseMultipleChoice$Type extends MessageType<ExamResponseMultipleChoice> {
1450
1640
  constructor() {
1451
- super("resources.qualifications.ExamResponseMultipleChoice", [
1452
- { no: 1, name: "choices", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { repeated: { maxItems: "10" } } } }
1641
+ super("resources.qualifications.exam.ExamResponseMultipleChoice", [
1642
+ { no: 1, name: "choices", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { repeated: { maxItems: "10" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } }
1453
1643
  ]);
1454
1644
  }
1455
1645
  create(value?: PartialMessage<ExamResponseMultipleChoice>): ExamResponseMultipleChoice {
@@ -1489,15 +1679,15 @@ class ExamResponseMultipleChoice$Type extends MessageType<ExamResponseMultipleCh
1489
1679
  }
1490
1680
  }
1491
1681
  /**
1492
- * @generated MessageType for protobuf message resources.qualifications.ExamResponseMultipleChoice
1682
+ * @generated MessageType for protobuf message resources.qualifications.exam.ExamResponseMultipleChoice
1493
1683
  */
1494
1684
  export const ExamResponseMultipleChoice = new ExamResponseMultipleChoice$Type();
1495
1685
  // @generated message type with reflection information, may provide speed optimized methods
1496
1686
  class ExamGrading$Type extends MessageType<ExamGrading> {
1497
1687
  constructor() {
1498
- super("resources.qualifications.ExamGrading", [
1499
- { no: 1, name: "responses", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => ExamGradingResponse, options: { "validate.rules": { repeated: { maxItems: "50" } } } }
1500
- ]);
1688
+ super("resources.qualifications.exam.ExamGrading", [
1689
+ { no: 1, name: "responses", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => ExamGradingResponse, options: { "buf.validate.field": { repeated: { maxItems: "100" } } } }
1690
+ ], { "codegen.dbscanner.dbscanner": { enabled: true } });
1501
1691
  }
1502
1692
  create(value?: PartialMessage<ExamGrading>): ExamGrading {
1503
1693
  const message = globalThis.Object.create((this.messagePrototype!));
@@ -1511,7 +1701,7 @@ class ExamGrading$Type extends MessageType<ExamGrading> {
1511
1701
  while (reader.pos < end) {
1512
1702
  let [fieldNo, wireType] = reader.tag();
1513
1703
  switch (fieldNo) {
1514
- case /* repeated resources.qualifications.ExamGradingResponse responses */ 1:
1704
+ case /* repeated resources.qualifications.exam.ExamGradingResponse responses */ 1:
1515
1705
  message.responses.push(ExamGradingResponse.internalBinaryRead(reader, reader.uint32(), options));
1516
1706
  break;
1517
1707
  default:
@@ -1526,7 +1716,7 @@ class ExamGrading$Type extends MessageType<ExamGrading> {
1526
1716
  return message;
1527
1717
  }
1528
1718
  internalBinaryWrite(message: ExamGrading, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
1529
- /* repeated resources.qualifications.ExamGradingResponse responses = 1; */
1719
+ /* repeated resources.qualifications.exam.ExamGradingResponse responses = 1; */
1530
1720
  for (let i = 0; i < message.responses.length; i++)
1531
1721
  ExamGradingResponse.internalBinaryWrite(message.responses[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();
1532
1722
  let u = options.writeUnknownFields;
@@ -1536,15 +1726,15 @@ class ExamGrading$Type extends MessageType<ExamGrading> {
1536
1726
  }
1537
1727
  }
1538
1728
  /**
1539
- * @generated MessageType for protobuf message resources.qualifications.ExamGrading
1729
+ * @generated MessageType for protobuf message resources.qualifications.exam.ExamGrading
1540
1730
  */
1541
1731
  export const ExamGrading = new ExamGrading$Type();
1542
1732
  // @generated message type with reflection information, may provide speed optimized methods
1543
1733
  class ExamGradingResponse$Type extends MessageType<ExamGradingResponse> {
1544
1734
  constructor() {
1545
- super("resources.qualifications.ExamGradingResponse", [
1546
- { no: 1, name: "question_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
1547
- { no: 2, name: "points", kind: "scalar", T: 2 /*ScalarType.FLOAT*/, options: { "validate.rules": { float: { lte: 1000, gte: 0 } } } },
1735
+ super("resources.qualifications.exam.ExamGradingResponse", [
1736
+ { no: 1, name: "question_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
1737
+ { no: 2, name: "points", kind: "scalar", T: 2 /*ScalarType.FLOAT*/, options: { "buf.validate.field": { float: { lte: 1000, gte: 0 } } } },
1548
1738
  { no: 3, name: "checked", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }
1549
1739
  ]);
1550
1740
  }
@@ -1561,8 +1751,8 @@ class ExamGradingResponse$Type extends MessageType<ExamGradingResponse> {
1561
1751
  while (reader.pos < end) {
1562
1752
  let [fieldNo, wireType] = reader.tag();
1563
1753
  switch (fieldNo) {
1564
- case /* uint64 question_id */ 1:
1565
- message.questionId = reader.uint64().toNumber();
1754
+ case /* int64 question_id */ 1:
1755
+ message.questionId = reader.int64().toNumber();
1566
1756
  break;
1567
1757
  case /* float points */ 2:
1568
1758
  message.points = reader.float();
@@ -1582,9 +1772,9 @@ class ExamGradingResponse$Type extends MessageType<ExamGradingResponse> {
1582
1772
  return message;
1583
1773
  }
1584
1774
  internalBinaryWrite(message: ExamGradingResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
1585
- /* uint64 question_id = 1; */
1775
+ /* int64 question_id = 1; */
1586
1776
  if (message.questionId !== 0)
1587
- writer.tag(1, WireType.Varint).uint64(message.questionId);
1777
+ writer.tag(1, WireType.Varint).int64(message.questionId);
1588
1778
  /* float points = 2; */
1589
1779
  if (message.points !== 0)
1590
1780
  writer.tag(2, WireType.Bit32).float(message.points);
@@ -1598,6 +1788,6 @@ class ExamGradingResponse$Type extends MessageType<ExamGradingResponse> {
1598
1788
  }
1599
1789
  }
1600
1790
  /**
1601
- * @generated MessageType for protobuf message resources.qualifications.ExamGradingResponse
1791
+ * @generated MessageType for protobuf message resources.qualifications.exam.ExamGradingResponse
1602
1792
  */
1603
1793
  export const ExamGradingResponse = new ExamGradingResponse$Type();