Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Добрый день тому кто это будет смотреть!
Преамбула!
Я не претендую на доделанность, звание "нормально пулл-реквеста" или корректность всех изменений, однако надеюсь сам факт того что я не стал писать pdf-файлик, а сделал какие-то изменения в коде, сподвинут смотрящего отнестись к сему говнокодингу не так принципиально :)
Основная часть=============
Смотря на код (который к слову смотря, выдран довольно аккуратно), я подумал о двух вещах - при росте данных экспорт будет занимать много времени, и конечно о удобстве добавления новых табличек и то, как они будут выглядеть (экспортироваться) во view (и csv).
По первому - экспорт csv. Тут вариантов немного - или очередь, или делать в фоне (как раз мой вариант) - решил сделать команду которую запускать по крону. Чтобы сие не вылетело по памяти - решил добавлять пачками (о майн гот, генератор даже заюзал). Отдавать тупо этот файлик.
При рефакторе всего этого добра - пришлось закомментить участок кода (считайте сломал логику), т.к. на это ушло бы ещё какое-то время (извиняйте пожалуйста)
По второму - части кода которые можно разнести - разнёс, думаю надо их отправить вo view, но меня всё ещё гложат сомнения по этому поводу. Надеюсь логика рефакторинга тут яснА, интерфейс выделен, каждый "эвент" (так я их назвал) сами отвечают за свой рендеринг (единая ответственность? ну, почти....).
Безусловно, продолжая дальше я как минимум починил бы чтобы оно стало "как было" в моменте экспорта, однако по пути я вспоминал почему ненавижу Yii2 - а именно мешанину логики которая переностися во view (не люблю я фронтенд)
Из доп.вещей - что задеюсь мне зачтётся - я поднял проект прежде чем что-то делать, попутно исправляя разные баги (папочку runtime создать, зависимости подтянуть....), использовал сторонную либу (лень было писать свою, конечно я её проверил сначала), и думаю хороший вариант написать изначальный ActiveDataProvider на SQL, т.к. он очень часто лезет в базу вместо "один раз но много джоинов"
Из грустного - в идеале такие вещи конечно нужно покрыть тестами, и на этом я уже иссяк
Добра Вам, и спасибо за интересное задание!
Захар Стебловский. tg @asic_pro