import { Body, Controller, Get, Post, UseGuards } from '@nestjs/common'; import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; import { Throttle } from '@nestjs/throttler'; import { AuthService } from './auth.service.js'; import { AccessTokenGuard } from './access-token.guard.js'; import { CurrentActor } from './current-actor.decorator.js'; import type { ActorContext } from '../common/actor-context.js'; import { CreateSystemAdminDto } from './dto/create-system-admin.dto.js'; import { MiniappPhoneLoginDto } from './dto/miniapp-phone-login.dto.js'; import { MiniappPhoneLoginConfirmDto } from './dto/miniapp-phone-login-confirm.dto.js'; import { PasswordLoginConfirmDto } from './dto/password-login-confirm.dto.js'; import { LoginDto } from '../users/dto/login.dto.js'; /** * 认证控制器:提供系统管理员创建、登录、获取当前登录用户信息接口。 */ @ApiTags('认证') @Controller('auth') export class AuthController { constructor(private readonly authService: AuthService) {} /** * 创建系统管理员(需引导密钥)。 */ @Post('system-admin') @Throttle({ default: { limit: 3, ttl: 60_000 } }) @ApiOperation({ summary: '创建系统管理员' }) createSystemAdmin(@Body() dto: CreateSystemAdminDto) { return this.authService.createSystemAdmin(dto); } /** * 院内账号密码登录:后台与小程序均可复用。 */ @Post('login') @Throttle({ default: { limit: 5, ttl: 60_000 } }) @ApiOperation({ summary: '院内账号密码登录' }) login(@Body() dto: LoginDto) { return this.authService.login(dto); } @Post('login/confirm') @Throttle({ default: { limit: 10, ttl: 60_000 } }) @ApiOperation({ summary: '院内账号密码多账号确认登录' }) confirmLogin(@Body() dto: PasswordLoginConfirmDto) { return this.authService.confirmLogin(dto); } @Post('miniapp/b/phone-login') @Throttle({ default: { limit: 5, ttl: 60_000 } }) @ApiOperation({ summary: 'B 端小程序手机号登录' }) miniAppBLogin(@Body() dto: MiniappPhoneLoginDto) { return this.authService.miniAppBLogin(dto); } @Post('miniapp/b/phone-login/confirm') @Throttle({ default: { limit: 10, ttl: 60_000 } }) @ApiOperation({ summary: 'B 端小程序多账号确认登录' }) miniAppBConfirmLogin(@Body() dto: MiniappPhoneLoginConfirmDto) { return this.authService.miniAppBConfirmLogin(dto); } @Post('miniapp/c/phone-login') @Throttle({ default: { limit: 5, ttl: 60_000 } }) @ApiOperation({ summary: 'C 端小程序手机号登录' }) miniAppCLogin(@Body() dto: MiniappPhoneLoginDto) { return this.authService.miniAppCLogin(dto); } /** * 获取当前登录用户信息。 */ @Get('me') @UseGuards(AccessTokenGuard) @ApiBearerAuth('bearer') @ApiOperation({ summary: '获取当前用户信息' }) me(@CurrentActor() actor: ActorContext) { return this.authService.me(actor); } }