HEX
Server: nginx/1.24.0
System: Linux nowruzgan 6.8.0-57-generic #59-Ubuntu SMP PREEMPT_DYNAMIC Sat Mar 15 17:40:59 UTC 2025 x86_64
User: babak (1000)
PHP: 8.3.6
Disabled: NONE
Upload Files
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();
  }),
}