generated from alphane/template
33 lines
928 B
TypeScript
33 lines
928 B
TypeScript
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
|