All files / controllers usersFilters.js

100% Statements 28/28
100% Branches 10/10
100% Functions 3/3
100% Lines 28/28

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 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121                1x     2x 2x   2x 2x                                             1x       1x     1x 1x     1x         2x 2x   2x           2x 1x   1x   1x         1x       3x 3x   3x           3x 1x 2x 1x               1x                   2x         2x                
import Sequelize from 'sequelize';
 
import UsersFiltersInformation from '../source/usersFilters/information';
import UsersFiltersUpdate from '../source/usersFilters/update';
import UsersFiltersCreate from '../source/usersFilters/create';
import UsersFiltersDelete from '../source/usersFilters/delete';
import APIError from '../helpers/error';
 
const { Op } = Sequelize;
 
async function getReportUserFilters(req, res) {
  const { userId } = req;
  const { route } = req.query;
 
  try {
    const userFilters = await UsersFiltersInformation.getOptionsUsersFilters(
      {
        [Op.and]: [
          { route },
          { type: 'report' },
          {
            [Op.or]: [
              {
                userId,
              },
              {
                [Op.and]: [
                  { userId: { [Op.ne]: userId } },
                  { permission: 'public' },
                ],
              },
            ],
          },
        ],
      },
      userId
    );
 
    const response = {
      success: true,
      data: userFilters,
    };
    res.json(response);
  } catch (err) {
    // eslint-disable-next-line no-console
    console.log(err);
    const response = {
      success: false,
    };
    res.json(response);
  }
}
 
async function removeFilterDefault(req, res) {
  const { userId } = req;
  const { filterName, route } = req.body;
 
  const filterValue = await UsersFiltersInformation.getFilter({
    type: 'report',
    filterName,
    route,
    userId,
  });
  if (filterValue) {
    await UsersFiltersDelete.deleteUsersFilters(filterValue.id);
  } else {
    throw new APIError('UNKNOWN_ERROR');
  }
  const response = {
    success: true,
    data: true,
  };
 
  res.json(response);
}
 
async function saveOrCreateFilterDefault(req, res) {
  const { userId } = req;
  const { filterName, permission, route, filter } = req.body;
 
  const filterValue = await UsersFiltersInformation.getFilter({
    type: 'report',
    filterName,
    route,
  });
 
  if (filterValue && filterValue.userId !== userId) {
    throw new APIError('FILTER_EXISTS');
  } else if (filterValue && filterValue.userId === userId) {
    await UsersFiltersUpdate.updateUsersFilters(filterValue.id, {
      type: 'report',
      permission,
      route,
      filterName,
      filter,
    });
  } else {
    await UsersFiltersCreate.createUserFilter({
      type: 'report',
      userId,
      permission,
      route,
      filterName,
      filter,
    });
  }
 
  const response = {
    success: true,
    data: true,
  };
 
  res.json(response);
}
 
export default {
  getReportUserFilters,
  saveOrCreateFilterDefault,
  removeFilterDefault,
};