import { User } from "@/models" import UserPreference, { PreferenceKeys } from "@/models/user-preference" import { preferenceValueValidators } from "@/models/user-preference-value-validators" import BaseService from "@/services/base-service" export class UpsertService extends BaseService { constructor( private user: User, private key: string, private value: unknown | null ) { super() } async perform() { const isPreferenceKey = Object.values(PreferenceKeys).includes(this.key as PreferenceKeys) if (!isPreferenceKey) { throw new Error("Provided key is not a valid PreferenceKey") } const key = this.key as PreferenceKeys const validator = preferenceValueValidators[key] if (!validator(this.value)) { throw new Error("Invalid value for preference key") } return UserPreference.setValue(this.user.id, key, this.value) } } export default UpsertService