import { Body, Controller, Get, Post, Patch, Query, UseGuards } from "@nestjs/common"; import { ok } from "../common/response"; import { AuthService } from "./auth.service"; import { LoginDto } from "./dto/login.dto"; import { RegisterDto } from "./dto/register.dto"; import { UpdateProfileDto } from "./dto/update-profile.dto"; import { ForgotPasswordDto } from "./dto/forgot-password.dto"; import { ResetPasswordDto } from "./dto/reset-password.dto"; import { JwtAuthGuard } from "../common/guards/jwt-auth.guard"; import { CurrentUser } from "../common/decorators/current-user.decorator"; import { Public } from "../common/decorators/public.decorator"; @Controller("auth") @UseGuards(JwtAuthGuard) export class AuthController { constructor(private readonly authService: AuthService) {} @Public() @Post("register") async register(@Body() payload: RegisterDto) { return ok(await this.authService.register(payload)); } @Public() @Post("login") async login(@Body() payload: LoginDto) { return ok(await this.authService.login(payload)); } @Public() @Get("verify-email") async verifyEmail(@Query("token") token: string) { return ok(await this.authService.verifyEmail(token)); } @Public() @Post("refresh") async refresh(@Body("refreshToken") refreshToken: string) { return ok(await this.authService.refreshAccessToken(refreshToken)); } @Post("logout") async logout(@Body("refreshToken") refreshToken: string) { return ok(await this.authService.logout(refreshToken)); } @Public() @Post("forgot-password") async forgotPassword(@Body() payload: ForgotPasswordDto) { return ok(await this.authService.forgotPassword(payload)); } @Public() @Post("reset-password") async resetPassword(@Body() payload: ResetPasswordDto) { return ok(await this.authService.resetPassword(payload)); } @Get("me") async me(@CurrentUser() userId: string) { return ok(await this.authService.getProfile(userId)); } @Patch("profile") async updateProfile(@CurrentUser() userId: string, @Body() payload: UpdateProfileDto) { return ok(await this.authService.updateProfile(userId, payload)); } }