Source: common/BaseModel.js

'use strict';

const Sequelize = require('sequelize');

// const { STRING, INTEGER, DATE, BOOLEAN, TEXT } = Sequelize;

/**
 * @class BaseModel
 * BaseModel 项目的基础Model
 */
class BaseModel extends Sequelize.Model {
  /**
   * 输出错误
   * @param  {String} msg 错误描述
   * @return {Error} error
   */
  static errorModelNotFound(msg = 'Error Model', code = 'MODEL_ERROR') {
    const error = new Error(msg);
    error.statusCode = 404;
    error.code = code;
    return error;
  }

  /**
   * 查找一个实例, 未找到则报错
   * @param {object} filter 过滤对象
   * @return {object} 实例对象
   * @throws {Error} 未找到相关数据的报错信息
   */
  static async findOneOrThrow(filter) {
    const CurrentModel = this;
    const instance = await CurrentModel.findOne(filter);
    if (!instance) {
      throw BaseModel.errorModelNotFound('Not found Model', 'MODEL_NOT_FOUND');
    }
    return instance;
  }

  /**
   * 通过id查找一个实例, 未找到则报错
   * @param {object} filter 过滤对象
   * @return {object} 实例对象
   * @throws {Error} 未找到相关数据的报错信息
   */
  static async findByPkOrThrow(id) {
    const CurrentModel = this;
    return CurrentModel.findOneOrThrow({ where: { id } });
  }
}

module.exports = BaseModel;