Если писать методы в таком стиле это не нарушает паттерн "Repository"?

В своем проекте я разделяю бизнес логику и обращение к бд на 3 слоя:

  • Сервисы (Бизнес логика);
  • Репозиторий (Они максимально тупые и кроме того как передать данные модели и отдать данные сервису через маппинг ничего не умеют);
  • Модель (Сущность описанная через ORM); Использую ORM Sequelize

user.service.js

const findById = async (id) => {
   if (!id) throw Error('Id не передан');

   const user = await UserRepo.findById(id);
 
   if (!user) throw Error('User не найден');

   return user;
}

user.repository.js

const findById = (id) => User.findByPk(id);

И тут появилась задача, когда мне нужно одним запросом проверить по email, login. Если я создам вот такой метод это будет некорректным решением в плане принципа паттерна Repository?:
user.service.js

const findByParams = async (condition) => {
  if (!condition) throw Error('condition не передан');

  const user = await UserRepo.findByParams(condition);

   if (!user) throw Error('User не найден');

   return user;
}

user.repository.js

const findById = (id) => User.findByPk(id);
const findByParams = (condition) => User.findOne(condition);

index.js

// Например
const user = await UserService.findByParams({where: {login, email } });

Или стоит лучше создать вот такой метод?:

// user.service.js
const findByLoginAndEmail = async (login, email) => {
   if (!login) throw Error('Логин не передан');
   if (!email) throw Error('Email не передан');

   const user = await UserRepo.findByLoginAndEmail(login, email);

   if (!user) throw Error('User не найден');

   return user;
}

// user.repository.js
const findByLoginAndEmail = (login, email) => User.findOne({ where: { login, email } });

Есть какие мысли?


Ответы (0 шт):