import { Controller, Post, Body, UseInterceptors, UploadedFile, } from "@nestjs/common"; import {AuthService} from "./auth.service"; import {ApiBody, ApiConsumes, ApiTags} from "@nestjs/swagger"; import {FileInterceptor} from "@nestjs/platform-express"; import {RegisterDto} from "./dto/register.dto"; import {LoginDto} from "./dto/login.dto"; import {ImageValidationInterceptor} from "../common/interceptors/image-validation.interceptor"; @ApiTags("auth") @Controller("auth") export class AuthController { constructor(private readonly auth: AuthService) { } @Post("register") @ApiConsumes("multipart/form-data") @ApiBody({ schema: { type: "object", properties: { username: {type: "string"}, email: {type: "string"}, password: {type: "string"}, name: {type: "string"}, file: { type: "string", format: "binary", description: "avatar WEBP <= 10MB, <= 1920px", }, }, required: ["username", "email", "password"], }, }) @UseInterceptors( FileInterceptor("file", {limits: {fileSize: 10 * 1024 * 1024}}), new ImageValidationInterceptor({required: false, fieldName: "file"}), ) async register( @Body() dto: RegisterDto, @UploadedFile() file?: Express.Multer.File, ) { return this.auth.register(dto, file); } @Post("login") async login(@Body() dto: LoginDto) { return this.auth.login(dto); } }