Spaces:
Sleeping
Sleeping
File size: 2,999 Bytes
910c878 6cd3ae1 910c878 6cd3ae1 910c878 6cd3ae1 910c878 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | import { Controller, Get, Query, Param, UseGuards, Req } from '@nestjs/common';
import { CoursesService, CourseFilters } from './courses.service';
import { ApiTags, ApiOperation, ApiBearerAuth, ApiQuery, ApiSecurity } from '@nestjs/swagger';
import { JwtAuthGuard } from '../auth/jwt-auth.guard';
import { AdminKeyGuard } from '../auth/admin-key.guard';
@ApiTags('Courses')
@Controller('courses')
export class CoursesController {
constructor(private readonly coursesService: CoursesService) {}
// βββ GET /courses/me ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
@Get('me')
@UseGuards(JwtAuthGuard)
@ApiBearerAuth()
@ApiOperation({ summary: 'Get personalized courses for logged-in user' })
@ApiQuery({ name: 'search', required: false })
@ApiQuery({ name: 'platform', required: false, enum: ['edX', 'YouTube', 'Coursera', 'Udemy'] })
@ApiQuery({ name: 'level', required: false, enum: ['Beginner', 'Intermediate', 'Advanced', 'All Levels'] })
@ApiQuery({ name: 'category', required: false })
@ApiQuery({ name: 'price', required: false, enum: ['Free', 'Paid'] })
@ApiQuery({ name: 'language', required: false })
@ApiQuery({ name: 'page', required: false, type: Number })
@ApiQuery({ name: 'limit', required: false, type: Number })
getMyCourses(@Req() req: any, @Query() filters: CourseFilters) {
return this.coursesService.getUserCoursesFiltered(req.user.id, filters);
}
// βββ GET /courses/me/stats ββββββββββββββββββββββββββββββββββββββββββββββββ
@Get('me/stats')
@UseGuards(JwtAuthGuard)
@ApiBearerAuth()
@ApiOperation({ summary: 'Get course stats for logged-in user'
})
getMyStats(@Req() req: any) {
return this.coursesService.getUserStats(req.user.id);
}
// βββ GET /courses/me/filters ββββββββββββββββββββββββββββββββββββββββββββββ
@Get('me/filters')
@UseGuards(JwtAuthGuard)
@ApiBearerAuth()
@ApiOperation({ summary: 'Get available filter options for logged-in user courses' })
getMyFilters(@Req() req: any) {
return this.coursesService.getUserFilterOptions(req.user.id);
}
// βββ GET /courses/user/:userId β admin ββββββββββββββββββββββββββββββββββββ
@Get('user/:userId')
@UseGuards(AdminKeyGuard)
@ApiSecurity('admin-key')
@ApiOperation({ summary: 'Admin: get personalized courses for any user' })
@ApiQuery({ name: 'page', required: false, type: Number })
@ApiQuery({ name: 'limit', required: false, type: Number })
getUserCourses(@Param('userId') userId: string, @Query() filters: CourseFilters) {
return this.coursesService.getUserCoursesFiltered(userId, filters);
}
}
|