
Denis
29.05.2017
09:15:08
Это всё бы за один запрос получить и уже работать - оно так и быстрее работает, и транзакционность соблюдена будет

Dmitry
29.05.2017
09:15:43
да, но тут софтина в локалку будет смотреть, я где надо prepered statment заюзал, в остальных местах он там мало нужен

Denis
29.05.2017
09:16:08
ИТ системы растут - сегодня не надо, завтра надо
если у тебя в базе треки и прочее - всё за один запрос вытащи, в транзакции если сможешь.

Google

Dmitry
29.05.2017
09:16:43
мне больше по архитектуре интересует... в плане адекватности класса работы с БД и процессинга

Denis
29.05.2017
09:16:43
а то получшь странную неконсистентность иногда
типа машина уже удалена а трэк ещё есть, или наоборот
Архитектура... я бы сделал класс с методами, соответствующими запросам.
специальный, назвал бы DBRequests
и его бы отовсюду дёргал

Dmitry
29.05.2017
09:17:59
к примеру на сколько адекватно в конструкторе
class MyStat
создавать экземпляр:
MyTracks mytracks;

Denis
29.05.2017
09:18:33
Так глубоко ещё не смотрел

Dmitry
29.05.2017
09:34:11
М... а какой логгер лучше использовать? Просто сейчас при импотрте вайба вылез конфликт имен и я не совсем понимаю стоит ли фобосовский или вайбовский юзать...

Denis
29.05.2017
09:37:25
Я бы выбрал стандартный если нет особых требований.
К коду в vibe есть вопросы. Фигачат "на скорость"

Dmitry
29.05.2017
09:38:40
import vibe.vibe;
можно как-то указать, чтобы оно импортировало все кроме модуля логгера, чтобы конфликта имен не было?

Andrey
29.05.2017
09:40:20
не в тему D, глаз резануло - в stats.d где select (select count(*) ..., select count(*)) лучше уж `select sum(case when road_dist < 5 then 1 else 0 end) lt5, sum(case when road_dist < 10 ... )

Google

Denis
29.05.2017
09:40:47
Там просится один хороший запрос (через PREPARED желательно)

Andrey
29.05.2017
09:40:58
ну я так глубоко не копал)

Denis
29.05.2017
09:41:17

Dmitry
29.05.2017
09:41:35
предлагаешь просто их по частям импортировать?

Denis
29.05.2017
09:41:41
Канешн
https://github.com/denizzzka/vibe.d.db.postgresql/blob/master/dub.sdl
вот пример

Dmitry
29.05.2017
12:04:00
преподположим есть функция:
Json foo(int x)
{
}
и мы забыли в урле передать этот самый x. В итоге в браузер вайб отдаст ошибку. Праивльно ли я понимаю, что единственный выход блок try-catch использовать или можно как-то без него обойтись? Что мол не все аргументы были переданы

Denis
29.05.2017
12:05:57
непонятен вопрос. это про какой-то RPC речь?

Dmitry
29.05.2017
12:07:31
про rest

Denis
29.05.2017
12:09:28
Скорее всего, единственный. Он же и идеологически верный.

Dmitry
29.05.2017
12:14:14
тогда я не пойму в каком месте обертывать.
Json foo(int x)
{
}
внутри то уже поздно — функция аргумент ожидает, а снаружи
try
{
Json foo(int x)
{
}
}
оно как-то странно смотрится... нигде такого не видел

Denis
29.05.2017
12:14:45
именно так

Dmitry
29.05.2017
12:15:48
@deviator что скажешь? Ты вроде с вайбом плотно работал...

Oleg
29.05.2017
12:17:40
эт где я такое сказал?
я на нём что-то пробовал давно давно

Dmitry
29.05.2017
12:18:17
Ну во всяком случае ты лучше меня его думаю знаешь)

Oleg
29.05.2017
12:18:26
но теперь стараюсь максимально избегать, но не выходит
внутри то уже поздно — функция аргумент ожидает, а снаружи
try
{
Json foo(int x)
{
}
}
оно как-то странно смотрится... нигде такого

Google

Oleg
29.05.2017
12:19:40
это вообще не валидная конструкция, если мы говорим о методе не вложенном
внутри класса так сделать нельзя точно
и это не относится к vibe
как сделать такой момент, который ты хочешь я не знаю
но явно не так
возможно правильным будет ход мыслей в сторону назначения обработчика ошибок
типа при возникновении ошибки вызывать какую-то функцию и она уже будет возвращать клиенту то, что ты запишешь в ней
и да, аргументы по умолчанию не работают в этом случае?

Dmitry
29.05.2017
12:24:38
scope(failure) myerrorHandler() ?
как-то так?
м... щас попробую аргументы по умолчанию

Oleg
29.05.2017
12:24:59
нет

Oleg
29.05.2017
12:25:17
это должны быть какие-то vibe атрибуты

Maxim
29.05.2017
12:25:39
а в каком месте вообще вайб ошибку отдаст?)

Oleg
29.05.2017
12:25:54
типа
@errorHandler(&myHandler)
Json foo(int x)
{
...
}

Maxim
29.05.2017
12:26:03
какой-то же параметр должен передаться в функцию)

Oleg
29.05.2017
12:26:45
в урле же можно и без параметров вызвать функцию
не?

Maxim
29.05.2017
12:27:47
ну, скажем, ничего ты не передаешь в url, но в функцию-то передать все равно что-то надо, нельзя же скомпилировать вызов функции без параметра, если она требует параметр
я в вайбе не силен, но по логике, рантайм ошибка должна возникать где-то в глубине вайба, а не в момент вызова функции, не?)

Google

Dmitry
29.05.2017
12:29:07
кажется нашел что-то похожее... http://vibed.org/api/vibe.web.web/errorDisplay
втыкаю

Oleg
29.05.2017
12:31:56
он может вызывать функцию только если распарсил аргумент из урла, но если его нет эксепшн бросит

Maxim
29.05.2017
12:33:04
а у вайба внутренности не nothrow сейчас?
опасно кидать эксепшены внутри кода, который должен персистентно висеть в памяти)

Dmitry
29.05.2017
12:35:10
Правильно ли я понимаю:
void getForm(string _error = null)
{
//render!("form.dt", _error);
}
@errorDisplay!getForm
void postForm(string name)
{
if (name.length == 0)
throw new Exception("Name must not be empty");
redirect("/");
}
если в postForm прилетело что-то пустое, то кидаем ошибку и передаем ее в getForm ?

Oleg
29.05.2017
12:38:01
ну типа того

Dmitry
29.05.2017
12:51:08
а как параметры сделать опциональными?
дефолтное значение-дефотным значением, но как понимаю можно как-то опциональные еще
Никак не могу понять как на блок ошибки попасть. Ну ок в теле функции мы ловим исключение и можем его вывести в браузер, но вот что сделать чтобы именно блок ошибки отработал не ясно

Admin
ERROR: S client not available

Denis
29.05.2017
13:38:51
Сгенерить body надо наверно
И отдать

Dmitry
29.05.2017
13:39:07
т.е. в консоль что-то написать не получится?

Denis
29.05.2017
13:39:41
Какую?
Ты пишешь браузер?

Dmitry
29.05.2017
13:39:56
ну вон я в foo пытаюсь ошибку вывести
в консоль

Denis
29.05.2017
13:40:42
В pgator есть обработка ошибок - глянь там
Он именно в консоль шлёт их

Google

Dmitry
29.05.2017
14:10:37
@ahdenchik в коде pgtor нет упоминаний @errorDisplay!

Denis
29.05.2017
14:10:50
Значит оно нинадо
ща гляну
https://github.com/DSoftOut/pgator/blob/7119458fe2907a2de4bdb209897743cd035e470b/source/test/vibe_rest.d#L27
Ты так делаешь запрос в REST с помощью Vibe?

Dmitry
29.05.2017
14:13:15
да

Denis
29.05.2017
14:13:28
ну вот оно или сработает или кинет эксепшен
https://github.com/DSoftOut/pgator/blob/7119458fe2907a2de4bdb209897743cd035e470b/source/test/vibe_rest.d#L42
Вот вызов метода, который гарантированно падает при запросе (он на стороне сервера не реализован)
просто эксепшен какой-то падает и всё (я видимо даже не стал вникать какой)
(это тест, тут можно)

Dmitry
29.05.2017
14:45:03
я правильно понимаю, что нельзя сделать один параметр обязательным, а остальные опциональными. Нужно все делать или такими или сякими. Простоу меня компилятор ругается при попытках часть так, часть сяк сделать

Denis
29.05.2017
14:46:32
Можно
Ты про параметры с дефолтными значениями?
или про функции с переменным числом параметров?

Dmitry
29.05.2017
14:47:03
да типа:
int trackid=0
про дефолтные

Denis
29.05.2017
14:47:18
Параметры со значениями по умолчанию обязательно должны быть в конце списка
иначе компилятор не понимает какой параметр куда (вдруг у них типы совпадают?)

Dmitry
29.05.2017
14:48:40
а в интерфейсе и в реализации объявление этих параметров должно быть 1к1 или можно что допустим в интерфейсе объявить
их со значениями по дефолту, а в реализации метода без дефотного значения

Oleg
29.05.2017
19:41:50
10 строчек кода
кстати, кому интересно насчёт проблемы с выводом стектрейса в vibe, то нужно просто setLogLevel(LogLevel.debug_) вызвать
там предусмотрен вывод стектрейса https://github.com/rejectedsoftware/vibe.d/blob/master/core/vibe/core/core.d#L1445