Members
(constant) ACTIVITIES
Доступні рівні фізичної активності для налаштування профілю користувача.
- Source:
(constant) AuthContext
Контекст автентифікації застосунку.
Зберігає поточного користувача, стан завантаження та методи входу і виходу.
(constant) BASE_URL
Базова адреса backend API.
Якщо змінна середовища VITE_API_URL задана, використовується вона. Інакше застосунок працює з локальним сервером за замовчуванням.
- Source:
(constant) GOALS
Доступні цілі користувача для розрахунку добової калорійності.
- Source:
(constant) MEALS
Варіанти прийомів їжі, доступні в щоденнику харчування.
(constant) MEALS
Варіанти прийомів їжі, доступні в щоденнику харчування.
- Source:
(constant) addDays
Додає або віднімає задану кількість днів від дати у форматі YYYY-MM-DD.
- Source:
(constant) api
Публічний клієнт для взаємодії фронтенда з backend API.
Містить методи для автентифікації, роботи з профілем користувача, dashboard та записами харчування.
- Source:
(constant) calcActivityGoal
Розраховує рекомендовану ціль активності (ккал/день) на основі цілі користувача. Базується на рекомендаціях ВООЗ: 150-300 хв помірної активності на тиждень.
(constant) calcExerciseKcal
Розрахунок калорій для вправи (для preview на фронті). Повна логіка та сама що на бекенді.
(constant) calcMacroGoals
Розраховує цілі КБЖВ на основі calorie_goal з профілю. Розподіл: 25% білки, 30% жири, 45% вуглеводи
(constant) calcNutrients
Розраховує нутрієнти для заданої кількості грамів на основі значень на 100г
(constant) disabledItems
Майбутні розділи застосунку, які поки що недоступні в інтерфейсі.
(constant) displayDateLong
Форматує дату для відображення в інтерфейсі українською мовою.
- Source:
(constant) express
Центральний опис HTTP-маршрутів backend API.
Цей модуль пов'язує URL-ендпоінти з відповідними контролерами та визначає, які маршрути доступні без автентифікації, а які вимагають перевірки JWT через middleware auth.
Структура маршрутів відображає основні функціональні напрями застосунку: автентифікація, профіль користувача, dashboard, щоденник харчування, статистика та власні продукти.
- Source:
(constant) navItems
Доступні розділи навігації застосунку.
Використовуються для побудови основного меню в боковій панелі.
(constant) pct
Обчислює відсоток виконання цілі в межах від 0 до 100.
(constant) pool :object
Пул підключень до PostgreSQL для роботи з базою даних застосунку.
Ініціалізується зі змінних середовища та використовується в контролерах і конфігураційних модулях для виконання SQL-запитів.
Type:
- object
- Source:
(constant) pool
Бізнес-логіка автентифікації користувача.
Цей модуль відповідає за реєстрацію нового користувача та вхід у систему через email і пароль.
Під час реєстрації виконується перевірка обов’язкових полів, унікальності email, хешування пароля та створення базового профілю. Під час входу перевіряються облікові дані, а після успішної автентифікації формується JWT-токен для подальшого доступу до захищених маршрутів.
(constant) pool
Бізнес-логіка щоденника харчування, статистики та пошуку продуктів.
Цей модуль відповідає за:
- збереження записів про спожиту їжу
- обчислення денних і періодичних показників харчування
- роботу з власними продуктами користувача
- пошук продуктів через зовнішній USDA FoodData Central API
- формування агрегованих даних для dashboard.
Основне бізнес-правило модуля полягає в тому, що всі записи, статистика та власні продукти прив’язані до конкретного авторизованого користувача.
(constant) swaggerUi
Точка входу серверної частини застосунку.
Цей модуль ініціалізує Express-сервер, підключає middleware, реєструє API-маршрути, обробники помилок і запускає застосунок після підготовки структури бази даних.
Через цей файл проходить загальний потік backend-взаємодії: від отримання HTTP-запиту до передачі його в маршрути, middleware автентифікації та контролери.
- Source:
(constant) today
Повертає поточну дату у форматі YYYY-MM-DD.
- Source:
Methods
AuthProvider(props) → {object}
Провайдер автентифікації, який керує станом користувача в застосунку.
Під час ініціалізації відновлює користувача з localStorage, якщо збережено токен і серіалізовані дані користувача. Надає дочірнім компонентам доступ до user, loading, login і logout через AuthContext.
Parameters:
| Name | Type | Description | ||||||
|---|---|---|---|---|---|---|---|---|
props |
object | Властивості компонента. Properties
|
Returns:
JSX-елемент провайдера автентифікації.
- Type
- object
PrivateRoute(props) → {object}
Захищає приватні маршрути застосунку.
Показує сторінку завантаження під час відновлення стану автентифікації. Якщо користувач не авторизований, перенаправляє на сторінку входу.
Parameters:
| Name | Type | Description | ||||||
|---|---|---|---|---|---|---|---|---|
props |
object | Властивості компонента. Properties
|
- Source:
Returns:
JSX-елемент захищеного маршруту або перенаправлення.
- Type
- object
PublicRoute(props) → {object}
Обмежує доступ до публічних маршрутів для авторизованих користувачів.
Якщо користувач уже увійшов у систему, перенаправляє його на головну сторінку. Під час ініціалізації стану автентифікації показує повідомлення про завантаження.
Parameters:
| Name | Type | Description | ||||||
|---|---|---|---|---|---|---|---|---|
props |
object | Властивості компонента. Properties
|
- Source:
Returns:
JSX-елемент публічного маршруту або перенаправлення.
- Type
- object
(async) addCustomFood(req, res) → {Promise.<void>}
Додає власний продукт до персонального списку користувача.
Перевіряє наявність обов'язкових полів і створює запис у таблиці custom_foods. Значення білків, жирів і вуглеводів за замовчуванням дорівнюють 0, якщо їх не передано.
Parameters:
| Name | Type | Description |
|---|---|---|
req |
object | HTTP-запит з даними продукту в тілі запиту. |
res |
object | HTTP-відповідь зі створеним продуктом або повідомленням про помилку. |
Returns:
- Type
- Promise.<void>
(async) addFoodLog(req, res) → {Promise.<void>}
Додає новий запис про спожиту їжу до щоденника користувача.
Перевіряє наявність обов'язкових полів, створює запис у таблиці food_logs і повертає створений об'єкт. Якщо дата не передана, використовує поточну дату.
Parameters:
| Name | Type | Description |
|---|---|---|
req |
object | HTTP-запит з даними запису харчування в тілі запиту. |
res |
object | HTTP-відповідь зі створеним записом або повідомленням про помилку. |
Returns:
- Type
- Promise.<void>
authMiddleware(req, res, next) → {void}
Перевіряє JWT-токен у заголовку Authorization і додає дані користувача до req.user.
Очікує токен у форматі Bearer token. Якщо токен відсутній, повертає 401. Якщо токен невалідний або прострочений, повертає 403.
Parameters:
| Name | Type | Description |
|---|---|---|
req |
object | HTTP-запит із заголовком Authorization. |
res |
object | HTTP-відповідь із повідомленням про помилку у разі неуспішної перевірки. |
next |
function | Функція передачі керування наступному middleware або обробнику. |
- Source:
Returns:
- Type
- void
calcExerciseKcal()
Розраховує калорії для вправи. exercise — об'єкт з таблиці exercises params — { duration_min, distance_km, sets, reps, weight_used_kg, intensity } userWeight — вага користувача в кг
- Source:
(async) createTables() → {Promise.<void>}
Створює основні таблиці бази даних застосунку, якщо вони ще не існують.
Виконує ініціалізацію схеми в межах транзакції, створюючи таблиці users, user_profiles, food_logs і custom_foods. У разі помилки виконує rollback.
- Source:
Returns:
- Type
- Promise.<void>
(async) deleteFoodLog(req, res) → {Promise.<void>}
Видаляє запис про їжу, якщо він належить поточному користувачу.
Виконує видалення за ідентифікатором запису та user_id. Якщо запис не знайдено, повертає 404.
Parameters:
| Name | Type | Description |
|---|---|---|
req |
object | HTTP-запит з id запису в параметрах маршруту. |
res |
object | HTTP-відповідь з підтвердженням видалення або повідомленням про помилку. |
Returns:
- Type
- Promise.<void>
(async) getCustomFoods(req, res) → {Promise.<void>}
Повертає список власних продуктів, створених поточним користувачем.
Результат сортується за назвою у алфавітному порядку.
Parameters:
| Name | Type | Description |
|---|---|---|
req |
object | HTTP-запит з даними авторизованого користувача. |
res |
object | HTTP-відповідь зі списком користувацьких продуктів або повідомленням про помилку. |
Returns:
- Type
- Promise.<void>
(async) getFoodLogs(req, res) → {Promise.<void>}
Повертає список записів харчування поточного користувача за обрану дату.
Якщо дата не передана, використовує поточну дату. Результат сортується за часом створення у зростаючому порядку.
Parameters:
| Name | Type | Description |
|---|---|---|
req |
object | HTTP-запит з необов'язковою датою в query-параметрі. |
res |
object | HTTP-відповідь зі списком записів харчування або повідомленням про помилку. |
Returns:
- Type
- Promise.<void>
(async) getFoodStats(req, res) → {Promise.<void>}
Повертає агреговану статистику харчування користувача за останні N днів.
Обчислює сумарні калорії, білки, жири та вуглеводи для кожної дати у вибраному часовому проміжку. Якщо параметр days не передано, використовується значення 7.
Parameters:
| Name | Type | Description |
|---|---|---|
req |
object | HTTP-запит з необов'язковим query-параметром days. |
res |
object | HTTP-відповідь зі статистикою по днях або повідомленням про помилку. |
Returns:
- Type
- Promise.<void>
getHeaders() → {Record.<string, string>}
Формує стандартні HTTP-заголовки для запитів до API.
Якщо в localStorage збережено JWT-токен, додає заголовок Authorization у форматі Bearer token.
- Source:
Returns:
Об'єкт HTTP-заголовків для fetch-запиту.
- Type
- Record.<string, string>
(async) getProfile(req, res) → {Promise.<void>}
Повертає профіль поточного авторизованого користувача разом з email і name.
Отримує дані з таблиці user_profiles та пов'язаного запису users за ідентифікатором користувача з req.user.id.
Parameters:
| Name | Type | Description |
|---|---|---|
req |
object | HTTP-запит з даними авторизованого користувача. |
res |
object | HTTP-відповідь з даними профілю або повідомленням про помилку. |
Returns:
- Type
- Promise.<void>
(async) login(req, res) → {Promise.<void>}
Автентифікує користувача за email і паролем та повертає JWT-токен.
Перевіряє наявність обов'язкових полів, шукає користувача в базі даних, порівнює хеш пароля, у разі успіху повертає токен і базову інформацію про користувача.
Parameters:
| Name | Type | Description |
|---|---|---|
req |
object | HTTP-запит з email і password у тілі запиту. |
res |
object | HTTP-відповідь з токеном і даними користувача. |
Returns:
- Type
- Promise.<void>
pickMET()
Вибирає MET значення вправи для заданої інтенсивності. Якщо для рівня немає значення — fallback на moderate.
- Source:
(async) register(req, res) → {Promise.<void>}
Реєструє нового користувача, створює базовий профіль і повертає JWT-токен.
Перевіряє обов'язкові поля, унікальність email та мінімальну довжину пароля. Після успішного створення користувача автоматично створює запис у таблиці user_profiles і генерує токен автентифікації.
Parameters:
| Name | Type | Description |
|---|---|---|
req |
object | HTTP-запит з email, password і name у тілі запиту. |
res |
object | HTTP-відповідь з токеном і даними користувача. |
Returns:
- Type
- Promise.<void>
(async) request(method, path, bodyopt) → {Promise.<object>}
Виконує HTTP-запит до backend API і повертає розпарсену JSON-відповідь.
Автоматично додає базову адресу API, стандартні заголовки та, за потреби, серіалізує тіло запиту. Якщо сервер повертає помилку, викидає виняток з текстом помилки.
Parameters:
| Name | Type | Attributes | Default | Description |
|---|---|---|---|---|
method |
string | HTTP-метод запиту. |
||
path |
string | Відносний шлях до API-ендпоінта. |
||
body |
object | null |
<optional> |
null | Тіло запиту для POST/PUT операцій. |
- Source:
Returns:
Дані відповіді сервера у форматі JSON.
- Type
- Promise.<object>
(async) searchUSDA(req, res) → {Promise.<void>}
Виконує пошук продуктів через USDA FoodData Central API і повертає нормалізований список продуктів з основними харчовими показниками.
Отримує пошуковий запит з req.query.q, звертається до зовнішнього API, виділяє калорії, білки, жири та вуглеводи й перетворює відповідь у формат, який використовує клієнтська частина застосунку.
Алгоритм нормалізації відповіді USDA: зовнішній API повертає поживні значення як масив foodNutrients, де кожен показник визначається числовим nutrientId. Для роботи застосунку відповідь перетворюється у спрощену структуру з полями kcal_per100, protein_per100, fat_per100 і carbs_per100.
Використані nutrientId:
- 1008 це калорії
- 1003 це білки
- 1004 це жири
- 1005 це вуглеводи
Parameters:
| Name | Type | Description |
|---|---|---|
req |
object | HTTP-запит з пошуковим рядком у query-параметрі q. |
res |
object | HTTP-відповідь зі списком знайдених продуктів або повідомленням про помилку. |
Returns:
- Type
- Promise.<void>
(async) start() → {Promise.<void>}
Ініціалізує схему бази даних і запускає HTTP-сервер застосунку.
Перед стартом сервера викликає createTables(), щоб переконатися, що необхідні таблиці існують. У разі помилки запуск завершує процес з кодом 1.
- Source:
Returns:
- Type
- Promise.<void>
(async) updateProfile(req, res) → {Promise.<void>}
Оновлює профіль поточного авторизованого користувача та перераховує похідні показники харчування і активності.
Якщо передані weight, height, age і sex, функція обчислює BMR, TDEE та добову калорійну ціль. Також за потреби оновлює ім'я користувача в таблиці users і повертає актуальний стан профілю.
Parameters:
| Name | Type | Description |
|---|---|---|
req |
object | HTTP-запит з новими даними профілю в тілі запиту. |
res |
object | HTTP-відповідь з оновленими даними профілю або повідомленням про помилку. |
Returns:
- Type
- Promise.<void>
useAuth() → {object}
Повертає значення контексту автентифікації.
Використовується компонентами для доступу до поточного користувача, стану завантаження та методів login/logout.
Returns:
Об'єкт контексту автентифікації з user, loading, login і logout.
- Type
- object