From 7587821927d6a488bff285ea7a1865b79467ec5a Mon Sep 17 00:00:00 2001 From: kolaente Date: Tue, 14 Apr 2020 22:46:27 +0200 Subject: [PATCH] Move conversion of snake_case to camelCase to model to make recursive models still work --- src/helpers/case.js | 28 +++++++++++++++++++++++ src/models/abstractModel.js | 4 ++++ src/models/task.js | 2 +- src/services/abstractService.js | 40 ++++----------------------------- 4 files changed, 37 insertions(+), 37 deletions(-) create mode 100644 src/helpers/case.js diff --git a/src/helpers/case.js b/src/helpers/case.js new file mode 100644 index 000000000..88faac5ca --- /dev/null +++ b/src/helpers/case.js @@ -0,0 +1,28 @@ +import {camelCase} from 'camel-case' +import {snakeCase} from 'snake-case' + +/** + * Transforms field names to camel case. + * @param object + * @returns {*} + */ +export function objectToCamelCase(object) { + let parsedObject = {} + for (const m in object) { + parsedObject[camelCase(m)] = object[m] + } + return parsedObject +} + +/** + * Transforms field names to snake case - used before making an api request. + * @param object + * @returns {*} + */ +export function objectToSnakeCase(object) { + let parsedObject = {} + for (const m in object) { + parsedObject[snakeCase(m)] = object[m] + } + return parsedObject +} diff --git a/src/models/abstractModel.js b/src/models/abstractModel.js index 08f8d9ceb..279f66831 100644 --- a/src/models/abstractModel.js +++ b/src/models/abstractModel.js @@ -1,4 +1,5 @@ import {defaults, omitBy, isNil} from 'lodash' +import {objectToCamelCase} from '../helpers/case' export default class AbstractModel { @@ -7,6 +8,9 @@ export default class AbstractModel { * @param data */ constructor(data) { + + data = objectToCamelCase(data) + // Put all data in our model while overriding those with a value of null or undefined with their defaults defaults(this, omitBy(data, isNil), this.defaults()) } diff --git a/src/models/task.js b/src/models/task.js index 4c2533e8f..ea99e1403 100644 --- a/src/models/task.js +++ b/src/models/task.js @@ -10,7 +10,7 @@ export default class TaskModel extends AbstractModel { this.id = Number(this.id) this.listId = Number(this.listId) - + // Make date objects from timestamps this.dueDate = this.dueDate ? new Date(this.dueDate) : null this.startDate = this.startDate ? new Date(this.startDate) : null diff --git a/src/services/abstractService.js b/src/services/abstractService.js index ebdcab6ba..d531c605c 100644 --- a/src/services/abstractService.js +++ b/src/services/abstractService.js @@ -1,7 +1,6 @@ import axios from 'axios' import {reduce, replace} from 'lodash' -import {camelCase} from 'camel-case' -import {snakeCase} from 'snake-case' +import { objectToSnakeCase } from '../helpers/case' let config = require('../../public/config.json') @@ -48,19 +47,19 @@ export default class AbstractService { if (this.useUpdateInterceptor()) { config.data = self.beforeUpdate(config.data) } - config.data = JSON.stringify(this.modelToSnakeCase(config.data)) + config.data = JSON.stringify(objectToSnakeCase(config.data)) break case 'put': if (this.useCreateInterceptor()) { config.data = self.beforeCreate(config.data) } - config.data = JSON.stringify(this.modelToSnakeCase(config.data)) + config.data = JSON.stringify(objectToSnakeCase(config.data)) break case 'delete': if (this.useDeleteInterceptor()) { config.data = self.beforeDelete(config.data) } - config.data = JSON.stringify(this.modelToSnakeCase(config.data)) + config.data = JSON.stringify(objectToSnakeCase(config.data)) break } return config @@ -239,32 +238,6 @@ export default class AbstractService { // Preprocessors //////////// - /** - * Transforms field names to camel case. - * @param model - * @returns {*} - */ - modelToCamelCase(model) { - let parsedModel = {} - for (const m in model) { - parsedModel[camelCase(m)] = model[m] - } - return parsedModel - } - - /** - * Transforms field names to snake case - used before making an api request. - * @param model - * @returns {*} - */ - modelToSnakeCase(model) { - let parsedModel = {} - for (const m in model) { - parsedModel[snakeCase(m)] = model[m] - } - return parsedModel - } - /** * Default preprocessor for get requests * @param model @@ -338,7 +311,6 @@ export default class AbstractService { return this.errorHandler(error) }) .then(response => { - response.data = this.modelToCamelCase(response.data) return Promise.resolve(this.modelGetFactory(response.data)) }) .finally(() => { @@ -381,7 +353,6 @@ export default class AbstractService { if (response.data === null) { return Promise.resolve([]) } - response.data = this.modelToCamelCase(response.data) return Promise.resolve(this.modelGetAllFactory(response.data)) }) .finally(() => { @@ -407,7 +378,6 @@ export default class AbstractService { return this.errorHandler(error) }) .then(response => { - response.data = this.modelToCamelCase(response.data) return Promise.resolve(this.modelCreateFactory(response.data)) }) .finally(() => { @@ -433,7 +403,6 @@ export default class AbstractService { return this.errorHandler(error) }) .then(response => { - response.data = this.modelToCamelCase(response.data) return Promise.resolve(this.modelUpdateFactory(response.data)) }) .finally(() => { @@ -459,7 +428,6 @@ export default class AbstractService { return this.errorHandler(error) }) .then(response => { - response.data = this.modelToCamelCase(response.data) return Promise.resolve(response.data) }) .finally(() => {