Auth: WeChat login, JWT, roles guard (24 tests passing) User: profile CRUD, training stats with month/total calculations Studio: config management with auto-default creation
45 lines
1.0 KiB
TypeScript
45 lines
1.0 KiB
TypeScript
import {
|
|
Controller,
|
|
Post,
|
|
Body,
|
|
UseGuards,
|
|
Request,
|
|
HttpCode,
|
|
HttpStatus,
|
|
} from '@nestjs/common'
|
|
import { AuthService } from './auth.service'
|
|
import { LoginDto } from './dto/login.dto'
|
|
import { BindPhoneDto } from './dto/bind-phone.dto'
|
|
import { JwtAuthGuard } from './jwt-auth.guard'
|
|
import { AuthenticatedUser } from './jwt.strategy'
|
|
import { User } from '@prisma/client'
|
|
|
|
interface AuthenticatedRequest {
|
|
user: AuthenticatedUser
|
|
}
|
|
|
|
@Controller('auth')
|
|
export class AuthController {
|
|
constructor(private readonly authService: AuthService) {}
|
|
|
|
@Post('login')
|
|
@HttpCode(HttpStatus.OK)
|
|
async login(@Body() loginDto: LoginDto): Promise<{ token: string; user: User }> {
|
|
return this.authService.login(loginDto.code)
|
|
}
|
|
|
|
@Post('phone')
|
|
@UseGuards(JwtAuthGuard)
|
|
@HttpCode(HttpStatus.OK)
|
|
async bindPhone(
|
|
@Request() req: AuthenticatedRequest,
|
|
@Body() bindPhoneDto: BindPhoneDto,
|
|
): Promise<User> {
|
|
return this.authService.bindPhone(
|
|
req.user.userId,
|
|
bindPhoneDto.encryptedData,
|
|
bindPhoneDto.iv,
|
|
)
|
|
}
|
|
}
|