
Vladislav
24.03.2018
23:10:50
поддерживают же
очень медленно

Who
24.03.2018
23:10:56
да?
аа))

Google

Vladislav
24.03.2018
23:10:58
но поддерживают

Andrey
24.03.2018
23:11:02

Vladislav
24.03.2018
23:11:26
ну а что советовать чуваку? идти в доку смотреть и не понимать как написать свой юзер провайдер?

Andrey
24.03.2018
23:11:50
стебу)

Vladislav
24.03.2018
23:11:55
можете бросаться камнями, но если чувак новичок уровня джуна который только вот вот что-то пытается делать - пусть берет фос и норм

Who
24.03.2018
23:12:33
дак а гайдов в нете какбудто больше и нет никаких

Vladislav
24.03.2018
23:12:33
что-то да контрибютят

Who
24.03.2018
23:12:48
ага, вижу

Andrey
24.03.2018
23:12:50
всё ок. С секьюрити сам не сразу въехал. Правда и фос не ковырял на тот момент

Vladislav
24.03.2018
23:12:58

Who
24.03.2018
23:13:33

Google

Vladislav
24.03.2018
23:13:55
ну вот) так что иди сделай что-то рабочее и будешь менять части как только они будут ботлнеком
на твоем этапе ща главное решить задачу, а не задрочить код

Who
24.03.2018
23:14:39
согласен

Vladislav
24.03.2018
23:15:14
там есть гайд как lexikjwt + fosuserbundle склеить

Andrey
24.03.2018
23:20:32

Andrew
25.03.2018
09:03:31
да, доки по сукурити имеют много букаф

Konstantin
25.03.2018
12:30:53
касательно такого момента "entity should always be valid" - как проверять уникальность только что созданой сущности до persist/flush ?

f4rt~
25.03.2018
12:31:28
у тебя констрейнты в базе для чего даны

Konstantin
25.03.2018
12:31:42
так это в базе
мне не надо уже в конце это проверять и ловить uniqueConstraint
мне надо вот прям тут на месте

f4rt~
25.03.2018
12:33:10
UniqueEntity/UniqueEntityValidator

Konstantin
25.03.2018
12:35:10
UniqueEntity/UniqueEntityValidator
ну так это сработает когда я буду вызывать flush, но на текущем уровне у меня нет entityManager чтобы флэшнуть.
можно конечно в репозитории создать save($entity) а там внутри уже $this->_em->persist/flush, но это кажется грязный хак, не?
тогда уникальность то как бы проверится "на месте", по идее

f4rt~
25.03.2018
12:35:57
какой профит отказываться от персиста/флаша, запихивая их в один метод ;c
пинай @fes0r , а я послушаю, мне самому интересно
но я нахожу твой кейс, чутка странноватым
имхо

Konstantin
25.03.2018
12:36:57
профит того что доктрина при записи проверит на уникальность и если такая запись есть вылетит исключение которое я поймаю и пойму что это уже дубликат, и не буду создавать дальше связи сущности с другими сущностями (чтобы потом не удалять их)

Sergey
25.03.2018
12:37:10

Google

f4rt~
25.03.2018
12:37:19
касательно такого момента "entity should always be valid" - как проверять уникальность только что созданой сущности до persist/flush ?

Konstantin
25.03.2018
12:38:43
я понимаю что доктрина сама откатит прямые релейшны. а если вот я ручками их создаю без доктрины? надо будет и руками все это откатывать, те же файлы например

Sergey
25.03.2018
12:38:45

Konstantin
25.03.2018
12:38:52
но ведь если проверить на уникальность заранее можно этого ничего не делать

Sergey
25.03.2018
12:40:02
ну то есть гарантируй атомарность а потом пляши

Konstantin
25.03.2018
12:40:14
так я не знаю как
вот и спрашиваю как это сделать без вызова persist+flush

f4rt~
25.03.2018
12:40:41
но ведь каждая проверка на уникальность = +1 запрос в базу, вряд ли можно их как-то заперсистить и заккомитить все сразу

Sergey
25.03.2018
12:42:14
и я решаю это через рэдис который мне позволяет делать атомарные штуки
пришел запрос - сказал мне "я собираюсь машнить чето с этой фигней". Остальные штуки будут ждать пока ресурс освободится. Семафор типа или мьютекс

Sergey
25.03.2018
12:44:00

f4rt~
25.03.2018
12:44:13
дык я о том же

Sergey
25.03.2018
12:44:42
интересное наблюдение - 90% ситуаций когда у меня возникал эксепшен что "не уникальная запись" - это когда юзер два раза кликал по кнопке и уходило два запроса
потому "проверка заранее" не всегда имеет смысл
ситуаций когда юзер забыл что он зарегался происходит в разы меньше

Konstantin
25.03.2018
12:45:28
подожди это куда то в глубь уже уходите.
давай проще - вот есть dto, есть сущность. я делаю например $newEntity = $someFactory::makeEntityFromDTO($dto);
как мне этот $newEntity проверить что он уникален, пусть например по комбинации 2 полей? например name-description

f4rt~
25.03.2018
12:45:53
ну я к тому, что не вижу профита проверять заранее, это почти всегда N+1 проблема, а констрейнты в базе и ее целостность, самый простой вариант

Sergey
25.03.2018
12:45:54

Google

Sergey
25.03.2018
12:45:56
не надо усложнять

f4rt~
25.03.2018
12:46:04
в чем профит, чекать до персиста, не понимаю

Konstantin
25.03.2018
12:46:04
хаха
дак я про это и спросил

Sergey
25.03.2018
12:46:24
при флаше у тебя будет конкретное исключение - конфликт бла бла бла
вот его транслируешь клиенту как "ты уже зареган, может быть ты просто пароль забыл?!"
но далеко не всегда можно повесить индекс в базе и быть счастливым)

f4rt~
25.03.2018
12:47:22

Admin
ERROR: S client not available

Sergey
25.03.2018
12:47:24
хотя... не пожалуй это редкий кейс...

f4rt~
25.03.2018
12:47:37
но когда можно не усложнять
лучше не усложнять)

Sergey
25.03.2018
12:47:56
но бывает, у меня например юзерам запрещено иметь одинаковый email но в некоторых ситуациях (групповые аккаунты) - можно. Правда тут больше проблема с херовой моделью данных но я пока не смог в этом убедить коллег

Konstantin
25.03.2018
12:49:37
так в конце концов
чтобы проверить уникальнотсь надо попытаться сохранить объект в базе, и все? других способов нет никаких ?
зачем проверять "до" это уже другой вопрос)

f4rt~
25.03.2018
12:50:57
ну можешь метод в модели сделать
checkIfExist

Konstantin
25.03.2018
12:51:07
я хотел бы в репозитории сделать этот метод
это вполне логично было бы. а там внутри уже try/catch с возвратом true/false

Google

f4rt~
25.03.2018
12:51:52
просто пока ты говоришь "зачем проверять до, это уже другой вопрос", никто не понимает какого рода профит ты пытаешься получить переливая из пустого в порожнее

Sergey
25.03.2018
12:51:54

Konstantin
25.03.2018
12:52:39

Sergey
25.03.2018
12:52:55
тут вопрос в том что вероятнее - что у тебя два запроса которые пытаются вставить что-то в одно и то же время (и тут только уповать на индексы в базе, или другие варианты локов) либо запросы точно приходят в разное время и ты можешь гарантировать что стэйт между проверкой и записью не поменяется
иногда путем нескольких вопросов "зачем" можно придти к тому что задача неверно поставлена или цели неверны

Konstantin
25.03.2018
12:53:52
нет, я не пытаюсь уйти от случая когда дважды нажали и отправили в одну секунду

Sergey
25.03.2018
12:54:15
и это не только про программистов - тебе когда заказчик приходит с просьбой запихнуть эту кнопочку и что бы она вот так вот мигала когда что-то происходит - ты должен разобраться нафига ему эта кнопочка и какую проблему он хочет решить

f4rt~
25.03.2018
12:54:22

Sergey
25.03.2018
12:54:24

Dmitry
25.03.2018
12:55:29
на энджинксе лимитировать число запросов в секунду ;)

f4rt~
25.03.2018
12:57:13
@fes0r а как ты борешься с парсерами, в случае апихи?

Sergey
25.03.2018
12:57:15

f4rt~
25.03.2018
12:57:27
я тут недавно доклад от 2гис смотрел на эту тему, вспоминал тебя, все интересно было спросить


Konstantin
25.03.2018
12:57:27
ну, зачем зачем. у меня просто нет бесконечного количества времени разбираться во всём сразу, да, работал с редисом и знаю что удобно но пока что не хочу его настраивать и вводить в проект если можно обойтись.
зачем мне проверять на уникальность - затем что я принимаю пачку файлов в base64, а потом сохраняю их.
и мне не хочется прибираться, потому что чисто не там где прибираются а там где не мусорят.
файлы - пусть это будут картинки для товара. они больше ни к чему не относятся.
зачем проверять уникальность товаров - затем что не хочется сначала сконвертировать целую галерею , сохранить на диск, а потом обнаружить что сущность невалидная, и делать костыли с откатом всех этих изменений.
хочется изначально проверить - есть уже такой уник или нет. если есть уник - значит сразу отдадим ошибку и дальше ничего не происходит - если нет - значит сохраняем файлы


f4rt~
25.03.2018
12:57:36
рэйт лимит)
а когда нельзя рейт лимитить налево и направо
по сути нужно строить realtime аналитику, получается

Konstantin
25.03.2018
12:58:04
я читал и помню что вы там разные задачки на микросервисы кидаете или заставляете по 1 запросу на файл грузить, но увы вот мне хочется просто чтобы был 1 запрос на создание и все

Sergey
25.03.2018
12:59:06

Dmitry
25.03.2018
12:59:28
ну да, я так делал на энджинксе ;) когда беком у меня была не база, а апи, которая оказалась подвержена состоянию гонки... быстрый костыль