project init

This commit is contained in:
2026-02-06 02:17:59 +03:00
commit b9d9b9ed17
129 changed files with 22835 additions and 0 deletions

View File

@ -0,0 +1,58 @@
import {
Controller,
Get,
Post,
Query,
} from '@nestjs/common';
import { ApiTags, ApiOperation, ApiBearerAuth, ApiQuery } from '@nestjs/swagger';
import { SearchService } from './search.service';
import { Public } from '../auth/decorators/public.decorator';
@ApiTags('search')
@Controller('search')
export class SearchController {
constructor(private searchService: SearchService) {}
@Get('courses')
@Public()
@ApiOperation({ summary: 'Search courses' })
@ApiQuery({ name: 'q', required: true, description: 'Search query' })
@ApiQuery({ name: 'categoryId', required: false })
@ApiQuery({ name: 'difficulty', required: false, enum: ['beginner', 'intermediate', 'advanced'] })
@ApiQuery({ name: 'tags', required: false, type: [String] })
@ApiQuery({ name: 'priceMin', required: false, type: Number })
@ApiQuery({ name: 'priceMax', required: false, type: Number })
@ApiQuery({ name: 'sort', required: false, enum: ['newest', 'oldest', 'price_asc', 'price_desc', 'title_asc', 'title_desc'] })
@ApiQuery({ name: 'page', required: false, type: Number })
@ApiQuery({ name: 'limit', required: false, type: Number })
async searchCourses(
@Query('q') query: string,
@Query('categoryId') categoryId?: string,
@Query('difficulty') difficulty?: string,
@Query('tags') tags?: string[],
@Query('priceMin') priceMin?: number,
@Query('priceMax') priceMax?: number,
@Query('sort') sort?: string,
@Query('page') page?: number,
@Query('limit') limit?: number
) {
return this.searchService.searchCourses(query, {
categoryId,
difficulty,
tags: tags ? (Array.isArray(tags) ? tags : [tags]) : undefined,
priceMin,
priceMax,
sort,
page,
limit,
publishedOnly: true,
});
}
@Post('reindex')
@ApiBearerAuth()
@ApiOperation({ summary: 'Reindex all courses (admin only)' })
async reindexAll() {
return this.searchService.reindexAllCourses();
}
}