TimeKeeper — це корпоративний додаток, розроблений на платформі .NET 8, який використовує технологію WPF для створення сучасного десктопного інтерфейсу. Для зберігання даних застосовується реляційна база даних MySQL, а для організації асинхронної комунікації між компонентами — RabbitMQ з використанням бібліотеки MassTransit.
Проєкт реалізує 24-годинний синхронний кеш для клієнтів (ПК). Таблиця Persons
автоматично очищується (truncate) кожні 24 години за допомогою (event sheduler) в mysql для підтримки актуальності та швидкодії системи. Всі важливі дані зберігаються в логах у форматах .log
, .csv
та .json
для подальшого аналізу та аудиту.
- .NET 8 — основна платформа розробки
- WPF (Windows Presentation Foundation) — технологія побудови UI
- MySQL — реляційна база даних
- RabbitMQ — брокер повідомлень
- MassTransit — бібліотека для роботи з RabbitMQ
- Патерн проектування MVC (Model-View-Controller)
- Принципи ООП (Об’єктно-орієнтоване програмування)
Проєкт структурований за класичною трирівневою архітектурою із застосуванням патерну MVC для чіткого розділення відповідальностей:
- Відповідає за бізнес-логіку і роботу з даними.
- Основні класи:
Person.cs
— базовий клас, що описує сутність "Персона".Staff.cs
— наслідний клас, що розширює функціоналPerson
для співробітників.
- Модель взаємодіє із базою даних MySQL через ORM або ADO.NET.
- Відповідає за візуальне відображення інформації та взаємодію з користувачем.
- Реалізовано у вигляді WPF вікон та контролів.
- Логіка UI розбита по окремих класах, наприклад:
Windows.Btn.cs
— обробка подій кнопок, виклики відповідних команд і оновлення інтерфейсу.
- Посередник між View та Model.
- Обробляє події користувача, виконує валідацію, ініціює оновлення даних.
- Забезпечує комунікацію з сервісами, такими як MassTransit для обміну повідомленнями.
- Синхронізація з віддаленою базою даних здійснюється через RabbitMQ (MassTransit), що дозволяє ефективно обробляти великі об’єми повідомлень та забезпечувати актуальність даних у реальному часі.
- Щоденне очищення таблиці
Persons
(TRUNCATE
) з метою збереження високої продуктивності та уникнення накопичення застарілої інформації. - Важливі події і зміни логуються у форматах
.log
,.csv
,.json
для подальшого аудиту і аналізу.
/TimeKeeper
├─ /Models
├─ /Data
├─ PersonList.cs
├─ /DataBase # файли repository
├─ /Enum # використуємі перелічення
├─ /Queue # трансляція черги та її слухач
├─ /Utils # додаткові утиліти
├─ /View
└─ DataGridService.cs # логіка відображення даних в DataGrid
├─ /Controllers
└─ PersonController.cs # контролер для person
└─ BlockUserController.cs # контролер для блокування users по sid
├─ /Controllers
└─ Windows.Btn.cs # логіка кнопок та взаємодія з UI
└─ README.md
Security | License ua | Changelog | License ru | Contribution | License en | Code of conduct | Releases