@proelixir

Страница 948 из 1045
Dmitry
07.05.2018
13:49:15
Можно выдумать презентер

Декоратор

Ещё хуй знает что

Vitaly
07.05.2018
13:50:55
ну не будешь же ты выкачивать с бд все 1000 комментариев, чтобы потом разбить их на страницы по 100?

Google
Dmitry
07.05.2018
13:51:17
Я - нет

Vitaly
07.05.2018
13:51:41
ну это больше абстрактное “ты"

никто не будет

Артем
07.05.2018
13:52:36
Например, кол-во комментов на странице это-таки Enum.count(comments) в контроллере либо вьюсе

но уж никак не контекст

Dmitry
07.05.2018
13:54:28
Контроллер нагружать ненужными данными

Нафик надо )

Вьюха

Vitaly
07.05.2018
13:54:52
всё ровно по-прежнему. получение данных - контроллер и контекст, подготовка к выводу - вью
я от контекста/сервиса получаю комменты, их общее количество и кол-во на странице

Артем
07.05.2018
13:55:06
ну формально-то контроллер у нас подготавливает переменные для отображения во вьюсе

Vitaly
07.05.2018
13:55:07
например

это не гуд?

Google
Dmitry
07.05.2018
13:55:17
тут не просто комменты человек считает, а pending, populate, какие-то еще. Фильтровать и считать это эликсиром - долго и не эффектиивно

Vitaly
07.05.2018
13:55:30
+

Vitaly
07.05.2018
13:56:17
в контексте функция возвращает тульпу

3 функции

хз

Dmitry
07.05.2018
13:56:48
Если ты в контексте 3 раза в базу сходил

Vitaly
07.05.2018
13:56:58
ну блин

Dmitry
07.05.2018
13:57:01
Может и норм вернуть тупл из трёх переменных

Dmitry
07.05.2018
13:57:09
В чем вообще соль этих контекстов, в них надо реализовывать предметную область/бизнес-логику; считать кол-во тех или иных комментариев - как раз оно и есть

Vitaly
07.05.2018
13:57:11
а как иначе?

Dmitry
07.05.2018
13:57:31
Ну если ты один раз в базу сходил

Vitaly
07.05.2018
13:57:34
1 раз получить комментарии

1 раз количество всех

ну не эликсиром же их считать

Dmitry
07.05.2018
13:58:26
Почему бы и не посчитать

Vitaly
07.05.2018
13:58:58
ну если это будет быстрее - то да :)

Dmitry
07.05.2018
13:59:01
По листу о(н)

Vitaly
07.05.2018
13:59:16
но если есть пагинация

Dmitry
07.05.2018
13:59:17
А комментариев максимум там 1000

Google
Vitaly
07.05.2018
13:59:33
то никак по другому количество всех ты не узнаешь

я просто еще далек от этого

когда ЯП может посчитать быстрее БД :)

Артем
07.05.2018
14:00:33
ну не эликсиром же их считать
ну давай, напиши мне, как получить комментарии с оффсетом и этим же запросом вернуть их количество на странице

Dmitry
07.05.2018
14:01:06
да не это количество moi_nik считает

Артем
07.05.2018
14:01:21
та он ваще хз что считает

Dmitry
07.05.2018
14:02:22
ну как бы 2 разные вещи - вернуть кол-во элементов в листе

и сгруппировать их по какому-то условию и считать кол-во

Vitaly
07.05.2018
14:04:55
разумеется, в экто
подзапросы нельзя делать в экто?

Артем
07.05.2018
14:05:08
о понеслась

можно, давайте нахуевертим трёхэтажный неподдерживаемый sql

неукоснительное соблюдение подобных правил - глупо. всё зависит от контекста

В чем вообще соль этих контекстов, в них надо реализовывать предметную область/бизнес-логику; считать кол-во тех или иных комментариев - как раз оно и есть

попытки запихнуть всё в контекст ничем не лучше любого другого подхода

во главу угла надо ставить читаемость и поддерживаемость кода. если Enum.count() во вью решит задачу - это куда лучше подзапроса в контексте

Vasiliy
07.05.2018
14:08:07
на CircleCI, например, нельзя превышать 4G, кто-нибудь знает, это можно как-то указать для test-env? иначе CI просто убьёт процесс и все :)

Артем
07.05.2018
14:08:11
я вот сейчас как раз разгребаю дерьмишко за любителями всего этого

Vitaly
07.05.2018
14:08:22
можно сделать что угодно, если это решает задачу

Google
Артем
07.05.2018
14:08:25
def all(user, :current_user) do from( n in __MODULE__, join: tu in User, on: tu.id == n.target_user_id, left_join: tp in Post, on: tp.id == n.target_post_id, left_join: su in User, on: su.id == n.source_user_id, left_join: sp in Post, on: sp.id == n.source_post_id, where: n.target_user_id == ^user.id, where: is_nil(tu.deleted_at) and is_nil(tp.deleted_at) and is_nil(su.deleted_at) and is_nil(sp.deleted_at), group_by: [ n.action, n.target_user_id, n.target_post_id, fragment("round(extract(epoch from ?) / ?)", n.happened_at, @interval) ], order_by: [desc: fragment("happened_at")], select: %{ action: n.action, happened_at: fragment("MAX(happened_at) as happened_at"), target_posts:

Dmitry
07.05.2018
14:08:34
Если бы вопрос был бы просто вернуть кол-во, то Enum.count был бы решением, но это не тот случай

Артем
07.05.2018
14:08:40
круто жи? бизнес-логика в контексте, о, и подзапросы есть

Vitaly
07.05.2018
14:09:04
как то ужасно

Артем
07.05.2018
14:09:10
полностью постить не стал - там несколько страниц

можно же ещё добавить

и ещё

и ещё

а если сделать виртуальный филд, то ваще всё с базы в одном запросе собрать

охуенно жи?

Vitaly
07.05.2018
14:10:10
ты придумал GraphQL

Артем
07.05.2018
14:10:14
ой, оно выполняется 1300 мс на нескольких тысячах, но ничё? железо же помощнее можно купиь

Vitaly
07.05.2018
14:10:15
:D

Артем
07.05.2018
14:10:34
я не придумал, я разбираю этот звездолёт

group_by: [ n.action, n.source_user_id, fragment("round(extract(epoch from ?) / ?)", n.happened_at, @interval) ],

вот это мне нравится особо

Vitaly
07.05.2018
14:12:23
а че не так?

round(extract(epoch from ?) / ?) - это конечно можно лучше написать скорее всего

Артем
07.05.2018
14:13:50
а лучше удалить

Dmitry
07.05.2018
14:13:59
на самом деле там запрос в целом не очень

Google
Dmitry
07.05.2018
14:14:11
но это не значит что разбиение на контексты - зло

Vitaly
07.05.2018
14:14:16
но в целом, если интервал любой может быть любой - то норм

в постгресе на такое можно индекс повесить

и будет норм, возможно

Артем
07.05.2018
14:15:09
но это не значит что разбиение на контексты - зло
не значит. зло - доведение до абсурда и неукоснительного правила чего угодно

разумный подход нужен ко всему

но в целом, если интервал любой может быть любой - то норм
я придерживаюсь вот какого подхода - код должен быть понятен не бестолковому юниору. иначе бизнесу от него не много толку. нельзя писать запросы, в которые можно вьезжать десятки минут

Vitaly
07.05.2018
14:17:51
это да

Alexander
07.05.2018
14:18:24
люблю такие запросы писать в миграциях данных :))) особенно cte и рекурсии

Vitaly
07.05.2018
14:18:54
миграции зачастую одноразовый код же

особенно миграции данных

Артем
07.05.2018
14:19:47
Ммм, миграция данных завернутая в транзакцию

Каеф

Alexander
07.05.2018
14:20:28
ага, сочные запросики мммм

Артем
07.05.2018
14:20:32
Если что не так постгрес всегда откатит пара гигов))

Ну или десятков

MrFlorius
07.05.2018
14:22:58
Глупый вопрос, наверное. Но все же. nif-ы же могут паралельно работать?

Alex
07.05.2018
14:24:11
Глупый вопрос, наверное. Но все же. nif-ы же могут паралельно работать?
в количестве scheduler threads или dirty schedulers в зависимости от версии beam, еяпп

вроде не запрещено поднимать свой тред пул из инициализации нифа, но это не точно

Страница 948 из 1045