arbase-crud
Advanced tools
Comparing version 0.1.1 to 0.2.0
{ | ||
"name": "arbase-crud", | ||
"version": "0.1.1", | ||
"version": "0.2.0", | ||
"description": "Arbase-crud is a package to expose a CRUD-like interface from an arbase API config", | ||
@@ -26,3 +26,3 @@ "main": "src/index.js", | ||
"@hapi/boom": "^8.0.1", | ||
"@hapi/joi": "^16.1.5" | ||
"@hapi/joi": "^16.1.7" | ||
}, | ||
@@ -29,0 +29,0 @@ "peerDependencies": { |
@@ -6,4 +6,2 @@ 'use strict' | ||
const client = require('arbase/src/client') | ||
function generateConfig (entry, valPayload, valId, valPage) { | ||
@@ -20,3 +18,6 @@ const out = { validate: {} } | ||
if (valPayload) { | ||
out.validate.payload = entry.validator | ||
out.validate.payload = Joi.object({ | ||
item: entry.validator.required(), | ||
tags: Joi.object() | ||
}) | ||
} | ||
@@ -34,3 +35,3 @@ | ||
module.exports = ({server, entry, name, prefix, middleware, arweave}) => { | ||
module.exports = ({server, entry, name, prefix, middleware, client}) => { | ||
// TODO: use joi | ||
@@ -97,7 +98,7 @@ if (!middleware) { middleware = {} } | ||
try { | ||
const res = await client.write.entryCreate(arweave, entry, request.payload) | ||
const res = await client.write.entryCreate(entry, request.payload) | ||
return h.response(res).code(200) | ||
} catch (error) { | ||
// TODO: better errorss | ||
throw Boom.badImplementation(error.message) | ||
throw processError(error) | ||
} | ||
@@ -109,23 +110,38 @@ } | ||
entry.attributes.filter(a => a.isList).forEach(list => { | ||
server.route({ | ||
method: 'GET', | ||
path: `${base}/{id}/${list.name}`, | ||
// TODO: where, payload validate, param validate, limit, id-based pagination | ||
config: generateConfig(entry, false, false, true), | ||
handler: async (request, h) => { | ||
await m('pre', 'read', request, h) | ||
server.route({ | ||
method: 'GET', | ||
path: `${base}`, | ||
// TODO: where, payload validate, param validate, limit, id-based pagination | ||
config: generateConfig(entry, false, false, true), | ||
handler: async (request, h) => { | ||
await m('pre', 'read', request, h) | ||
// TODO: where filters | ||
const {page, perPage} = request.query | ||
// TODO: where filters | ||
// const {page, perPage} = request.query | ||
try { | ||
// TODO: add include | ||
// TODO: where filter, limit, id-based pagination | ||
try { | ||
// TODO: add include | ||
// TODO: where filter, limit, id-based pagination | ||
const { id } = request.params | ||
const {data, live} = await client.read.query(`SELECT ${entry.fullName} WHERE 'equals(board, $1)'`, {params: [request.query.board], arqlLang: 'fnc'}) | ||
return h.response(Object.keys(data).reduce((a, b) => { | ||
a[b] = data[b] | ||
}, [])) | ||
.header('x-is-live', live) | ||
// TODO: rework with pagination and sanity | ||
/* const { id } = request.params | ||
const offset = (page - 1) * perPage | ||
const res = await client.read.list(arweave, entry, list, id, list.name) | ||
client.read.query(`SELECT SINGLE ${entry.fullName} WHERE equals(id, $1)`, {params: [id], lang: 'fnc'}) | ||
const {data: items, total: count} = await client.read.list(entry, list, id, { offset, limit: perPage }) | ||
const res = { | ||
// TODO: get entry element for actual element via listEntry | ||
rows: await Promise.all(items.map(item => client.read.list(entry, item))), | ||
count | ||
} | ||
await m('post', 'read', request, h, res) | ||
@@ -139,8 +155,7 @@ | ||
.header('X-Has-Prev', JSON.stringify(Boolean(offset))) | ||
.code(200) | ||
} catch (error) { | ||
throw Boom.badImplementation(error.message) | ||
} | ||
.code(200) */ | ||
} catch (error) { | ||
throw processError(error) | ||
} | ||
}) | ||
} | ||
}) | ||
@@ -158,7 +173,7 @@ | ||
const { id } = request.params | ||
const res = await client.read.entry(arweave, entry, id) | ||
const res = await client.read.query(`SELECT SINGLE ${entry.fullName} WHERE 'equals(i, $1)'`, {params: [id], arqlLang: 'fnc'}) | ||
await m('post', 'read', request, h, res) | ||
if (res) { | ||
return h.response(res).code(200) | ||
return h.response(res.data).header('x-is-live', String(res.live)).code(200) | ||
} else { | ||
@@ -185,3 +200,3 @@ throw Boom.notFound(`${name} with ID ${id} does not exist!`) | ||
const { id } = request.params | ||
const updated = await client.write.entryUpdate(arweave, entry, id) | ||
const updated = await client.write.entryUpdate(entry, id) | ||
@@ -212,3 +227,3 @@ await m('post', 'update', request, h, updated) | ||
const { id } = request.params | ||
const deleted = await client.write.entryDelete(arweave, entry, id) | ||
const deleted = await client.write.entryDelete(entry, id) | ||
@@ -215,0 +230,0 @@ await m('post', 'delete', request, h, deleted) |
'use strict' | ||
const crud = require('./crud') | ||
const Client = require('arbase/src/client') | ||
module.exports = (server, {entry, entries}, {prefix}) => { | ||
entries.forEach(entry => { | ||
module.exports = (server, e, {prefix}) => { | ||
const client = Client(server.arweave, e) | ||
e.entries.forEach(entry => { | ||
crud({ | ||
@@ -13,5 +16,5 @@ server, | ||
middleware: {}, | ||
arweave: server.arweave | ||
client | ||
}) | ||
}) | ||
} |
7582
205
Updated@hapi/joi@^16.1.7