timed revision
All checks were successful
Mindforge API Build and Deploy / Build Mindforge API Image (push) Successful in 3m58s
Mindforge API Build and Deploy / Deploy Mindforge API (internal) (push) Successful in 37s
Mindforge Web Build and Deploy (internal) / Build Mindforge Web Image (push) Successful in 5m19s
Mindforge Web Build and Deploy (internal) / Deploy Mindforge Web (internal) (push) Successful in 11s

This commit is contained in:
2026-06-01 19:08:48 -03:00
parent b80d28f671
commit f03bcc40e3
14 changed files with 1138 additions and 14 deletions

View File

@@ -40,7 +40,10 @@ export interface FlashcardCard {
front: string;
back: string;
position: number;
correctCount: number;
incorrectCount: number;
createdAt: string;
lastReviewedAt?: string | null;
}
export interface FlashcardLibrarySummary {
@@ -70,6 +73,56 @@ export interface FlashcardReviewSessionResponse {
cards: FlashcardCard[];
}
export interface FlashcardReviewAnswerRequest {
cardId: number;
correct: boolean;
}
export type FlashcardRagStatus = 'Grey' | 'Red' | 'Amber' | 'Green';
export interface FlashcardRagCard {
cardId: number;
libraryId: number;
fileName: string;
subject: string;
subSubject: string;
front: string;
back: string;
correctCount: number;
incorrectCount: number;
totalAnswers: number;
performanceRate: number;
lastReviewedAt?: string | null;
ragStatus: FlashcardRagStatus;
}
export interface FlashcardRagSummary {
greenCount: number;
amberCount: number;
redCount: number;
greyCount: number;
activeCount: number;
greenPercentage: number;
attentionPercentage: number;
}
export interface FlashcardRagSubSubjectGroup {
subSubject: string;
summary: FlashcardRagSummary;
cards: FlashcardRagCard[];
}
export interface FlashcardRagSubjectGroup {
subject: string;
summary: FlashcardRagSummary;
subSubjects: FlashcardRagSubSubjectGroup[];
}
export interface FlashcardRagDashboardResponse {
generatedAt: string;
subjects: FlashcardRagSubjectGroup[];
}
async function throwIfNotOk(response: Response, fallback: string) {
if (response.ok) {
return;
@@ -140,6 +193,24 @@ export const MindforgeApiService = {
return response.json();
},
async recordFlashcardReviewAnswer(data: FlashcardReviewAnswerRequest): Promise<void> {
const response = await fetch(`${BASE_URL}/api/v1/flashcard/review-answer`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
});
await throwIfNotOk(response, `Erro ao registrar resposta da revisao: ${response.statusText}`);
},
async getFlashcardRagStatus(): Promise<FlashcardRagDashboardResponse> {
const response = await fetch(`${BASE_URL}/api/v1/flashcard/rag-status`);
await throwIfNotOk(response, `Erro ao buscar status RAG de revisao: ${response.statusText}`);
return response.json();
},
async getRepositoryInfo(): Promise<RepositoryInfo> {
const response = await fetch(`${BASE_URL}/api/v1/repository/info`);
await throwIfNotOk(response, `Erro ao buscar info do repositorio: ${response.statusText}`);