Приветствую, подскажите плиз грамотный путь работы с коллекциями в рамках инкапсуляции логики.
Кейс: есть статья, авторизированный пользователь может лайкнуть или убрать лайк со статьи - одним ендпоинтом, грубо говоря работает как тумблер. Есть сущность лайк, у нее ссылки на пользователя и статью.
В прямом случае я бы создал сервис, в нем метод и из репозитория дернул лайк по статье и пользователю, если его нет - создал, если есть - удалил. Задача готова.
Но нет же задачи в бизнес логике "создать/удалить лайк" есть "лайкнуть статью". Как я понимаю более верно было бы инкапсулировать в статье, юзере, или где?
Ну т.е. должно быть $article->likedBy($user) . Но тогда, чтобы найти лайкнута или нет, надо пробежаться по всей коллеции лайков, что дичь или использовать критерий внутри метода. Но тогда возникает вопрос, как пропихивать в метод какие то проверки, типа "антиспам лайков", который будет дергать БД или еще какие сервисы и т.д.
Что то короче меня замыкает между инкапсулировать в сущности и вынесенем в сервисы, что размазывает БЛ по сервисам.