import Model from '../../models/Folder' import Instance from '../utilities/Instance' import * as Response from '../utilities/Response' type ModelInstance = Instance export const getSingle = repository => async (id: string) => { const instance = await repository.findByPk(id) if (instance === null) { throw new Response.NotFound({ message: 'Not found.' }) } return new Response.Retrieved({ data: instance, }) } export const getMultiple = repository => async (query: Record) => { const instances = await repository.findAll() return new Response.Retrieved({ data: instances, }) } export const save = repository => (body: Partial) => async (id: string, idColumnName = 'id') => { const [newInstance, created] = await repository.findOrCreate({ where: { [idColumnName]: id }, defaults: { ...body, [idColumnName]: id, }, }) if (created) { return new Response.Created({ data: newInstance.toJSON() }) } Object.entries(body).forEach(([key, value]) => { newInstance[key] = value }) newInstance[idColumnName] = id const updatedInstance = await newInstance.save() return new Response.Saved({ data: updatedInstance.toJSON() }) }