ІО-31 Григорчук Денис | Consultation Booking System
Опис проєкту
Consultation Booking System — це адаптивний веб-застосунок для запису на консультації.
Система дозволяє користувачу переглядати доступні консультації, створювати запис через форму, переглядати створені записи та керувати ними через простий REST API на Node.js та Express.js.
Проєкт виконано як лабораторну роботу з дисципліни, пов’язаної з web-орієнтованими технологіями та backend-розробкою.
Мета проєкту
Метою проєкту є створення адаптивного веб-застосунку для запису на консультації та реалізація базової серверної частини з CRUD-операціями для записів.
Опис бізнес-логіки
Система працює за такою логікою:
- Користувач відкриває сайт і переглядає доступні консультації.
- Користувач заповнює форму запису: ім’я, email, дату та час.
- Дані відправляються на сервер.
- Сервер зберігає запис у пам’яті та повертає відповідь.
- Користувач бачить створений запис у списку на сторінці.
- REST API дозволяє створювати, переглядати, редагувати та видаляти записи.
Функціональні вимоги
- Перегляд списку доступних консультацій.
- Відображення базової інформації про кожну консультацію.
- Створення нового запису на консультацію.
- Введення імені, email, дати та часу запису.
- Збереження створених записів.
- Перегляд усіх записів.
- Редагування існуючого запису.
- Видалення запису.
- Адаптивне відображення інтерфейсу на різних пристроях.
- Підтримка адаптивної навігації з бургер-меню на малих екранах.
Нефункціональні вимоги
- Простий і зрозумілий інтерфейс.
- Адаптивна верстка.
- Коректна робота в сучасних браузерах.
- Зручна структура коду для подальшої підтримки.
- Швидка відповідь сервера на запити.
- Читабельність інтерфейсу на екранах різного розміру.
Ролі користувачів
Client
- переглядає консультації;
- створює запис;
- переглядає створені записи.
Administrator
- переглядає всі записи;
- оновлює записи;
- видаляє записи;
- керує списком консультацій.
Use-Case Diagram
flowchart LR
Client((Client))
Admin((Administrator))
UC1[View consultations]
UC2[Fill booking form]
UC3[Create booking]
UC4[View bookings]
UC5[Update booking]
UC6[Delete booking]
UC7[Manage consultations]
Client --> UC1
Client --> UC2
Client --> UC3
Client --> UC4
Client --> UC5
Client --> UC6
Admin --> UC4
Admin --> UC5
Admin --> UC6
Admin --> UC7
ER Diagram
erDiagram
CLIENT ||--o{ APPOINTMENT : makes
CONSULTATION ||--o{ APPOINTMENT : includes
CLIENT {
int id
string name
string email
string phone
}
CONSULTATION {
int id
string title
string description
string duration
string availableTime
}
APPOINTMENT {
int id
int clientId
int consultationId
string date
string time
string status
}
Як запустити проєкт
- Встановити залежності:
npm install
- Запустити сервер:
node server/server.js
- Відкрити у браузері:
http://localhost:3000
Висновок
У ході виконання лабораторної роботи було розроблено адаптивний веб-застосунок для запису на консультації. Проєкт містить зручний інтерфейс, форму запису, список записів і REST API для CRUD-операцій. Під час виконання роботи було закріплено навички роботи з HTML, CSS, JavaScript, Node.js, Express.js, а також базового аналізу та моделювання системи.
Lab 2 — MySQL & Sequelize Integration
Опис
У другій лабораторній роботі проєкт було розширено шляхом додавання бази даних MySQL та інтеграції її із серверною частиною.
Було реалізовано:
- створення бази даних;
- створення таблиць;
- виконання SQL-запитів;
- підключення Node.js до MySQL;
- використання ORM Sequelize;
- зв’язок One-to-Many між таблицями.
База даних
Використовується база даних:
consultation_db
Таблиці:
clients
appointments
- id
- topic
- date
- time
- status
- clientId
Зв’язок
Реалізовано зв’язок:
One-to-Many
- один клієнт може мати багато записів;
- один запис належить одному клієнту.
Робота з базою даних
Було виконано основні SQL-операції:
- INSERT
- SELECT
- UPDATE
- DELETE
Для підключення Node.js до MySQL використано пакет mysql2.
Для роботи з базою даних через ORM використано Sequelize.
Висновок (Lab 2)
У другій лабораторній роботі було реалізовано інтеграцію бази даних MySQL із серверною частиною веб-застосунку.
Отримано практичні навички:
- роботи з SQL;
- підключення Node.js до MySQL;
- використання ORM Sequelize;
- побудови зв’язків між таблицями.
Lab 3 — REST API, Authentication & JWT
Опис
У третій лабораторній роботі було реалізовано функціональний REST API для роботи з користувачами.
Додано:
- реєстрацію користувача;
- авторизацію користувача;
- захищені маршрути;
- валідацію даних;
- обробку помилок;
- використання JWT-токенів.
Реалізований функціонал
Реєстрація
POST /api/register
- перевірка даних (email, password);
- перевірка на існуючого користувача;
- хешування пароля через bcryptjs;
- збереження користувача в базі даних.
Авторизація
POST /api/login
- перевірка email і пароля;
- порівняння хешу пароля;
- генерація JWT токена;
- повернення токена клієнту.
Захищений маршрут
GET /api/profile
- перевірка JWT токена через middleware;
- доступ тільки для авторизованих користувачів;
- повернення інформації про користувача.
Валідація та помилки
Реалізовано:
- перевірку на пусті поля;
- перевірку довжини пароля;
- перевірку існування користувача;
- обробку помилок через try/catch.
Використані HTTP статуси:
- 200 — успіх
- 201 — створено
- 400 — помилка даних
- 401 — не авторизований
- 500 — помилка сервера
Технології
- Node.js
- Express.js
- MySQL
- Sequelize
- bcryptjs
- jsonwebtoken (JWT)
Висновок (Lab 3)
У ході виконання лабораторної роботи було реалізовано REST API з механізмами реєстрації та авторизації користувачів.
Отримано практичні навички:
- роботи з REST API;
- використання JWT токенів;
- реалізації захищених маршрутів;
- обробки помилок і валідації даних.