chore: initial project structure
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
## О проекте
|
||||
|
||||
Tanabata File Manager или сокращенно TFM — многопользовательский веб-файловый менеджер, организующий файлы по тегам. Работает на клиент-серверной архитектуре, управляется через веб-интерфейс. Главная цель проекта — обеспечить централизованное хранение файлов на сервере, доступ к ним и управление ими через веб как с компьютера, так и со смартфона. В первую очередь данное приложение ориентировано на изображения и видео.
|
||||
|
||||
## Общая архитектура
|
||||
|
||||
- File storage
|
||||
- Relational database (PostgreSQL)
|
||||
- REST API service (Go)
|
||||
- Frontend (SvelteKit)
|
||||
|
||||
Приложение предполагается разворачивать внутри контейнера Docker. Фронтенд и бэкенд - в одном контейнере, СУБД - отдельно (на моем сервере планируется подключать к СУБД на хосте). Все файлы, управляемые Танабатой, будут храниться кучей в одной папке. Имя файла на диске совпадает с его UUID в БД.
|
||||
|
||||
Приложение является PWA, которое можно установить на компьютер или смартфон.
|
||||
|
||||
В будущих версиях планируется введение поддержки других СУБД.
|
||||
|
||||
## Основные понятия
|
||||
|
||||
**Файл** — один файл на сервере. Может иметь сколько угодно тегов, может принадлежать скольким угодно пулам. Имеет автора, а также может иметь настройки доступа (пользователь (может быть null - таким образом можно делать файл публичным), флаг права на чтение, флаг права на изменение). Имеет оригинальное название и метаданные (ключ-значение, в том числе все данные EXIF).
|
||||
|
||||
**Тег** — метка файла. Может быть привязан к скольким угодно файлам, может быть привязан к одной категории. Имеет название, описание, метаданные (ключ-значение). Может иметь автотеги.
|
||||
|
||||
**Автотег** — правило, согласно которому при привязке к файлу условного тега А к этому же файлу автоматически привязывается условный тег Б.
|
||||
|
||||
**Категория** — сущность, логически объединяющая собой несколько тегов. Имеет название, описание, метаданные (ключ-значение).
|
||||
|
||||
**Пул** — логическое объединение файлов. Имеет название, описание, метаданные (ключ-значение). Файлы внутри могут быть как отсортированы автоматически, так и расположены в порядке, заданном пользователем вручную.
|
||||
|
||||
## Функциональные требования
|
||||
|
||||
1. Управление файлами
|
||||
1. Просмотр списка файлов (lazy load, pagination)
|
||||
2. Фильтрация файлов по тегам и метаданным
|
||||
3. Просмотр и редактирование настроек сортировки (сохраняется для каждого пользователя)
|
||||
4. Выделение нескольких файлов (Ctrl, Shift) и действия с ними
|
||||
1. Привязка/отвязка тегов
|
||||
2. Копирование/вставка тегов
|
||||
3. Добавление в пул
|
||||
4. Просмотр и редактирование настроек доступа
|
||||
5. Удаление (с запросом подтверждения)
|
||||
5. Просмотр одного файла
|
||||
6. Действия с одним файлом
|
||||
1. Привязка/отвязка тегов
|
||||
2. Копирование/вставка тегов
|
||||
3. Добавление в пул
|
||||
4. Просмотр и редактирование настроек доступа
|
||||
5. Замена файла (загрузка нового под таким же ID)
|
||||
6. Удаление (с запросом подтверждения)
|
||||
7. Листание файлов, как в галерее
|
||||
8. Загрузка новых файлов через веб-интерфейс (через форму или drag-n-drop прямо на список)
|
||||
9. Импорт новых файлов из папки на сервере
|
||||
10. Выявление дубликатов, в частности, изображений и видео
|
||||
1. Отображение групп дубликатов
|
||||
2. Возможность отвязывания фальшивых дубликатов (чтобы приложение запомнило, что изображение А не является дубликатом изображения Б)
|
||||
3. Возможность выбора дубликата для удаления/сохранения
|
||||
4. Возможность выбора, какие поля от какого дубликата подтягивать
|
||||
11. Корзина
|
||||
1. Просмотр файлов в корзине
|
||||
2. Восстановление из корзины
|
||||
3. Окончательное удаление
|
||||
2. Управление тегами
|
||||
1. Просмотр списка тегов (lazy load, pagination)
|
||||
2. Поиск по названию
|
||||
3. Просмотр и редактирование настроек сортировки (сохраняется для каждого пользователя)
|
||||
4. Выделение нескольких тегов (Ctrl, Shift) и действия с ними
|
||||
1. Назначение автотегов
|
||||
2. Изменение категории
|
||||
3. Удаление (с запросом подтверждения)
|
||||
5. Просмотр одного тега
|
||||
6. Действия с одним тегом
|
||||
1. Редактирование названия, описания и метаданных (ключ-значение)
|
||||
2. Изменение категории
|
||||
3. Назначение автотегов
|
||||
4. Удаление (с запросом подтверждения)
|
||||
7. Создание тега
|
||||
1. Внесение названия, описания и метаданных (ключ-значение)
|
||||
2. Назначение категории (опционально)
|
||||
3. Назначение автотегов
|
||||
3. Управление категориями
|
||||
1. Просмотр списка категорий (lazy load, pagination)
|
||||
2. Поиск по названию
|
||||
3. Просмотр и редактирование настроек сортировки (сохраняется для каждого пользователя)
|
||||
4. Выделение нескольких категорий (Ctrl, Shift) и действия с ними
|
||||
1. Просмотр привязанных общих тегов и тегов, привязанных к некоторым, но не ко всем
|
||||
2. Привязка/отвязка тегов
|
||||
3. Удаление (с запросом подтверждения)
|
||||
5. Просмотр одной категории
|
||||
6. Действия с одной категорией
|
||||
1. Редактирование названия, описания и метаданных (ключ-значение)
|
||||
2. Просмотр привязанных тегов
|
||||
3. Привязка/отвязка тегов
|
||||
4. Удаление (с запросом подтверждения)
|
||||
7. Создание категории
|
||||
1. Внесение названия, описания и метаданных (ключ-значение)
|
||||
2. Привязка тегов
|
||||
4. Управление пулами
|
||||
1. Просмотр списка пулов (lazy load, pagination)
|
||||
2. Поиск по названию
|
||||
3. Просмотр и редактирование настроек сортировки (сохраняется для каждого пользователя)
|
||||
4. Выделение нескольких пулов (Ctrl, Shift) и действия с ними
|
||||
1. Просмотр и редактирование настроек доступа
|
||||
2. Удаление (с запросом подтверждения)
|
||||
5. Просмотр одного пула
|
||||
6. Действия с одним пулом
|
||||
1. Редактирование названия, описания и метаданных (ключ-значение)
|
||||
2. Просмотр и редактирование настроек доступа
|
||||
3. Просмотр всех файлов, входящих в пул
|
||||
4. Фильтрация файлов по тегам
|
||||
5. Изменение настройки сортировки файлов (в том числе можно отключить автоматическую сортировку)
|
||||
6. Ручное изменение порядка файлов (при отключенной сортировке)
|
||||
7. Удаление (с запросом подтверждения)
|
||||
7. Создание категории
|
||||
1. Внесение названия, описания и метаданных (ключ-значение)
|
||||
2. Привязка тегов
|
||||
5. Управление пользовательскими настройками
|
||||
1. Имя пользователя
|
||||
2. Пароль
|
||||
3. Сессии
|
||||
1. Завершение сессии
|
||||
4. Путь к папке на сервере, которая будет сканироваться при импорта файлов
|
||||
6. Управление настройками сервера (админка)
|
||||
1. Пользователи
|
||||
1. Просмотр списка
|
||||
2. Просмотр одного
|
||||
3. Создание
|
||||
4. Удаление
|
||||
5. Блокировка/разблокировка
|
||||
6. Установка роли (читатель/редактор)
|
||||
7. Журналирование пользовательских действий в БД
|
||||
1. Просмотры файлов
|
||||
2. Смены настроек доступа к файлам
|
||||
3. Создание/редактирование/удаление файла, тега, категории, пула, связи файл-тег
|
||||
4. Создание/блокировка/разблокировка/удаление пользователя
|
||||
5. Смена роли пользователя
|
||||
6. Авторизация/логаут пользователя
|
||||
7. Завершение сессии
|
||||
|
||||
## Нефункциональные требования
|
||||
|
||||
1. Интерфейс должен быть максимально простым и удобным, все необходимое должно быть под рукой, доступным за минимальное количество действий
|
||||
2. Интерфейс должен быть адаптирован под десктоп и под мобильные устройства
|
||||
3. Интерфейс должен иметь темную и светлую темы
|
||||
4. Использование технологии PWA (также должна быть кнопка, при нажатии которой PWA будет полностью сбрасываться (кроме кэша) и заново загружаться с сервера)
|
||||
5. Возможность сохранять некоторые файлы в кэш и просматривать их оффлайн при использовании установленного PWA
|
||||
6. При первичном запуске приложение должно требовать минимума действий: автоматическая миграция БД, заранее готовый файл docker compose, файл .env с настраиваемыми параметрами установки
|
||||
7. Использование подхода DDD для сервера API
|
||||
8. Не принимать файлы, чей MIME отсутствует в БД (нет в БД — нет поддержки)
|
||||
Reference in New Issue
Block a user