academe-kit 0.15.0 → 0.17.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.
package/dist/index.d.ts CHANGED
@@ -9403,7 +9403,7 @@ interface paths {
9403
9403
  };
9404
9404
  requestBody?: never;
9405
9405
  responses: {
9406
- /** @description provider, embedUrl, videoExternalId, startTimeSeconds, durationSeconds, progress */
9406
+ /** @description provider, embedUrl, videoExternalId, startTimeSeconds, durationSeconds, progress e `ambient` (mídia do Ambient Glow — spriteUrlTemplate com placeholder `{n}`, thumbnailUrl e metadados da grade de seek; null quando o provider não é panda) */
9407
9407
  200: {
9408
9408
  headers: {
9409
9409
  [name: string]: unknown;
@@ -11579,6 +11579,62 @@ interface paths {
11579
11579
  };
11580
11580
  trace?: never;
11581
11581
  };
11582
+ "/quiz-questions/{id}/generate-explanations": {
11583
+ parameters: {
11584
+ query?: never;
11585
+ header?: never;
11586
+ path?: never;
11587
+ cookie?: never;
11588
+ };
11589
+ get?: never;
11590
+ put?: never;
11591
+ /**
11592
+ * Generate answer explanations with AI
11593
+ * @description Preenche via IA a explicação de cada alternativa de uma pergunta que já existe — o backfill dos quizzes criados antes da feature. Sobrescreve as explicações existentes; o backoffice confirma antes de chamar.
11594
+ */
11595
+ post: {
11596
+ parameters: {
11597
+ query?: never;
11598
+ header?: never;
11599
+ path: {
11600
+ id: string;
11601
+ };
11602
+ cookie?: never;
11603
+ };
11604
+ requestBody?: {
11605
+ content: {
11606
+ "application/json": {
11607
+ /** @description Modelo OpenRouter a usar. Omitido, usa o padrão do servidor. */
11608
+ model?: string;
11609
+ };
11610
+ };
11611
+ };
11612
+ responses: {
11613
+ /** @description Pergunta com as alternativas atualizadas */
11614
+ 200: {
11615
+ headers: {
11616
+ [name: string]: unknown;
11617
+ };
11618
+ content: {
11619
+ "application/json": {
11620
+ /** @example success */
11621
+ status?: string;
11622
+ data?: components["schemas"]["QuizQuestion"];
11623
+ };
11624
+ };
11625
+ };
11626
+ 400: components["responses"]["BadRequest"];
11627
+ 401: components["responses"]["Unauthorized"];
11628
+ 404: components["responses"]["NotFound"];
11629
+ 500: components["responses"]["ServerError"];
11630
+ };
11631
+ };
11632
+ delete?: never;
11633
+ options?: never;
11634
+ head?: never;
11635
+ patch?: never;
11636
+ trace?: never;
11637
+ };
11582
11638
  "/quiz-questions/bulk": {
11583
11639
  parameters: {
11584
11640
  query?: never;
@@ -11612,6 +11668,8 @@ interface paths {
11612
11668
  options?: {
11613
11669
  text?: string;
11614
11670
  is_correct?: boolean;
11671
+ /** @description Resumo revelado ao aluno ao confirmar a resposta. */
11672
+ explanation?: string;
11615
11673
  }[];
11616
11674
  }[];
11617
11675
  };
@@ -12083,6 +12141,8 @@ interface paths {
12083
12141
  options?: {
12084
12142
  text?: string;
12085
12143
  is_correct?: boolean;
12144
+ /** @description Resumo revelado ao aluno ao confirmar a resposta. String vazia quando a IA não produziu. */
12145
+ explanation?: string;
12086
12146
  }[];
12087
12147
  }[];
12088
12148
  };
@@ -13906,85 +13966,486 @@ interface paths {
13906
13966
  500: components["responses"]["ServerError"];
13907
13967
  };
13908
13968
  };
13909
- put?: never;
13910
- post?: never;
13911
- /**
13912
- * Delete a step
13913
- * @description Permanently remove a step from the catalog
13914
- */
13915
- delete: {
13969
+ put?: never;
13970
+ post?: never;
13971
+ /**
13972
+ * Delete a step
13973
+ * @description Permanently remove a step from the catalog
13974
+ */
13975
+ delete: {
13976
+ parameters: {
13977
+ query?: never;
13978
+ header?: never;
13979
+ path: {
13980
+ /** @description Resource ID */
13981
+ id: components["parameters"]["id"];
13982
+ };
13983
+ cookie?: never;
13984
+ };
13985
+ requestBody?: never;
13986
+ responses: {
13987
+ /** @description Step deleted */
13988
+ 204: {
13989
+ headers: {
13990
+ [name: string]: unknown;
13991
+ };
13992
+ content?: never;
13993
+ };
13994
+ 400: components["responses"]["BadRequest"];
13995
+ 401: components["responses"]["Unauthorized"];
13996
+ 404: components["responses"]["NotFound"];
13997
+ 500: components["responses"]["ServerError"];
13998
+ };
13999
+ };
14000
+ options?: never;
14001
+ head?: never;
14002
+ /**
14003
+ * Update a step
14004
+ * @description Partially update a step from the catalog
14005
+ */
14006
+ patch: {
14007
+ parameters: {
14008
+ query?: never;
14009
+ header?: never;
14010
+ path: {
14011
+ /** @description Resource ID */
14012
+ id: components["parameters"]["id"];
14013
+ };
14014
+ cookie?: never;
14015
+ };
14016
+ requestBody: {
14017
+ content: {
14018
+ "application/json": {
14019
+ name?: string;
14020
+ color?: string;
14021
+ icon?: string;
14022
+ /** @enum {string} */
14023
+ type?: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate" | "redirect";
14024
+ isActive?: boolean;
14025
+ };
14026
+ };
14027
+ };
14028
+ responses: {
14029
+ /** @description Step updated */
14030
+ 200: {
14031
+ headers: {
14032
+ [name: string]: unknown;
14033
+ };
14034
+ content: {
14035
+ "application/json": {
14036
+ /** @example success */
14037
+ status?: string;
14038
+ data?: components["schemas"]["Step"];
14039
+ };
14040
+ };
14041
+ };
14042
+ 400: components["responses"]["BadRequest"];
14043
+ 401: components["responses"]["Unauthorized"];
14044
+ 404: components["responses"]["NotFound"];
14045
+ 500: components["responses"]["ServerError"];
14046
+ };
14047
+ };
14048
+ trace?: never;
14049
+ };
14050
+ "/studio/state": {
14051
+ parameters: {
14052
+ query?: never;
14053
+ header?: never;
14054
+ path?: never;
14055
+ cookie?: never;
14056
+ };
14057
+ /** Estado do Estúdio (publicado + MEUS rascunhos mesclados) */
14058
+ get: {
14059
+ parameters: {
14060
+ query?: {
14061
+ /** @description Escola do contexto (hero da escola + preview) */
14062
+ institutionId?: string;
14063
+ };
14064
+ header?: never;
14065
+ path?: never;
14066
+ cookie?: never;
14067
+ };
14068
+ requestBody?: never;
14069
+ responses: {
14070
+ /** @description hero{global,institution,myDrafts} + playlists[{id,draft,items,meta{state,hasMyDraft,stale,othersDrafts}}] + layout{order,hasMyDraft} + myDraftCount */
14071
+ 200: {
14072
+ headers: {
14073
+ [name: string]: unknown;
14074
+ };
14075
+ content?: never;
14076
+ };
14077
+ /** @description Não é staff */
14078
+ 403: {
14079
+ headers: {
14080
+ [name: string]: unknown;
14081
+ };
14082
+ content?: never;
14083
+ };
14084
+ };
14085
+ };
14086
+ put?: never;
14087
+ post?: never;
14088
+ delete?: never;
14089
+ options?: never;
14090
+ head?: never;
14091
+ patch?: never;
14092
+ trace?: never;
14093
+ };
14094
+ "/studio/drafts/playlist/{id}": {
14095
+ parameters: {
14096
+ query?: never;
14097
+ header?: never;
14098
+ path?: never;
14099
+ cookie?: never;
14100
+ };
14101
+ get?: never;
14102
+ /** Upsert do MEU rascunho de uma playlist (id pode ser de playlist nova — isNew) */
14103
+ put: {
14104
+ parameters: {
14105
+ query?: never;
14106
+ header?: never;
14107
+ path: {
14108
+ id: string;
14109
+ };
14110
+ cookie?: never;
14111
+ };
14112
+ requestBody: {
14113
+ content: {
14114
+ "application/json": {
14115
+ /** @enum {string} */
14116
+ op?: "upsert" | "delete";
14117
+ isNew?: boolean;
14118
+ playlist?: {
14119
+ title?: string;
14120
+ subtitle?: string | null;
14121
+ /** @enum {string} */
14122
+ status?: "draft" | "published";
14123
+ /** @enum {string} */
14124
+ source?: "curated" | "continue_watching" | "trending" | "watchlist" | "recent" | "continue_playlist";
14125
+ /** @enum {string} */
14126
+ variant?: "common" | "featured";
14127
+ /** @enum {string} */
14128
+ cardOrientation?: "horizontal" | "vertical" | "square" | "fullImage";
14129
+ itemsPerViewDesktop?: number;
14130
+ itemsPerViewMobile?: number;
14131
+ autoplay?: boolean;
14132
+ isGlobal?: boolean;
14133
+ };
14134
+ targets?: {
14135
+ institutionId?: string;
14136
+ organizationId?: string;
14137
+ }[];
14138
+ groupIds?: string[];
14139
+ /** @description ordem do array = position */
14140
+ items?: {
14141
+ courseId?: string;
14142
+ courseModuleId?: string;
14143
+ courseModuleLessonId?: string;
14144
+ }[];
14145
+ };
14146
+ };
14147
+ };
14148
+ responses: {
14149
+ /** @description Rascunho salvo (não altera o publicado) */
14150
+ 200: {
14151
+ headers: {
14152
+ [name: string]: unknown;
14153
+ };
14154
+ content?: never;
14155
+ };
14156
+ };
14157
+ };
14158
+ post?: never;
14159
+ delete?: never;
14160
+ options?: never;
14161
+ head?: never;
14162
+ patch?: never;
14163
+ trace?: never;
14164
+ };
14165
+ "/studio/drafts/hero": {
14166
+ parameters: {
14167
+ query?: never;
14168
+ header?: never;
14169
+ path?: never;
14170
+ cookie?: never;
14171
+ };
14172
+ get?: never;
14173
+ /** Upsert do MEU rascunho do hero (institutionId no body; ausente = global) */
14174
+ put: {
14175
+ parameters: {
14176
+ query?: never;
14177
+ header?: never;
14178
+ path?: never;
14179
+ cookie?: never;
14180
+ };
14181
+ requestBody: {
14182
+ content: {
14183
+ "application/json": {
14184
+ /** Format: uuid */
14185
+ institutionId?: string | null;
14186
+ /** @enum {string} */
14187
+ op?: "upsert" | "delete";
14188
+ hero?: {
14189
+ eyebrow?: string | null;
14190
+ title?: string;
14191
+ subtitle?: string | null;
14192
+ ctaLabel?: string | null;
14193
+ ctaUrl?: string | null;
14194
+ /** @enum {string} */
14195
+ mediaType?: "gradient" | "image" | "video";
14196
+ mediaUrl?: string | null;
14197
+ mediaLoop?: boolean;
14198
+ };
14199
+ };
14200
+ };
14201
+ };
14202
+ responses: {
14203
+ /** @description Rascunho salvo */
14204
+ 200: {
14205
+ headers: {
14206
+ [name: string]: unknown;
14207
+ };
14208
+ content?: never;
14209
+ };
14210
+ };
14211
+ };
14212
+ post?: never;
14213
+ delete?: never;
14214
+ options?: never;
14215
+ head?: never;
14216
+ patch?: never;
14217
+ trace?: never;
14218
+ };
14219
+ "/studio/drafts/layout": {
14220
+ parameters: {
14221
+ query?: never;
14222
+ header?: never;
14223
+ path?: never;
14224
+ cookie?: never;
14225
+ };
14226
+ get?: never;
14227
+ /** Upsert do MEU rascunho de ordem das rails (lista completa de ids) */
14228
+ put: {
14229
+ parameters: {
14230
+ query?: never;
14231
+ header?: never;
14232
+ path?: never;
14233
+ cookie?: never;
14234
+ };
14235
+ requestBody: {
14236
+ content: {
14237
+ "application/json": {
14238
+ order?: string[];
14239
+ };
14240
+ };
14241
+ };
14242
+ responses: {
14243
+ /** @description Rascunho salvo */
14244
+ 200: {
14245
+ headers: {
14246
+ [name: string]: unknown;
14247
+ };
14248
+ content?: never;
14249
+ };
14250
+ };
14251
+ };
14252
+ post?: never;
14253
+ delete?: never;
14254
+ options?: never;
14255
+ head?: never;
14256
+ patch?: never;
14257
+ trace?: never;
14258
+ };
14259
+ "/studio/drafts/{entityType}/{entityId}": {
14260
+ parameters: {
14261
+ query?: never;
14262
+ header?: never;
14263
+ path?: never;
14264
+ cookie?: never;
14265
+ };
14266
+ get?: never;
14267
+ put?: never;
14268
+ post?: never;
14269
+ /** Desfaz UM rascunho meu (playlist/hero por entidade) */
14270
+ delete: {
14271
+ parameters: {
14272
+ query?: never;
14273
+ header?: never;
14274
+ path: {
14275
+ entityType: "playlist" | "hero" | "layout";
14276
+ entityId: string;
14277
+ };
14278
+ cookie?: never;
14279
+ };
14280
+ requestBody?: never;
14281
+ responses: {
14282
+ /** @description { deleted: n } */
14283
+ 200: {
14284
+ headers: {
14285
+ [name: string]: unknown;
14286
+ };
14287
+ content?: never;
14288
+ };
14289
+ };
14290
+ };
14291
+ options?: never;
14292
+ head?: never;
14293
+ patch?: never;
14294
+ trace?: never;
14295
+ };
14296
+ "/studio/discard": {
14297
+ parameters: {
14298
+ query?: never;
14299
+ header?: never;
14300
+ path?: never;
14301
+ cookie?: never;
14302
+ };
14303
+ get?: never;
14304
+ put?: never;
14305
+ /** Descarta TODOS os meus rascunhos */
14306
+ post: {
14307
+ parameters: {
14308
+ query?: never;
14309
+ header?: never;
14310
+ path?: never;
14311
+ cookie?: never;
14312
+ };
14313
+ requestBody?: never;
14314
+ responses: {
14315
+ /** @description { discarded: n } */
14316
+ 200: {
14317
+ headers: {
14318
+ [name: string]: unknown;
14319
+ };
14320
+ content?: never;
14321
+ };
14322
+ };
14323
+ };
14324
+ delete?: never;
14325
+ options?: never;
14326
+ head?: never;
14327
+ patch?: never;
14328
+ trace?: never;
14329
+ };
14330
+ "/studio/publish": {
14331
+ parameters: {
14332
+ query?: never;
14333
+ header?: never;
14334
+ path?: never;
14335
+ cookie?: never;
14336
+ };
14337
+ get?: never;
14338
+ put?: never;
14339
+ /** Publica atomicamente os MEUS rascunhos (playlists+layout+heroes); nunca os de outro editor */
14340
+ post: {
14341
+ parameters: {
14342
+ query?: never;
14343
+ header?: never;
14344
+ path?: never;
14345
+ cookie?: never;
14346
+ };
14347
+ requestBody?: never;
14348
+ responses: {
14349
+ /** @description { applied{...}, warnings[] (staleness/missing) } */
14350
+ 200: {
14351
+ headers: {
14352
+ [name: string]: unknown;
14353
+ };
14354
+ content?: never;
14355
+ };
14356
+ /** @description Nenhuma alteração para publicar */
14357
+ 409: {
14358
+ headers: {
14359
+ [name: string]: unknown;
14360
+ };
14361
+ content?: never;
14362
+ };
14363
+ /** @description Falha (ex. conteúdo excluído) — nada foi aplicado */
14364
+ 422: {
14365
+ headers: {
14366
+ [name: string]: unknown;
14367
+ };
14368
+ content?: never;
14369
+ };
14370
+ };
14371
+ };
14372
+ delete?: never;
14373
+ options?: never;
14374
+ head?: never;
14375
+ patch?: never;
14376
+ trace?: never;
14377
+ };
14378
+ "/studio/catalog": {
14379
+ parameters: {
14380
+ query?: never;
14381
+ header?: never;
14382
+ path?: never;
14383
+ cookie?: never;
14384
+ };
14385
+ /** Busca de conteúdo p/ o picker (cursos/módulos/aulas, com flag published) */
14386
+ get: {
13916
14387
  parameters: {
13917
- query?: never;
13918
- header?: never;
13919
- path: {
13920
- /** @description Resource ID */
13921
- id: components["parameters"]["id"];
14388
+ query?: {
14389
+ q?: string;
14390
+ kind?: "course" | "module" | "lesson";
14391
+ limit?: number;
14392
+ offset?: number;
13922
14393
  };
14394
+ header?: never;
14395
+ path?: never;
13923
14396
  cookie?: never;
13924
14397
  };
13925
14398
  requestBody?: never;
13926
14399
  responses: {
13927
- /** @description Step deleted */
13928
- 204: {
14400
+ /** @description { counts{courses,modules,lessons}, results[{kind,id,courseId,title,subtitle,coverUrl,published}] } */
14401
+ 200: {
13929
14402
  headers: {
13930
14403
  [name: string]: unknown;
13931
14404
  };
13932
14405
  content?: never;
13933
14406
  };
13934
- 400: components["responses"]["BadRequest"];
13935
- 401: components["responses"]["Unauthorized"];
13936
- 404: components["responses"]["NotFound"];
13937
- 500: components["responses"]["ServerError"];
13938
14407
  };
13939
14408
  };
14409
+ put?: never;
14410
+ post?: never;
14411
+ delete?: never;
13940
14412
  options?: never;
13941
14413
  head?: never;
13942
- /**
13943
- * Update a step
13944
- * @description Partially update a step from the catalog
13945
- */
13946
- patch: {
14414
+ patch?: never;
14415
+ trace?: never;
14416
+ };
14417
+ "/studio/audiences": {
14418
+ parameters: {
14419
+ query?: never;
14420
+ header?: never;
14421
+ path?: never;
14422
+ cookie?: never;
14423
+ };
14424
+ /** Chips de escopo do drawer (escolas, organizações e perfis) */
14425
+ get: {
13947
14426
  parameters: {
13948
14427
  query?: never;
13949
14428
  header?: never;
13950
- path: {
13951
- /** @description Resource ID */
13952
- id: components["parameters"]["id"];
13953
- };
14429
+ path?: never;
13954
14430
  cookie?: never;
13955
14431
  };
13956
- requestBody: {
13957
- content: {
13958
- "application/json": {
13959
- name?: string;
13960
- color?: string;
13961
- icon?: string;
13962
- /** @enum {string} */
13963
- type?: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate" | "redirect";
13964
- isActive?: boolean;
13965
- };
13966
- };
13967
- };
14432
+ requestBody?: never;
13968
14433
  responses: {
13969
- /** @description Step updated */
14434
+ /** @description { institutions[], organizations[], groups[] } */
13970
14435
  200: {
13971
14436
  headers: {
13972
14437
  [name: string]: unknown;
13973
14438
  };
13974
- content: {
13975
- "application/json": {
13976
- /** @example success */
13977
- status?: string;
13978
- data?: components["schemas"]["Step"];
13979
- };
13980
- };
14439
+ content?: never;
13981
14440
  };
13982
- 400: components["responses"]["BadRequest"];
13983
- 401: components["responses"]["Unauthorized"];
13984
- 404: components["responses"]["NotFound"];
13985
- 500: components["responses"]["ServerError"];
13986
14441
  };
13987
14442
  };
14443
+ put?: never;
14444
+ post?: never;
14445
+ delete?: never;
14446
+ options?: never;
14447
+ head?: never;
14448
+ patch?: never;
13988
14449
  trace?: never;
13989
14450
  };
13990
14451
  "/submissions": {
@@ -16627,6 +17088,92 @@ interface paths {
16627
17088
  patch?: never;
16628
17089
  trace?: never;
16629
17090
  };
17091
+ "/users/{id}/courses/{courseId}/lessons": {
17092
+ parameters: {
17093
+ query?: never;
17094
+ header?: never;
17095
+ path?: never;
17096
+ cookie?: never;
17097
+ };
17098
+ /**
17099
+ * Drill-down por aula de um curso para um aluno (drawer do backoffice)
17100
+ * @description Lista as aulas publicadas do curso na ordem de módulo/aula, com o progresso consolidado (user_lesson_progress_v2) e o agregado de sessões por aula. watchedRanges são os intervalos do vídeo efetivamente assistidos (merged), para o heatmap de cobertura. Só leitura — nenhuma migration.
17101
+ */
17102
+ get: {
17103
+ parameters: {
17104
+ query?: never;
17105
+ header?: never;
17106
+ path: {
17107
+ /** @description id do aluno */
17108
+ id: string;
17109
+ courseId: string;
17110
+ };
17111
+ cookie?: never;
17112
+ };
17113
+ requestBody?: never;
17114
+ responses: {
17115
+ /** @description Aulas do curso com progresso do aluno */
17116
+ 200: {
17117
+ headers: {
17118
+ [name: string]: unknown;
17119
+ };
17120
+ content: {
17121
+ "application/json": {
17122
+ /** @example success */
17123
+ status?: string;
17124
+ data?: {
17125
+ /** Format: uuid */
17126
+ courseId?: string;
17127
+ courseTitle?: string;
17128
+ totalLessons?: number;
17129
+ completedLessons?: number;
17130
+ hoursWatched?: number;
17131
+ avgPlaybackRate?: number | null;
17132
+ modules?: {
17133
+ /** Format: uuid */
17134
+ moduleId?: string;
17135
+ title?: string;
17136
+ position?: number;
17137
+ lessons?: {
17138
+ /** Format: uuid */
17139
+ lessonId?: string;
17140
+ title?: string;
17141
+ position?: number;
17142
+ durationSeconds?: number;
17143
+ completed?: boolean;
17144
+ /** Format: date-time */
17145
+ completedAt?: string | null;
17146
+ positionSeconds?: number;
17147
+ watchedSeconds?: number;
17148
+ watchedPct?: number;
17149
+ /** Format: date-time */
17150
+ lastActivityAt?: string | null;
17151
+ sessions?: number;
17152
+ ranges?: number[][];
17153
+ }[];
17154
+ }[];
17155
+ };
17156
+ };
17157
+ };
17158
+ };
17159
+ /** @description Curso não encontrado */
17160
+ 404: {
17161
+ headers: {
17162
+ [name: string]: unknown;
17163
+ };
17164
+ content?: never;
17165
+ };
17166
+ 500: components["responses"]["ServerError"];
17167
+ };
17168
+ };
17169
+ put?: never;
17170
+ post?: never;
17171
+ delete?: never;
17172
+ options?: never;
17173
+ head?: never;
17174
+ patch?: never;
17175
+ trace?: never;
17176
+ };
16630
17177
  "/vitrine/home": {
16631
17178
  parameters: {
16632
17179
  query?: never;
@@ -16873,7 +17420,12 @@ interface components {
16873
17420
  * Format: email
16874
17421
  * @example john.doe@example.com
16875
17422
  */
16876
- email: string;
17423
+ email: string | null;
17424
+ /**
17425
+ * @description Login do usuário (gerado quando não informado)
17426
+ * @example johndoe
17427
+ */
17428
+ username?: string;
16877
17429
  /** @example +5511999999999 */
16878
17430
  phone?: string | null;
16879
17431
  /** @example 12345678901 */
@@ -17073,9 +17625,15 @@ interface components {
17073
17625
  lastName: string;
17074
17626
  /**
17075
17627
  * Format: email
17628
+ * @description Optional. When omitted, the user logs in with the generated username
17076
17629
  * @example john.doe@example.com
17077
17630
  */
17078
- email: string;
17631
+ email?: string | null;
17632
+ /**
17633
+ * @description Optional. Auto-generated from firstName + lastName when omitted
17634
+ * @example johndoe
17635
+ */
17636
+ username?: string | null;
17079
17637
  /**
17080
17638
  * @description Password for the user's Keycloak account
17081
17639
  * @example SecurePassword123!
@@ -17084,7 +17642,7 @@ interface components {
17084
17642
  /** @example +5511999999999 */
17085
17643
  phone?: string | null;
17086
17644
  /** @example 12345678901 */
17087
- document: string;
17645
+ document?: string | null;
17088
17646
  /**
17089
17647
  * @example male
17090
17648
  * @enum {string|null}
@@ -17107,6 +17665,18 @@ interface components {
17107
17665
  * @example 550e8400-e29b-41d4-a716-446655440001
17108
17666
  */
17109
17667
  institutionId?: string | null;
17668
+ /**
17669
+ * Format: uuid
17670
+ * @description Optional classroom ID to enroll the user (requires groupId)
17671
+ * @example 550e8400-e29b-41d4-a716-446655440003
17672
+ */
17673
+ institutionClassroomId?: string | null;
17674
+ /**
17675
+ * Format: uuid
17676
+ * @description Optional ID that groups this request with other creation requests
17677
+ * @example 550e8400-e29b-41d4-a716-446655440004
17678
+ */
17679
+ userCreationRequestsGroupId?: string | null;
17110
17680
  /**
17111
17681
  * Format: uuid
17112
17682
  * @description Seat code ID to register the user
@@ -17236,7 +17806,12 @@ interface components {
17236
17806
  * Format: email
17237
17807
  * @example john.doe@example.com
17238
17808
  */
17239
- email?: string;
17809
+ email?: string | null;
17810
+ /**
17811
+ * @description Login do usuário (gerado quando não informado)
17812
+ * @example johndoe
17813
+ */
17814
+ username?: string;
17240
17815
  /** @example +5511999999999 */
17241
17816
  phone?: string | null;
17242
17817
  /** @example 12345678901 */
@@ -19426,9 +20001,11 @@ interface components {
19426
20001
  requestId?: string;
19427
20002
  /**
19428
20003
  * Format: email
19429
- * @description Email of the user being created
20004
+ * @description Email of the user being created (optional)
19430
20005
  */
19431
- email?: string;
20006
+ email?: string | null;
20007
+ /** @description Login of the created user, generated by the worker when not provided (available after processing) */
20008
+ username?: string | null;
19432
20009
  /**
19433
20010
  * @description Current status of the creation request
19434
20011
  * @enum {string}
@@ -19939,6 +20516,11 @@ interface components {
19939
20516
  answer?: string;
19940
20517
  /** @example true */
19941
20518
  isCorrect?: boolean;
20519
+ /**
20520
+ * @description Resumo revelado ao aluno ao confirmar a resposta. Na alternativa correta explica o conceito; nas incorretas, o erro que a opção representa. NULL nas perguntas anteriores à feature.
20521
+ * @example O 'S' significa 'Secure' e indica que o protocolo utiliza SSL/TLS.
20522
+ */
20523
+ explanation?: string | null;
19942
20524
  /** Format: date-time */
19943
20525
  createdAt?: string;
19944
20526
  /** Format: date-time */
@@ -19951,10 +20533,14 @@ interface components {
19951
20533
  answer: string;
19952
20534
  /** @example true */
19953
20535
  isCorrect: boolean;
20536
+ /** @description Resumo revelado ao aluno ao confirmar a resposta. String vazia limpa. */
20537
+ explanation?: string;
19954
20538
  };
19955
20539
  UpdateQuizQuestionAnswerDto: {
19956
20540
  answer?: string;
19957
20541
  isCorrect?: boolean;
20542
+ /** @description Resumo revelado ao aluno ao confirmar a resposta. String vazia limpa. */
20543
+ explanation?: string;
19958
20544
  };
19959
20545
  QuizAttempt: {
19960
20546
  /** Format: uuid */
@@ -20432,14 +21018,17 @@ declare function createUserService(apiClient: AcademeApiClient): {
20432
21018
  body: {
20433
21019
  firstName: string;
20434
21020
  lastName: string;
20435
- email: string;
21021
+ email?: string | null;
21022
+ username?: string | null;
20436
21023
  password: string;
20437
21024
  phone?: string | null;
20438
- document: string;
21025
+ document?: string | null;
20439
21026
  gender?: "male" | "female" | "other" | null;
20440
21027
  birthdate?: string | null;
20441
21028
  groupId?: string | null;
20442
21029
  institutionId?: string | null;
21030
+ institutionClassroomId?: string | null;
21031
+ userCreationRequestsGroupId?: string | null;
20443
21032
  seatCodeId?: string | null;
20444
21033
  guardianId?: string | null;
20445
21034
  guardian?: components["schemas"]["CreateGuardianInlineDto"];
@@ -20477,20 +21066,61 @@ declare function createUserService(apiClient: AcademeApiClient): {
20477
21066
  body: {
20478
21067
  firstName: string;
20479
21068
  lastName: string;
20480
- email: string;
21069
+ email?: string | null;
21070
+ username?: string | null;
20481
21071
  password: string;
20482
21072
  phone?: string | null;
20483
- document: string;
21073
+ document?: string | null;
20484
21074
  gender?: "male" | "female" | "other" | null;
20485
21075
  birthdate?: string | null;
20486
21076
  groupId?: string | null;
20487
21077
  institutionId?: string | null;
21078
+ institutionClassroomId?: string | null;
21079
+ userCreationRequestsGroupId?: string | null;
20488
21080
  seatCodeId?: string | null;
20489
21081
  guardianId?: string | null;
20490
21082
  guardian?: components["schemas"]["CreateGuardianInlineDto"];
20491
21083
  avatarFileId?: string | null;
20492
21084
  };
20493
21085
  }, `${string}/${string}`>>;
21086
+ /**
21087
+ * Consulta o status de uma criação assíncrona de usuário, a partir do
21088
+ * requestId devolvido pelo POST /users. Traz o `username` (login) gerado
21089
+ * pelo worker — útil quando o usuário foi criado sem email.
21090
+ */
21091
+ getUserCreationRequest(requestId: string): Promise<openapi_fetch.FetchResponse<{
21092
+ parameters: {
21093
+ query?: never;
21094
+ header?: never;
21095
+ path: {
21096
+ requestId: string;
21097
+ };
21098
+ cookie?: never;
21099
+ };
21100
+ requestBody?: never;
21101
+ responses: {
21102
+ 200: {
21103
+ headers: {
21104
+ [name: string]: unknown;
21105
+ };
21106
+ content: {
21107
+ "application/json": {
21108
+ status?: string;
21109
+ data?: components["schemas"]["UserCreationRequest"];
21110
+ };
21111
+ };
21112
+ };
21113
+ 401: components["responses"]["Unauthorized"];
21114
+ 404: components["responses"]["NotFound"];
21115
+ 500: components["responses"]["ServerError"];
21116
+ };
21117
+ }, {
21118
+ params: {
21119
+ path: {
21120
+ requestId: string;
21121
+ };
21122
+ };
21123
+ }, `${string}/${string}`>>;
20494
21124
  /**
20495
21125
  * Update user information
20496
21126
  */
@@ -25097,6 +25727,7 @@ type GetQuizzesParams = {
25097
25727
  type GetQuizzesWithContextParams = paths['/quiz/with-context']['get']['parameters']['query'];
25098
25728
  type GenerateQuizQuestionsBody = paths['/quiz/generate-questions']['post']['requestBody']['content']['application/json'];
25099
25729
  type BulkCreateQuizQuestionsBody = paths['/quiz-questions/bulk']['post']['requestBody']['content']['application/json'];
25730
+ type GenerateQuizExplanationsBody = NonNullable<paths['/quiz-questions/{id}/generate-explanations']['post']['requestBody']>['content']['application/json'];
25100
25731
  type GetQuizQuestionsParams = paths['/quiz-questions']['get']['parameters']['query'];
25101
25732
  type GetQuizQuestionAnswersParams = paths['/quiz-question-answers']['get']['parameters']['query'];
25102
25733
  type GetQuizAttemptsParams = paths['/quiz-attempts']['get']['parameters']['query'];
@@ -25243,6 +25874,7 @@ declare function createQuizService(apiClient: AcademeApiClient): {
25243
25874
  options?: {
25244
25875
  text?: string;
25245
25876
  is_correct?: boolean;
25877
+ explanation?: string;
25246
25878
  }[];
25247
25879
  }[];
25248
25880
  };
@@ -25572,6 +26204,7 @@ declare function createQuizService(apiClient: AcademeApiClient): {
25572
26204
  options?: {
25573
26205
  text?: string;
25574
26206
  is_correct?: boolean;
26207
+ explanation?: string;
25575
26208
  }[];
25576
26209
  }[];
25577
26210
  };
@@ -25603,10 +26236,60 @@ declare function createQuizService(apiClient: AcademeApiClient): {
25603
26236
  options?: {
25604
26237
  text?: string;
25605
26238
  is_correct?: boolean;
26239
+ explanation?: string;
25606
26240
  }[];
25607
26241
  }[];
25608
26242
  };
25609
26243
  }, `${string}/${string}`>>;
26244
+ /**
26245
+ * Generate the explanation of every answer of an existing question, with AI.
26246
+ *
26247
+ * Backfill das perguntas criadas antes de a explicação existir. Sobrescreve
26248
+ * o que houver — confirme com o usuário antes de chamar.
26249
+ */
26250
+ generateQuestionExplanations(id: string, body?: GenerateQuizExplanationsBody): Promise<openapi_fetch.FetchResponse<{
26251
+ parameters: {
26252
+ query?: never;
26253
+ header?: never;
26254
+ path: {
26255
+ id: string;
26256
+ };
26257
+ cookie?: never;
26258
+ };
26259
+ requestBody?: {
26260
+ content: {
26261
+ "application/json": {
26262
+ model?: string;
26263
+ };
26264
+ };
26265
+ };
26266
+ responses: {
26267
+ 200: {
26268
+ headers: {
26269
+ [name: string]: unknown;
26270
+ };
26271
+ content: {
26272
+ "application/json": {
26273
+ status?: string;
26274
+ data?: components["schemas"]["QuizQuestion"];
26275
+ };
26276
+ };
26277
+ };
26278
+ 400: components["responses"]["BadRequest"];
26279
+ 401: components["responses"]["Unauthorized"];
26280
+ 404: components["responses"]["NotFound"];
26281
+ 500: components["responses"]["ServerError"];
26282
+ };
26283
+ }, {
26284
+ params: {
26285
+ path: {
26286
+ id: string;
26287
+ };
26288
+ };
26289
+ body: {
26290
+ model?: string;
26291
+ };
26292
+ }, `${string}/${string}`>>;
25610
26293
  /**
25611
26294
  * Update quiz question
25612
26295
  */
@@ -25804,6 +26487,7 @@ declare function createQuizService(apiClient: AcademeApiClient): {
25804
26487
  questionId: string;
25805
26488
  answer: string;
25806
26489
  isCorrect: boolean;
26490
+ explanation?: string;
25807
26491
  };
25808
26492
  }, `${string}/${string}`>>;
25809
26493
  /**
@@ -25849,6 +26533,7 @@ declare function createQuizService(apiClient: AcademeApiClient): {
25849
26533
  body: {
25850
26534
  answer?: string;
25851
26535
  isCorrect?: boolean;
26536
+ explanation?: string;
25852
26537
  };
25853
26538
  }, `${string}/${string}`>>;
25854
26539
  /**