import { Body, Controller, HttpCode, Post, Req, } from '@nestjs/common'; import { Throttle } from '@nestjs/throttler'; import type { AuthPrincipal, RequestWithContext, } from '../common/http/request-context'; import { CurrentAuth } from './decorators/current-auth.decorator'; import { Public } from './decorators/public.decorator'; import { SkipCsrf } from './decorators/skip-csrf.decorator'; import { LoginDto } from './dto/login.dto'; import { MobileRefreshDto } from './dto/mobile-refresh.dto'; import { MobileAuthService } from './mobile-auth.service'; @Controller('auth/mobile') export class MobileAuthController { constructor(private readonly mobileAuth: MobileAuthService) {} @Post('login') @HttpCode(200) @Public() @SkipCsrf() @Throttle({ default: { limit: 5, ttl: 60_000, blockDuration: 60_000 } }) login( @Body() dto: LoginDto, @Req() request: RequestWithContext, ) { return this.mobileAuth.login(dto, request); } @Post('refresh') @HttpCode(200) @Public() @SkipCsrf() @Throttle({ default: { limit: 20, ttl: 60_000 } }) refresh( @Body() dto: MobileRefreshDto, @Req() request: RequestWithContext, ) { return this.mobileAuth.refresh(dto.refreshToken, request); } @Post('logout') @HttpCode(200) logout( @CurrentAuth() principal: AuthPrincipal, @Req() request: RequestWithContext, ) { return this.mobileAuth.logout(principal, request); } }