import { isNil } from "lodash" import logger from "@/utils/logger" import { User } from "@/models" import { UpsertService } from "@/services/users/preferences" import { UsersPolicy } from "@/policies/users-policy" import BaseController from "@/controllers/base-controller" export class PreferencesController extends BaseController { async update() { try { const user = await this.loadUser() if (isNil(user)) { return this.response.status(404).json({ message: "User not found", }) } const policy = this.buildPolicy(user) if (!policy.update()) { return this.response.status(403).json({ message: "You are not authorized to update this user", }) } const key = this.request.params.key as string const { value } = this.request.body await UpsertService.perform(user, key, value) return this.response.json({ message: "Successfully upserted user preference" }) } catch (error) { logger.error(error) return this.response.status(422).json({ message: `Error updating user: ${error}`, }) } } private async loadUser(): Promise { return User.findByPk(this.params.UserId) } private buildPolicy(User: User) { return new UsersPolicy(this.currentUser, User) } } export default PreferencesController