Dedupler год спустя: ~1100 установок и стандартный UI для Filament
Суть пакета в одной картинке
Год назад я выложил Dedupler - пакет, который экономит место на диске, убирая дубликаты файлов из хранилища и не допуская появления новых.
Принцип простой: хэш от содержимого, одна физическая копия, сколько угодно связанных моделей через полиморфную связь.
Небольшая ретроспектива, что изменилось за это время
Установки идут потихоньку: сейчас около 1100 по данным Packagist.
Цены на SSD ниже не стали: экономия от дедупликации стала заметнее, чем год назад.
Что заметил
Ядро работает: Deduplable на моделях, Dedupler::storeFromUploadedFile(), команды для анализа и проверка возможного результата на legacy используются. Но почти в каждом проекте люди пишут один и тот же обвес: поле загрузки, обработка повторной загрузки, отображение уже существующих файлов. Каждый раз заново и каждый раз чуть по-своему.
Что сделал
Вынес UI / логику взаимодействия в отдельный пакет для одной из самых популярных админ панели экосистемы Laravel - Filament: плагин даёт готовый компонент загрузки DeduplerFileUploader.
DeduplerFilesRepeatableEntry::make()
->label('Документы во вложении'),
Всё остальное - вычисление хэша, проверка на существующий файл, привязка к объекту - происходит при сохранении формы. Дописывать в логику ничего не нужно.
Что внутри
Расширение стандартного филаментовского FileUpload.
Работает с полиморфными связями модели Laravel через Deduplable.
Одинаковый UI во всех формах проекта - не надо каждый раз описывать как «правильно» грузить файлы.
Построен поверх Dedupler, так что вся логика дедупликации и миграции legacy остаётся в одном месте.
Итог
Год назад была идея «не хранить дубликаты». Сейчас это два пакета: бэкенд, который гарантирует отсутствие дублей, и готовый плагин для Filament, который делает процесс незаметным для разработчика