Skip to content

4frag/courcework

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Курсовая работа: Информационная система «АвтоСалон»

Десктопное приложение для управления автосалоном, интеграции бизнес-логики на уровне СУБД и ведения отчетности. Проект реализован на базе архитектурного паттерна 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.

🏗 Архитектура и реализованные фичи

1. Надежный DevOps-пайплайн запуска (make start)

Команда запуска в Makefile спроектирована по лучшим практикам непрерывной интеграции:

  • docker compose up -d --wait запускает контейнер СУБД и блокирует дальнейший шаг до тех пор, пока внутренний контейнерный Healthcheck (sqlcmd -Q "SELECT 1" -C) не вернет статус healthy. Флаг -C используется для безопасного обхода самоподписанных TLS-сертификатов внутри тестового контура.
  • Автоматически накатывается схема БД, триггеры, представления и процедуры (make install-schema).
  • Генерируется демонстрационный датасет объемом 1050+ строк с фиксацией первичных ключей через временное переключение SET IDENTITY_INSERT ON, что гарантирует ссылочную целостность связей Клиент -> Тест-драйв -> Контракт при любых перезапусках.

2. Производительная Keyset-пагинация (Cursor Pagination)

Вместо ресурсоемкого для СУБД смещения через OFFSET / FETCH, в табличном интерфейсе клиентов реализована пагинация по ключу:

SELECT TOP (@limit) ClientID, LastName, ClientPhone, BaseSign 
FROM Clients 
WHERE ClientID > @anchorId 
ORDER BY ClientID ASC

Это переводит операцию сканирования таблицы (Table Scan) в эффективный поиск по индексному дереву первичного ключа (Index Seek), обеспечивая мгновенный отклик UI на больших объемах данных.

3. Асинхронное межпроцессное взаимодействие (IPC) в Electron

Для исключения багов Chromium Event Loop (Focus Trap / Blur), возникающих при вызове блокирующих синхронных окон alert() и confirm(), в приложении реализован паттерн асинхронных IPC-мостов:

  • Рендерер отправляет запрос: ipcRenderer.invoke('show-native-dialog', ...)
  • Главный процесс (Main Process) перехватывает его через ipcMain.handle и вызывает нативное системное диалоговое окно операционной системы средствами dialog.showMessageBox. Это гарантирует корректный возврат фокуса ввода в HTML-документ после закрытия модалок.

4. Контроль ссылочной целостности

Удаление сущностей реализовано программно-каскадным методом: перед удалением мастер-записи из 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-запросы к БД).

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors