import { Body, Controller, Get, HttpCode, Post, Put, Request, } from '@nestjs/common'; import { UserSettingsService, type UpdateUserSettingsInput, } from './user-settings.service'; import { RequirePermissions } from '../auth/permissions.decorator'; import { Permission } from '../auth/permissions.enum'; import type { AuthenticatedRequest } from '../auth/authenticated-request'; @Controller('api/user-settings') export class UserSettingsController { constructor(private readonly userSettingsService: UserSettingsService) {} @Get() async getSettings(@Request() req: AuthenticatedRequest) { return this.userSettingsService.getSettings( req.user!.userId, req.user!.email, req.user!.preferredUsername ?? undefined, req.user!.groups, ); } @Put() async updateSettings( @Request() req: AuthenticatedRequest, @Body() body: UpdateUserSettingsInput, ) { return this.userSettingsService.updateSettings( req.user!.userId, body, req.user!.email, req.user!.preferredUsername ?? undefined, req.user!.groups, ); } @Get('senders') async getSenders(@Request() req: AuthenticatedRequest) { return this.userSettingsService.getAvailableSenders(req.user!.userId); } @Post('test-smtp') @HttpCode(200) @RequirePermissions(Permission.MANAGE_SETTINGS) async testSmtp( @Body() body: { host: string; port: number; secure: boolean; user: string; pass: string; }, ) { return this.userSettingsService.testSmtp(body); } }