Евгений
может так
Евгений
если я правильно понял
Echo
Это по поводу моего вопроса?)
Anonymous
Yes !
Anonymous
к нам дамы добавляются
Anonymous
вот таких банить нужно
Anonymous
эгегей, админы
Евгений
+1
Danil
Ребята, вопрос по рейс кондишенам и архитектуре согласованности в очередях
Danil
1)Админом обновляется юзер - регистрируется задача #update-1 в очрееди на обновление юзера в 1С 2)Эта задача #update-1 начинает выполняться - происходит ошибка из-за таймаута коннекта к 1С - она кладется в очередь отложенных обработок 3)Админу похеру: пока там задача пытается выполнится - он еще раз обновляет юзера, добавляя еще какие-то правки - создается задача #update-2 на обновление юзера в 1С 4)Вот теперь 2 задачи не могут выполниться какое-то время и прыгают по очереди из отложенной очереди в основную через определенный интервал 5)К этому времени, неожиданно начинает работать 1С и к этому времени пытается выполниться задача #update-2 - она выполняется успешно и только после начинает выполняться #update-1, который затирает изменения #update-2 - последние изменения, которые хотел сделать админ
Danil
У меня реббит, если это важно
Anonymous
Danil
Можешь кейс описать?
Anonymous
Можешь кейс описать?
https://habrahabr.ru/post/235983/ https://github.com/rabbitmq/rabbitmq-delayed-message-exchange твое с первой задачей всегда выйдет с очереди первым
Danil
Да с плагином проблема ставить его
Danil
Слишком дофига* бумаг надо
Danil
У меня разруливается через x-message-ttl и x-dead-letter-exchange
Danil
Возможно буду делать через https://symfony.com/doc/current/components/filesystem/lock_handler.html
Danil
На каждую каку создавать
Dmitry
может завести очередь "создать пользователя" и очередь "редактировать пользователя" и отрабатывать одним и тем же воркером, который переходит к очереди редактирования только если очередь создания пуста.
Anonymous
Да с плагином проблема ставить его
не понял какая проблема? в каталог положил со всеми плагинами и выполнил в ребите rabbitmq-plugins enable rabbitmq_delayed_message_exchange https://bintray.com/rabbitmq/community-plugins/rabbitmq_delayed_message_exchange/v3.6.x#files
Артемий
Ребята. Такой вопрос. Есть entity User. Должна возможность создать Admin, Moderator, User. Есть допустим сервис User у которого есть методы для создания таких сущностей (т.к. разный набор полей для каждого нужен). Так вот вопрос, передавать параметрами createAdmin($email, $password, ...) или создавать заранее в контроллере entity, сетить туда параметры необходимые и передавать в нужный метод? Как правильнее? Красиво аолучается с передачей ентити, но не очень нравится, что надо модель создавать в контроллере.
Anonymous
вообще ничего не понял
Артемий
)
Артемий
Сейчас постараюсь понятнее
Артемий
Или даже проще. Можно ли создавать ентити в контроллере? Для того чтобы готовый объект передать в сервис для дальнейших действий
Артемий
$user = new Entity\User(); $user->setName('Vasya'); $user->setEmail('vasya@gmail.com'); $userService->createAdmin($user);
Артемий
Можно ли так делать в контроллере?
Артемий
Или надо: $userService->createAdmin('name', 'email');
Артемий
этот код в контроллере
Виталий
с моделькой покрасивше
Артемий
Да, но пугает немного создание в контроллере ентити (
Виталий
и с порядком полей не ошибёшься
Виталий
А что в этом такого? В базу из контроллера ты не лезешь и даже доктрину не дёргаешь
Артемий
хм.. Возможно я усложняю что-то. Ну допустим так. Но тогда еще встречный вопрос, если я создаю таким образом энтити - логично ли валидацию модели делать в сервисе? Делаю через ValidatorInterface
Артемий
Хотелось как можно больше разгрузить контроллер
Alexandr
А почему вы вообще в контроллере не имеете объект? Я про форму, она отдаёт же объект. Т.е. в контоллере надо получить объект, тем или иным способом. Валидатор лучше вынести, чем тоньше класс , тем лучше, как по мне. Принцип единственной ответственности и все такое.
Anonymous
в контроллере должен быть объект иначе как записывать
Anonymous
а валидацию можно отдельно вынести
Anonymous
$form->isValid
Евгений
Ребят, скажите пожалуйста, почему в профиль всех пускает?
Alexandr
Нене, валидатор в общем смысле я имел ввиду
Alexandr
С телефона много не напишешь
Артемий
Не совем понял про валидатор
Alexandr
Все что связано с валидатор интерфейс в отдельный класс, я про это говорил
Артемий
Хм, ну у меня перед каждоый записью в базу вызывается: $errors = $this->validator->validate($entity);
Артемий
это в сервисе
Артемий
так норм? я к тому что это не в контроллере, а в сервисе
Alexandr
Я бы поднял вызов в контроллер
Alexandr
А в сервис пихнул бы валидную модель
Артемий
Получается валидация формы и валидация энтити
Alexandr
Ну грубо говоря да. Вообще, я не делал сложные валидации с формами, но по хорошему бы через аннотация сделать валидацию
Артемий
и форму исключить..
Артемий
У меня так сейчас и работает
Alexandr
и форму исключить..
Эм. Не уверен, что это хорошая идея. Но тут вам виднее, я не знаю ваш кэйс
Артемий
рест апи
Артемий
т.е. по сути форма и не нужна (если валидация в модели)
Alexandr
рест апи
Аа, да, для апи я делал отдельные валидаторы
Alexandr
У меня там форм нет
Alexandr
Сейчас смотрю на graphql
Артемий
Понятно ) Спасибо!
Артемий
Есть еще одно но, что если сервис вызывается из другого места, не из контроллера
Артемий
т.е. к примеру не передали пароль, а в сервисе это не проверяется
Alexandr
Есть еще одно но, что если сервис вызывается из другого места, не из контроллера
Эм, а это номальная практика? Вообще, какой-то уровень валидации из сервиса не уберешь, проверка критичных моментов должна быть. С другой стороны, можно говорить и о том, что если у вас не прошла аутентификация, то вы вообще не должны попадать в данный сервис. В общем, по разному можно делать и подходить.
Артемий
Я про случай, к примеру придётся потом вызвать сервис из консольной команды. Сервис же он на то и сервис что должен быть независимой сущностью.
Alexandr
Я про случай, к примеру придётся потом вызвать сервис из консольной команды. Сервис же он на то и сервис что должен быть независимой сущностью.
Если вы подразумеваете, что сервис оперирует (или получает данные из) с пользователем, то и консольку вы должны запускать, передавая туда имя пользователя. Это ваше же требование, наложенное архитектурой сервиса
Артемий
Если использовать способ передачи в сервис готовой модели, получается что нет уверенности, например, что пароль не пустой.
Alexandr
Если использовать способ передачи в сервис готовой модели, получается что нет уверенности, например, что пароль не пустой.
вы наверно не так поняли, что я писал выше, или я написал сумбурно :) Чтобы быть уверенным, что модель валидна, у вас несколько путей решения этой задачи. Первый и достаточно очевидый - использовать валидатор внутри сервиса - инжектим/содаем инстанс и выполняем валидацию. Если не валидно, бросаем исключение/возвращаем ответ с состоянием. Другой вариант, мы подразумеваем, что наша модель идет в сервис уже валидной, что означает, что вызов валидатора должен быть на уровень (или несколько выше), в том же контроллере или команде, но он должен быть обязательно. Да, я согласен, что by design, он более подвержен коллизиям, когда, к примеру, кто-то сделал вызов и передал параметром не прошедший валидацию аргумент. Но, все это регулируется соглашениями дизайна системы. Почему я порекомендовал вынести валидатор выше на уровень, из сервиса - чтобы убрать выброс исключительной ситуации, к примеру, чтобы уменьшить количество затраченных шагов до проверки состояния объекта, чтобы упростить логику сервиса и т.п. Только ради этого.
Артемий
Понял, да, именно для безопасности и делаю в сервисе валидацию. Возможно ещё зависит от ситуации. Спасибо)
Anonymous
Такой вопрос!
Anonymous
Допустим есть поля в бд firstname lastname, можно ли их в один input затолкнуть ? Может, кто сталкивался
Артемий
по пробелу делил как-то
Anonymous
т.е. получается допустим делаю один input с Ф.И. , на выходе он мне пишет в два поля first и last
Артемий
типо того, но это если не очень важны эти данные, потому что все равно буду писать и ФИ и ИФ и ИИФ
Артемий
будут* писать
Anonymous
блин, если даже 2 инпута сделать, могут писать коряво
Anonymous
от этого не застрахован ни кто
Anonymous
стоит ли вообще это делать ?
Артемий
объеденять в один? Большая форма?