'Append data to an object upon Sequelize Model Fetch

I have a service function to get users from my MySQL database using Sequelize ORM and i would to like to append fullName to the Users.

 const filterUsers = async ([...users]:IUsers[]) => {
      let searchAttributes = {};
      if (users) { searchAttributes = { [Op.or]: users }; }
      const filteredUsers = await User.findAll({
        raw: true,
        nest: true,
        where: {  ...searchAttributes },
        include: [{
          model: Club,
          as: 'homeClub',
        }, {
          model: Club,
          as: 'awayClub',
        }] });
      return filteredUsers as unknown as IUsersWithTeams[];
    };

FilteredUsers response:

  filteredUsers = 
    [
{
id: 1
name: 'John',
LastName: 'Mayer',
homeClub: 'Barcelona',
awayClub: 'Real Madrid',
},
{
id: 2,
name: 'Adam',
LastName: 'Smith',
homeClub: 'PSG',
awayClub: 'Milan',

},
]

What i would like to receive:

const expectedUserResponse =  [
{
    id: 1
    name: 'John',
    LastName: 'Mayer',
    FullName: 'John Mayer',
    homeClub: 'Barcelona',
    awayClub: 'Real Madrid',
    },
    {
    id: 2,
    name: 'Adam',
    LastName: 'Smith',
    FullName: 'Adam Smith',
    homeClub: 'PSG',
    awayClub: 'Milan',
     },
    ]

How can i do that ? Thank you very much if you can help me ;)



Solution 1:[1]

You need to use a virtual field, see documentation and my other answer to the similar question. It seems the official documentation has the example that perfectly fits your request:

const { DataTypes } = require('@sequelize/core');

const User = sequelize.define('user', {
  firstName: DataTypes.TEXT,
  lastName: DataTypes.TEXT,
  fullName: {
    type: DataTypes.VIRTUAL,
    get() {
      return `${this.firstName} ${this.lastName}`;
    },
    set(value) {
      throw new Error('Do not try to set the `fullName` value!');
    }
  }
});

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Anatoly