UNPKG

@mvp-rockets/namma-generator

Version:

A generator to generate mvp-rockets projects

191 lines (180 loc) 6.56 kB
const Result = require('folktale/result'); const db = require('models/index'); const { logError } = require('lib'); module.exports.execute = async (query) => new Promise((resolve) => { query .get() .then((data) => { resolve(Result.Ok(data)); }) .catch((error) => { logError("Repository failed on execute", { query: query.constructor.name, error: error }); resolve(Result.Error(error)); }); }); module.exports.executeWithValue = async (query, messageError) => new Promise((resolve) => { query .get() .then((data) => { if (!data) { logError("Repository failed on executeWithValue", { query: query.constructor.name, error: messageError || 'Not found' }); resolve(Result.Error(new ApiError('api error', messageError || 'Not found', 404))); return; } resolve(Result.Ok(data)); }) .catch((error) => { logError("Repository failed on executeWithValue", { query: query.constructor.name, error: error }); resolve(Result.Error(error)); }); }); module.exports.perform = async query => new Promise((resolve) => { query .then((data) => { resolve(Result.Ok(data)); }) .catch((error) => { logError("Repository failed on perform", { error: error }); resolve(Result.Error(error)); }); }); module.exports.create = async (query) => new Promise((resolve) => { query .get() .then((data) => { resolve(Result.Ok(data)); }) .catch((error) => { logError("Repository failed on create", { query: query.constructor.name, error: error }); resolve(Result.Error(error)); }); }); module.exports.find = async (query) => new Promise((resolve) => { query .get() .then((data) => { resolve(Result.Ok(data)); }) .catch((error) => { logError("Repository failed on find", { query: query.constructor.name, error: error }); resolve(Result.Error(error)); }); }); module.exports.findOne = async (query) => new Promise((resolve) => { query .get() .then((data) => { resolve(Result.Ok(data)); }) .catch((error) => { logError("Repository failed on findOne", { query: query.constructor.name, error: error }); resolve(Result.Error(error)); }); }); module.exports.bulkCreate = async (query) => new Promise((resolve) => { query .get() .then((data) => { resolve(Result.Ok(data)); }) .catch((error) => { logError("Repository failed on bulk create", { query: query.constructor.name, error: error }); resolve(Result.Error(error)); }); }); module.exports.update = async (query) => new Promise((resolve) => { query .get() .then((data) => { resolve(Result.Ok(data)); }) .catch((error) => { logError("Repository failed on update ", { query: query.constructor.name, error: error }); resolve(Result.Error(error)); }); }); module.exports.delete = async (query) => new Promise((resolve) => { query .get() .then((data) => { resolve(Result.Ok(data)); }) .catch((error) => { logError("Repository failed on delete", { query: query.constructor.name, error: error }); resolve(Result.Error(error)); }); }); module.exports.deleteOne = async (query) => new Promise((resolve) => { query .get() .then((data) => { resolve(Result.Ok(data)); }) .catch((error) => { logError("Repository failed on delete one", { query: query.constructor.name, error: error }); resolve(Result.Error(error)); }); }); module.exports.executeAll = arr => new Promise((resolve) => { if (!Array.isArray(arr)) { resolve(Result.Error('Argument is not an array')); } const allPromises = arr.map((item) => { if (Array.isArray(item)) { return item[0].get().catch(error => ({ error, args: item.slice(1) })); } return item.get().catch(error => ({ error, args: [] })); }); let errorFound = false; Promise.all(allPromises).then((results) => { results.forEach((result) => { if (result && result.error) { errorFound = true; logError("Repository failed on executeAll", { query: arr, error: result.error }); if (result.args.length === 1 || (result.args.length === 2 && result.args[1].includes('api'))) { resolve(Result.Error(new ApiError(0, 'api error', result.args[0]))); return; } if (result.args.length === 2 && result.args[1].includes('validation')) { resolve(Result.Error(new ValidationError(0, result.args[0], 'validation error'))); return; } resolve(Result.Error(result.error)); } }); if (!errorFound) { resolve(Result.Ok(results)); } }); }); module.exports.executeMultiple = async (queries) => new Promise(async (resolve) => { try { const result = await db.sequelize.transaction(async (t) => { const allResult = queries.map((query) => query.get({ transaction: t }).then((data) => data)); return Promise.all(allResult); }); resolve(Result.Ok(result)); } catch (error) { logError("Repository failed on execute multiple", { query: queries.map((query) => query.constructor.name).join(","), error: error }); resolve(Result.Error(error)); } }); module.exports.executeMultipleWithoutTx = async (queries) => new Promise(async (resolve) => { try { const allResult = queries.map((query) => query.get().then((data) => data)); const resolveAllResult = await Promise.all(allResult); resolve(Result.Ok(resolveAllResult)); } catch (error) { logError("Repository failed on executeMultipleWithoutTx", { query: queries.map((query) => query.constructor.name).join(","), error: error }); resolve(Result.Error(error)); } });