text: const fs = require('fs-extra');
  const yapi = require('./yapi.js');
  const commons = require('./utils/commons');
  const dbModule = require('./utils/db.js');
  const userModel = require('./models/user.js');
  const mongoose = require('mongoose');
  
  yapi.commons = commons;
  yapi.connect = dbModule.connect();
  
  function install() {
    let exist = yapi.commons.fileExist(yapi.path.join(yapi.WEBROOT_RUNTIME, 'init.lock'));
  
    if (exist) {
      throw new Error(
        'init.lock文件已存在，请确认您是否已安装。如果需要重新安装，请删掉init.lock文件'
      );
    }
  
    setupSql();
  }
  
  function setupSql() {
    let userInst = yapi.getInst(userModel);
    let passsalt = yapi.commons.randStr();
    let result = userInst.save({
      username: yapi.WEBCONFIG.adminAccount.substr(0, yapi.WEBCONFIG.adminAccount.indexOf('@')),
      email: yapi.WEBCONFIG.adminAccount,
      password: yapi.commons.generatePassword('123456', passsalt),
      passsalt: passsalt,
      role: 'admin',
      add_time: yapi.commons.time(),
      up_time: yapi.commons.time()
    });
  
    yapi.connect
      .then(function() {
        let userCol = mongoose.connection.db.collection('user');
        userCol.createIndex({
          username: 1
        });
        userCol.createIndex(
          {
            email: 1
          },
          {
            unique: true
          }
        );
  
        let projectCol = mongoose.connection.db.collection('project');
        projectCol.createIndex({
          uid: 1
        });
        projectCol.createIndex({
          name: 1
        });
        projectCol.createIndex({
          group_id: 1
        });
  
        let logCol = mongoose.connection.db.collection('log');
        logCol.createIndex({
          uid: 1
        });
  
        logCol.createIndex({
          typeid: 1,
          type: 1
        });
  
        let interfaceColCol = mongoose.connection.db.collection('interface_col');
        interfaceColCol.createIndex({
          uid: 1
        });
        interfaceColCol.createIndex({
          project_id: 1
        });
  
        let interfaceCatCol = mongoose.connection.db.collection('interface_cat');
        interfaceCatCol.createIndex({
          uid: 1
        });
        interfaceCatCol.createIndex({
          project_id: 1
        });
  
        let interfaceCaseCol = mongoose.connection.db.collection('interface_case');
        interfaceCaseCol.createIndex({
          uid: 1
        });
        interfaceCaseCol.createIndex({
          col_id: 1
        });
        interfaceCaseCol.createIndex({
          project_id: 1
        });
  
        let interfaceCol = mongoose.connection.db.collection('interface');
        interfaceCol.createIndex({
          uid: 1
        });
        interfaceCol.createIndex({
          path: 1,
          method: 1
        });
        interfaceCol.createIndex({
          project_id: 1
        });
  
        let groupCol = mongoose.connection.db.collection('group');
        groupCol.createIndex({
          uid: 1
        });
        groupCol.createIndex({
          group_name: 1
        });
  
        let avatarCol = mongoose.connection.db.collection('avatar');
        avatarCol.createIndex({
          uid: 1
        });
  
        let tokenCol = mongoose.connection.db.collection('token');
        tokenCol.createIndex({
          project_id: 1
        });
  
        let followCol = mongoose.connection.db.collection('follow');
        followCol.createIndex({
          uid: 1
        });
        followCol.createIndex({
          project_id: 1
        });
  
        result.then(
          function() {
            fs.ensureFileSync(yapi.path.join(yapi.WEBROOT_RUNTIME, 'init.lock'));
            console.log(
              `初始化管理员账号成功,账号名："${yapi.WEBCONFIG.adminAccount}"，密码："123456"`
            ); // eslint-disable-line
            process.exit(0);
          },
          function(err) {
            throw new Error(`初始化管理员账号 "${yapi.WEBCONFIG.adminAccount}" 失败, ${err.message}`); // eslint-disable-line
          }
        );
      })
      .catch(function(err) {
        throw new Error(err.message);
      });
  }
  
  install();
  