Господа, позвольте отвлечь вас от насущных проблем и поговорить об абстрактном. Третий день голову мою терзают мысли о том, как бы получше, поэлегантнее да поудобнее прикрутить логи к бэкенду. Да не простые, а с добавлением идентификатора запроса к каждой записи. Вся чудо-поделка пилится на Go, но мне кажется, что это не сильно принципиально.
Вот пришёл запрос, я ему бац! и приделал uuid в контекст используя middleware. То-есть могу из объекта запроса в любой момент получить его идентификатор.
Теперь приходит запрос в handler/обработчик, там всё чинно-гладко. logFooBar(getRequestID(request), "Hello, world, you obosralza")
Теперь обработчик тянется своими ручками в сервис. Вызывает handler.fooBarUsersService.searchForAlkogolik(parseRequestBodyFilter(request))
и дальше пляски идут внутри сервиса.
Вопрос: как мне передать идентификатор внутрь сервиса? Какие есть техники? Можно явно первым аргументом закинуть, можно сделать копию сервиса _для_этого_запроса_ и передать туда идентификатор полем, можно крутануть эту баламуть в контексте каком-нибудь как-нибудь и тягать оттуда (не хочу, звучит как бред).
А сервис потом ещё в репозиторий сходит базу потормошить, да пару запросов с рассылкой спама отправит в sendgrid.