Skip to content

Sequelize – Creating

Bartosz Łaniewski edited this page May 11, 2018 · 1 revision
// @flow
import type Sequelize, {DataTypes, Model} from "sequelize";

// Fields exposed by each user record:
export type UserRecord = Model<{
  id: number,
  username: string,
  password: string,
  createdAt: number,
  updatedAt: number,
  deletedAt: number
}>;

// User model created on import:
export type UserModel = Class<UserRecord>;

/**
 * Creates and configures a new model. Can be loaded with `.import()`.
 *
 * @param   {Sequelize}   database
 * @param   {DataTypes}   DataTypes
 * @return  {UserModel}
 */
export default (database: Sequelize, DataTypes: DataTypes) => {
  const User = database.define("user", {
    username: { type: DataTypes.STRING },
    password: { type: DataTypes.STRING }
  });

  // $FlowFixMe
  User.associate = ({ModelA, ModelB, ModelC}) => {
    User.hasMany(ModelA);
    User.hasMany(ModelB);
    User.belongsToMany(ModelC);
  };

  User.hook("beforeCreate", (user, options) => {
    // …
  });

  User.hook("afterCreate", (user, options) => {
    // …
  });

  return User;
};