Этап
Ревью/Тест
Тип
Задача
Приоритет
Повышенный
Трудоемкость
Эпичная
Создана
Дата создания
4 года назад
Назначена
Обновлена
11 дней назад

Система загрузки и прикрепления файлов. Описание лежит в документа Upload файлов. По объему это вполне тянет на мажорный релиз, и стоит его начинать планировать.

Уже начинает её не хватать, для проекта дачи, в который надо прикреплять фотки чертежей и участка.

Будут сервисы:

  • FileService
    • загрузка файлов. Создание и редактирование меты.
    • удаление
  • AttachmentService
    • прикрепление к сущности. списки файлов в проекте, вывод.
  • ImageService tndt-198
    • нарезка сабнейлов, определение какие есть, вывести нужный сабнейл
    • будет реализован в tndt-198

Панель управления

Комментарии могут оставлять только авторизованные пользователи
 demius 11 дней назад

попробовал сегодня выкатить его на dev. Но там не собирается compose, ругается на что-то, хз на что

 demius 18 дней назад

Ну что, наконец ревью!

 demius 18 дней назад

С атачментами пришлось делать такой же костыль, как и в комментариях, с фейковым полем ownerEntity которое не восстанавливается и БД и не является ленивой реляцией. Решено это будет в tndt-232

 demius 19 дней назад

Вобще у запроса есть referer, то с какой страницы он пришел. Вот его инадо заюзать для ответа. По идее мы это даже реализовали, только не проверили. Потом полезли переносить логику в сервис и на этом остановились. Мне кажется половину действий аплоадера можно туда же. А если по итогу в аплоадере ничего не останется, то и ладно.

 demius 22 дня назад

Теперь вопрос с ответом. Мы думали сделать просто, с перезагрузкой страницы из бекенда, но для этого нам нужно знать на какую страницу возвращаться. Тут или передавать её в бек, и там делать редирект, но это временный костыль. Или переделывать на полноценный ajax, с отправкой axios и принятием рещения на фронте. Но это долговато.

 demius 22 дня назад

Диалог вызывается без jQuery и работает на наборе кнопок.

 demius 2 месяца назад

Еще раз засел за задачу. Опять поздновато, но все таки немного продвинулся, смог найти кнопки и повесить на них события через нативный js. Осталось через него вызвать диалог.

 demius 2 месяца назад

Уф, два вечера собирался, и вчера таки сел за задачу, правда поздно, в ноль часов, но хотя бы вспомнил на чем остановился.

 demius 3 месяца назад

И вот считанные дни до весны, а мы так и не сели за задачу. А ведь осталось немного. Очень бы хотелось выпустить релиз с ней до поездок на дачу.

 demius 5 месяцев назад

По итогу решили оставить карточку файла в twig, а модалку делать средстваvb ванильного js (сейчас такая для закрытия задачи сделана на jquery, но с множественными кнопками не работает)

 demius 6 месяцев назад

Жесть конечно, ради крестика и всплывающей модалки мы весь день страдаем по переносу части функционала во вью. Может отказаться от него в пользу ванильного js или alpine

 demius 6 месяцев назад

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

 demius 6 месяцев назад

Да, эта задача еще на долго, несмотря на отпуск. Вот мы дочистили и улучшили загрузк уи показ файлов, а нам бы еще их удаление хотя бы.

 demius 6 месяцев назад

Уф, ну теперь файлы аплоадятся куда надо, отображаются после, и скачиваются

 demius 6 месяцев назад

Думаю надо сначала просто заставить его работать, а уже потом думать куда убиать создание путей, в File или в FileHelper и как называть

 demius 6 месяцев назад

Пока рисовали галерею файлов решили, а может выйдет делать динамическую иконку. Размышления оформили как tndt-225

 demius 6 месяцев назад

Что-то мы все запутали, и пришли к тому, что метод выдачи файла все равно должен сделать запрос к бд. Так что нет смысла в хелперах, давайте сущность файл будет сама генерить нужные пути. Впрочем хелпер может к ним добавлять путь в ФС или путь в от хоста.

 demius 6 месяцев назад

Уф продолжили работу. Надеюсь за эту неделю доделаем таки.

 demius 7 месяцев назад

Выделил в tndt-224. Документ типа файл уже выделен в tndt-218

 demius 7 месяцев назад

Давайте на этом этапе откажемся от caption/description и отдельного окна их заполнения. Полезность их несколько туманна, по опыту что вики, что треккеров их почти никто толком не заполняет и мы врядли будем. Те важные файлы, к которым захочется добавить описание будут скорее документами типа файл. Ну а елси поймем, что вс еже нужно можно сделать отдельню задачу.

 demius 7 месяцев назад

Добил таки открытие загруженного файла и начала приводить навороченное в порядок.

 demius 7 месяцев назад

Кажется теперь дело не в путях, а в нейминге. Надо остановиться и доделать path, entityId и экранирование имени в файле

 demius 7 месяцев назад

Врожде разрулили с путем к файлу, но кто-то его все равно не находит, пок пхп.

 demius 7 месяцев назад

вот мы и подобрались к открытию файлов. Естественно вся наша разносортица сервисов не очень правильно их грузит. Тут надо сделать упор на attacment, т.е. приватных файлах, а публичные будем делать когда будут аватарки, в tndt-221 или tndt-70

 demius 8 месяцев назад

С учетом tndt-119 no не такой уж и постоянный. Вне зависимости от того как будет организован перенос, задача в новом проекте очевидно должна получить новый suffix и новый номер уже в составе нового проекта, а значит все привязано к задаче, должно привязываться или к id или уметь поменять свой номер. Wiki например без вариантов должна такое ловить, она показывает цифры пользователю, а потому должна оперировать номером. А вот остальные весьма не факт, что это стоит мнимого удобство понимания связи в бд. Так что это аргумент в пользу entityId

 demius 8 месяцев назад

Пока что доделали вариант где в бд хранится номер сущности, а не её id, но название поля там entityId, а не entityNo, что путает. Т.е. надо или переименовывать атрибут, или переделывать везде на id. И тут скорее что удобнее и логичнее. а еще единообразнее, ибо комментари и активно крептся по id

 demius 8 месяцев назад

новые задачи и идеи это хорошо, но мы так и не ответили на вопрос, мы будем крепить файлы по id сущности или по её номеру.

  • номер естественнен, легче понимать к чему приекрпелен файл
  • с id проще работать, например получить из абстрактного репозитория сущность.
 demius 8 месяцев назад

Начали делат галарею с циклом на стороне твига. В целом она даже выводит инфу в твиг, осталось нарисовать галерею.

 demius 8 месяцев назад

Дуаю сейчас галерею будем делать с циклом на стороне твига. После если понадоится - переделаем.

 demius 8 месяцев назад

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

 demius год и 4 дня назад

вот и начался сезон, фестивалей в нем не мало, и месяц до платформы, так что кажется все это на паузе тепрь до конца июля

 demius год и 1 месяц назад

Идея пока не очень актулаьная, но в целом важная. А не хранить ли нам рассчитанный путь до файла прямо в таблице в отдедбной колонке? Да, это некоторая денормализация, но не критичная. Так мы сможем найти запись в тбалице по найденному файлу. В сулчае если мы решим изменить правила построеня пути, это не сломает предыдущие файлы, и можно неспешно их фоном обновить позже. В случае необзодимости файл переметить, переименовать или что подобное, так же будет проще не потерять его.

 demius год и 1 месяц назад

В целом ничего не мешает даже в сервисе сделать раздельные методы для разных таргетов. А после разделить FileService на FileUploader, и FileManager

 demius год и 1 месяц назад

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

 demius год и 1 месяц назад

Ну, что поздравляем нас. Файл наконец отправляется таки на сервер. Пока вопросы с сохранением инфы об этом базе. С получением и отображением его. Но все таки, дело сдвинуто с мертвой точки!

 demius год и 1 месяц назад

Уф, наконец мяч на стороне бекенда. Тут то же вопросы.

  • если объект файл не знает о связи с проектом, как он получит путь до файла?
  • а если знает, то не выйдет ли так, что таблица связи attachment не так уж и нужна?
 demius год и 1 месяц назад

как-то в итоге я и без dropZone встал на том же месте. Есть реактивная ссылка на инпут, в котором вся инфа. Есть formData для ajax. Есть поля где те же данные будут отображаться в виджете.

 demius год и 1 месяц назад

И вот май наступил. 2 месяца паузы .вспоминаем на чем остановились и что решили.

 demius год и 1 месяц назад

И вот прошел целый месяц с последнего раза, как я об этой задаче думал. Уже май на носу.

 demius год и 2 месяца назад

Вынесли идею сложного vue-компонента в tndt-211. Пока нет сил так глубоко копать фронтенд, мы в нем закапываемся и все стоит.

 demius год и 2 месяца назад

Март идет к концу, а задача забуксовала. Давайте подумаем над тем, как бы её упростить. Здесь много нового бекенд функционала, давайте сложный и гибки vue-загрузчик отложим на потом, а тут сделаем максимально простую форму в стиле web 1.0.
Единственное что усложнит бекенд, это роут на который нужно будет сделать редирект после загрузки.

 demius год и 3 месяца назад

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

 demius год и 3 месяца назад

И вот начался март, и что-то пока совсем некогда сесть за задачу. А ведь в ней еще готова только меньшая часть. А за ней еще и работа с картинками. Может пока отложить dropZone и её обвязку и ajax агрузку на следующий этап?

 demius год и 3 месяца назад

Множественную загрузку отложим в tndt-209, чтобы н раздувать задачу.

 demius год и 3 месяца назад

Готовых компоннтов аплоадера на js не то, чтобы нет. Скорее нет какого-то общепринятого и популярного. А потому думается надо делать свой, саользуя vueUse как я и предполагал с начала.

 demius год и 4 месяца назад

и так, теерь кусочек со стороны аплоада. Dropzone есть готовый у таблер. но сходу не подключается. В js-пакетах правда черт ногу сломит, этот dropzone у них встроенный или внешний, и как его подключить через webpack.

  • плюс в том, что он уже в проекте и стилизован под таблер
  • минус в том, что это не самое популяное и поддерживаемое решение и документации по нему немного.
  • минус он не рассчитан на вью, и если будем в него заворчаивать - это гемор. Альтернативный вариант обособленный dropZone от useVue коллекции готовых плагинов к вью.
  • плюс, уже готов быть виджетом вью.
  • пока жив вью он то же по идее будет хорошо поддерживаться.
 demius год и 4 месяца назад

Это было очень неочевидно, но похоже мы таки освоили отдачу файлов через X-Accel. Т.е. система работает, и тепреь убирать это все в сервис и делать аплоадер

 demius год и 4 месяца назад

Процесс пошел, сущность в первом приближении есть. Volume к php и nginx прикрепляется, nginx с неё файлы отдает. Осталось со стороны php придумать отдачу для private

 demius год и 4 месяца назад

надо уже определяться с приватным и публичным путем и volume.

  • не хочется городить ишних volume, пусть будет единый с двумя папками.
  • как их оражать в nginx? Может два location, одно с правилом изменения пути, другое с правилом получения по X-Accel
 demius год и 4 месяца назад

Ну вот и все, рабоа начата. Конечно есть еще куча непонятных вопросов, но лучше уж с ними столкнуться при написании кода, и там принимтаь временные и постоянные решения, чем сидеть которую неделю раздумывать иготовится. Думается, что основное мы определили.

 demius год и 4 месяца назад

Up, не забываем, что за всеми дополнительными задачами. основная, начать крепить к проектам фотки чертежей, и прочего.

 demius год и 4 месяца назад

Кстати, чтобы не плодить вложенные сущности, хороший повод попробовать в деле Embedable. Чтобы доктрина по type сразу гидрировала нужную сущность. А сущность ImageFile будет наследоваться от File.

Кстати да, дуамю систему все же называть File, а не Upload, хотя можно еще подумать.

 demius год и 4 месяца назад

Вывод в тегах в тексте вероятно будет позже, это не так просто. Плюс это скорее vue на textarea, чтобы оперативно искать загруженное, а может быть и на лету грузить и крепить.

 demius год и 4 месяца назад

Ну все, берем в работу, делаем минимально необходимый функционал:

  • система хранения файлов и инфы о них
  • аплоадер
  • привязка к проекту, документу, задаче
  • вывод и просомт в задачах и документах (хотя бы блоком под описанием)
 demius год и 9 месяцев назад

https://uppy.io/docs/quick-start/ аплоадер файлов сторона фронтенда

 demius 2 года назад

К этому лету мы это не успели, а осенью важность несколько снизится, но к следующей весне надо непременно. (так что вероятно у 3 версии будет мало минорных релизов)

 demius 2 года назад

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

 demius 3 года назад

Для tndt этот эпик менее важен, чем гипертекст, связи и т.д. А вот для других проектов, например дачи очень не хватает. Плюс возможность вставить документ и картинку - повод активнее заняться документами

 demius 3 года назад

Задачу возможно стоит разбить на несколько. Как минимум обдумать над минимлаьно необходимым функционалом и основным. Как минимум мы хотим раздельные конфиги для аватарок и аттачментов (как изображений, так и разных документов нестандартных расширений, возможно больших), сабнейлы. Если сами аватарки могут и подождать, то даче очень нужно прикрепить нарисованные нами планы. Так что либо в v0.3 либо в v0.4

 demius 3 года назад

Up. Чуть не забыли и не завели по новой. Очень не хватает и фильтрации и категорий.