api-server/src/waitlist/waitlist.controller.ts
WangDL bd44b7e138 feat: init api-server v0.1
- NestJS + TypeScript 后端 API
- 用户认证 (auth)
- 用户管理 (users)
- 学习路径与课程 (learning)
- AI 分析与对话 (ai)
- 用户反馈 (feedback)
- 等待名单 (waitlist)
- 知识库 (knowledge)
- Swagger API 文档(中文、访问控制)
- Basic Auth 保护生产环境文档
2026-05-04 16:09:01 +08:00

43 lines
1.7 KiB
TypeScript

import { Controller, Post, Body, Get, HttpCode, HttpStatus, ValidationPipe } from '@nestjs/common';
import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger';
import { WaitlistService } from './waitlist.service';
import { CreateWaitlistDto } from './dto/create-waitlist.dto';
@ApiTags('waitlist')
@Controller('waitlist')
export class WaitlistController {
constructor(private readonly waitlistService: WaitlistService) {}
@Post()
@HttpCode(HttpStatus.CREATED)
@ApiOperation({ summary: '加入等待名单', description: '提交邮箱加入产品等待名单' })
@ApiResponse({ status: 201, description: '成功加入等待名单' })
@ApiResponse({ status: 400, description: '邮箱无效或缺少必填字段' })
@ApiResponse({ status: 409, description: '该邮箱已报名' })
async create(@Body(new ValidationPipe({ transform: true })) createWaitlistDto: CreateWaitlistDto) {
const entry = await this.waitlistService.create(createWaitlistDto);
return {
success: true,
message: '已成功加入等待名单',
data: {
id: entry.id,
email: entry.email,
createdAt: entry.createdAt,
},
};
}
@Get()
@ApiOperation({ summary: '获取等待名单', description: '获取所有等待名单报名记录(管理员)' })
@ApiResponse({ status: 200, description: '等待名单列表' })
async findAll() {
return this.waitlistService.findAll();
}
@Get('stats')
@ApiOperation({ summary: '获取报名统计', description: '获取等待名单的聚合统计数据' })
@ApiResponse({ status: 200, description: '报名统计数据,包含设备分布和兴趣方向' })
async getStats() {
return this.waitlistService.getStats();
}
}