Задать вопрос
@vladislav3101

Правильно ли использовать такой код (логику) в repository pattern?

Я только изучаю данный паттерн, и как понял репозиторий не имеет какой либо бизнес логики, просто берет и отдает данные.
Где-то писали, что не нужно за ранее придумывать решения, а писать по факту их надобности. То есть нужно мне в сервисе выполнить запрос на поиск пользователя по логину и телефону значит создаю функцию getWithPhoneAndLogin (ну что то такое), но когда запросов становится очень много и с более большими критериями все эти мелкие функций теряют смысл.
Я подумал, а что если сделать универсальную функцию для поиска по критериям, если вдруг добавится столбец, я изменю всего лишь 1 функцию и она расширит свои возможности. И так, правильно ли я сделал или же это плохо и в будущем могут появиться проблемы или логичнее реализовать по другому?
UserRepository.js:
const { User } = require('../models'); // Sequelize schema model

exports.findOne = async ({id, phone, email, login}) {
  const columns = [];
  if (id) {
     columns.push({id});
  }

  if (phone) {
    columns.push({phone});
  }

  if (email) {
    columns.push({email});
  }

  if (login) {
    columns.push({login});
  }

  const user = await User.findOne({where: {
    $or: columns,
  }})

 return user;
}
  • Вопрос задан
  • 127 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
notiv-nt
@notiv-nt
Как ваше ничего? Да, моё тоже
не?

exports.findOne = async (columnsObject) => {
  const columns = [];

  Object.entries(columnsObject).forEach(([key, value]) => {
    columns.push({ [key]: value });
  });

  const user = await User.findOne({
    where: {
      $or: columns,
    },
  });

  return user;
};


Вообще, репозиторий это абстракция над данными, по сути просто набор функций для доступа и манипуляции данными
Ответ написан
@vladislav3101 Автор вопроса
И так изучив данный паттерн немного "глубже", и как расписал мне Михаил. Нужно данную логику вынести в сервис, а репозиторий в свою очередь уже примет готовый объект со всеми корректными критериями. И конечно же наименование метода findOne считается некорректным для репозитория. Имхо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы