feat: implement QuestionBank CRUD with pagination and template query

- Add pagination support to findAll (page, limit query params)
- Add findByTemplateId method to service
- Add GET /by-template/:templateId endpoint to controller
- Service already includes CRUD for QuestionBank and QuestionBankItem
This commit is contained in:
Developer
2026-04-23 17:19:11 +08:00
commit 0a9588abb7
492 changed files with 112453 additions and 0 deletions
@@ -0,0 +1,69 @@
import {
Controller,
Get,
Post,
Delete,
Body,
Param,
Query,
UseGuards,
Request,
} from '@nestjs/common';
import { CombinedAuthGuard } from '../auth/combined-auth.guard';
import { SearchHistoryService } from './search-history.service';
import { I18nService } from '../i18n/i18n.service';
@Controller('search-history')
@UseGuards(CombinedAuthGuard)
export class SearchHistoryController {
constructor(
private readonly searchHistoryService: SearchHistoryService,
private readonly i18nService: I18nService,
) {}
@Get()
async findAll(
@Request() req,
@Query('page') page: string = '1',
@Query('limit') limit: string = '20',
) {
const pageNum = parseInt(page, 10) || 1;
const limitNum = parseInt(limit, 10) || 20;
return await this.searchHistoryService.findAll(
req.user.id,
req.user.tenantId,
pageNum,
limitNum,
);
}
@Get(':id')
async findOne(@Param('id') id: string, @Request() req) {
return await this.searchHistoryService.findOne(
id,
req.user.id,
req.user.tenantId,
);
}
@Post()
async create(
@Body() body: { title: string; selectedGroups?: string[] },
@Request() req,
) {
const history = await this.searchHistoryService.create(
req.user.id,
req.user.tenantId,
body.title,
body.selectedGroups,
);
return { id: history.id };
}
@Delete(':id')
async remove(@Param('id') id: string, @Request() req) {
await this.searchHistoryService.remove(id, req.user.id, req.user.tenantId);
return { message: this.i18nService.getMessage('searchHistoryDeleted') };
}
}