All files / controllers beetranslate.js

100% Statements 27/27
100% Branches 14/14
100% Functions 4/4
100% Lines 27/27

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105                          7x 7x 7x     6x   6x   6x 2x     6x   6x       6x   5x 5x       5x 1x           4x 1x                       1x 1x                 6x 2x     6x 2x               4x               6x       1x         1x 1x        
import moment from 'moment-timezone';
 
import { sequelize } from '../../config/database';
import APIError from '../helpers/error';
import BeetranslateInformation from '../services/beetranslate/information';
import I18nCreate from '../source/i18n/create';
import I18nInformation from '../source/i18n/information';
import I18nUpdate from '../source/i18n/update';
import SettingsCreate from '../source/settings/create';
import SettingsInformation from '../source/settings/information';
import SettingsUpdate from '../source/settings/update';
 
async function getTranslations() {
  try {
    await sequelize.transaction(async (transaction) => {
      let updatedAt = await SettingsInformation.getSettingCode(
        'lastUpdatedTranslate'
      );
      const isNew = updatedAt === undefined;
 
      const newUpdatedAt = moment().format();
 
      if (!updatedAt) {
        updatedAt = await I18nInformation.getLastDateUpdatedI18n();
      }
 
      let translate = [];
 
      const beeTranslates = await BeetranslateInformation.fetchTranslates(
        updatedAt || ''
      );
 
      if (updatedAt) {
        // eslint-disable-next-line no-restricted-syntax
        for (const beetranslate of beeTranslates) {
          const exists = await I18nInformation.getI18n({
            key: beetranslate.keyword,
          });
 
          if (!exists) {
            translate.push({
              key: beetranslate.keyword,
              ptBr: beetranslate.ptbr,
              enUs: beetranslate.enus,
              esCh: beetranslate.esch,
            });
          } else if (!exists.fixed) {
            await I18nUpdate.updateI18n(
              beetranslate.keyword,
              {
                ptBr: beetranslate.ptbr,
                enUs: beetranslate.enus,
                esCh: beetranslate.esch,
              },
              { transaction }
            );
          }
        }
      } else {
        translate = beeTranslates.map((beetranslate) => {
          return {
            key: beetranslate.keyword,
            ptBr: beetranslate.ptbr,
            enUs: beetranslate.enus,
            esCh: beetranslate.esch,
          };
        });
      }
 
      if (translate.length > 0) {
        await I18nCreate.createI18ns(translate, { transaction });
      }
 
      if (isNew) {
        await SettingsCreate.createSettings(
          {
            code: 'lastUpdatedTranslate',
            value: newUpdatedAt,
          },
          { transaction }
        );
      } else {
        await SettingsUpdate.updateSetting(
          { code: 'lastUpdatedTranslate' },
          { value: newUpdatedAt },
          { transaction }
        );
      }
    });
 
    return {
      success: true,
    };
  } catch (err) {
    throw new APIError('', err);
  }
}
 
async function updateTranslate(req, res) {
  const data = await getTranslations();
  return res.json(data);
}
 
export default { updateTranslate, getTranslations };