From 32130fd073321542494bc97aac431decc75b620f Mon Sep 17 00:00:00 2001 From: Gwynn DP Date: Sun, 12 Dec 2021 18:19:02 -0800 Subject: [PATCH] fix: some id bugs, lint errors --- __tests__/api-tests/seed-data-creation.js | 2 +- __tests__/seed-example.js | 25 +++++---- __tests__/seed-spec-example.spec.js | 25 +++++---- database/connection.js | 1 + knexfile.js | 8 ++- server/database/knex.js | 26 ---------- server/handlers/stakeholderHandler.js | 27 ++++------ server/models/Session.js | 2 +- server/models/Stakeholder.js | 14 +---- server/repositories/BaseRepository.spec.js | 6 +-- server/repositories/StakeholderRepository.js | 51 ++++++------------- .../StakeholderRepository.spec.js | 2 +- server/server.js | 1 + server/utils/utils.js | 32 ++++++------ .../20211119035542_createStakeholder.js | 8 --- 15 files changed, 80 insertions(+), 150 deletions(-) delete mode 100644 server/database/knex.js delete mode 100644 src/db/migrations/20211119035542_createStakeholder.js diff --git a/__tests__/api-tests/seed-data-creation.js b/__tests__/api-tests/seed-data-creation.js index ec974aa..e869fba 100644 --- a/__tests__/api-tests/seed-data-creation.js +++ b/__tests__/api-tests/seed-data-creation.js @@ -1,5 +1,5 @@ const { v4: uuid } = require('uuid'); -const knex = require('../../server/database/knex'); +const knex = require('../../database/connection'); const stakeholderOne = Object.freeze({ id: 5000000, diff --git a/__tests__/seed-example.js b/__tests__/seed-example.js index 506a8cd..cb2190a 100644 --- a/__tests__/seed-example.js +++ b/__tests__/seed-example.js @@ -17,9 +17,9 @@ const capture = { id: 999999, }; -const captureB = { - id: 999998, -}; +// const captureB = { +// id: 999998, +// }; const token = { id: 9, @@ -36,20 +36,19 @@ const wallet = { type: 'p', }; -const storyOfThisSeed = ` - a capture: #${capture.id} - - a token: #${token.id} - capture: #${capture.id} - wallet: #${wallet.id} - uuid: ${token.uuid} +// const storyOfThisSeed = ` +// a capture: #${capture.id} - wallet #${wallet.id} connected to capture #${capture.id}, get a token #${token.id} +// a token: #${token.id} +// capture: #${capture.id} +// wallet: #${wallet.id} +// uuid: ${token.uuid} - Another capture: #${captureB.id} +// wallet #${wallet.id} connected to capture #${capture.id}, get a token #${token.id} +// Another capture: #${captureB.id} -`; +// `; // console.debug( // '--------------------------story of database ----------------------------------', // storyOfThisSeed, diff --git a/__tests__/seed-spec-example.spec.js b/__tests__/seed-spec-example.spec.js index 11baa65..cad3260 100644 --- a/__tests__/seed-spec-example.spec.js +++ b/__tests__/seed-spec-example.spec.js @@ -17,9 +17,9 @@ const capture = { id: 999999, }; -const captureB = { - id: 999998, -}; +// const captureB = { +// id: 999998, +// }; const token = { id: 9, @@ -36,20 +36,19 @@ const wallet = { type: 'p', }; -const storyOfThisSeed = ` - a capture: #${capture.id} - - a token: #${token.id} - capture: #${capture.id} - wallet: #${wallet.id} - uuid: ${token.uuid} +// const storyOfThisSeed = ` +// a capture: #${capture.id} - wallet #${wallet.id} connected to capture #${capture.id}, get a token #${token.id} +// a token: #${token.id} +// capture: #${capture.id} +// wallet: #${wallet.id} +// uuid: ${token.uuid} - Another capture: #${captureB.id} +// wallet #${wallet.id} connected to capture #${capture.id}, get a token #${token.id} +// Another capture: #${captureB.id} -`; +// `; // console.debug( // '--------------------------story of database ----------------------------------', // storyOfThisSeed, diff --git a/database/connection.js b/database/connection.js index ab165d5..5cc09b6 100644 --- a/database/connection.js +++ b/database/connection.js @@ -1,3 +1,4 @@ +/* eslint-disable import/order */ const environment = process.env.NODE_ENV || 'development'; const config = require('../knexfile')[environment]; const knex = require('knex')(config); diff --git a/knexfile.js b/knexfile.js index ce80021..550fcde 100644 --- a/knexfile.js +++ b/knexfile.js @@ -1,13 +1,11 @@ const path = require('path'); const connection = require('./config/config').connectionString; -console.log('connection', connection); - module.exports = { development: { client: 'postgresql', connection, - searchPath: [process.env.DATABASE_SCHEMA], + searchPath: [process.env.DATABASE_SCHEMA, 'public'], pool: { min: 1, max: 10, @@ -23,7 +21,7 @@ module.exports = { staging: { client: 'postgresql', connection, - searchPath: [process.env.DATABASE_SCHEMA], + searchPath: [process.env.DATABASE_SCHEMA, 'public'], pool: { min: 1, max: 10, @@ -39,7 +37,7 @@ module.exports = { production: { client: 'postgresql', connection, - searchPath: [process.env.DATABASE_SCHEMA], + searchPath: [process.env.DATABASE_SCHEMA, 'public'], pool: { min: 1, max: 10, diff --git a/server/database/knex.js b/server/database/knex.js deleted file mode 100644 index c42a599..0000000 --- a/server/database/knex.js +++ /dev/null @@ -1,26 +0,0 @@ -/* eslint-disable import/extensions */ -const expect = require('expect-runtime'); -const log = require('loglevel'); - -const connection = require('../../config/config').connectionString; - -expect(connection).to.match(/^postgresql:\//); - -const knexConfig = { - client: 'pg', - debug: process.env.NODE_LOG_LEVEL === 'debug', - connection, - pool: { min: 0, max: 100 }, -}; - -log.debug(process.env.DATABASE_SCHEMA); -if (process.env.DATABASE_SCHEMA) { - log.info('setting a schema'); - knexConfig.searchPath = [process.env.DATABASE_SCHEMA, 'public']; -} -log.debug(knexConfig.searchPath); - -// eslint-disable-next-line import/order -const knex = require('knex')(knexConfig); - -module.exports = knex; diff --git a/server/handlers/stakeholderHandler.js b/server/handlers/stakeholderHandler.js index ec9e61b..74028e7 100644 --- a/server/handlers/stakeholderHandler.js +++ b/server/handlers/stakeholderHandler.js @@ -81,7 +81,6 @@ const stakeholderGetUnlinked = async function (req, res) { Number(stakeholder_id), ); const result = await executeGetStakeholder(); - console.log('result', result.stakeholders.length); res.send(result); res.end(); }; @@ -97,21 +96,18 @@ const stakeholderUpdateLink = async function (req, res, next) { // only fields that are required to have a value const updateStakeholderSchema = Joi.object({ - id: Joi.number().required(), type: Joi.string().required(), linked: Joi.boolean().required(), }); - console.log('req.body', req.body); - try { - // const value = await updateStakeholderSchema - // .unknown(true) - // .validateAsync(req.body, { - // abortEarly: false, - // }); + const value = await updateStakeholderSchema + .unknown(true) + .validateAsync(req.body, { + abortEarly: false, + }); - const result = await executeUpdateLink(req.body); + const result = await executeUpdateLink(value); res.send(result); res.end(); @@ -123,7 +119,7 @@ const stakeholderUpdateLink = async function (req, res, next) { } }; -const stakeholderPost = async function (req, res, next) { +const stakeholderPost = async function (req, res) { const { stakeholder_id } = req.params; const session = new Session(); const stakeholderRepo = new StakeholderRepository(session); @@ -149,11 +145,10 @@ const stakeholderPost = async function (req, res, next) { }); // await session.beginTransaction(); - const { newStakeholder /*raisedEvents*/ } = await executeCreateStakeholder({ - ...value, - }); - - console.log('STAKEHOLDER ROUTER newStakeholder', value, newStakeholder); + const { newStakeholder /* raisedEvents */ } = + await executeCreateStakeholder({ + ...value, + }); // await session.commitTransaction(); // raisedEvents.forEach((domainEvent) => diff --git a/server/models/Session.js b/server/models/Session.js index f17b528..97b3eba 100644 --- a/server/models/Session.js +++ b/server/models/Session.js @@ -6,7 +6,7 @@ * */ -const knex = require('../database/knex'); +const knex = require('../../database/connection'); class Session { constructor() { diff --git a/server/models/Stakeholder.js b/server/models/Stakeholder.js index e3f4e22..6842fd2 100644 --- a/server/models/Stakeholder.js +++ b/server/models/Stakeholder.js @@ -192,7 +192,6 @@ const getAllStakeholders = async ({ filter: { where, order }, ...idFilters } = undefined, url) => { let filter = {}; filter = FilterCriteria({ ...idFilters, ...where }); - console.log('getAllStakeholders --> WHERE, FILTER ------> ', where, filter); // use default limit and offset values until there is more info on whether used & how updated let options = { limit: 100, offset: 0 }; options = { @@ -238,7 +237,6 @@ const getStakeholders = async ({ filter: { where, order }, ...idFilters } = undefined, url) => { let filter = {}; filter = FilterCriteria({ ...idFilters, ...where }); - console.log('getStakeholders --> WHERE, FILTER ------> ', where, filter); // use default limit and offset values until there is more info on whether used & how updated let options = { limit: 100, offset: 0 }; options = { @@ -314,18 +312,16 @@ const updateLinkStakeholder = ); const foundStakeholder = await stakeholderRepo.getStakeholderById( - object.id, + object.data.id, ); - // confirm stakeholder is related (it is allowed to edit) OR just that it exists (if no id provided) before updating + // confirm stakeholder exists before updating if (foundStakeholder.stakeholder.email) { const stakeholderRelation = await stakeholderRepo.updateLinkStakeholder( acctStakeholder.stakeholder.stakeholder_uuid, object, ); - console.log('updated link -------> ', stakeholderRelation); - return stakeholderRelation; } @@ -357,8 +353,6 @@ const updateStakeholder = updateObj, ); - // console.log('updated stakeholder -------> ', stakeholder); - return StakeholderTree({ ...stakeholder, children, parents }); } @@ -371,15 +365,11 @@ const createStakeholder = // const { relation = null, ...obj } = requestBody; const stakeholderObj = StakeholderPostObject({ ...requestBody }); - console.log('stakeholderObj ---->', stakeholderObj); - const stakeholder = await stakeholderRepo.createStakeholder( acctStakeholder_id, stakeholderObj, ); - console.log('created ---->', stakeholder); - // const linked = await stakeholderRepo.linkStakeholder( // acctStakeholder_id, // relation, diff --git a/server/repositories/BaseRepository.spec.js b/server/repositories/BaseRepository.spec.js index b62620e..5aa1008 100644 --- a/server/repositories/BaseRepository.spec.js +++ b/server/repositories/BaseRepository.spec.js @@ -1,7 +1,7 @@ const { expect } = require('chai'); const mockKnex = require('mock-knex'); const BaseRepository = require('./BaseRepository'); -const knex = require('../database/knex'); +const knex = require('../../database/connection'); const tracker = mockKnex.getTracker(); const Session = require('../models/Session'); @@ -201,7 +201,7 @@ describe('BaseRepository', () => { tracker.uninstall(); tracker.install(); tracker.on('query', (query) => { - console.log('sql:', query.sql); + // console.log('sql:', query.sql); expect(query.sql).match( /select.*testTable.*where.*c1.*=.*or.*c2.*=.*or.*c3.*and.*c4.*/, ) || expect(query.sql).match(/select.*.count.*entity.*/); @@ -239,7 +239,7 @@ describe('BaseRepository', () => { tracker.uninstall(); tracker.install(); tracker.on('query', (query) => { - console.log('sql:', query.sql); + // console.log('sql:', query.sql); expect(query.sql).match( /select.*testTable.*where.*c3.*=.*and.*c4.*=.*or.*c3.*and.*c4.*/, ) || expect(query.sql).match(/select.*.count.*entity.*/); diff --git a/server/repositories/StakeholderRepository.js b/server/repositories/StakeholderRepository.js index 5221522..cab55c2 100644 --- a/server/repositories/StakeholderRepository.js +++ b/server/repositories/StakeholderRepository.js @@ -74,7 +74,6 @@ class StakeholderRepository extends BaseRepository { } async getStakeholderTreeById(id, options) { - console.log('GET STAKEHOLDER BY ID', id, options); let stakeholder_uuid = null; let stakeholder_id = null; if (Number.isInteger(id)) { @@ -167,9 +166,8 @@ class StakeholderRepository extends BaseRepository { } async getFilter(filter, options) { - console.log('GET FILTER', filter, options); - const { org_name, first_name, last_name, email, phone, ...otherFilters } = - filter; + // const { org_name, first_name, last_name, email, phone, ...otherFilters } = + // filter; const results = await this._session .getDB()(this._tableName) @@ -226,8 +224,6 @@ class StakeholderRepository extends BaseRepository { stakeholder_uuid = id; } - console.log('getRelatedIds', id, stakeholder_id, stakeholder_uuid); - const relatedIds = await this._session .getDB()('stakeholder as s') .select('sr.child_id', 'sr.parent_id') @@ -250,9 +246,13 @@ class StakeholderRepository extends BaseRepository { } async getFilterById(id, filter, options) { - console.log('GET BY ID FILTER', id, filter, options); - const { org_name, first_name, last_name, email, phone, ...otherFilters } = - filter; + // const { + // org_name, + // first_name, + // last_name, + // email, + // phone, ...otherFilters, + // } = filter; const relatedIds = await this.getRelatedIds(id); // const searchFields = Object.entries({ @@ -264,7 +264,7 @@ class StakeholderRepository extends BaseRepository { // }); // console.log('filter cols -------->', searchFields); - console.log('other filters -------->', otherFilters); + // console.log('other filters -------->', otherFilters); // const searchString = searchFields // .reduce((acc, [key, value]) => { @@ -294,8 +294,6 @@ class StakeholderRepository extends BaseRepository { .limit(options.limit) .offset(options.offset); - console.log('stakeholders -------->', stakeholders); - const count = await this._session .getDB()(this._tableName) .count('*') @@ -349,24 +347,18 @@ class StakeholderRepository extends BaseRepository { const stakeholders = await this._session .getDB()(this._tableName) .select('*') - // .whereNotIn('id', ids) .whereNotIn('stakeholder_uuid', ids) .orderBy('org_name', 'asc'); - // console.log('unlinked stakeholders', stakeholders.length); - const count = await this._session .getDB()(this._tableName) .count('*') - // .whereNotIn('id', ids) .whereNotIn('stakeholder_uuid', ids); return { stakeholders, count: +count[0].count }; } async updateLinkStakeholder(stakeholder_id, { type, linked, data }) { - console.log('updateLinkStakeholder', stakeholder_id, type, linked, data); - let linkedStakeholders; if (linked) { @@ -374,27 +366,19 @@ class StakeholderRepository extends BaseRepository { const insertObj = {}; if (type === 'parents' || type === 'children') { - // eslint-disable-next-line no-param-reassign insertObj.parent_id = type === 'parents' ? data.stakeholder_uuid : stakeholder_id; - // eslint-disable-next-line no-param-reassign insertObj.child_id = type === 'children' ? data.stakeholder_uuid : stakeholder_id; } - // // eslint-disable-next-line no-param-reassign // insertObj.grower_id = type === 'growers' ? id : null; - // // eslint-disable-next-line no-param-reassign // insertObj.user_id = type === 'users' ? id : null; - console.log('insertObj', insertObj); - linkedStakeholders = await this._session .getDB()('stakeholder_relations') .insert(insertObj) .returning('*'); - console.log('linked', linkedStakeholders); - // expect(linked).match([ // { // id: expect.uuid(), @@ -405,21 +389,18 @@ class StakeholderRepository extends BaseRepository { const removeObj = {}; if (type === 'parents' || type === 'children') { - // eslint-disable-next-line no-param-reassign - removeObj.parent_id = type === 'parents' ? id : stakeholder_id; - // eslint-disable-next-line no-param-reassign - removeObj.child_id = type === 'children' ? id : stakeholder_id; + removeObj.parent_id = + type === 'parents' ? data.stakeholder_uuid : stakeholder_id; + removeObj.child_id = + type === 'children' ? data.stakeholder_uuid : stakeholder_id; } - console.log('removeObj', removeObj); - linkedStakeholders = await this._session .getDB()('stakeholder_relations') - .delete(removeObj) + .where(removeObj) + .del() .returning('*'); - console.log('linked', linkedStakeholders); - // expect(linked).match([ // { // id: expect.uuid(), diff --git a/server/repositories/StakeholderRepository.spec.js b/server/repositories/StakeholderRepository.spec.js index 1869e4d..46f9d86 100644 --- a/server/repositories/StakeholderRepository.spec.js +++ b/server/repositories/StakeholderRepository.spec.js @@ -1,7 +1,7 @@ const { expect } = require('chai'); const mockKnex = require('mock-knex'); const StakeholderRepository = require('./StakeholderRepository'); -const knex = require('../database/knex'); +const knex = require('../../database/connection'); const tracker = mockKnex.getTracker(); const Session = require('../models/Session'); diff --git a/server/server.js b/server/server.js index c27a50a..0dca242 100644 --- a/server/server.js +++ b/server/server.js @@ -4,6 +4,7 @@ const log = require('loglevel'); require('./setup'); const app = require('./app'); const knex = require('../database/connection'); + const PORT = process.env.NODE_PORT || 3006; knex.migrate diff --git a/server/utils/utils.js b/server/utils/utils.js index 8bffc27..bb19a27 100644 --- a/server/utils/utils.js +++ b/server/utils/utils.js @@ -2,11 +2,11 @@ * Some utils for router/express */ const log = require('loglevel'); +const { ValidationError } = require('joi'); const HttpError = require('./HttpError'); // const ApiKeyService = require("../services/ApiKeyService"); // const JWTService = require('../services/JWTService.js'); -const { ValidationError } = require('joi'); -const Session = require('../models/Session'); +// const Session = require('../models/Session'); /* * This is from the library https://github.com/Abazhenov/express-async-handler @@ -32,7 +32,7 @@ exports.handlerWrapper = (fn) => }); }; -exports.errorHandler = (err, req, res, next) => { +exports.errorHandler = (err, req, res) => { log.debug('catch error:', err); if (err instanceof HttpError) { res.status(err.code).send({ @@ -52,20 +52,20 @@ exports.errorHandler = (err, req, res, next) => { } }; -exports.apiKeyHandler = exports.handlerWrapper(async (req, res, next) => { - const session = new Session(); - const apiKey = new ApiKeyService(session); - await apiKey.check(req.headers['treetracker-api-key']); - log.debug('Valid Access'); - next(); -}); +// exports.apiKeyHandler = exports.handlerWrapper(async (req, res, next) => { +// const session = new Session(); +// const apiKey = new ApiKeyService(session); +// await apiKey.check(req.headers['treetracker-api-key']); +// log.debug('Valid Access'); +// next(); +// }); -exports.verifyJWTHandler = exports.handlerWrapper(async (req, res, next) => { - const jwtService = new JWTService(); - const decode = jwtService.verify(req.headers.authorization); - res.locals.wallet_id = decode.id; - next(); -}); +// exports.verifyJWTHandler = exports.handlerWrapper(async (req, res, next) => { +// const jwtService = new JWTService(); +// const decode = jwtService.verify(req.headers.authorization); +// res.locals.wallet_id = decode.id; +// next(); +// }); exports.camelToSnakeCase = (str) => str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`); diff --git a/src/db/migrations/20211119035542_createStakeholder.js b/src/db/migrations/20211119035542_createStakeholder.js deleted file mode 100644 index 99dc14f..0000000 --- a/src/db/migrations/20211119035542_createStakeholder.js +++ /dev/null @@ -1,8 +0,0 @@ - -exports.up = function(knex) { - -}; - -exports.down = function(knex) { - -};