fix: added user doc + tech doc. minor fixes

This commit is contained in:
2026-01-22 15:27:07 +03:00
parent eb43364f0f
commit c5ae5294ca
13 changed files with 477 additions and 1232 deletions

145
README.md Normal file
View File

@@ -0,0 +1,145 @@
# LicenseManager — пользовательская документация
## Назначение
LicenseManager — настольное приложение на Qt5 для ведения базы клиентов и выпуска файлов лицензий на основе аппаратного идентификатора.
## Возможности
- хранение клиентов в локальной базе SQLite;
- добавление, редактирование и удаление записей;
- импорт данных клиента из JSON-файла (drag-and-drop или выбор файла);
- выдача файла лицензии по выбранной записи;
- отображение статуса базы и информации о сборке.
## Требования
- ОС: Linux/Windows/macOS (Qt5);
- зависимости при сборке: Qt5 (Core, Gui, Widgets, Sql), OpenSSL;
- для SQLite: системный драйвер Qt `QSQLITE` (например, пакет `libqt5sql5-sqlite` в Debian/Ubuntu).
## Сборка из исходников
```bash
cmake -S . -B build
cmake --build build -j
./build/LicenseManager
```
## Установка как .deb (опционально)
```bash
./deb/build.sh /path/to/LicenseManager
sudo dpkg -i licensemanager_*.deb
```
## Первое использование и база данных
- Приложение хранит данные в `./db.sqlite` относительно текущей рабочей директории.
- При первом запуске, если структура базы отсутствует, приложение предложит создать базу.
- Если нужен фиксированный путь, запускайте приложение из нужной папки или измените `DB_PATH` в коде.
## Интерфейс
### Таблица клиентов
Столбцы:
- Фамилия, Имя, Отчество
- Email, Телефон
- Компания, Город
- Срок лицензии (если пусто — отображается `Permanent`)
- Комментарий
### Панель инструментов
- Add client — добавить запись;
- Edit client — редактировать выбранную запись;
- Delete client — удалить выбранные записи;
- Get info — информация о сборке.
### Контекстное меню таблицы
- Reload table — обновить список;
- Add/Edit/Delete client — действия с записями;
- Get license file — сформировать файл лицензии.
### Иконки действий
| Действие | Иконка | Файл |
| --- | --- | --- |
| App icon | <img src="deps/icon.png" width="28" height="28" alt="App"> | `deps/icon.png` |
| Reload table | <img src="deps/reload.png" width="28" height="28" alt="Reload"> | `deps/reload.png` |
| Add client | <img src="deps/add.png" width="28" height="28" alt="Add"> | `deps/add.png` |
| Edit client | <img src="deps/edit.png" width="28" height="28" alt="Edit"> | `deps/edit.png` |
| Delete client | <img src="deps/delete.png" width="28" height="28" alt="Delete"> | `deps/delete.png` |
| Get info | <img src="deps/info.png" width="28" height="28" alt="Info"> | `deps/info.png` |
| Get license file | <img src="deps/getLicenseFile.png" width="28" height="28" alt="License file"> | `deps/getLicenseFile.png` |
| Drop files (автозаполнение) | <img src="deps/dropFiles.png" width="28" height="28" alt="Drop files"> | `deps/dropFiles.png` |
### Строка статуса
Показывает состояние базы (готова/ошибка/в работе).
## Работа с клиентами
### Добавление
1. Нажмите `Add client`.
2. Вкладка `File autofilled`:
- перетащите JSON-файл на область или нажмите и выберите файл;
- данные будут подставлены автоматически.
3. Вкладка `Main info`:
- заполните поля вручную.
4. Вкладка `License time`:
- включите `License is temporally`, чтобы выбрать дату окончания.
5. Нажмите `Save`.
Важно: поле `Hardware hash` можно редактировать только при добавлении записи.
### Редактирование
1. Выберите одну запись.
2. Нажмите `Edit client`.
3. Измените данные и нажмите `Save`.
Если нужно изменить `Hardware hash`, удалите запись и создайте новую.
### Удаление
Выберите записи и нажмите `Delete client` (или через контекстное меню). Подтвердите удаление.
### Обновление списка
Используйте `Reload table` для перечитывания данных из базы.
## Генерация файла лицензии
1. Выберите одну запись в таблице.
2. Нажмите `Get license file`.
3. Укажите место сохранения (по умолчанию — `Documents/` или `Home/`).
4. Файл сохраняется с расширением `.dat` (если расширение не указано, оно добавляется автоматически).
Внутри файла содержится зашифрованный (RSA) CBOR/JSON с полями:
- `machineId` — аппаратный идентификатор (`hardwareHash`);
- `validUntil` — дата окончания лицензии в ISO-формате (опционально).
## Формат JSON для авто‑заполнения
Пример:
```json
{
"lastName": "Иванов",
"firstName": "Иван",
"patronymic": "Иванович",
"email": "ivan@example.com",
"phone": "+7(777)777-77-77",
"city": "Москва",
"yourCompany": "ООО Ромашка",
"hardwareHash": "abcdef0123456789"
}
```
Любое поле можно опустить — оно останется пустым. Для выдачи лицензии важно заполнить `hardwareHash`.
## Хранилище данных
SQLite-файл: `db.sqlite` в рабочей директории.
Таблица `clients`:
- `id` (INTEGER, PK, AUTOINCREMENT)
- `city`, `email`, `firstName`, `hardwareHash`, `lastName`, `patronymic`, `phone`, `yourCompany` (TEXT, NOT NULL)
- `licenseTime` (TEXT, nullable)
- `comment` (TEXT, nullable)
## Настройки
Размеры окон сохраняются через `QSettings` (организация `LicenseManager`).
Расположение конфигурации зависит от ОС (на Linux обычно `~/.config/LicenseManager/`).
## Технический обзор (для сопровождения)
- Стек: C++20, Qt5 Widgets/Sql, OpenSSL, SQLite.
- Основные модули:
- `MainWidget` — главное окно, таблица, меню, выдача лицензии.
- `LicenseModel` — модель таблицы и работа с SQLite (в асинхронных задачах).
- `EditClientDialog` — диалог добавления/редактирования, импорт JSON.
- `LicenseGenerator`/`Crypt` — утилиты шифрования и генерации файла (часть функций не привязана к UI).
- Ресурсы Qt (`deps.qrc`) включают иконки, `tables.ddl` для инициализации БД и приватный ключ `Key`.
- Для смены ключа шифрования замените `deps/Key` и пересоберите проект.