import { Controller, Get, Put, Body, UseGuards } from '@nestjs/common'; import { ApiTags, ApiBearerAuth, ApiOperation } from '@nestjs/swagger'; import { ProfileService } from './profile.service'; import { UpdateProfileDto } from './dto/update-profile.dto'; import { GetUser } from 'src/shared/decorators/get-user.decorator'; import { LogToDiscord } from 'src/shared/decorators/log-to-discord.decorator'; import type { UserSessionType } from 'src/shared/types/user-session.type'; import { UserAuthGuard } from '../auth/guards/user-auth.guard'; @ApiTags('User: Profile') @Controller('user/profile') @UseGuards(UserAuthGuard) @ApiBearerAuth() @LogToDiscord() export class ProfileController { constructor(private readonly profileService: ProfileService) {} @Get() @ApiOperation({ summary: 'Get user profile' }) async getProfile(@GetUser() sessionData: UserSessionType) { const user = await this.profileService.getProfile(sessionData.user.id); return { user }; } @Put() @ApiOperation({ summary: 'Update user profile (cannot change email or phone)', }) async updateProfile( @GetUser() sessionData: UserSessionType, @Body() updateDto: UpdateProfileDto, ) { const user = await this.profileService.updateProfile( sessionData.user.id, updateDto, ); return { message: 'Profile updated successfully', user, }; } @Get('interests') @ApiOperation({ summary: 'Get user interests (genres)' }) async getUserInterests(@GetUser() sessionData: UserSessionType) { const interests = await this.profileService.getUserInterests( sessionData.user.id, ); return { interests }; } }