File: /var/dev/nowruzgan/rest/api/models/KetabkhanehCollection.js
var parley = require('parley');
module.exports = {
tableName: 'ketabkhaneh_collection',
attributes: {
id: { type: 'number', autoIncrement: true, },
title: {
type: 'string',
allowNull: true
},
titleEn: {
columnName: 'title_en',
type: 'string',
allowNull: true
},
slug: {
type: 'string',
allowNull: true
},
desc: {
type: 'string',
allowNull: true
},
descEn: {
columnName: 'desc_en',
type: 'string',
allowNull: true
},
order: {
type: 'number'
},
state: {
type: 'string',
defaultsTo: 'draft',
isIn: ['draft', 'published', 'inactive']
},
properties: {
collection: 'KetabkhanehCollectionProperty',
via: 'collection'
},
createdAt: { type: 'ref', columnName: 'created_at', columnType: 'timestamp', autoCreatedAt: true, },
updatedAt: { type: 'ref', columnName: 'updated_at', columnType: 'timestamp', autoUpdatedAt: true, },
},
setProperties: collection => parley(async done => {
if(!collection.properties){
let props = await KetabkhanehCollectionProperty.find({collection: collection.id}).catch(error => error);
if(props instanceof Error) return done(error);
collection.properties = props;
}
let props = {};
(collection.properties || [])
.sort((a, b) => a.order - b.order)
.forEach(prop => {
try {
if(prop.valueNo !== null) prop.value = parseFloat(prop.valueNo);
else if(prop.valueJSON !== null) prop.value = JSON.parse(prop.valueJSON);
else prop.value = prop.valueStr;
}catch(e) {
prop.value = null;
}
if(!props.hasOwnProperty(prop.key))
props[prop.key] = prop.value;
else{
if(Array.isArray(props[prop.key]))
props[prop.key].push(prop.value);
else
props[prop.key] = [props[prop.key], prop.value];
}
});
collection.properties = props;
return done();
}),
}