From 6c46ff68d07641c1af486a26ff65bae458a7519f Mon Sep 17 00:00:00 2001 From: Mahdi Dibaiee Date: Wed, 13 Jul 2016 11:26:46 +0430 Subject: [PATCH] fix(primaryKey): use `model.primaryKey` instead of hardcoded `id` for `id` routes, fixes #9 --- package.json | 2 +- src/associations/associate.js | 4 ++-- src/associations/one-to-many.js | 23 ++++++++++++++--------- src/associations/one-to-one.js | 10 +++++++--- src/crud.js | 4 ++-- 5 files changed, 26 insertions(+), 17 deletions(-) diff --git a/package.json b/package.json index 88207f5..a39bb8b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hapi-sequelize-crud", - "version": "2.3.1", + "version": "2.4.0", "description": "Hapi plugin that automatically generates RESTful API for CRUD", "main": "build/index.js", "config": { diff --git a/src/associations/associate.js b/src/associations/associate.js index 5686773..3d152cd 100644 --- a/src/associations/associate.js +++ b/src/associations/associate.js @@ -16,13 +16,13 @@ export default (server, a, b, names, options) => { async handler(request, reply) { const instanceb = await b.findOne({ where: { - id: request.params.bid, + [b.primaryKeyField]: request.params.bid, }, }); const instancea = await a.findOne({ where: { - id: request.params.aid, + [a.primaryKeyField]: request.params.aid, }, }); diff --git a/src/associations/one-to-many.js b/src/associations/one-to-many.js index 04f1406..d693172 100644 --- a/src/associations/one-to-many.js +++ b/src/associations/one-to-many.js @@ -28,18 +28,23 @@ export const get = (server, a, b, names) => { async handler(request, reply) { const include = parseInclude(request); - const base = a.findOne({ + const base = await a.findOne({ where: { - id: request.params.aid, + [a.primaryKeyField]: request.params.aid, }, }); const method = getMethod(base, names.b); + const list = await method({ where: { - id: request.params.bid, + [b.primaryKeyField]: request.params.bid, }, include }); - reply(list); + if (Array.isArray(list)) { + reply(list[0]); + } else { + reply(list); + } }, config: defaultConfig, @@ -58,7 +63,7 @@ export const list = (server, a, b, names) => { const base = await a.findOne({ where: { - id: request.params.aid, + [a.primaryKeyField]: request.params.aid, }, }); @@ -86,7 +91,7 @@ export const scope = (server, a, b, names) => { const base = await a.findOne({ where: { - id: request.params.aid, + [a.primaryKeyField]: request.params.aid, }, }); @@ -159,7 +164,7 @@ export const destroy = (server, a, b, names) => { const base = await a.findOne({ where: { - id: request.params.aid, + [a.primaryKeyField]: request.params.aid, }, }); @@ -188,7 +193,7 @@ export const destroyScope = (server, a, b, names) => { const base = await a.findOne({ where: { - id: request.params.aid, + [a.primarykeyField]: request.params.aid, }, }); @@ -228,7 +233,7 @@ export const update = (server, a, b, names) => { const base = await a.findOne({ where: { - id: request.params.aid, + [a.primaryKeyField]: request.params.aid, }, }); diff --git a/src/associations/one-to-one.js b/src/associations/one-to-one.js index 5a89514..ac71e31 100644 --- a/src/associations/one-to-one.js +++ b/src/associations/one-to-one.js @@ -26,7 +26,7 @@ export const get = (server, a, b, names) => { const base = await a.findOne({ where: { - id: request.params.aid, + [a.primaryKeyField]: request.params.aid, }, }); const method = getMethod(base, names.b, false); @@ -53,7 +53,7 @@ export const create = (server, a, b, names) => { async handler(request, reply) { const base = await a.findOne({ where: { - id: request.params.id, + [a.primaryKeyField]: request.params.id, }, }); @@ -79,10 +79,12 @@ export const destroy = (server, a, b, names) => { const base = await a.findOne({ where: { - id: request.params.aid, + [a.primaryKeyField]: request.params.aid, }, }); + where[b.primaryKeyField] = request.params.bid; + const method = getMethod(base, names.b, false, 'get'); const instance = await method({ where, include }); await instance.destroy(); @@ -110,6 +112,8 @@ export const update = (server, a, b, names) => { }, }); + where[b.primaryKeyField] = request.params.bid; + const method = getMethod(base, names.b, false); const instance = await method({ where, include }); diff --git a/src/crud.js b/src/crud.js index 7f427c7..a34b274 100644 --- a/src/crud.js +++ b/src/crud.js @@ -54,7 +54,7 @@ export const get = (server, model) => { const include = parseInclude(request); const where = parseWhere(request); const { id } = request.params; - if (id) where.id = id; + if (id) where[model.primaryKeyField] = id; const instance = await model.findOne({ where, include }); @@ -122,7 +122,7 @@ export const destroy = (server, model) => { @error async handler(request, reply) { const where = parseWhere(request); - if (request.params.id) where.id = request.params.id; + if (request.params.id) where[model.primaryKeyField] = request.params.id; const list = await model.findAll({ where });