import { Controller, Post, Body, Get, Param, UseGuards, Request } from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; import { AuthService } from '../../../application/services/auth.service'; @Controller('api/v1/auth') export class AuthController { constructor(private readonly authService: AuthService) {} @Post('login') async login(@Body() body: { email: string; password: string }) { return this.authService.login(body.email, body.password); } /** * Register a new user. * If companyName is provided, creates a new tenant (self-service registration). * Otherwise joins the default tenant as viewer. */ @Post('register') async register( @Body() body: { email: string; password: string; name: string; companyName?: string }, ) { return this.authService.register( body.email, body.password, body.name, body.companyName, ); } /** * Validate an invitation token (public endpoint). */ @Get('invite/:token') async validateInvite(@Param('token') token: string) { return this.authService.validateInvite(token); } /** * Accept an invitation and create a user account (public endpoint). */ @Post('accept-invite') async acceptInvite( @Body() body: { token: string; password: string; name: string }, ) { return this.authService.acceptInvite(body.token, body.password, body.name); } @Get('profile') @UseGuards(AuthGuard('jwt')) async getProfile(@Request() req: any) { return req.user; } @Post('refresh') async refreshToken(@Body() body: { refreshToken: string }) { return this.authService.refreshToken(body.refreshToken); } @Post('api-keys') @UseGuards(AuthGuard('jwt')) async createApiKey(@Request() req: any, @Body() body: { name: string }) { return this.authService.createApiKey( req.user.userId, req.user.tenantId, body.name, ); } }