academe-kit 0.12.1 → 0.14.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.cjs +85 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +213 -122
- package/dist/index.esm.js +85 -2
- package/dist/index.esm.js.map +1 -1
- package/dist/types/index.d.ts +3 -0
- package/dist/types/services/ChallengeService.d.ts +0 -2
- package/dist/types/services/QuizService.d.ts +10 -10
- package/dist/types/services/StepService.d.ts +6 -6
- package/dist/types/services/UserProgressService.d.ts +8 -1
- package/dist/types/services/VitrineService.d.ts +51 -0
- package/dist/types/services/WatchlistService.d.ts +29 -0
- package/dist/types/services/index.d.ts +6 -0
- package/dist/types/services/userService.d.ts +31 -0
- package/dist/types/types/academe-api.d.ts +75 -102
- package/package.json +2 -2
package/dist/types/index.d.ts
CHANGED
|
@@ -20,6 +20,9 @@ export { createAcademeApiClient } from "./services";
|
|
|
20
20
|
export type { AcademeApiClient, AcademeServices } from "./services";
|
|
21
21
|
export type { ChallengeUserQuizAttempt, ChallengeUserQuizAttemptsResponse, } from "./services/ChallengeService";
|
|
22
22
|
export type { JourneyStepView, JourneyChallengeView, JourneyView, } from "./services/UserProgressService";
|
|
23
|
+
export type { AccessibleSerie, ClassroomSummary, UserEnrollment, } from "./services/userService";
|
|
24
|
+
export type { VitrineHome, VitrinePlaylist, VitrineCard, VitrineCardKind, VitrinePlaylistSource, VitrineCardOrientation, } from "./services/VitrineService";
|
|
25
|
+
export type { WatchlistItem, WatchlistResponse, WatchlistType, } from "./services/WatchlistService";
|
|
23
26
|
export { cn } from "./lib/utils";
|
|
24
27
|
import "./index.css";
|
|
25
28
|
import "./styles/globals.css";
|
|
@@ -397,7 +397,6 @@ export declare function createChallengeService(apiClient: AcademeApiClient): {
|
|
|
397
397
|
tutorialTitle?: string;
|
|
398
398
|
tutorialDescription?: string;
|
|
399
399
|
tutorialVideoUrl?: string;
|
|
400
|
-
redirectUrl?: string;
|
|
401
400
|
isActive?: boolean;
|
|
402
401
|
};
|
|
403
402
|
};
|
|
@@ -432,7 +431,6 @@ export declare function createChallengeService(apiClient: AcademeApiClient): {
|
|
|
432
431
|
tutorialTitle?: string;
|
|
433
432
|
tutorialDescription?: string;
|
|
434
433
|
tutorialVideoUrl?: string;
|
|
435
|
-
redirectUrl?: string;
|
|
436
434
|
isActive?: boolean;
|
|
437
435
|
};
|
|
438
436
|
}, `${string}/${string}`>>;
|
|
@@ -161,12 +161,12 @@ export declare function createQuizService(apiClient: AcademeApiClient): {
|
|
|
161
161
|
"application/json": {
|
|
162
162
|
status?: string;
|
|
163
163
|
data?: {
|
|
164
|
-
question_text
|
|
165
|
-
question_type
|
|
166
|
-
points
|
|
167
|
-
options
|
|
168
|
-
text
|
|
169
|
-
is_correct
|
|
164
|
+
question_text: string;
|
|
165
|
+
question_type: "multiple_choice" | "true_false";
|
|
166
|
+
points: number;
|
|
167
|
+
options: {
|
|
168
|
+
text: string;
|
|
169
|
+
is_correct: boolean;
|
|
170
170
|
}[];
|
|
171
171
|
}[];
|
|
172
172
|
};
|
|
@@ -494,8 +494,8 @@ export declare function createQuizService(apiClient: AcademeApiClient): {
|
|
|
494
494
|
type: "multiple_choice" | "true_false" | "open";
|
|
495
495
|
points?: number;
|
|
496
496
|
options?: {
|
|
497
|
-
text
|
|
498
|
-
is_correct
|
|
497
|
+
text: string;
|
|
498
|
+
is_correct: boolean;
|
|
499
499
|
}[];
|
|
500
500
|
}[];
|
|
501
501
|
};
|
|
@@ -525,8 +525,8 @@ export declare function createQuizService(apiClient: AcademeApiClient): {
|
|
|
525
525
|
type: "multiple_choice" | "true_false" | "open";
|
|
526
526
|
points?: number;
|
|
527
527
|
options?: {
|
|
528
|
-
text
|
|
529
|
-
is_correct
|
|
528
|
+
text: string;
|
|
529
|
+
is_correct: boolean;
|
|
530
530
|
}[];
|
|
531
531
|
}[];
|
|
532
532
|
};
|
|
@@ -10,7 +10,7 @@ export declare function createStepService(apiClient: AcademeApiClient): {
|
|
|
10
10
|
getAll(params?: GetStepsParams): Promise<import("openapi-fetch").FetchResponse<{
|
|
11
11
|
parameters: {
|
|
12
12
|
query?: {
|
|
13
|
-
type?: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate"
|
|
13
|
+
type?: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate";
|
|
14
14
|
isActive?: boolean;
|
|
15
15
|
};
|
|
16
16
|
header?: never;
|
|
@@ -36,7 +36,7 @@ export declare function createStepService(apiClient: AcademeApiClient): {
|
|
|
36
36
|
}, {
|
|
37
37
|
params: {
|
|
38
38
|
query: {
|
|
39
|
-
type?: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate"
|
|
39
|
+
type?: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate";
|
|
40
40
|
isActive?: boolean;
|
|
41
41
|
} | undefined;
|
|
42
42
|
};
|
|
@@ -94,7 +94,7 @@ export declare function createStepService(apiClient: AcademeApiClient): {
|
|
|
94
94
|
name: string;
|
|
95
95
|
color: string;
|
|
96
96
|
icon: string;
|
|
97
|
-
type: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate"
|
|
97
|
+
type: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate";
|
|
98
98
|
isActive?: boolean;
|
|
99
99
|
};
|
|
100
100
|
};
|
|
@@ -120,7 +120,7 @@ export declare function createStepService(apiClient: AcademeApiClient): {
|
|
|
120
120
|
name: string;
|
|
121
121
|
color: string;
|
|
122
122
|
icon: string;
|
|
123
|
-
type: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate"
|
|
123
|
+
type: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate";
|
|
124
124
|
isActive?: boolean;
|
|
125
125
|
};
|
|
126
126
|
}, `${string}/${string}`>>;
|
|
@@ -142,7 +142,7 @@ export declare function createStepService(apiClient: AcademeApiClient): {
|
|
|
142
142
|
name?: string;
|
|
143
143
|
color?: string;
|
|
144
144
|
icon?: string;
|
|
145
|
-
type?: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate"
|
|
145
|
+
type?: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate";
|
|
146
146
|
isActive?: boolean;
|
|
147
147
|
};
|
|
148
148
|
};
|
|
@@ -174,7 +174,7 @@ export declare function createStepService(apiClient: AcademeApiClient): {
|
|
|
174
174
|
name?: string;
|
|
175
175
|
color?: string;
|
|
176
176
|
icon?: string;
|
|
177
|
-
type?: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate"
|
|
177
|
+
type?: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate";
|
|
178
178
|
isActive?: boolean;
|
|
179
179
|
};
|
|
180
180
|
}, `${string}/${string}`>>;
|
|
@@ -16,8 +16,15 @@ export declare function createUserProgressService(apiClient: AcademeApiClient):
|
|
|
16
16
|
* `userId` é [Admin]: quando informado, retorna a jornada do usuário-alvo
|
|
17
17
|
* (ex.: backoffice visualizando a jornada de um aluno); omitido = jornada
|
|
18
18
|
* do próprio usuário autenticado.
|
|
19
|
+
*
|
|
20
|
+
* `institutionId` é a escola ATUAL: a jornada é POR ESCOLA (o usuário pode
|
|
21
|
+
* estar em várias). Omitido = 1ª matrícula resolvida no backend.
|
|
22
|
+
*
|
|
23
|
+
* ⚠️ Ordem dos parâmetros: `institutionId` foi adicionado como 3º parâmetro
|
|
24
|
+
* (após `userId`) para NÃO quebrar chamadas posicionais existentes — o
|
|
25
|
+
* backoffice chama `getJourney(undefined, userId)`.
|
|
19
26
|
*/
|
|
20
|
-
getJourney(serieId?: string, userId?: string): Promise<JourneyView>;
|
|
27
|
+
getJourney(serieId?: string, userId?: string, institutionId?: string): Promise<JourneyView>;
|
|
21
28
|
/**
|
|
22
29
|
* Visão step-by-step do progresso do usuário em um desafio. Cada step traz
|
|
23
30
|
* `myStartedAt`, `myCompletedAt` e (em desafios em grupo) os agregados do
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { AcademeApiClient } from "./index";
|
|
2
|
+
/**
|
|
3
|
+
* Vitrine (Home) do aluno — rails/playlists estilo Netflix.
|
|
4
|
+
* Consome `GET /vitrine/home` do api-academe-v2.
|
|
5
|
+
*
|
|
6
|
+
* ⚠️ O endpoint ainda NÃO está no OpenAPI gerado (`academe-api.ts`), então os
|
|
7
|
+
* tipos abaixo são MANTIDOS À MÃO e a chamada usa cast — mesmo padrão de
|
|
8
|
+
* `InstitutionService.setUserClassrooms`. Quando o backend expuser o schema,
|
|
9
|
+
* regenerar os tipos e apertar.
|
|
10
|
+
*/
|
|
11
|
+
export type VitrineCardKind = "course" | "module" | "lesson" | "playlist";
|
|
12
|
+
export type VitrinePlaylistSource = "curated" | "continue_watching" | "trending" | "watchlist" | "recent" | "continue_playlist";
|
|
13
|
+
export type VitrineCardOrientation = "horizontal" | "vertical" | "square" | "fullImage";
|
|
14
|
+
export interface VitrineCard {
|
|
15
|
+
kind: VitrineCardKind;
|
|
16
|
+
id: string;
|
|
17
|
+
courseId?: string | null;
|
|
18
|
+
title: string;
|
|
19
|
+
subtitle?: string | null;
|
|
20
|
+
coverUrl?: string | null;
|
|
21
|
+
durationSeconds?: number | null;
|
|
22
|
+
progressPct?: number | null;
|
|
23
|
+
courseTitle?: string | null;
|
|
24
|
+
lessonLabel?: string | null;
|
|
25
|
+
rank?: number | null;
|
|
26
|
+
}
|
|
27
|
+
export interface VitrinePlaylist {
|
|
28
|
+
id: string;
|
|
29
|
+
title: string;
|
|
30
|
+
subtitle: string | null;
|
|
31
|
+
source: VitrinePlaylistSource;
|
|
32
|
+
variant: "common" | "featured";
|
|
33
|
+
cardOrientation: VitrineCardOrientation;
|
|
34
|
+
itemsPerViewDesktop: number;
|
|
35
|
+
itemsPerViewMobile: number;
|
|
36
|
+
autoplay: boolean;
|
|
37
|
+
style: Record<string, unknown>;
|
|
38
|
+
items: VitrineCard[];
|
|
39
|
+
}
|
|
40
|
+
export interface VitrineHome {
|
|
41
|
+
institutionId: string | null;
|
|
42
|
+
playlists: VitrinePlaylist[];
|
|
43
|
+
}
|
|
44
|
+
export declare function createVitrineService(apiClient: AcademeApiClient): {
|
|
45
|
+
/**
|
|
46
|
+
* Home do aluno para a escola atual. `institutionId` omitido = 1ª matrícula
|
|
47
|
+
* (o backend resolve). Recarregar ao trocar de escola no app.
|
|
48
|
+
*/
|
|
49
|
+
getHome(institutionId?: string): Promise<VitrineHome>;
|
|
50
|
+
};
|
|
51
|
+
export type VitrineService = ReturnType<typeof createVitrineService>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { AcademeApiClient } from "./index";
|
|
2
|
+
/**
|
|
3
|
+
* "Minha lista" (watchlist) do aluno. Consome `/me/watchlist` do api-academe-v2.
|
|
4
|
+
* Endpoint ainda NÃO no OpenAPI gerado → cast + tipos à mão (padrão do repo).
|
|
5
|
+
*/
|
|
6
|
+
export type WatchlistType = "course" | "module" | "lesson";
|
|
7
|
+
export interface WatchlistItem {
|
|
8
|
+
/** id da linha (para remover pela tela). */
|
|
9
|
+
id: string;
|
|
10
|
+
type: WatchlistType;
|
|
11
|
+
/** id do conteúdo (curso/módulo/aula). */
|
|
12
|
+
contentId: string;
|
|
13
|
+
courseId: string | null;
|
|
14
|
+
title: string;
|
|
15
|
+
coverUrl: string | null;
|
|
16
|
+
}
|
|
17
|
+
export interface WatchlistResponse {
|
|
18
|
+
items: WatchlistItem[];
|
|
19
|
+
count: number;
|
|
20
|
+
}
|
|
21
|
+
export declare function createWatchlistService(apiClient: AcademeApiClient): {
|
|
22
|
+
/** Itens da "Minha lista" + contagem. */
|
|
23
|
+
getMine(): Promise<WatchlistResponse>;
|
|
24
|
+
/** Adiciona um conteúdo (idempotente). */
|
|
25
|
+
add(type: WatchlistType, id: string): Promise<void>;
|
|
26
|
+
/** Remove um conteúdo pelo alvo. */
|
|
27
|
+
remove(type: WatchlistType, id: string): Promise<void>;
|
|
28
|
+
};
|
|
29
|
+
export type WatchlistService = ReturnType<typeof createWatchlistService>;
|
|
@@ -22,6 +22,8 @@ import { type ChallengeService } from './ChallengeService';
|
|
|
22
22
|
import { type StepService } from './StepService';
|
|
23
23
|
import { type SubmissionService } from './SubmissionService';
|
|
24
24
|
import { type UserProgressService } from './UserProgressService';
|
|
25
|
+
import { type VitrineService } from './VitrineService';
|
|
26
|
+
import { type WatchlistService } from './WatchlistService';
|
|
25
27
|
export type AcademeApiClient = ReturnType<typeof createClient<paths>>;
|
|
26
28
|
export declare function createAcademeApiClient(baseUrl: string): AcademeApiClient;
|
|
27
29
|
export interface AcademeServices {
|
|
@@ -47,6 +49,8 @@ export interface AcademeServices {
|
|
|
47
49
|
step: StepService;
|
|
48
50
|
submission: SubmissionService;
|
|
49
51
|
userProgress: UserProgressService;
|
|
52
|
+
vitrine: VitrineService;
|
|
53
|
+
watchlist: WatchlistService;
|
|
50
54
|
}
|
|
51
55
|
export declare function createAcademeServices(apiClient: AcademeApiClient): AcademeServices;
|
|
52
56
|
export { createUserService, type UserService } from "./userService";
|
|
@@ -70,3 +74,5 @@ export { createChallengeService, type ChallengeService } from './ChallengeServic
|
|
|
70
74
|
export { createStepService, type StepService } from './StepService';
|
|
71
75
|
export { createSubmissionService, type SubmissionService } from './SubmissionService';
|
|
72
76
|
export { createUserProgressService, type UserProgressService } from './UserProgressService';
|
|
77
|
+
export { createVitrineService, type VitrineService } from './VitrineService';
|
|
78
|
+
export { createWatchlistService, type WatchlistService } from './WatchlistService';
|
|
@@ -12,6 +12,30 @@ type GetUsersParams = {
|
|
|
12
12
|
page?: number;
|
|
13
13
|
limit?: number;
|
|
14
14
|
};
|
|
15
|
+
/** Série acessível ao aluno (item do seletor de séries da jornada). */
|
|
16
|
+
export type AccessibleSerie = {
|
|
17
|
+
serieId: string;
|
|
18
|
+
serieValue: number;
|
|
19
|
+
serieLabel: string;
|
|
20
|
+
level: "fundamental" | "medio";
|
|
21
|
+
};
|
|
22
|
+
/** Turma do aluno (resumo) — para a listagem de turmas no perfil. */
|
|
23
|
+
export type ClassroomSummary = {
|
|
24
|
+
institutionClassroomId: string;
|
|
25
|
+
classroomId: string;
|
|
26
|
+
classroomName: string;
|
|
27
|
+
shiftName: string | null;
|
|
28
|
+
serie: AccessibleSerie | null;
|
|
29
|
+
institutionId: string;
|
|
30
|
+
institutionName: string | null;
|
|
31
|
+
};
|
|
32
|
+
/** Contexto de matrícula do usuário: turmas + escola atual + séries distintas. */
|
|
33
|
+
export type UserEnrollment = {
|
|
34
|
+
classrooms: ClassroomSummary[];
|
|
35
|
+
/** Escola atual resolvida pelo backend (1ª matrícula) — tem turma. */
|
|
36
|
+
currentInstitutionId: string | null;
|
|
37
|
+
series: AccessibleSerie[];
|
|
38
|
+
};
|
|
15
39
|
export declare function createUserService(apiClient: AcademeApiClient): {
|
|
16
40
|
/**
|
|
17
41
|
* Get current authenticated user
|
|
@@ -63,6 +87,13 @@ export declare function createUserService(apiClient: AcademeApiClient): {
|
|
|
63
87
|
500: components["responses"]["ServerError"];
|
|
64
88
|
};
|
|
65
89
|
}> | undefined, `${string}/${string}`>>;
|
|
90
|
+
/**
|
|
91
|
+
* Contexto de matrícula do usuário: turmas (para o perfil) + séries
|
|
92
|
+
* distintas (para o seletor de séries da jornada) + escola atual. Fonte
|
|
93
|
+
* única, deduplicada e ordenada no backend. Normaliza os campos opcionais do
|
|
94
|
+
* OpenAPI. Espelha o app-academe (user.service.getMyEnrollment).
|
|
95
|
+
*/
|
|
96
|
+
getMyEnrollment(): Promise<UserEnrollment>;
|
|
66
97
|
/**
|
|
67
98
|
* List all users with optional filters
|
|
68
99
|
*/
|
|
@@ -2335,7 +2335,6 @@ export interface paths {
|
|
|
2335
2335
|
* Add a step to the challenge
|
|
2336
2336
|
* @description Polymorphic validation:
|
|
2337
2337
|
* - When step.type=tutorial, tutorialVideoUrl is required
|
|
2338
|
-
* - When step.type=redirect, redirectUrl is required
|
|
2339
2338
|
* - The course of a step is determined by the parent challenge's courseId.
|
|
2340
2339
|
* Optionally, courseModuleId pinpoints a specific module within that course.
|
|
2341
2340
|
* - tutorial fields are optional on any step type.
|
|
@@ -2366,8 +2365,6 @@ export interface paths {
|
|
|
2366
2365
|
tutorialTitle?: string;
|
|
2367
2366
|
tutorialDescription?: string;
|
|
2368
2367
|
tutorialVideoUrl?: string;
|
|
2369
|
-
/** @description Required when parent step type=redirect */
|
|
2370
|
-
redirectUrl?: string;
|
|
2371
2368
|
/** @default true */
|
|
2372
2369
|
isActive?: boolean;
|
|
2373
2370
|
};
|
|
@@ -9640,69 +9637,6 @@ export interface paths {
|
|
|
9640
9637
|
};
|
|
9641
9638
|
trace?: never;
|
|
9642
9639
|
};
|
|
9643
|
-
"/quiz-questions/bulk": {
|
|
9644
|
-
parameters: {
|
|
9645
|
-
query?: never;
|
|
9646
|
-
header?: never;
|
|
9647
|
-
path?: never;
|
|
9648
|
-
cookie?: never;
|
|
9649
|
-
};
|
|
9650
|
-
get?: never;
|
|
9651
|
-
put?: never;
|
|
9652
|
-
/**
|
|
9653
|
-
* Bulk create quiz questions
|
|
9654
|
-
* @description Cria várias perguntas (com suas respostas) de uma vez para um quiz. A ordem é atribuída sequencialmente a partir da última pergunta existente.
|
|
9655
|
-
*/
|
|
9656
|
-
post: {
|
|
9657
|
-
parameters: {
|
|
9658
|
-
query?: never;
|
|
9659
|
-
header?: never;
|
|
9660
|
-
path?: never;
|
|
9661
|
-
cookie?: never;
|
|
9662
|
-
};
|
|
9663
|
-
requestBody: {
|
|
9664
|
-
content: {
|
|
9665
|
-
"application/json": {
|
|
9666
|
-
/** Format: uuid */
|
|
9667
|
-
quizId: string;
|
|
9668
|
-
questions: {
|
|
9669
|
-
text: string;
|
|
9670
|
-
/** @enum {string} */
|
|
9671
|
-
type: "multiple_choice" | "true_false" | "open";
|
|
9672
|
-
points?: number;
|
|
9673
|
-
options?: {
|
|
9674
|
-
text?: string;
|
|
9675
|
-
is_correct?: boolean;
|
|
9676
|
-
}[];
|
|
9677
|
-
}[];
|
|
9678
|
-
};
|
|
9679
|
-
};
|
|
9680
|
-
};
|
|
9681
|
-
responses: {
|
|
9682
|
-
/** @description Perguntas criadas */
|
|
9683
|
-
201: {
|
|
9684
|
-
headers: {
|
|
9685
|
-
[name: string]: unknown;
|
|
9686
|
-
};
|
|
9687
|
-
content: {
|
|
9688
|
-
"application/json": {
|
|
9689
|
-
/** @example success */
|
|
9690
|
-
status?: string;
|
|
9691
|
-
data?: components["schemas"]["QuizQuestion"][];
|
|
9692
|
-
};
|
|
9693
|
-
};
|
|
9694
|
-
};
|
|
9695
|
-
400: components["responses"]["BadRequest"];
|
|
9696
|
-
401: components["responses"]["Unauthorized"];
|
|
9697
|
-
500: components["responses"]["ServerError"];
|
|
9698
|
-
};
|
|
9699
|
-
};
|
|
9700
|
-
delete?: never;
|
|
9701
|
-
options?: never;
|
|
9702
|
-
head?: never;
|
|
9703
|
-
patch?: never;
|
|
9704
|
-
trace?: never;
|
|
9705
|
-
};
|
|
9706
9640
|
"/quiz-questions": {
|
|
9707
9641
|
parameters: {
|
|
9708
9642
|
query?: never;
|
|
@@ -9797,6 +9731,67 @@ export interface paths {
|
|
|
9797
9731
|
patch?: never;
|
|
9798
9732
|
trace?: never;
|
|
9799
9733
|
};
|
|
9734
|
+
"/quiz-questions/bulk": {
|
|
9735
|
+
parameters: {
|
|
9736
|
+
query?: never;
|
|
9737
|
+
header?: never;
|
|
9738
|
+
path?: never;
|
|
9739
|
+
cookie?: never;
|
|
9740
|
+
};
|
|
9741
|
+
get?: never;
|
|
9742
|
+
put?: never;
|
|
9743
|
+
/**
|
|
9744
|
+
* Bulk create quiz questions
|
|
9745
|
+
* @description Cria várias perguntas (com respostas) de uma vez para um quiz.
|
|
9746
|
+
*/
|
|
9747
|
+
post: {
|
|
9748
|
+
parameters: {
|
|
9749
|
+
query?: never;
|
|
9750
|
+
header?: never;
|
|
9751
|
+
path?: never;
|
|
9752
|
+
cookie?: never;
|
|
9753
|
+
};
|
|
9754
|
+
requestBody: {
|
|
9755
|
+
content: {
|
|
9756
|
+
"application/json": {
|
|
9757
|
+
quizId: string;
|
|
9758
|
+
questions: {
|
|
9759
|
+
text: string;
|
|
9760
|
+
type: "multiple_choice" | "true_false" | "open";
|
|
9761
|
+
points?: number;
|
|
9762
|
+
options?: {
|
|
9763
|
+
text: string;
|
|
9764
|
+
is_correct: boolean;
|
|
9765
|
+
}[];
|
|
9766
|
+
}[];
|
|
9767
|
+
};
|
|
9768
|
+
};
|
|
9769
|
+
};
|
|
9770
|
+
responses: {
|
|
9771
|
+
/** @description Questions created */
|
|
9772
|
+
201: {
|
|
9773
|
+
headers: {
|
|
9774
|
+
[name: string]: unknown;
|
|
9775
|
+
};
|
|
9776
|
+
content: {
|
|
9777
|
+
"application/json": {
|
|
9778
|
+
/** @example success */
|
|
9779
|
+
status?: string;
|
|
9780
|
+
data?: components["schemas"]["QuizQuestion"][];
|
|
9781
|
+
};
|
|
9782
|
+
};
|
|
9783
|
+
};
|
|
9784
|
+
400: components["responses"]["BadRequest"];
|
|
9785
|
+
401: components["responses"]["Unauthorized"];
|
|
9786
|
+
500: components["responses"]["ServerError"];
|
|
9787
|
+
};
|
|
9788
|
+
};
|
|
9789
|
+
delete?: never;
|
|
9790
|
+
options?: never;
|
|
9791
|
+
head?: never;
|
|
9792
|
+
patch?: never;
|
|
9793
|
+
trace?: never;
|
|
9794
|
+
};
|
|
9800
9795
|
"/quiz-questions/{id}": {
|
|
9801
9796
|
parameters: {
|
|
9802
9797
|
query?: never;
|
|
@@ -10018,7 +10013,7 @@ export interface paths {
|
|
|
10018
10013
|
};
|
|
10019
10014
|
/**
|
|
10020
10015
|
* List quizzes with course/module/category context
|
|
10021
|
-
* @description Retrieve a paginated list of quizzes, each enriched with the course, module and category it belongs to.
|
|
10016
|
+
* @description Retrieve a paginated list of quizzes, each enriched with the course, module and category it belongs to. `context` is null for standalone quizzes.
|
|
10022
10017
|
*/
|
|
10023
10018
|
get: {
|
|
10024
10019
|
parameters: {
|
|
@@ -10054,20 +10049,16 @@ export interface paths {
|
|
|
10054
10049
|
data?: (components["schemas"]["Quiz"] & {
|
|
10055
10050
|
context?: {
|
|
10056
10051
|
course?: {
|
|
10057
|
-
/** Format: uuid */
|
|
10058
10052
|
id?: string;
|
|
10059
10053
|
title?: string;
|
|
10060
10054
|
} | null;
|
|
10061
10055
|
module?: {
|
|
10062
|
-
/** Format: uuid */
|
|
10063
10056
|
id?: string;
|
|
10064
10057
|
title?: string;
|
|
10065
10058
|
} | null;
|
|
10066
10059
|
category?: {
|
|
10067
|
-
/** Format: uuid */
|
|
10068
10060
|
id?: string;
|
|
10069
10061
|
name?: string;
|
|
10070
|
-
/** @example #44bd32 */
|
|
10071
10062
|
color?: string | null;
|
|
10072
10063
|
} | null;
|
|
10073
10064
|
} | null;
|
|
@@ -10099,7 +10090,7 @@ export interface paths {
|
|
|
10099
10090
|
put?: never;
|
|
10100
10091
|
/**
|
|
10101
10092
|
* Generate quiz questions with AI
|
|
10102
|
-
* @description Gera perguntas
|
|
10093
|
+
* @description Gera perguntas a partir de um texto base via IA. Não persiste — apenas devolve.
|
|
10103
10094
|
*/
|
|
10104
10095
|
post: {
|
|
10105
10096
|
parameters: {
|
|
@@ -10111,23 +10102,16 @@ export interface paths {
|
|
|
10111
10102
|
requestBody: {
|
|
10112
10103
|
content: {
|
|
10113
10104
|
"application/json": {
|
|
10114
|
-
/** @description Texto base para gerar as perguntas */
|
|
10115
10105
|
text: string;
|
|
10116
10106
|
numQuestions: number;
|
|
10117
|
-
/**
|
|
10118
|
-
* @default normal
|
|
10119
|
-
* @enum {string}
|
|
10120
|
-
*/
|
|
10121
10107
|
difficulty?: "facil" | "normal" | "dificil";
|
|
10122
|
-
/** @description Textos de perguntas já existentes (para não repetir) */
|
|
10123
10108
|
existingQuestions?: string[];
|
|
10124
|
-
/** @description Modelo de IA a usar (OpenRouter); default do servidor quando omitido */
|
|
10125
10109
|
model?: string;
|
|
10126
10110
|
};
|
|
10127
10111
|
};
|
|
10128
10112
|
};
|
|
10129
10113
|
responses: {
|
|
10130
|
-
/** @description
|
|
10114
|
+
/** @description Generated questions */
|
|
10131
10115
|
200: {
|
|
10132
10116
|
headers: {
|
|
10133
10117
|
[name: string]: unknown;
|
|
@@ -10137,13 +10121,12 @@ export interface paths {
|
|
|
10137
10121
|
/** @example success */
|
|
10138
10122
|
status?: string;
|
|
10139
10123
|
data?: {
|
|
10140
|
-
question_text
|
|
10141
|
-
|
|
10142
|
-
|
|
10143
|
-
|
|
10144
|
-
|
|
10145
|
-
|
|
10146
|
-
is_correct?: boolean;
|
|
10124
|
+
question_text: string;
|
|
10125
|
+
question_type: "multiple_choice" | "true_false";
|
|
10126
|
+
points: number;
|
|
10127
|
+
options: {
|
|
10128
|
+
text: string;
|
|
10129
|
+
is_correct: boolean;
|
|
10147
10130
|
}[];
|
|
10148
10131
|
}[];
|
|
10149
10132
|
};
|
|
@@ -11845,7 +11828,7 @@ export interface paths {
|
|
|
11845
11828
|
parameters: {
|
|
11846
11829
|
query?: {
|
|
11847
11830
|
/** @description Filter by step type */
|
|
11848
|
-
type?: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate"
|
|
11831
|
+
type?: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate";
|
|
11849
11832
|
/** @description Filter by active status */
|
|
11850
11833
|
isActive?: boolean;
|
|
11851
11834
|
};
|
|
@@ -11894,7 +11877,7 @@ export interface paths {
|
|
|
11894
11877
|
/** @example play-circle */
|
|
11895
11878
|
icon: string;
|
|
11896
11879
|
/** @enum {string} */
|
|
11897
|
-
type: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate"
|
|
11880
|
+
type: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate";
|
|
11898
11881
|
/** @default true */
|
|
11899
11882
|
isActive?: boolean;
|
|
11900
11883
|
};
|
|
@@ -12021,7 +12004,7 @@ export interface paths {
|
|
|
12021
12004
|
color?: string;
|
|
12022
12005
|
icon?: string;
|
|
12023
12006
|
/** @enum {string} */
|
|
12024
|
-
type?: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate"
|
|
12007
|
+
type?: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate";
|
|
12025
12008
|
isActive?: boolean;
|
|
12026
12009
|
};
|
|
12027
12010
|
};
|
|
@@ -15646,11 +15629,6 @@ export interface components {
|
|
|
15646
15629
|
id?: string;
|
|
15647
15630
|
/** @example Essential Skills */
|
|
15648
15631
|
name?: string;
|
|
15649
|
-
/**
|
|
15650
|
-
* @description Hex color code for backoffice display. Null when not set.
|
|
15651
|
-
* @example #44bd32
|
|
15652
|
-
*/
|
|
15653
|
-
color?: string | null;
|
|
15654
15632
|
/** Format: date-time */
|
|
15655
15633
|
createdAt?: string;
|
|
15656
15634
|
/** Format: date-time */
|
|
@@ -15922,7 +15900,7 @@ export interface components {
|
|
|
15922
15900
|
/** @example play-circle */
|
|
15923
15901
|
icon?: string;
|
|
15924
15902
|
/** @enum {string} */
|
|
15925
|
-
type?: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate"
|
|
15903
|
+
type?: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate";
|
|
15926
15904
|
/** @example true */
|
|
15927
15905
|
isActive?: boolean;
|
|
15928
15906
|
/** Format: date-time */
|
|
@@ -16020,8 +15998,6 @@ export interface components {
|
|
|
16020
15998
|
tutorialDescription?: string | null;
|
|
16021
15999
|
/** @description Obrigatório quando step type=tutorial */
|
|
16022
16000
|
tutorialVideoUrl?: string | null;
|
|
16023
|
-
/** @description Obrigatório quando step type=redirect. URL para onde o aluno é redirecionado ao clicar na etapa. */
|
|
16024
|
-
redirectUrl?: string | null;
|
|
16025
16001
|
isActive?: boolean;
|
|
16026
16002
|
/** Format: date-time */
|
|
16027
16003
|
createdAt?: string;
|
|
@@ -16151,10 +16127,7 @@ export interface components {
|
|
|
16151
16127
|
* @example Introdução a IA
|
|
16152
16128
|
*/
|
|
16153
16129
|
courseModuleName?: string | null;
|
|
16154
|
-
/**
|
|
16155
|
-
* @description URL de redirecionamento desta etapa (apenas quando type=redirect)
|
|
16156
|
-
* @example https://exemplo.com/atividade
|
|
16157
|
-
*/
|
|
16130
|
+
/** @description URL de redirecionamento desta etapa (apenas quando type=redirect) */
|
|
16158
16131
|
redirectUrl?: string | null;
|
|
16159
16132
|
};
|
|
16160
16133
|
/** @description Desafio da jornada com suas etapas e status computados */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "academe-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Official React SDK for Academe ecosystem - Authentication, protected routes, API services, and UI components for educational management applications",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -99,4 +99,4 @@
|
|
|
99
99
|
"tailwind-merge": "^3.3.1",
|
|
100
100
|
"tailwindcss-animate": "^1.0.7"
|
|
101
101
|
}
|
|
102
|
-
}
|
|
102
|
+
}
|