academe-kit 0.9.8 → 0.9.9

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
@@ -2880,6 +2880,91 @@ interface paths {
2880
2880
  };
2881
2881
  trace?: never;
2882
2882
  };
2883
+ "/challenges/{id}/quiz-attempts": {
2884
+ parameters: {
2885
+ query?: never;
2886
+ header?: never;
2887
+ path?: never;
2888
+ cookie?: never;
2889
+ };
2890
+ /**
2891
+ * Get a user's quiz attempts for this challenge's course modules
2892
+ * @description Returns the quiz attempts of `userId` on every quiz attached to a course
2893
+ * module that is referenced by one of this challenge's steps. Optionally
2894
+ * includes the issued certificate per attempt.
2895
+ *
2896
+ * Each entry corresponds to a `challenges_steps` row that has a non-null
2897
+ * `course_module_id` whose `course_module.quiz_id` is also non-null.
2898
+ * `attempt` is `null` when the user has not yet attempted that quiz.
2899
+ */
2900
+ get: {
2901
+ parameters: {
2902
+ query?: {
2903
+ /** @description Defaults to the authenticated user when omitted. */
2904
+ userId?: string;
2905
+ };
2906
+ header?: never;
2907
+ path: {
2908
+ /** @description Resource ID */
2909
+ id: components["parameters"]["id"];
2910
+ };
2911
+ cookie?: never;
2912
+ };
2913
+ requestBody?: never;
2914
+ responses: {
2915
+ /** @description List of quiz attempts (one per quiz-bearing challenge step) */
2916
+ 200: {
2917
+ headers: {
2918
+ [name: string]: unknown;
2919
+ };
2920
+ content: {
2921
+ "application/json": {
2922
+ /** @example success */
2923
+ status?: string;
2924
+ data?: {
2925
+ /** Format: uuid */
2926
+ challengeStepId?: string;
2927
+ challengeStepName?: string;
2928
+ challengeStepIndex?: number;
2929
+ /** Format: uuid */
2930
+ courseModuleId?: string;
2931
+ courseModuleTitle?: string;
2932
+ /** Format: uuid */
2933
+ quizId?: string;
2934
+ quizTitle?: string;
2935
+ attempt?: {
2936
+ /** Format: uuid */
2937
+ id?: string;
2938
+ score?: number;
2939
+ passed?: boolean;
2940
+ /** Format: date-time */
2941
+ startedAt?: string;
2942
+ /** Format: date-time */
2943
+ completedAt?: string | null;
2944
+ } | null;
2945
+ certificate?: {
2946
+ /** Format: uuid */
2947
+ id?: string;
2948
+ certificateNumber?: string;
2949
+ url?: string | null;
2950
+ } | null;
2951
+ }[];
2952
+ };
2953
+ };
2954
+ };
2955
+ 400: components["responses"]["BadRequest"];
2956
+ 401: components["responses"]["Unauthorized"];
2957
+ 404: components["responses"]["NotFound"];
2958
+ };
2959
+ };
2960
+ put?: never;
2961
+ post?: never;
2962
+ delete?: never;
2963
+ options?: never;
2964
+ head?: never;
2965
+ patch?: never;
2966
+ trace?: never;
2967
+ };
2883
2968
  "/classrooms": {
2884
2969
  parameters: {
2885
2970
  query?: never;
@@ -11709,7 +11794,22 @@ interface paths {
11709
11794
  /** @example success */
11710
11795
  status?: string;
11711
11796
  data?: components["schemas"]["Submission"][];
11712
- meta?: components["schemas"]["PaginationMeta"];
11797
+ meta?: components["schemas"]["PaginationMeta"] & {
11798
+ /**
11799
+ * @description Contagem por status, ignorando o filtro `status`. Útil para
11800
+ * alimentar abas/pills sem requisições adicionais.
11801
+ */
11802
+ statusCounts?: {
11803
+ /** @example 12 */
11804
+ submitted?: number;
11805
+ /** @example 4 */
11806
+ ai_evaluated?: number;
11807
+ /** @example 30 */
11808
+ approved?: number;
11809
+ /** @example 2 */
11810
+ rejected?: number;
11811
+ };
11812
+ };
11713
11813
  };
11714
11814
  };
11715
11815
  };
@@ -12371,6 +12471,128 @@ interface paths {
12371
12471
  patch?: never;
12372
12472
  trace?: never;
12373
12473
  };
12474
+ "/user-challenge-progress/journey": {
12475
+ parameters: {
12476
+ query?: never;
12477
+ header?: never;
12478
+ path?: never;
12479
+ cookie?: never;
12480
+ };
12481
+ /**
12482
+ * Jornada completa pré-computada do aluno autenticado
12483
+ * @description Retorna todos os desafios da série com suas etapas e o status de progresso do aluno
12484
+ * já computados pelo backend. Substitui as ~25 chamadas HTTP paralelas que o frontend
12485
+ * fazia anteriormente para montar a tela de jornada.
12486
+ *
12487
+ * **Regra de prioridade:** para cada `index` de desafio dentro da série, o backend
12488
+ * prefere o challenge específico da instituição do aluno sobre o template global
12489
+ * (`institution_id IS NULL`). Isso permite que escolas customizem desafios pontuais
12490
+ * sem recriar toda a jornada.
12491
+ *
12492
+ * **Resolução da série:** se `serieId` não for informado, o backend resolve
12493
+ * automaticamente a partir da turma (`institutionClassroom`) do aluno. Se o aluno
12494
+ * não estiver em nenhuma turma e `serieId` também não for passado, retorna
12495
+ * `challenges: []` com `serieId: null`.
12496
+ *
12497
+ * **Status por etapa:** `done` = completedAt preenchido; `current` = primeira etapa
12498
+ * não concluída (apenas uma por vez); `locked` = todas as demais.
12499
+ *
12500
+ * **Progresso:** para etapas `type=course` no status `current`, o campo `progress`
12501
+ * reflete o percentual de lições concluídas no módulo. Para `done` é sempre 100,
12502
+ * para `locked` é sempre 0.
12503
+ */
12504
+ get: {
12505
+ parameters: {
12506
+ query?: {
12507
+ /**
12508
+ * @description ID da série a filtrar. Opcional — se omitido, o backend resolve pela turma do aluno.
12509
+ * Útil para pré-visualização administrativa ou quando o aluno pertence a múltiplas séries.
12510
+ */
12511
+ serieId?: string;
12512
+ };
12513
+ header?: never;
12514
+ path?: never;
12515
+ cookie?: never;
12516
+ };
12517
+ requestBody?: never;
12518
+ responses: {
12519
+ /** @description Jornada pré-computada com desafios e etapas */
12520
+ 200: {
12521
+ headers: {
12522
+ [name: string]: unknown;
12523
+ };
12524
+ content: {
12525
+ /**
12526
+ * @example {
12527
+ * "status": "success",
12528
+ * "data": {
12529
+ * "serieId": "a1b2c3d4-0000-0000-0000-000000000001",
12530
+ * "serieLabel": "6º ANO",
12531
+ * "challenges": [
12532
+ * {
12533
+ * "id": "a1b2c3d4-0000-0000-0000-000000000002",
12534
+ * "title": "Desafio 1 — Energia Limpa",
12535
+ * "index": 0,
12536
+ * "courseId": "a1b2c3d4-0000-0000-0000-000000000003",
12537
+ * "isUpcoming": false,
12538
+ * "steps": [
12539
+ * {
12540
+ * "id": "a1b2c3d4-0000-0000-0000-000000000010",
12541
+ * "name": "Inicie o desafio",
12542
+ * "index": 0,
12543
+ * "type": "challenge",
12544
+ * "color": "#1AC84A",
12545
+ * "icon": "LuStar",
12546
+ * "status": "done",
12547
+ * "progress": 100,
12548
+ * "courseModuleId": null,
12549
+ * "courseModuleName": null
12550
+ * },
12551
+ * {
12552
+ * "id": "a1b2c3d4-0000-0000-0000-000000000011",
12553
+ * "name": "Módulo de IA",
12554
+ * "index": 1,
12555
+ * "type": "course",
12556
+ * "color": "#8030D8",
12557
+ * "icon": "LuCirclePlay",
12558
+ * "status": "current",
12559
+ * "progress": 67,
12560
+ * "courseModuleId": "a1b2c3d4-0000-0000-0000-000000000020",
12561
+ * "courseModuleName": "Introdução a IA"
12562
+ * }
12563
+ * ]
12564
+ * }
12565
+ * ]
12566
+ * }
12567
+ * }
12568
+ */
12569
+ "application/json": {
12570
+ /** @example success */
12571
+ status?: string;
12572
+ data?: components["schemas"]["JourneyView"];
12573
+ };
12574
+ };
12575
+ };
12576
+ /** @description serieId inválido (não é um UUID) */
12577
+ 400: {
12578
+ headers: {
12579
+ [name: string]: unknown;
12580
+ };
12581
+ content: {
12582
+ "application/json": components["schemas"]["Error"];
12583
+ };
12584
+ };
12585
+ 401: components["responses"]["Unauthorized"];
12586
+ };
12587
+ };
12588
+ put?: never;
12589
+ post?: never;
12590
+ delete?: never;
12591
+ options?: never;
12592
+ head?: never;
12593
+ patch?: never;
12594
+ trace?: never;
12595
+ };
12374
12596
  "/user-challenge-progress/challenges/{id}/advance": {
12375
12597
  parameters: {
12376
12598
  query?: never;
@@ -14535,6 +14757,9 @@ interface components {
14535
14757
  createdAt: string;
14536
14758
  /** Format: date-time */
14537
14759
  updatedAt: string;
14760
+ organization?: components["schemas"]["Organization"] | null;
14761
+ address?: components["schemas"]["Address"] | null;
14762
+ institutionReward?: Record<string, never> | null;
14538
14763
  };
14539
14764
  Organization: {
14540
14765
  /** Format: uuid */
@@ -15235,6 +15460,99 @@ interface components {
15235
15460
  /** Format: date-time */
15236
15461
  updatedAt?: string;
15237
15462
  };
15463
+ /** @description Etapa de um desafio com status computado pelo backend */
15464
+ JourneyStepView: {
15465
+ /**
15466
+ * Format: uuid
15467
+ * @description ID do challenge_step
15468
+ */
15469
+ id: string;
15470
+ /** @example Módulo de IA */
15471
+ name: string;
15472
+ /**
15473
+ * @description Ordem da etapa dentro do desafio
15474
+ * @example 1
15475
+ */
15476
+ index: number;
15477
+ /**
15478
+ * @description Tipo da etapa (do catálogo de steps)
15479
+ * @example course
15480
+ * @enum {string}
15481
+ */
15482
+ type: "challenge" | "course" | "tutorial" | "publication" | "evaluation" | "certificate";
15483
+ /**
15484
+ * @description Cor hex do step catalog
15485
+ * @example #8030D8
15486
+ */
15487
+ color: string;
15488
+ /**
15489
+ * @description Nome do ícone Lucide do step catalog
15490
+ * @example LuCirclePlay
15491
+ */
15492
+ icon: string;
15493
+ /**
15494
+ * @description Status computado pelo backend: done=concluído, current=etapa ativa, locked=ainda bloqueado
15495
+ * @example current
15496
+ * @enum {string}
15497
+ */
15498
+ status: "done" | "current" | "locked";
15499
+ /**
15500
+ * @description Percentual de progresso (0-100). Para done=100, para locked=0, para current=% do curso ou 0
15501
+ * @example 67
15502
+ */
15503
+ progress: number;
15504
+ /**
15505
+ * Format: uuid
15506
+ * @description ID do módulo do curso referenciado por esta etapa (apenas quando type=course)
15507
+ */
15508
+ courseModuleId?: string | null;
15509
+ /**
15510
+ * @description Título do módulo do curso (apenas quando courseModuleId não é null)
15511
+ * @example Introdução a IA
15512
+ */
15513
+ courseModuleName?: string | null;
15514
+ };
15515
+ /** @description Desafio da jornada com suas etapas e status computados */
15516
+ JourneyChallengeView: {
15517
+ /**
15518
+ * Format: uuid
15519
+ * @description ID do challenge
15520
+ */
15521
+ id: string;
15522
+ /** @example Desafio 1 — Energia Limpa */
15523
+ title: string;
15524
+ /**
15525
+ * @description Ordem do desafio na série
15526
+ * @example 0
15527
+ */
15528
+ index: number;
15529
+ /**
15530
+ * Format: uuid
15531
+ * @description Curso ao qual o desafio está associado
15532
+ */
15533
+ courseId: string;
15534
+ /**
15535
+ * @description True quando o desafio ainda não está disponível para o aluno (challenge seguinte ao ativo com steps pendentes)
15536
+ * @example false
15537
+ */
15538
+ isUpcoming: boolean;
15539
+ steps: components["schemas"]["JourneyStepView"][];
15540
+ };
15541
+ /** @description Resposta completa do endpoint GET /user-challenge-progress/journey — dados pré-computados para renderização direta da tela de jornada */
15542
+ JourneyView: {
15543
+ /** @description Desafios da jornada ordenados por index, com prioridade escola > template aplicada */
15544
+ challenges: components["schemas"]["JourneyChallengeView"][];
15545
+ /**
15546
+ * Format: uuid
15547
+ * @description ID da série resolvida (da turma do aluno, ou do query param serieId)
15548
+ */
15549
+ serieId: string | null;
15550
+ /**
15551
+ * @description Rótulo legível da série para exibição na UI
15552
+ * @example 6º ANO
15553
+ */
15554
+ serieLabel: string | null;
15555
+ };
15238
15556
  /** @description Aggregated progress of a user on a course or module, derived from users_course_log completion events */
15239
15557
  UsersCourseLogProgress: {
15240
15558
  /**
@@ -19878,6 +20196,62 @@ declare function createReportService(apiClient: AcademeApiClient): {
19878
20196
  query: GetTopStudentsParams;
19879
20197
  };
19880
20198
  }, `${string}/${string}`>>;
20199
+ /**
20200
+ * Get encourage dashboard for an institution
20201
+ * Retorna o payload agregado da tela /new-dashboard:
20202
+ * overview, KPIs, licenças (alunos), jornada (cursos), submissões,
20203
+ * desempenho por turma, top alunos e top professores.
20204
+ *
20205
+ * @param id UUID da instituição.
20206
+ */
20207
+ getEncourageDashboardByInstitution(id: string): Promise<openapi_fetch.FetchResponse<{
20208
+ parameters: {
20209
+ query?: never;
20210
+ header?: never;
20211
+ path: {
20212
+ id: string;
20213
+ };
20214
+ cookie?: never;
20215
+ };
20216
+ requestBody?: never;
20217
+ responses: {
20218
+ 200: {
20219
+ headers: {
20220
+ [name: string]: unknown;
20221
+ };
20222
+ content: {
20223
+ "application/json": {
20224
+ status?: string;
20225
+ data?: components["schemas"]["EncourageDashboardResponse"];
20226
+ };
20227
+ };
20228
+ };
20229
+ 400: {
20230
+ headers: {
20231
+ [name: string]: unknown;
20232
+ };
20233
+ content?: never;
20234
+ };
20235
+ 401: {
20236
+ headers: {
20237
+ [name: string]: unknown;
20238
+ };
20239
+ content?: never;
20240
+ };
20241
+ 500: {
20242
+ headers: {
20243
+ [name: string]: unknown;
20244
+ };
20245
+ content?: never;
20246
+ };
20247
+ };
20248
+ }, {
20249
+ params: {
20250
+ path: {
20251
+ id: string;
20252
+ };
20253
+ };
20254
+ }, `${string}/${string}`>>;
19881
20255
  };
19882
20256
  type ReportService = ReturnType<typeof createReportService>;
19883
20257
 
@@ -24814,6 +25188,35 @@ interface UpdateEvaluationCriterionBody {
24814
25188
  description?: string;
24815
25189
  index?: number;
24816
25190
  }
25191
+ interface ChallengeUserQuizAttempt {
25192
+ challengeStepId: string;
25193
+ challengeStepName: string;
25194
+ challengeStepIndex: number;
25195
+ courseModuleId: string;
25196
+ courseModuleTitle: string;
25197
+ quizId: string;
25198
+ quizTitle: string;
25199
+ attempt: {
25200
+ id: string;
25201
+ score: number;
25202
+ passed: boolean;
25203
+ startedAt: string;
25204
+ completedAt: string | null;
25205
+ } | null;
25206
+ certificate: {
25207
+ id: string;
25208
+ certificateNumber: string;
25209
+ url: string | null;
25210
+ } | null;
25211
+ }
25212
+ interface ChallengeUserQuizAttemptsResponse {
25213
+ data?: {
25214
+ status?: string;
25215
+ data?: ChallengeUserQuizAttempt[];
25216
+ };
25217
+ error?: unknown;
25218
+ response: Response;
25219
+ }
24817
25220
  declare function createChallengeService(apiClient: AcademeApiClient): {
24818
25221
  /**
24819
25222
  * List challenges with filters and pagination
@@ -25125,6 +25528,12 @@ declare function createChallengeService(apiClient: AcademeApiClient): {
25125
25528
  title?: string;
25126
25529
  };
25127
25530
  }, `${string}/${string}`>>;
25531
+ /**
25532
+ * Get a user's quiz attempts for the quizzes attached to this challenge's
25533
+ * course modules (one entry per step with course_module.quiz_id).
25534
+ * Defaults to the authenticated user when userId is omitted.
25535
+ */
25536
+ getUserQuizAttempts(challengeId: string, userId?: string): Promise<ChallengeUserQuizAttemptsResponse>;
25128
25537
  /**
25129
25538
  * Add a step to the challenge
25130
25539
  */
@@ -25785,7 +26194,14 @@ declare function createSubmissionService(apiClient: AcademeApiClient): {
25785
26194
  "application/json": {
25786
26195
  status?: string;
25787
26196
  data?: components["schemas"]["Submission"][];
25788
- meta?: components["schemas"]["PaginationMeta"];
26197
+ meta?: components["schemas"]["PaginationMeta"] & {
26198
+ statusCounts?: {
26199
+ submitted?: number;
26200
+ ai_evaluated?: number;
26201
+ approved?: number;
26202
+ rejected?: number;
26203
+ };
26204
+ };
25789
26205
  };
25790
26206
  };
25791
26207
  };
@@ -26215,4 +26631,4 @@ declare enum NINA_ROLES {
26215
26631
  }
26216
26632
 
26217
26633
  export { AcademeAuthProvider, BACKOFFICE_ROLES, Button, CosmicDecor, CosmicStarsCanvas, DASHBOARD_ROLES, GLOBAL_ROLES, JourneyCrystalPin, JourneyStep, MIKE_ROLES, NINA_ROLES, ProtectedApp, ProtectedComponent, ProtectedRouter, STREAMING_ROLES, Spinner, WIDGET_ROLES, academeApi_d as apiTypes, cn, createAcademeApiClient, index_d as types, useAcademeAuth, useProtectedAppColors };
26218
- export type { AcademeApiClient, AcademeKeycloakContextProps, AcademeServices, AcademeUser, ButtonProps, CosmicDecorProps, CosmicDecorVariant, CosmicPlanet, CosmicStarsCanvasProps, FrameKind, JourneyCrystalPinProps, JourneyStepProps, JourneyStepSize, JourneyStepType, KeycloakUser, RequiredClientRoles, SecurityContextType, SecurityProviderProps };
26634
+ export type { AcademeApiClient, AcademeKeycloakContextProps, AcademeServices, AcademeUser, ButtonProps, ChallengeUserQuizAttempt, ChallengeUserQuizAttemptsResponse, CosmicDecorProps, CosmicDecorVariant, CosmicPlanet, CosmicStarsCanvasProps, FrameKind, JourneyCrystalPinProps, JourneyStepProps, JourneyStepSize, JourneyStepType, KeycloakUser, RequiredClientRoles, SecurityContextType, SecurityProviderProps };