|
1 | 1 | const _ = require("lodash"); |
| 2 | +const pluralize = require('pluralize'); |
2 | 3 | const JSONAPISerializer = require('json-api-serializer'); |
3 | 4 | const jsonApiValidator = require('../../context-aware-jsonapi-validator/validator'); |
4 | 5 | const Serializer = new JSONAPISerializer(); |
@@ -39,6 +40,22 @@ module.exports = { |
39 | 40 | return caseSetting; |
40 | 41 | }, |
41 | 42 |
|
| 43 | + /* |
| 44 | + * Method to get an sails Model from a model's name |
| 45 | + * |
| 46 | + * @method _getModelObjectFromModelName |
| 47 | + * @param {string} model name |
| 48 | + * @return {object} sails model |
| 49 | + */ |
| 50 | + _getModelObjectFromModelName: function(modelName) { |
| 51 | + |
| 52 | + modelName = _.camelCase(modelName); // Model variable name are always in one word with no seprator |
| 53 | + modelName = pluralize.singular(modelName); // Model variable name are always singular |
| 54 | + modelName = _.upperFirst(modelName); // Model variable name always have their first letter capitalize |
| 55 | + |
| 56 | + return global[modelName]; |
| 57 | + }, |
| 58 | + |
42 | 59 | // Code inspired from the MIT licenced module https://github.com/danivek/json-api-serializer |
43 | 60 | _convertCase: function(data, convertCaseOptions) { |
44 | 61 |
|
@@ -84,9 +101,18 @@ module.exports = { |
84 | 101 |
|
85 | 102 | serialize: function(modelName, data) { |
86 | 103 |
|
| 104 | + let Model = this._getModelObjectFromModelName(modelName); |
| 105 | + let id = 'id'; |
| 106 | + |
| 107 | + if (Model) { |
| 108 | + id = Model.primaryKey; |
| 109 | + } else { |
| 110 | + sails.log.warn('Model ' + modelName + ' could not be found by sails-json-api-blueprints'); |
| 111 | + } |
| 112 | + |
87 | 113 | Serializer.register(modelName, { |
88 | 114 | convertCase: this.getAttributesSerializedCaseSetting(), |
89 | | - id: 'id' |
| 115 | + id: id |
90 | 116 | }); |
91 | 117 |
|
92 | 118 | var returnedValue = Serializer.serialize(modelName, data); |
|
0 commit comments