Load smart fields using hook
Last updated
Last updated
function calculateNumberOfWeek({ startDate, finishDate }) {
const diff = startDate - finishDate;
const diffInWeeks = (diff / (1000 * 60 * 60 * 24 * 7));
return Math.abs(Math.round(diffInWeeks));
}
module.exports = (sequelize, DataTypes) => {
const { Sequelize } = sequelize;
const Programs = sequelize.define('programs', {
startDate: {
type: DataTypes.DATE,
},
finishDate: {
type: DataTypes.DATE,
},
description: {
type: DataTypes.STRING,
},
}, {
tableName: 'programs',
underscored: true,
timestamps: false,
schema: process.env.DATABASE_SCHEMA,
hooks: {
afterFind: async (programs) => {
// Check if several records have been fetched or a single one
const isFindOne = !programs.length;
if (isFindOne) { programs = [programs]; }
const recordsIds = programs.map(record => record.id);
const activities = await sequelize.models.activities.findAll({
where: { programIdKey: recordsIds },
});
programs.forEach((program) => {
program.duration = calculateNumberOfWeek(program);
program.hasActivity = activities.some(activity => activity.programIdKey === program.id);
});
return isFindOne ? programs[0] : programs;
},
},
});const { collection } = require('forest-express-sequelize');
collection('programs', {
actions: [],
fields: [
{
field: 'duration',
type: 'Number',
}, {
field: 'hasActivity',
type: 'Boolean',
}
],
segments: [],
});