import { SubjectService } from '#services/subject_service' import { updateUserValidator } from '#validators/user' import { inject } from '@adonisjs/core' import type { HttpContext } from '@adonisjs/core/http' @inject() export default class UserController { constructor(private subjectService: SubjectService) {} // GET /users/@me async me({ auth }: HttpContext) { return { success: true, data: { ...auth.user?.serialize(), email: auth.user!.email || '', }, } } // POST /users/@me // Update user preferences (for subjects) async update({ request, response, auth }: HttpContext) { const user = auth.user! const { preferences: data } = await request.validateUsing(updateUserValidator) const preferences = user.extras?.preferences || [] // Validate subject names const validSubjects = await this.subjectService.getAll(user.className) for (const { name, emoji, color } of data) { if (!validSubjects.includes(name)) { return response.badRequest({ message: `Invalid subject name: ${name}`, }) } const existing = preferences.find((p: any) => p.name === name) if (existing) { // Update existing.emoji = emoji existing.color = color } else { // Create new preference preferences.push({ name, emoji, color }) } } user.extras = { ...user.extras, preferences, } await user.save() return { success: true, data: user, } } }