
Антон
30.11.2017
20:40:38
@Big_Shark ты обновляешься чтоли?

Big_Shark
30.11.2017
20:40:58

Антон
30.11.2017
20:41:33
Походу много старых бандлов отомрут

Google

Big_Shark
30.11.2017
20:43:06

Sergey
30.11.2017
20:43:12
+ опиши примерно схему подсчета вероятности
хотя бы какие параметры продукта влияют
помимо цены


Alan
30.11.2017
20:46:47
каждый продукт - отдельная сущность они все лежат в боксе, у продукта есть название и цена
кроме цены ничего не влияет, шансы считаем просто рандомной точкой на линии из отрезков по 1 деленное на цену (больше цена значит короче отрезок и меньше шанс)

Антон
30.11.2017
20:46:51
@Big_Shark ты все так же propel используешь?

Big_Shark
30.11.2017
20:46:58

Антон
30.11.2017
20:47:04
Мужик

Alan
30.11.2017
20:48:31
помимо цены
хотя вот что влияет, до того как начать лотерею пользователь может отметить галочкой опцию у коробки, это значит что на некоторые товары шанс будет х2
стоимость попытки будет дороже в таком случае для него
на какие мы сами решаем, допустим на те которые начинаются с слова "Knife*" =)

Google

Big_Shark
30.11.2017
20:50:07
Мужик
У меня практически нет вариантов, даже во время большого обновления которое запланировано на 2018, где мы обновим симфони, пхп, vue и тд, нет обновления пропела до доктрины

Sergey
30.11.2017
20:50:21
вероятность так же сможет посчитать сам продукт
дальше весь вопрос - количество продуктов (если их больше тысячи - то проще в базе это считать)

Alan
30.11.2017
20:51:08
но ему для этого нужны остатки которые знает только сторонний сервис

Антон
30.11.2017
20:51:15
@Big_Shark почему?

Alan
30.11.2017
20:51:17
к которому надо по хттп апи сходить

Sergey
30.11.2017
20:51:18

Alan
30.11.2017
20:51:28
продукту, чтобы посчитать вероятность

Sergey
30.11.2017
20:51:41

Alan
30.11.2017
20:51:45
да

Sergey
30.11.2017
20:51:51
как влияет количество?

Антон
30.11.2017
20:52:05
@Big_Shark так много рассуждали о том как писать приложения изоморфно, о том что это круто и все так делают. Особенно в симфони )

Big_Shark
30.11.2017
20:52:08
@Big_Shark почему?
Много логики в моделях, много запросов к базе, схемы, очень много завязок

Alan
30.11.2017
20:52:15
стараемся выдавать в первую очередь то чего у нас много завалялось чтобы разгрузить склад

Sergey
30.11.2017
20:52:15
да
у тебя 1000 товаров, ты 1000 запросов на каждый розыгрыш будешь делать?

Антон
30.11.2017
20:52:22
Мифы рушатся )

Alan
30.11.2017
20:52:32
нет, один запрос

Sergey
30.11.2017
20:52:52

Google

Big_Shark
30.11.2017
20:53:33

Антон
30.11.2017
20:54:18
Ээээммм. Зачем убирать логику из моделей? По-моему логика как раз таки в модели и должна быть
Анемичные модели а то
По-моему двое остальных то же самое обсуждают

Big_Shark
30.11.2017
20:56:14

Sergey
30.11.2017
20:56:58
нет, один запрос
то есть по хорошему:
- нам надо получить количество для всех продуктов (и удобнее это делать одним запросом)
- нам нужно получить стоимость всех продуктов
- нам надо удостовериться что продукты подпадающие под определенные спецификации увеличивают свою вероятность
Все это позволит нам сгенерить что-то типа коллекции, которая содержит айдишки продуктов + вероятность + метод randomProduct который иинкапсулирует в себе логику "забрать". Причем коллекция эта может быть в целом для каждого юзера общей + свои надстройки (свои фильтры).

Антон
30.11.2017
20:57:13
А. Понял. Инфраструктура в модели торчит, а не над моделью

Big_Shark
30.11.2017
20:57:38

Sergey
30.11.2017
20:57:38
нет, один запрос
по сути мы так или иначе будем полностью дублировать у себя информацию о ценах и количестве.
а если так - выходит красивый изолированный контекст)

Alan
30.11.2017
20:59:20
они очень часто меняются поэтому нужны актуальные на момент розыгрыша

Alan
30.11.2017
20:59:36
ну то есть всегда запрашиваем остатки

Sergey
30.11.2017
20:59:44
+ инвалидировать когда кто-то "забирает"
ну или забирать на каждый розыгрыш - это уже детали

Alan
30.11.2017
21:00:16
ну да

Sergey
30.11.2017
21:00:31
в любом случае копия у нас будет и нам никуда ходить не надо
мы ее будем синхронизировать где-то на уровне инфраструктуры
а это означает что продукт знает все что ему нужно что бы учесть вероятность

Google

Alan
30.11.2017
21:01:25
да

Sergey
30.11.2017
21:01:34
но всеравно сверху нужна коллекция которая будет отвечать непосредственно за выбор
и да, в этом случае "узнать вероятность" это не геттер а просто query метод, это норм
query в плане он чето просит вернуть а не тупо "достань мне свою цену и достань свое количество"
ну мол я ничего против геттеров не имею. Если они не юзаются что бы что-то посчитать хотя можно было прямо там)

Big_Shark
30.11.2017
21:04:20

Sergey
30.11.2017
21:04:24
ну мол... добавить доктрину и планомерно переносить в сущности бизнес логику и дергать пропел для read only операций?)
ну и для write там где не успел перенести)
хотя хз... надо ли тебе доктрина вообще

Admin
ERROR: S client not available

Alan
30.11.2017
21:05:10
угу, но box это доктриновская entity, и вот в нем query метод, как мне внутри него пользоваться сторонним сервисом с остатками? или это инфраструктура и нужно получить остатки и передавать внутрь этого query метода?

Sergey
30.11.2017
21:05:20
а
понял

Alan
30.11.2017
21:06:02
ну вообще так сложилось что нет )))

Sergey
30.11.2017
21:06:04
это просто синхронизация - этим не должна заниматься сущность box

Big_Shark
30.11.2017
21:06:07

Sergey
30.11.2017
21:06:15

Google

Sergey
30.11.2017
21:06:42
box ничего не знает о остатках, по хорошему не должен. Не его дело.
у тебя внутри box есть коллекция продуктов

Alan
30.11.2017
21:07:14
продукты тоже сущности и там нет поля остатков

Sergey
30.11.2017
21:07:16
и вот когда она загружается, на уровне инфраструктуры, ты можешь подмешать данные со сторонней апи

Alan
30.11.2017
21:07:20
только цена и название

Sergey
30.11.2017
21:07:23

Alan
30.11.2017
21:07:55
ну в целом им там место да

Sergey
30.11.2017
21:08:05
$productState = array_merge($productDbData, ['quantity' => $answerFromAPI]
схематично
ты можешь это даже на доктриновских ивентах замутить)
и подмешивать респонс от API как данные сущности. У тебя же управление каталогом не в твоем контексте идет, так что в целом все честно. Мы просто дублируем данные.
причем все в целом разделено и изолировано

Alan
30.11.2017
21:09:09
но есть другой сценарий, когда бокс спрашивает у стороннего сервиса: есть такие продукты [...,...,..,..] - какой из них выдать?

Sergey
30.11.2017
21:09:40
можно через double dispatch

Alan
30.11.2017
21:09:55
алгоритмов на шансы много и там математика не всегда сходится, они долго живущие исчитающие ) поэтому реализованы на nodejs

Sergey
30.11.2017
21:10:14

Alan
30.11.2017
21:10:31
ну, поэтому не в пхп да)

Sergey
30.11.2017
21:10:37
> алгоритмов на шансы много и там математика не всегда сходится
ты хочешь подменять реализацию алгоритмов?

Alan
30.11.2017
21:10:43
да
в зависимости от типа бокса

Sergey
30.11.2017
21:10:54