Если писать методы в таком стиле это не нарушает паттерн "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 } });
Есть какие мысли?