
// <%= serviceName %>-model.<%- js %> - A Sequelize model for user entity. (Can be re-generated.)
<%- tplTsOnly([`import { App } from '../${subFolderReverse}app.interface'${sc}`, '']) -%>
//
// See http://docs.sequelizejs.com/en/latest/docs/models-definition/
// for more of what you can do here.
<%- tplTsOnly([`import { Sequelize } from 'sequelize'${sc}`, '']) -%>
<%- tplImports('merge', 'lodash.merge') %>
<%- insertFragment('sequelize_schema', [
  tplImports('sequelizeSchema', `../${subFolderReverse}services/${subFolder}${kebabName}/${kebabName}.sequelize`),
]) %>
<%- insertFragment('sequelize_imports') %>
<%- insertFragment('sequelize_init') %>

<%- tplModuleExports(null, 'function (app) {', 'function (app: App) {') %>
  let sequelizeClient = app.get('sequelizeClient')<%- tplTsOnly(' as Sequelize') %><%- sc %>
  <%- insertFragment('sequelize_func_init') %>

  const <%= camelName %> = sequelizeClient.define('<%= snakeName %>',
    <%- insertFragment('sequelize_model', ['    sequelizeSchema,']) %>
    merge(
      <%- insertFragment('sequelize_options', [
        '      {',
        '        hooks: {',
        `          beforeCount(options${tplTsOnly(': any')}) {`,
        `            options.raw = true${sc}`,
        '          },',
        `        }${tplTsOnly(' as any')},`,
        '      },'
      ]) %>
      <%- insertFragment('sequelize_define') %>
    )
  )<%- sc %>

  // <%- lintDisableNextLineUnused %>
  <%= camelName %>.associate = function (models) {
    // Define associations here for foreign keys
    //   <%- sequelizeFks.length ? `- ${sequelizeFks}` : '- No foreign keys defined.' %>
    // See http://docs.sequelizejs.com/en/latest/docs/associations/
    <%- insertFragment('sequelize_associations') %>
  }<%- sc %>

  <%- insertFragment('sequelize_func_return') %>
  return <%= camelName %><%- sc %>
}<%- sc %>
<%- insertFragment('sequelize_more') %>

<%- insertFragment('sequelize_exports') %>
<%- `${tplExport('moduleExports')}${sc}` %>

<%- insertFragment('sequelize_funcs') %>
<%- insertFragment('sequelize_end') %>
