import { Controller, Get, Post, Param, UseGuards, Request, ParseIntPipe, Body, } from '@nestjs/common'; import { CoursesService } from './courses.service'; import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard'; @Controller('api/courses') export class CoursesController { constructor(private readonly coursesService: CoursesService) {} @Get() async findAll() { const data = await this.coursesService.findAll(); return { success: true, data }; } @UseGuards(JwtAuthGuard) @Get('my') async findMyCourses(@Request() req) { const data = await this.coursesService.getUserCourses(req.user.userId); return { success: true, data }; } @UseGuards(JwtAuthGuard) @Get('my-stars') async findMyStars(@Request() req) { const data = await this.coursesService.getUserStars(req.user.userId); return { success: true, data }; } @Get(':id') async findOne(@Param('id', ParseIntPipe) id: number) { const data = await this.coursesService.findOne(id); return { success: true, data }; } @Post(':id/view') async incrementViewCount(@Param('id', ParseIntPipe) id: number) { await this.coursesService.incrementViewCount(id); return { success: true }; } @Post(':id/like') async toggleLike(@Param('id', ParseIntPipe) id: number) { await this.coursesService.toggleLike(id); return { success: true }; } @UseGuards(JwtAuthGuard) @Post(':id/star') async toggleStar(@Param('id', ParseIntPipe) id: number, @Request() req) { await this.coursesService.toggleStar(id, req.user.userId); return { success: true }; } @UseGuards(JwtAuthGuard) @Get(':id/access') async getAccess(@Param('id', ParseIntPipe) id: number, @Request() req) { const data = await this.coursesService.getCourseAccess(req.user.userId, id); return { success: true, data }; } @Get(':id/comments') async getComments(@Param('id', ParseIntPipe) id: number) { const data = await this.coursesService.getComments(id); return { success: true, data }; } @UseGuards(JwtAuthGuard) @Post(':id/comments') async addComment( @Param('id', ParseIntPipe) id: number, @Body() body: { content: string; parentId?: number; replyToCommentId?: number }, @Request() req, ) { const data = await this.coursesService.addComment( id, req.user.userId, body.content, body.parentId, body.replyToCommentId, ); return { success: true, data }; } }