Десктопное приложение для управления автосалоном, интеграции бизнес-логики на уровне СУБД и ведения отчетности. Проект реализован на базе архитектурного паттерна Smart Database (толстая база данных) с нативным кроссплатформенным клиентом.
Весь процесс развертывания инфраструктуры (БД в Docker), инициализации схемы, генерации демонстрационного датасета и запуска десктопного интерфейса автоматизирован через Makefile.
git clone https://github.com/4frag/courcework
cd courcework
make start- Database Server: Microsoft SQL Server 2022 (развернут в Docker-контейнере).
- Client Framework: Electron (Node.js + Chromium Runtime).
- Database Driver: mssql (асинхронный клиент для Node.js).
- Automation: GNU Make / Docker Compose.
Команда запуска в Makefile спроектирована по лучшим практикам непрерывной интеграции:
- docker compose up -d --wait запускает контейнер СУБД и блокирует дальнейший шаг до тех пор, пока внутренний контейнерный Healthcheck (sqlcmd -Q "SELECT 1" -C) не вернет статус healthy. Флаг -C используется для безопасного обхода самоподписанных TLS-сертификатов внутри тестового контура.
- Автоматически накатывается схема БД, триггеры, представления и процедуры (make install-schema).
- Генерируется демонстрационный датасет объемом 1050+ строк с фиксацией первичных ключей через временное переключение SET IDENTITY_INSERT ON, что гарантирует ссылочную целостность связей Клиент -> Тест-драйв -> Контракт при любых перезапусках.
Вместо ресурсоемкого для СУБД смещения через OFFSET / FETCH, в табличном интерфейсе клиентов реализована пагинация по ключу:
SELECT TOP (@limit) ClientID, LastName, ClientPhone, BaseSign
FROM Clients
WHERE ClientID > @anchorId
ORDER BY ClientID ASC
Это переводит операцию сканирования таблицы (Table Scan) в эффективный поиск по индексному дереву первичного ключа (Index Seek), обеспечивая мгновенный отклик UI на больших объемах данных.
Для исключения багов Chromium Event Loop (Focus Trap / Blur), возникающих при вызове блокирующих синхронных окон alert() и confirm(), в приложении реализован паттерн асинхронных IPC-мостов:
- Рендерер отправляет запрос: ipcRenderer.invoke('show-native-dialog', ...)
- Главный процесс (Main Process) перехватывает его через ipcMain.handle и вызывает нативное системное диалоговое окно операционной системы средствами dialog.showMessageBox. Это гарантирует корректный возврат фокуса ввода в HTML-документ после закрытия модалок.
Удаление сущностей реализовано программно-каскадным методом: перед удалением мастер-записи из Clients приложение очищает дочерние транзакции в TestDrives, предотвращая появление «записей-сирот» (orphaned rows) и изолируя бизнес-логику от случайных падений по Foreign Key Constraints.
- docker-compose.yml — конфигурация изолированного контейнера MS SQL Server 2022 с настроенным хелсчеком.
- Makefile — оркестрация командами сборки, миграций и запуска.
- schema.sql — DDL-скрипт структуры БД, включающий триггеры, модифицирующие представления (с WITH CHECK OPTION) и логику генерации данных.
- index.js — Main-процесс Electron, отвечающий за жизненный цикл окон и обработку системных IPC-диалогов.
- index.html — Renderer-процесс (фронтенд-интерфейс, стили, табличная/ленточная формы и AJAX-запросы к БД).