academe-kit 0.11.5 → 0.11.7
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.cjs +46 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +753 -3
- package/dist/index.esm.js +46 -3
- package/dist/index.esm.js.map +1 -1
- package/dist/types/components/AcademeLoading/AcademeLoading.d.ts +9 -2
- package/dist/types/components/AcademeLoading/index.d.ts +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/services/QuizService.d.ts +178 -0
- package/dist/types/services/SubmissionService.d.ts +29 -0
- package/dist/types/types/academe-api.d.ts +536 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -124,6 +124,8 @@ interface AcademeLoadingColors {
|
|
|
124
124
|
/** Círculo branco ("face"). */
|
|
125
125
|
white: string;
|
|
126
126
|
}
|
|
127
|
+
/** Tema visual da vinheta. `light` (default) preserva o fundo claro atual; `dark` usa o fundo escuro da marca. */
|
|
128
|
+
type AcademeLoadingTheme = "light" | "dark";
|
|
127
129
|
interface AcademeLoadingProps {
|
|
128
130
|
/** Lado do palco quadrado, em px. Default 320. */
|
|
129
131
|
size?: number;
|
|
@@ -140,12 +142,17 @@ interface AcademeLoadingProps {
|
|
|
140
142
|
pulseWhileLoading?: boolean;
|
|
141
143
|
/** Chamado ao concluir (após a saída, ou após a vinheta completa). */
|
|
142
144
|
onFinish?: () => void;
|
|
143
|
-
/**
|
|
145
|
+
/**
|
|
146
|
+
* Tema visual base. `light` (default) mantém o fundo claro atual; `dark` aplica
|
|
147
|
+
* a paleta escura da marca. O `colors` ainda sobrescreve qualquer token por cima.
|
|
148
|
+
*/
|
|
149
|
+
theme?: AcademeLoadingTheme;
|
|
150
|
+
/** Sobrescreve tokens de cor (merge com os defaults do tema selecionado). */
|
|
144
151
|
colors?: Partial<AcademeLoadingColors>;
|
|
145
152
|
className?: string;
|
|
146
153
|
style?: React.CSSProperties;
|
|
147
154
|
}
|
|
148
|
-
declare function AcademeLoading({ size, duration, loading, autoPlay, pulseWhileLoading, onFinish, colors, className, style, }: AcademeLoadingProps): react_jsx_runtime.JSX.Element;
|
|
155
|
+
declare function AcademeLoading({ size, duration, loading, autoPlay, pulseWhileLoading, onFinish, theme, colors, className, style, }: AcademeLoadingProps): react_jsx_runtime.JSX.Element;
|
|
149
156
|
|
|
150
157
|
interface LogoAProps {
|
|
151
158
|
/** Altura do logo em px (no palco corresponde a ~0.46·S). Largura é derivada
|
|
@@ -3036,6 +3043,94 @@ interface paths {
|
|
|
3036
3043
|
patch?: never;
|
|
3037
3044
|
trace?: never;
|
|
3038
3045
|
};
|
|
3046
|
+
"/challenges/{id}/participants": {
|
|
3047
|
+
parameters: {
|
|
3048
|
+
query?: never;
|
|
3049
|
+
header?: never;
|
|
3050
|
+
path?: never;
|
|
3051
|
+
cookie?: never;
|
|
3052
|
+
};
|
|
3053
|
+
/**
|
|
3054
|
+
* List the students taking part in this challenge
|
|
3055
|
+
* @description Returns the roster of students for the challenge along with each
|
|
3056
|
+
* student's status, derived from `submissions` (latest attempt) and
|
|
3057
|
+
* `user_challenge_progress` (whether any step was started).
|
|
3058
|
+
*
|
|
3059
|
+
* The roster is built from `institution_registration` rows of the given
|
|
3060
|
+
* institution, filtered by the challenge's serie. `institutionId` and
|
|
3061
|
+
* `serieId` may be supplied via query to provide the viewing context —
|
|
3062
|
+
* useful for global template challenges (`institution_id IS NULL`) shown
|
|
3063
|
+
* via fallback in the pedagogical portal. They default to the
|
|
3064
|
+
* challenge's own institution/serie when omitted.
|
|
3065
|
+
*
|
|
3066
|
+
* Status values: `novo` (not started), `andamento` (started a step, no
|
|
3067
|
+
* submission), `entregue` (submitted | ai_evaluated), `aprovado`
|
|
3068
|
+
* (approved), `rejeitado` (rejected).
|
|
3069
|
+
*/
|
|
3070
|
+
get: {
|
|
3071
|
+
parameters: {
|
|
3072
|
+
query?: {
|
|
3073
|
+
/** @description Viewing institution. Defaults to the challenge's institution. */
|
|
3074
|
+
institutionId?: string;
|
|
3075
|
+
/** @description Serie filter. Defaults to the challenge's serie. */
|
|
3076
|
+
serieId?: string;
|
|
3077
|
+
};
|
|
3078
|
+
header?: never;
|
|
3079
|
+
path: {
|
|
3080
|
+
/** @description Resource ID */
|
|
3081
|
+
id: components["parameters"]["id"];
|
|
3082
|
+
};
|
|
3083
|
+
cookie?: never;
|
|
3084
|
+
};
|
|
3085
|
+
requestBody?: never;
|
|
3086
|
+
responses: {
|
|
3087
|
+
/** @description Roster of participants with derived status */
|
|
3088
|
+
200: {
|
|
3089
|
+
headers: {
|
|
3090
|
+
[name: string]: unknown;
|
|
3091
|
+
};
|
|
3092
|
+
content: {
|
|
3093
|
+
"application/json": {
|
|
3094
|
+
/** @example success */
|
|
3095
|
+
status?: string;
|
|
3096
|
+
data?: {
|
|
3097
|
+
totalStudents?: number;
|
|
3098
|
+
classrooms?: {
|
|
3099
|
+
/** Format: uuid */
|
|
3100
|
+
id?: string;
|
|
3101
|
+
name?: string;
|
|
3102
|
+
count?: number;
|
|
3103
|
+
}[];
|
|
3104
|
+
participants?: {
|
|
3105
|
+
/** Format: uuid */
|
|
3106
|
+
userId?: string;
|
|
3107
|
+
name?: string;
|
|
3108
|
+
email?: string | null;
|
|
3109
|
+
avatarUrl?: string | null;
|
|
3110
|
+
/** Format: uuid */
|
|
3111
|
+
classroomId?: string | null;
|
|
3112
|
+
classroomName?: string | null;
|
|
3113
|
+
/** @enum {string} */
|
|
3114
|
+
status?: "novo" | "andamento" | "entregue" | "aprovado" | "rejeitado";
|
|
3115
|
+
/** Format: uuid */
|
|
3116
|
+
submissionId?: string | null;
|
|
3117
|
+
}[];
|
|
3118
|
+
};
|
|
3119
|
+
};
|
|
3120
|
+
};
|
|
3121
|
+
};
|
|
3122
|
+
401: components["responses"]["Unauthorized"];
|
|
3123
|
+
404: components["responses"]["NotFound"];
|
|
3124
|
+
};
|
|
3125
|
+
};
|
|
3126
|
+
put?: never;
|
|
3127
|
+
post?: never;
|
|
3128
|
+
delete?: never;
|
|
3129
|
+
options?: never;
|
|
3130
|
+
head?: never;
|
|
3131
|
+
patch?: never;
|
|
3132
|
+
trace?: never;
|
|
3133
|
+
};
|
|
3039
3134
|
"/classrooms": {
|
|
3040
3135
|
parameters: {
|
|
3041
3136
|
query?: never;
|
|
@@ -9804,6 +9899,67 @@ interface paths {
|
|
|
9804
9899
|
patch?: never;
|
|
9805
9900
|
trace?: never;
|
|
9806
9901
|
};
|
|
9902
|
+
"/quiz-questions/bulk": {
|
|
9903
|
+
parameters: {
|
|
9904
|
+
query?: never;
|
|
9905
|
+
header?: never;
|
|
9906
|
+
path?: never;
|
|
9907
|
+
cookie?: never;
|
|
9908
|
+
};
|
|
9909
|
+
get?: never;
|
|
9910
|
+
put?: never;
|
|
9911
|
+
/**
|
|
9912
|
+
* Bulk create quiz questions
|
|
9913
|
+
* @description Cria várias perguntas (com respostas) de uma vez para um quiz.
|
|
9914
|
+
*/
|
|
9915
|
+
post: {
|
|
9916
|
+
parameters: {
|
|
9917
|
+
query?: never;
|
|
9918
|
+
header?: never;
|
|
9919
|
+
path?: never;
|
|
9920
|
+
cookie?: never;
|
|
9921
|
+
};
|
|
9922
|
+
requestBody: {
|
|
9923
|
+
content: {
|
|
9924
|
+
"application/json": {
|
|
9925
|
+
quizId: string;
|
|
9926
|
+
questions: {
|
|
9927
|
+
text: string;
|
|
9928
|
+
type: "multiple_choice" | "true_false" | "open";
|
|
9929
|
+
points?: number;
|
|
9930
|
+
options?: {
|
|
9931
|
+
text: string;
|
|
9932
|
+
is_correct: boolean;
|
|
9933
|
+
}[];
|
|
9934
|
+
}[];
|
|
9935
|
+
};
|
|
9936
|
+
};
|
|
9937
|
+
};
|
|
9938
|
+
responses: {
|
|
9939
|
+
/** @description Questions created */
|
|
9940
|
+
201: {
|
|
9941
|
+
headers: {
|
|
9942
|
+
[name: string]: unknown;
|
|
9943
|
+
};
|
|
9944
|
+
content: {
|
|
9945
|
+
"application/json": {
|
|
9946
|
+
/** @example success */
|
|
9947
|
+
status?: string;
|
|
9948
|
+
data?: components["schemas"]["QuizQuestion"][];
|
|
9949
|
+
};
|
|
9950
|
+
};
|
|
9951
|
+
};
|
|
9952
|
+
400: components["responses"]["BadRequest"];
|
|
9953
|
+
401: components["responses"]["Unauthorized"];
|
|
9954
|
+
500: components["responses"]["ServerError"];
|
|
9955
|
+
};
|
|
9956
|
+
};
|
|
9957
|
+
delete?: never;
|
|
9958
|
+
options?: never;
|
|
9959
|
+
head?: never;
|
|
9960
|
+
patch?: never;
|
|
9961
|
+
trace?: never;
|
|
9962
|
+
};
|
|
9807
9963
|
"/quiz-questions/{id}": {
|
|
9808
9964
|
parameters: {
|
|
9809
9965
|
query?: never;
|
|
@@ -10016,6 +10172,145 @@ interface paths {
|
|
|
10016
10172
|
patch?: never;
|
|
10017
10173
|
trace?: never;
|
|
10018
10174
|
};
|
|
10175
|
+
"/quiz/with-context": {
|
|
10176
|
+
parameters: {
|
|
10177
|
+
query?: never;
|
|
10178
|
+
header?: never;
|
|
10179
|
+
path?: never;
|
|
10180
|
+
cookie?: never;
|
|
10181
|
+
};
|
|
10182
|
+
/**
|
|
10183
|
+
* List quizzes with course/module/category context
|
|
10184
|
+
* @description Retrieve a paginated list of quizzes, each enriched with the course, module and category it belongs to. `context` is null for standalone quizzes.
|
|
10185
|
+
*/
|
|
10186
|
+
get: {
|
|
10187
|
+
parameters: {
|
|
10188
|
+
query?: {
|
|
10189
|
+
/** @description Filter by quiz title */
|
|
10190
|
+
title?: string;
|
|
10191
|
+
/** @description Filter by active status */
|
|
10192
|
+
isActive?: boolean;
|
|
10193
|
+
/** @description Filter by creator user ID */
|
|
10194
|
+
createdBy?: string;
|
|
10195
|
+
/** @description Search in title */
|
|
10196
|
+
search?: string;
|
|
10197
|
+
/** @description Page number */
|
|
10198
|
+
page?: number;
|
|
10199
|
+
/** @description Items per page */
|
|
10200
|
+
limit?: number;
|
|
10201
|
+
};
|
|
10202
|
+
header?: never;
|
|
10203
|
+
path?: never;
|
|
10204
|
+
cookie?: never;
|
|
10205
|
+
};
|
|
10206
|
+
requestBody?: never;
|
|
10207
|
+
responses: {
|
|
10208
|
+
/** @description List of quizzes with context */
|
|
10209
|
+
200: {
|
|
10210
|
+
headers: {
|
|
10211
|
+
[name: string]: unknown;
|
|
10212
|
+
};
|
|
10213
|
+
content: {
|
|
10214
|
+
"application/json": {
|
|
10215
|
+
/** @example success */
|
|
10216
|
+
status?: string;
|
|
10217
|
+
data?: (components["schemas"]["Quiz"] & {
|
|
10218
|
+
context?: {
|
|
10219
|
+
course?: {
|
|
10220
|
+
id?: string;
|
|
10221
|
+
title?: string;
|
|
10222
|
+
} | null;
|
|
10223
|
+
module?: {
|
|
10224
|
+
id?: string;
|
|
10225
|
+
title?: string;
|
|
10226
|
+
} | null;
|
|
10227
|
+
category?: {
|
|
10228
|
+
id?: string;
|
|
10229
|
+
name?: string;
|
|
10230
|
+
color?: string | null;
|
|
10231
|
+
} | null;
|
|
10232
|
+
} | null;
|
|
10233
|
+
})[];
|
|
10234
|
+
meta?: components["schemas"]["PaginationMeta"];
|
|
10235
|
+
};
|
|
10236
|
+
};
|
|
10237
|
+
};
|
|
10238
|
+
401: components["responses"]["Unauthorized"];
|
|
10239
|
+
500: components["responses"]["ServerError"];
|
|
10240
|
+
};
|
|
10241
|
+
};
|
|
10242
|
+
put?: never;
|
|
10243
|
+
post?: never;
|
|
10244
|
+
delete?: never;
|
|
10245
|
+
options?: never;
|
|
10246
|
+
head?: never;
|
|
10247
|
+
patch?: never;
|
|
10248
|
+
trace?: never;
|
|
10249
|
+
};
|
|
10250
|
+
"/quiz/generate-questions": {
|
|
10251
|
+
parameters: {
|
|
10252
|
+
query?: never;
|
|
10253
|
+
header?: never;
|
|
10254
|
+
path?: never;
|
|
10255
|
+
cookie?: never;
|
|
10256
|
+
};
|
|
10257
|
+
get?: never;
|
|
10258
|
+
put?: never;
|
|
10259
|
+
/**
|
|
10260
|
+
* Generate quiz questions with AI
|
|
10261
|
+
* @description Gera perguntas a partir de um texto base via IA. Não persiste — apenas devolve.
|
|
10262
|
+
*/
|
|
10263
|
+
post: {
|
|
10264
|
+
parameters: {
|
|
10265
|
+
query?: never;
|
|
10266
|
+
header?: never;
|
|
10267
|
+
path?: never;
|
|
10268
|
+
cookie?: never;
|
|
10269
|
+
};
|
|
10270
|
+
requestBody: {
|
|
10271
|
+
content: {
|
|
10272
|
+
"application/json": {
|
|
10273
|
+
text: string;
|
|
10274
|
+
numQuestions: number;
|
|
10275
|
+
difficulty?: "facil" | "normal" | "dificil";
|
|
10276
|
+
existingQuestions?: string[];
|
|
10277
|
+
model?: string;
|
|
10278
|
+
};
|
|
10279
|
+
};
|
|
10280
|
+
};
|
|
10281
|
+
responses: {
|
|
10282
|
+
/** @description Generated questions */
|
|
10283
|
+
200: {
|
|
10284
|
+
headers: {
|
|
10285
|
+
[name: string]: unknown;
|
|
10286
|
+
};
|
|
10287
|
+
content: {
|
|
10288
|
+
"application/json": {
|
|
10289
|
+
/** @example success */
|
|
10290
|
+
status?: string;
|
|
10291
|
+
data?: {
|
|
10292
|
+
question_text: string;
|
|
10293
|
+
question_type: "multiple_choice" | "true_false";
|
|
10294
|
+
points: number;
|
|
10295
|
+
options: {
|
|
10296
|
+
text: string;
|
|
10297
|
+
is_correct: boolean;
|
|
10298
|
+
}[];
|
|
10299
|
+
}[];
|
|
10300
|
+
};
|
|
10301
|
+
};
|
|
10302
|
+
};
|
|
10303
|
+
400: components["responses"]["BadRequest"];
|
|
10304
|
+
401: components["responses"]["Unauthorized"];
|
|
10305
|
+
500: components["responses"]["ServerError"];
|
|
10306
|
+
};
|
|
10307
|
+
};
|
|
10308
|
+
delete?: never;
|
|
10309
|
+
options?: never;
|
|
10310
|
+
head?: never;
|
|
10311
|
+
patch?: never;
|
|
10312
|
+
trace?: never;
|
|
10313
|
+
};
|
|
10019
10314
|
"/quiz/{id}": {
|
|
10020
10315
|
parameters: {
|
|
10021
10316
|
query?: never;
|
|
@@ -11983,6 +12278,12 @@ interface paths {
|
|
|
11983
12278
|
* - Cannot create after status=approved
|
|
11984
12279
|
* - Cannot exceed challenge.maxSubmissionsAttempts
|
|
11985
12280
|
* - attempt_number is computed server-side with a row lock (FOR UPDATE)
|
|
12281
|
+
*
|
|
12282
|
+
* When `items` is provided, the submission and its files/links are persisted
|
|
12283
|
+
* in the SAME transaction (atomic) and AI evaluation is dispatched after commit.
|
|
12284
|
+
* Each item must have exactly ONE of fileId or url, and must match the
|
|
12285
|
+
* challenge.submissionType (file types require fileId; links require url).
|
|
12286
|
+
* This is the preferred path for clients (no separate POST /submissions/{id}/files).
|
|
11986
12287
|
*/
|
|
11987
12288
|
post: {
|
|
11988
12289
|
parameters: {
|
|
@@ -12007,6 +12308,17 @@ interface paths {
|
|
|
12007
12308
|
*/
|
|
12008
12309
|
groupId?: string;
|
|
12009
12310
|
description?: string;
|
|
12311
|
+
/**
|
|
12312
|
+
* @description Submission delivery. When present, files/links are stored atomically
|
|
12313
|
+
* with the submission and AI evaluation is dispatched after commit.
|
|
12314
|
+
*/
|
|
12315
|
+
items?: {
|
|
12316
|
+
/** Format: uuid */
|
|
12317
|
+
fileId?: string | null;
|
|
12318
|
+
/** Format: uri */
|
|
12319
|
+
url?: string | null;
|
|
12320
|
+
index?: number;
|
|
12321
|
+
}[];
|
|
12010
12322
|
};
|
|
12011
12323
|
};
|
|
12012
12324
|
};
|
|
@@ -12021,6 +12333,45 @@ interface paths {
|
|
|
12021
12333
|
/** @example success */
|
|
12022
12334
|
status?: string;
|
|
12023
12335
|
data?: components["schemas"]["Submission"];
|
|
12336
|
+
/**
|
|
12337
|
+
* @description Journey side-effects of the submission. On the FIRST attempt the
|
|
12338
|
+
* publication step is completed and the user advances; `advance`
|
|
12339
|
+
* carries the resulting tick so the client can animate the journey.
|
|
12340
|
+
* `advance` is null on re-submissions (attempt > 1) or if the advance
|
|
12341
|
+
* step failed (non-fatal — the submission is still created).
|
|
12342
|
+
*/
|
|
12343
|
+
meta?: {
|
|
12344
|
+
advance?: {
|
|
12345
|
+
/** @enum {string} */
|
|
12346
|
+
action?: "started" | "completed" | "finished";
|
|
12347
|
+
/** Format: uuid */
|
|
12348
|
+
challengeId?: string;
|
|
12349
|
+
currentStep?: {
|
|
12350
|
+
/** Format: uuid */
|
|
12351
|
+
id?: string;
|
|
12352
|
+
index?: number;
|
|
12353
|
+
name?: string;
|
|
12354
|
+
/** Format: date-time */
|
|
12355
|
+
startedAt?: string | null;
|
|
12356
|
+
/** Format: date-time */
|
|
12357
|
+
completedAt?: string | null;
|
|
12358
|
+
} | null;
|
|
12359
|
+
nextStep?: {
|
|
12360
|
+
/** Format: uuid */
|
|
12361
|
+
id?: string;
|
|
12362
|
+
index?: number;
|
|
12363
|
+
name?: string;
|
|
12364
|
+
/** Format: date-time */
|
|
12365
|
+
startedAt?: string | null;
|
|
12366
|
+
} | null;
|
|
12367
|
+
autoCompletedSteps?: {
|
|
12368
|
+
/** Format: uuid */
|
|
12369
|
+
id?: string;
|
|
12370
|
+
index?: number;
|
|
12371
|
+
name?: string;
|
|
12372
|
+
}[];
|
|
12373
|
+
} | null;
|
|
12374
|
+
};
|
|
12024
12375
|
};
|
|
12025
12376
|
};
|
|
12026
12377
|
};
|
|
@@ -12084,6 +12435,79 @@ interface paths {
|
|
|
12084
12435
|
patch?: never;
|
|
12085
12436
|
trace?: never;
|
|
12086
12437
|
};
|
|
12438
|
+
"/submissions/{id}/classroom-rank": {
|
|
12439
|
+
parameters: {
|
|
12440
|
+
query?: never;
|
|
12441
|
+
header?: never;
|
|
12442
|
+
path?: never;
|
|
12443
|
+
cookie?: never;
|
|
12444
|
+
};
|
|
12445
|
+
/**
|
|
12446
|
+
* Ordem de entrega do aluno na turma para o desafio desta submissão
|
|
12447
|
+
* @description Retorna a posição do aluno entre os colegas de turma (institution_classroom
|
|
12448
|
+
* via membership) a entregar o desafio, ordenando pela PRIMEIRA entrega de cada
|
|
12449
|
+
* aluno (MIN(submitted_at)). Usado pelo app do aluno como incentivo a entregar
|
|
12450
|
+
* cedo ("Você foi o Nº de X da turma a entregar"). Quando o aluno não tem turma
|
|
12451
|
+
* na instituição, retorna order=0 e classSize=0 e o cliente esconde o card.
|
|
12452
|
+
*/
|
|
12453
|
+
get: {
|
|
12454
|
+
parameters: {
|
|
12455
|
+
query?: never;
|
|
12456
|
+
header?: never;
|
|
12457
|
+
path: {
|
|
12458
|
+
/** @description Resource ID */
|
|
12459
|
+
id: components["parameters"]["id"];
|
|
12460
|
+
};
|
|
12461
|
+
cookie?: never;
|
|
12462
|
+
};
|
|
12463
|
+
requestBody?: never;
|
|
12464
|
+
responses: {
|
|
12465
|
+
/** @description Posição na turma */
|
|
12466
|
+
200: {
|
|
12467
|
+
headers: {
|
|
12468
|
+
[name: string]: unknown;
|
|
12469
|
+
};
|
|
12470
|
+
content: {
|
|
12471
|
+
"application/json": {
|
|
12472
|
+
/** @example success */
|
|
12473
|
+
status?: string;
|
|
12474
|
+
data?: {
|
|
12475
|
+
/**
|
|
12476
|
+
* @description Posição do aluno (1-based) entre os que entregaram; 0 quando sem turma
|
|
12477
|
+
* @example 3
|
|
12478
|
+
*/
|
|
12479
|
+
order?: number;
|
|
12480
|
+
/**
|
|
12481
|
+
* @description Total de alunos da turma (independente de terem entregado)
|
|
12482
|
+
* @example 28
|
|
12483
|
+
*/
|
|
12484
|
+
classSize?: number;
|
|
12485
|
+
/**
|
|
12486
|
+
* @description Quantos alunos da turma já entregaram o desafio
|
|
12487
|
+
* @example 12
|
|
12488
|
+
*/
|
|
12489
|
+
submittedCount?: number;
|
|
12490
|
+
/**
|
|
12491
|
+
* @description true quando order está entre 1 e 3
|
|
12492
|
+
* @example true
|
|
12493
|
+
*/
|
|
12494
|
+
earlyBird?: boolean;
|
|
12495
|
+
};
|
|
12496
|
+
};
|
|
12497
|
+
};
|
|
12498
|
+
};
|
|
12499
|
+
401: components["responses"]["Unauthorized"];
|
|
12500
|
+
404: components["responses"]["NotFound"];
|
|
12501
|
+
};
|
|
12502
|
+
};
|
|
12503
|
+
put?: never;
|
|
12504
|
+
post?: never;
|
|
12505
|
+
delete?: never;
|
|
12506
|
+
options?: never;
|
|
12507
|
+
head?: never;
|
|
12508
|
+
patch?: never;
|
|
12509
|
+
trace?: never;
|
|
12510
|
+
};
|
|
12087
12511
|
"/submissions/{id}/files": {
|
|
12088
12512
|
parameters: {
|
|
12089
12513
|
query?: never;
|
|
@@ -12665,6 +13089,12 @@ interface paths {
|
|
|
12665
13089
|
* Útil para pré-visualização administrativa ou quando o aluno pertence a múltiplas séries.
|
|
12666
13090
|
*/
|
|
12667
13091
|
serieId?: string;
|
|
13092
|
+
/**
|
|
13093
|
+
* @description Escola atual (contexto de instituição do app). Opcional — se omitido, usa a 1ª
|
|
13094
|
+
* matrícula. A jornada é por escola: filtra os challenges e resolve a turma/série
|
|
13095
|
+
* default a partir da membership do usuário NESTA instituição.
|
|
13096
|
+
*/
|
|
13097
|
+
institutionId?: string;
|
|
12668
13098
|
/**
|
|
12669
13099
|
* @description [Admin] Quando presente, retorna a jornada do usuário-alvo em vez da do
|
|
12670
13100
|
* autenticado. Usado pelo backoffice para visualizar a jornada de um aluno.
|
|
@@ -13562,6 +13992,97 @@ interface paths {
|
|
|
13562
13992
|
patch?: never;
|
|
13563
13993
|
trace?: never;
|
|
13564
13994
|
};
|
|
13995
|
+
"/users/me/classrooms": {
|
|
13996
|
+
parameters: {
|
|
13997
|
+
query?: never;
|
|
13998
|
+
header?: never;
|
|
13999
|
+
path?: never;
|
|
14000
|
+
cookie?: never;
|
|
14001
|
+
};
|
|
14002
|
+
/**
|
|
14003
|
+
* Turmas e séries do usuário autenticado
|
|
14004
|
+
* @description Contexto de matrícula do aluno: TODAS as suas turmas (com série, turno e
|
|
14005
|
+
* instituição), a escola ATUAL e a lista DEDUPLICADA de séries dessa escola.
|
|
14006
|
+
*
|
|
14007
|
+
* Fonte única para o app: `classrooms` alimenta a listagem de turmas no
|
|
14008
|
+
* perfil; `currentInstitutionId` é a escola atual (o app mostra uma escola
|
|
14009
|
+
* por vez); `series` traz APENAS as séries da escola atual (deduplicada e
|
|
14010
|
+
* ordenada por nível/valor) — alimenta o seletor da jornada, que também é
|
|
14011
|
+
* por escola. O botão só aparece com 2+ séries na escola atual.
|
|
14012
|
+
*/
|
|
14013
|
+
get: {
|
|
14014
|
+
parameters: {
|
|
14015
|
+
query?: never;
|
|
14016
|
+
header?: never;
|
|
14017
|
+
path?: never;
|
|
14018
|
+
cookie?: never;
|
|
14019
|
+
};
|
|
14020
|
+
requestBody?: never;
|
|
14021
|
+
responses: {
|
|
14022
|
+
/** @description Turmas + séries acessíveis */
|
|
14023
|
+
200: {
|
|
14024
|
+
headers: {
|
|
14025
|
+
[name: string]: unknown;
|
|
14026
|
+
};
|
|
14027
|
+
content: {
|
|
14028
|
+
"application/json": {
|
|
14029
|
+
/** @example success */
|
|
14030
|
+
status?: string;
|
|
14031
|
+
data?: {
|
|
14032
|
+
/**
|
|
14033
|
+
* Format: uuid
|
|
14034
|
+
* @description Escola atual (a da matrícula). As séries são desta escola.
|
|
14035
|
+
*/
|
|
14036
|
+
currentInstitutionId?: string | null;
|
|
14037
|
+
classrooms?: {
|
|
14038
|
+
/** Format: uuid */
|
|
14039
|
+
institutionClassroomId?: string;
|
|
14040
|
+
/** Format: uuid */
|
|
14041
|
+
classroomId?: string;
|
|
14042
|
+
/** @example 6º A */
|
|
14043
|
+
classroomName?: string;
|
|
14044
|
+
/** @example manhã */
|
|
14045
|
+
shiftName?: string | null;
|
|
14046
|
+
/** Format: uuid */
|
|
14047
|
+
institutionId?: string;
|
|
14048
|
+
/** @example Escola Modelo */
|
|
14049
|
+
institutionName?: string | null;
|
|
14050
|
+
serie?: {
|
|
14051
|
+
/** Format: uuid */
|
|
14052
|
+
serieId?: string;
|
|
14053
|
+
/** @example 6 */
|
|
14054
|
+
serieValue?: number;
|
|
14055
|
+
/** @example 6º ANO */
|
|
14056
|
+
serieLabel?: string;
|
|
14057
|
+
/** @enum {string} */
|
|
14058
|
+
level?: "fundamental" | "medio";
|
|
14059
|
+
} | null;
|
|
14060
|
+
}[];
|
|
14061
|
+
series?: {
|
|
14062
|
+
/** Format: uuid */
|
|
14063
|
+
serieId?: string;
|
|
14064
|
+
/** @example 6 */
|
|
14065
|
+
serieValue?: number;
|
|
14066
|
+
/** @example 6º ANO */
|
|
14067
|
+
serieLabel?: string;
|
|
14068
|
+
/** @enum {string} */
|
|
14069
|
+
level?: "fundamental" | "medio";
|
|
14070
|
+
}[];
|
|
14071
|
+
};
|
|
14072
|
+
};
|
|
14073
|
+
};
|
|
14074
|
+
};
|
|
14075
|
+
401: components["responses"]["Unauthorized"];
|
|
14076
|
+
};
|
|
14077
|
+
};
|
|
14078
|
+
put?: never;
|
|
14079
|
+
post?: never;
|
|
14080
|
+
delete?: never;
|
|
14081
|
+
options?: never;
|
|
14082
|
+
head?: never;
|
|
14083
|
+
patch?: never;
|
|
14084
|
+
trace?: never;
|
|
14085
|
+
};
|
|
13565
14086
|
"/users/me/push-tokens": {
|
|
13566
14087
|
parameters: {
|
|
13567
14088
|
query?: never;
|
|
@@ -15174,6 +15695,8 @@ interface components {
|
|
|
15174
15695
|
certificateTemplate?: components["schemas"]["CertificateTemplate"];
|
|
15175
15696
|
/** @description Course information related to the certificate (extracted from Quiz or CertificateTemplate) */
|
|
15176
15697
|
course?: components["schemas"]["CourseSimplified"];
|
|
15698
|
+
/** @description Course module information related to the certificate (resolved from the quiz the student took). Null when the certificate came from a template course. */
|
|
15699
|
+
module?: components["schemas"]["ModuleSimplified"];
|
|
15177
15700
|
};
|
|
15178
15701
|
/** @description Simplified course information included in certificate responses */
|
|
15179
15702
|
CourseSimplified: {
|
|
@@ -15193,6 +15716,26 @@ interface components {
|
|
|
15193
15716
|
*/
|
|
15194
15717
|
description?: string | null;
|
|
15195
15718
|
};
|
|
15719
|
+
/** @description Simplified course module information included in certificate responses */
|
|
15720
|
+
ModuleSimplified: {
|
|
15721
|
+
/**
|
|
15722
|
+
* Format: uuid
|
|
15723
|
+
* @description Course module ID
|
|
15724
|
+
*/
|
|
15725
|
+
id?: string;
|
|
15726
|
+
/**
|
|
15727
|
+
* @description Course module title
|
|
15728
|
+
* @example Variables and Data Types
|
|
15729
|
+
*/
|
|
15730
|
+
title?: string;
|
|
15731
|
+
/** @description Course module description */
|
|
15732
|
+
description?: string | null;
|
|
15733
|
+
/**
|
|
15734
|
+
* @description Course module workload in hours
|
|
15735
|
+
* @example 40
|
|
15736
|
+
*/
|
|
15737
|
+
duration?: number | null;
|
|
15738
|
+
};
|
|
15196
15739
|
/** @description Simplified quiz information included in course and module responses */
|
|
15197
15740
|
QuizSimplified: {
|
|
15198
15741
|
/**
|
|
@@ -22524,6 +23067,9 @@ type GetQuizzesParams = {
|
|
|
22524
23067
|
page?: number;
|
|
22525
23068
|
limit?: number;
|
|
22526
23069
|
};
|
|
23070
|
+
type GetQuizzesWithContextParams = paths['/quiz/with-context']['get']['parameters']['query'];
|
|
23071
|
+
type GenerateQuizQuestionsBody = paths['/quiz/generate-questions']['post']['requestBody']['content']['application/json'];
|
|
23072
|
+
type BulkCreateQuizQuestionsBody = paths['/quiz-questions/bulk']['post']['requestBody']['content']['application/json'];
|
|
22527
23073
|
type GetQuizQuestionsParams = paths['/quiz-questions']['get']['parameters']['query'];
|
|
22528
23074
|
type GetQuizQuestionAnswersParams = paths['/quiz-question-answers']['get']['parameters']['query'];
|
|
22529
23075
|
type GetQuizAttemptsParams = paths['/quiz-attempts']['get']['parameters']['query'];
|
|
@@ -22569,6 +23115,125 @@ declare function createQuizService(apiClient: AcademeApiClient): {
|
|
|
22569
23115
|
query: GetQuizzesParams | undefined;
|
|
22570
23116
|
};
|
|
22571
23117
|
}, `${string}/${string}`>>;
|
|
23118
|
+
/**
|
|
23119
|
+
* List quizzes enriched with their course/module/category context.
|
|
23120
|
+
* Tailored for the backoffice listing.
|
|
23121
|
+
*/
|
|
23122
|
+
getAllWithContext(params?: GetQuizzesWithContextParams): Promise<openapi_fetch.FetchResponse<{
|
|
23123
|
+
parameters: {
|
|
23124
|
+
query?: {
|
|
23125
|
+
title?: string;
|
|
23126
|
+
isActive?: boolean;
|
|
23127
|
+
createdBy?: string;
|
|
23128
|
+
search?: string;
|
|
23129
|
+
page?: number;
|
|
23130
|
+
limit?: number;
|
|
23131
|
+
};
|
|
23132
|
+
header?: never;
|
|
23133
|
+
path?: never;
|
|
23134
|
+
cookie?: never;
|
|
23135
|
+
};
|
|
23136
|
+
requestBody?: never;
|
|
23137
|
+
responses: {
|
|
23138
|
+
200: {
|
|
23139
|
+
headers: {
|
|
23140
|
+
[name: string]: unknown;
|
|
23141
|
+
};
|
|
23142
|
+
content: {
|
|
23143
|
+
"application/json": {
|
|
23144
|
+
status?: string;
|
|
23145
|
+
data?: (components["schemas"]["Quiz"] & {
|
|
23146
|
+
context?: {
|
|
23147
|
+
course?: {
|
|
23148
|
+
id?: string;
|
|
23149
|
+
title?: string;
|
|
23150
|
+
} | null;
|
|
23151
|
+
module?: {
|
|
23152
|
+
id?: string;
|
|
23153
|
+
title?: string;
|
|
23154
|
+
} | null;
|
|
23155
|
+
category?: {
|
|
23156
|
+
id?: string;
|
|
23157
|
+
name?: string;
|
|
23158
|
+
color?: string | null;
|
|
23159
|
+
} | null;
|
|
23160
|
+
} | null;
|
|
23161
|
+
})[];
|
|
23162
|
+
meta?: components["schemas"]["PaginationMeta"];
|
|
23163
|
+
};
|
|
23164
|
+
};
|
|
23165
|
+
};
|
|
23166
|
+
401: components["responses"]["Unauthorized"];
|
|
23167
|
+
500: components["responses"]["ServerError"];
|
|
23168
|
+
};
|
|
23169
|
+
}, {
|
|
23170
|
+
params: {
|
|
23171
|
+
query: {
|
|
23172
|
+
title?: string;
|
|
23173
|
+
isActive?: boolean;
|
|
23174
|
+
createdBy?: string;
|
|
23175
|
+
search?: string;
|
|
23176
|
+
page?: number;
|
|
23177
|
+
limit?: number;
|
|
23178
|
+
} | undefined;
|
|
23179
|
+
};
|
|
23180
|
+
}, `${string}/${string}`>>;
|
|
23181
|
+
/**
|
|
23182
|
+
* Generate quiz questions from a base text using AI.
|
|
23183
|
+
* The OpenRouter key lives only on the server — this just calls the
|
|
23184
|
+
* authenticated backend endpoint.
|
|
23185
|
+
*/
|
|
23186
|
+
generateQuestions(body: GenerateQuizQuestionsBody): Promise<openapi_fetch.FetchResponse<{
|
|
23187
|
+
parameters: {
|
|
23188
|
+
query?: never;
|
|
23189
|
+
header?: never;
|
|
23190
|
+
path?: never;
|
|
23191
|
+
cookie?: never;
|
|
23192
|
+
};
|
|
23193
|
+
requestBody: {
|
|
23194
|
+
content: {
|
|
23195
|
+
"application/json": {
|
|
23196
|
+
text: string;
|
|
23197
|
+
numQuestions: number;
|
|
23198
|
+
difficulty?: "facil" | "normal" | "dificil";
|
|
23199
|
+
existingQuestions?: string[];
|
|
23200
|
+
model?: string;
|
|
23201
|
+
};
|
|
23202
|
+
};
|
|
23203
|
+
};
|
|
23204
|
+
responses: {
|
|
23205
|
+
200: {
|
|
23206
|
+
headers: {
|
|
23207
|
+
[name: string]: unknown;
|
|
23208
|
+
};
|
|
23209
|
+
content: {
|
|
23210
|
+
"application/json": {
|
|
23211
|
+
status?: string;
|
|
23212
|
+
data?: {
|
|
23213
|
+
question_text: string;
|
|
23214
|
+
question_type: "multiple_choice" | "true_false";
|
|
23215
|
+
points: number;
|
|
23216
|
+
options: {
|
|
23217
|
+
text: string;
|
|
23218
|
+
is_correct: boolean;
|
|
23219
|
+
}[];
|
|
23220
|
+
}[];
|
|
23221
|
+
};
|
|
23222
|
+
};
|
|
23223
|
+
};
|
|
23224
|
+
400: components["responses"]["BadRequest"];
|
|
23225
|
+
401: components["responses"]["Unauthorized"];
|
|
23226
|
+
500: components["responses"]["ServerError"];
|
|
23227
|
+
};
|
|
23228
|
+
}, {
|
|
23229
|
+
body: {
|
|
23230
|
+
text: string;
|
|
23231
|
+
numQuestions: number;
|
|
23232
|
+
difficulty?: "facil" | "normal" | "dificil";
|
|
23233
|
+
existingQuestions?: string[];
|
|
23234
|
+
model?: string;
|
|
23235
|
+
};
|
|
23236
|
+
}, `${string}/${string}`>>;
|
|
22572
23237
|
/**
|
|
22573
23238
|
* Get quiz by ID
|
|
22574
23239
|
*/
|
|
@@ -22859,6 +23524,62 @@ declare function createQuizService(apiClient: AcademeApiClient): {
|
|
|
22859
23524
|
points?: number;
|
|
22860
23525
|
};
|
|
22861
23526
|
}, `${string}/${string}`>>;
|
|
23527
|
+
/**
|
|
23528
|
+
* Bulk create quiz questions (with their answers) for a quiz.
|
|
23529
|
+
*/
|
|
23530
|
+
bulkCreateQuestions(body: BulkCreateQuizQuestionsBody): Promise<openapi_fetch.FetchResponse<{
|
|
23531
|
+
parameters: {
|
|
23532
|
+
query?: never;
|
|
23533
|
+
header?: never;
|
|
23534
|
+
path?: never;
|
|
23535
|
+
cookie?: never;
|
|
23536
|
+
};
|
|
23537
|
+
requestBody: {
|
|
23538
|
+
content: {
|
|
23539
|
+
"application/json": {
|
|
23540
|
+
quizId: string;
|
|
23541
|
+
questions: {
|
|
23542
|
+
text: string;
|
|
23543
|
+
type: "multiple_choice" | "true_false" | "open";
|
|
23544
|
+
points?: number;
|
|
23545
|
+
options?: {
|
|
23546
|
+
text: string;
|
|
23547
|
+
is_correct: boolean;
|
|
23548
|
+
}[];
|
|
23549
|
+
}[];
|
|
23550
|
+
};
|
|
23551
|
+
};
|
|
23552
|
+
};
|
|
23553
|
+
responses: {
|
|
23554
|
+
201: {
|
|
23555
|
+
headers: {
|
|
23556
|
+
[name: string]: unknown;
|
|
23557
|
+
};
|
|
23558
|
+
content: {
|
|
23559
|
+
"application/json": {
|
|
23560
|
+
status?: string;
|
|
23561
|
+
data?: components["schemas"]["QuizQuestion"][];
|
|
23562
|
+
};
|
|
23563
|
+
};
|
|
23564
|
+
};
|
|
23565
|
+
400: components["responses"]["BadRequest"];
|
|
23566
|
+
401: components["responses"]["Unauthorized"];
|
|
23567
|
+
500: components["responses"]["ServerError"];
|
|
23568
|
+
};
|
|
23569
|
+
}, {
|
|
23570
|
+
body: {
|
|
23571
|
+
quizId: string;
|
|
23572
|
+
questions: {
|
|
23573
|
+
text: string;
|
|
23574
|
+
type: "multiple_choice" | "true_false" | "open";
|
|
23575
|
+
points?: number;
|
|
23576
|
+
options?: {
|
|
23577
|
+
text: string;
|
|
23578
|
+
is_correct: boolean;
|
|
23579
|
+
}[];
|
|
23580
|
+
}[];
|
|
23581
|
+
};
|
|
23582
|
+
}, `${string}/${string}`>>;
|
|
22862
23583
|
/**
|
|
22863
23584
|
* Update quiz question
|
|
22864
23585
|
*/
|
|
@@ -26645,6 +27366,11 @@ declare function createSubmissionService(apiClient: AcademeApiClient): {
|
|
|
26645
27366
|
institutionId: string;
|
|
26646
27367
|
groupId?: string;
|
|
26647
27368
|
description?: string;
|
|
27369
|
+
items?: {
|
|
27370
|
+
fileId?: string | null;
|
|
27371
|
+
url?: string | null;
|
|
27372
|
+
index?: number;
|
|
27373
|
+
}[];
|
|
26648
27374
|
};
|
|
26649
27375
|
};
|
|
26650
27376
|
};
|
|
@@ -26657,6 +27383,30 @@ declare function createSubmissionService(apiClient: AcademeApiClient): {
|
|
|
26657
27383
|
"application/json": {
|
|
26658
27384
|
status?: string;
|
|
26659
27385
|
data?: components["schemas"]["Submission"];
|
|
27386
|
+
meta?: {
|
|
27387
|
+
advance?: {
|
|
27388
|
+
action?: "started" | "completed" | "finished";
|
|
27389
|
+
challengeId?: string;
|
|
27390
|
+
currentStep?: {
|
|
27391
|
+
id?: string;
|
|
27392
|
+
index?: number;
|
|
27393
|
+
name?: string;
|
|
27394
|
+
startedAt?: string | null;
|
|
27395
|
+
completedAt?: string | null;
|
|
27396
|
+
} | null;
|
|
27397
|
+
nextStep?: {
|
|
27398
|
+
id?: string;
|
|
27399
|
+
index?: number;
|
|
27400
|
+
name?: string;
|
|
27401
|
+
startedAt?: string | null;
|
|
27402
|
+
} | null;
|
|
27403
|
+
autoCompletedSteps?: {
|
|
27404
|
+
id?: string;
|
|
27405
|
+
index?: number;
|
|
27406
|
+
name?: string;
|
|
27407
|
+
}[];
|
|
27408
|
+
} | null;
|
|
27409
|
+
};
|
|
26660
27410
|
};
|
|
26661
27411
|
};
|
|
26662
27412
|
};
|
|
@@ -27300,4 +28050,4 @@ declare enum NINA_ROLES {
|
|
|
27300
28050
|
}
|
|
27301
28051
|
|
|
27302
28052
|
export { AcademeAuthProvider, AcademeLoading, BACKOFFICE_ROLES, Button, CosmicDecor, CosmicStarsCanvas, DASHBOARD_ROLES, GLOBAL_ROLES, JourneyCrystalPin, JourneyStep, LogoA, MIKE_ROLES, NINA_ROLES, ProtectedApp, ProtectedComponent, ProtectedRouter, STREAMING_ROLES, Spinner, WIDGET_ROLES, academeApi_d as apiTypes, cn, createAcademeApiClient, index_d as types, useAcademeAuth, useProtectedAppColors };
|
|
27303
|
-
export type { AcademeApiClient, AcademeKeycloakContextProps, AcademeLoadingColors, AcademeLoadingProps, AcademeServices, AcademeUser, ButtonProps, ChallengeUserQuizAttempt, ChallengeUserQuizAttemptsResponse, CosmicDecorProps, CosmicDecorVariant, CosmicPlanet, CosmicStarsCanvasProps, FrameKind, JourneyChallengeView, JourneyCrystalPinProps, JourneyStepProps, JourneyStepSize, JourneyStepType, JourneyStepView, JourneyView, KeycloakUser, LogoAProps, RequiredClientRoles, SecurityContextType, SecurityProviderProps };
|
|
28053
|
+
export type { AcademeApiClient, AcademeKeycloakContextProps, AcademeLoadingColors, AcademeLoadingProps, AcademeLoadingTheme, AcademeServices, AcademeUser, ButtonProps, ChallengeUserQuizAttempt, ChallengeUserQuizAttemptsResponse, CosmicDecorProps, CosmicDecorVariant, CosmicPlanet, CosmicStarsCanvasProps, FrameKind, JourneyChallengeView, JourneyCrystalPinProps, JourneyStepProps, JourneyStepSize, JourneyStepType, JourneyStepView, JourneyView, KeycloakUser, LogoAProps, RequiredClientRoles, SecurityContextType, SecurityProviderProps };
|