Я только изучаю данный паттерн, и как понял репозиторий не имеет какой либо бизнес логики, просто берет и отдает данные.
Где-то писали, что не нужно за ранее придумывать решения, а писать по факту их надобности. То есть нужно мне в сервисе выполнить запрос на поиск пользователя по логину и телефону значит создаю функцию 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;
}