import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext' import SetSettingsValidator from 'App/Validators/SetSettingsValidator' import Logger from '@ioc:Adonis/Core/Logger' type ResultSetting = { key: string, value: string } export default class SettingsController { public async list({ auth }: HttpContextContract ): Promise { try { const result = await auth.user.related('settings').query().select(['key', 'value']) return result } catch(error) { return error } } public async get({params, auth}: HttpContextContract): Promise { const key = params.key try { const result = auth.user.related('settings').query().select(['key', 'value']).where('key', key).first() return result } catch(error) { return error } } /** * Expects: * { * settings: [ * {key: 'key1', value: 'value1'}, * ] * } */ public async set({request, auth}: HttpContextContract): Promise<'ok'> { try { const payload = await request.validate(SetSettingsValidator) await auth.user.related('settings').updateOrCreateMany(payload.settings, 'key') return "ok" } catch(error){ return error } } public async delete({ params, auth }: HttpContextContract): Promise<(0 | 1)[]> { const key = params.key try { return await auth.user.related('settings').query().where('key', key).delete() } catch(error){ return error } } }