PhiloMind / src /flashcards /flashcards.controller.ts
github-actions[bot]
Deploy Backend from GitHub Actions Commit: ca37b2a1c9dd5c702619ea7ae7b3260d2fb5663d
b185a6d
Raw
History Blame Contribute Delete
2.78 kB
import {
Controller,
Get,
Post,
Body,
Query,
Put,
Delete,
Param,
UseGuards,
Req,
} from "@nestjs/common";
import { FlashcardsService } from "./flashcards.service";
import { ApiTags, ApiOperation, ApiBearerAuth } from "@nestjs/swagger";
import { JwtAuthGuard } from "../auth/jwt-auth.guard";
import { RolesGuard } from "../auth/roles.guard";
import { Roles } from "../auth/roles.decorator";
import { ReviewCardDto } from "./dto/review-card.dto";
import { CreateFlashcardDto } from "./dto/create-flashcard.dto";
import { UpdateFlashcardDto } from "./dto/update-flashcard.dto";
@ApiTags("Spaced Repetition Flashcards")
@Controller("flashcards")
@UseGuards(JwtAuthGuard, RolesGuard)
@ApiBearerAuth()
export class FlashcardsController {
constructor(private flashcardsService: FlashcardsService) {}
@Get("due")
@ApiOperation({ summary: "Retrieve due flashcards for study" })
async getDueFlashcards(
@Query("courseId") courseId?: string,
@Req() req?: any,
) {
return this.flashcardsService.getDueFlashcards(req.user.id, courseId);
}
@Post("review")
@ApiOperation({
summary: "Submit review scores to update spaced repetition times",
})
async recordReviewScore(@Body() dto: ReviewCardDto, @Req() req: any) {
return this.flashcardsService.recordReviewScore(
req.user.id,
dto.flashcardId,
dto.ease,
);
}
@Post()
@Roles("admin")
@ApiOperation({ summary: "Create a new flashcard (Admin)" })
async createFlashcard(@Body() dto: CreateFlashcardDto) {
return this.flashcardsService.create(dto);
}
@Get()
@ApiOperation({ summary: "List all flashcards" })
async getFlashcards(@Query("nodeId") nodeId?: string) {
return this.flashcardsService.findAll(nodeId);
}
@Get(":id")
@Roles("admin")
@ApiOperation({ summary: "Get details of a single flashcard (Admin)" })
async getFlashcardById(@Param("id") id: string) {
return this.flashcardsService.findById(id);
}
@Put(":id")
@Roles("admin")
@ApiOperation({ summary: "Update a flashcard (Admin)" })
async updateFlashcard(
@Param("id") id: string,
@Body() dto: UpdateFlashcardDto,
) {
return this.flashcardsService.update(id, dto);
}
@Delete(":id")
@Roles("admin")
@ApiOperation({ summary: "Delete a flashcard (Admin)" })
async deleteFlashcard(@Param("id") id: string) {
return this.flashcardsService.remove(id);
}
@Post("nodes/:nodeId/bulk")
@Roles("admin")
@ApiOperation({
summary: "Bulk import flashcards for a concept node (Admin)",
})
async bulkImport(
@Param("nodeId") nodeId: string,
@Body()
dto: { flashcards: { question: string; answer: string; tag?: string }[] },
) {
return this.flashcardsService.bulkImport(nodeId, dto.flashcards);
}
}