Global

Members

(constant) ACTIVITIES

Доступні рівні фізичної активності для налаштування профілю користувача.

Source:

(constant) AuthContext

Контекст автентифікації застосунку.

Зберігає поточного користувача, стан завантаження та методи входу і виходу.

Source:

(constant) BASE_URL

Базова адреса backend API.

Якщо змінна середовища VITE_API_URL задана, використовується вона. Інакше застосунок працює з локальним сервером за замовчуванням.

Source:

(constant) GOALS

Доступні цілі користувача для розрахунку добової калорійності.

Source:

(constant) MEALS

Варіанти прийомів їжі, доступні в щоденнику харчування.

Source:

(constant) MEALS

Варіанти прийомів їжі, доступні в щоденнику харчування.

Source:

(constant) addDays

Додає або віднімає задану кількість днів від дати у форматі YYYY-MM-DD.

Source:

(constant) api

Публічний клієнт для взаємодії фронтенда з backend API.

Містить методи для автентифікації, роботи з профілем користувача, dashboard та записами харчування.

Source:

(constant) calcActivityGoal

Розраховує рекомендовану ціль активності (ккал/день) на основі цілі користувача. Базується на рекомендаціях ВООЗ: 150-300 хв помірної активності на тиждень.

Source:

(constant) calcExerciseKcal

Розрахунок калорій для вправи (для preview на фронті). Повна логіка та сама що на бекенді.

Source:

(constant) calcMacroGoals

Розраховує цілі КБЖВ на основі calorie_goal з профілю. Розподіл: 25% білки, 30% жири, 45% вуглеводи

Source:

(constant) calcNutrients

Розраховує нутрієнти для заданої кількості грамів на основі значень на 100г

Source:

(constant) disabledItems

Майбутні розділи застосунку, які поки що недоступні в інтерфейсі.

Source:

(constant) displayDateLong

Форматує дату для відображення в інтерфейсі українською мовою.

Source:

(constant) express

Центральний опис HTTP-маршрутів backend API.

Цей модуль пов'язує URL-ендпоінти з відповідними контролерами та визначає, які маршрути доступні без автентифікації, а які вимагають перевірки JWT через middleware auth.

Структура маршрутів відображає основні функціональні напрями застосунку: автентифікація, профіль користувача, dashboard, щоденник харчування, статистика та власні продукти.

Source:

Доступні розділи навігації застосунку.

Використовуються для побудови основного меню в боковій панелі.

Source:

(constant) pct

Обчислює відсоток виконання цілі в межах від 0 до 100.

Source:

(constant) pool :object

Пул підключень до PostgreSQL для роботи з базою даних застосунку.

Ініціалізується зі змінних середовища та використовується в контролерах і конфігураційних модулях для виконання SQL-запитів.

Type:
  • object
Source:

(constant) pool

Бізнес-логіка автентифікації користувача.

Цей модуль відповідає за реєстрацію нового користувача та вхід у систему через email і пароль.

Під час реєстрації виконується перевірка обов’язкових полів, унікальності email, хешування пароля та створення базового профілю. Під час входу перевіряються облікові дані, а після успішної автентифікації формується JWT-токен для подальшого доступу до захищених маршрутів.

Source:

(constant) pool

Бізнес-логіка щоденника харчування, статистики та пошуку продуктів.

Цей модуль відповідає за:

  • збереження записів про спожиту їжу
  • обчислення денних і періодичних показників харчування
  • роботу з власними продуктами користувача
  • пошук продуктів через зовнішній USDA FoodData Central API
  • формування агрегованих даних для dashboard.

Основне бізнес-правило модуля полягає в тому, що всі записи, статистика та власні продукти прив’язані до конкретного авторизованого користувача.

Source:

(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
Name Type Description
children object

Дочірній елемент, який буде відображено всередині провайдера.

Source:
Returns:

JSX-елемент провайдера автентифікації.

Type
object

PrivateRoute(props) → {object}

Захищає приватні маршрути застосунку.

Показує сторінку завантаження під час відновлення стану автентифікації. Якщо користувач не авторизований, перенаправляє на сторінку входу.

Parameters:
Name Type Description
props object

Властивості компонента.

Properties
Name Type Description
children object

Дочірній елемент, який потрібно відобразити для авторизованого користувача.

Source:
Returns:

JSX-елемент захищеного маршруту або перенаправлення.

Type
object

PublicRoute(props) → {object}

Обмежує доступ до публічних маршрутів для авторизованих користувачів.

Якщо користувач уже увійшов у систему, перенаправляє його на головну сторінку. Під час ініціалізації стану автентифікації показує повідомлення про завантаження.

Parameters:
Name Type Description
props object

Властивості компонента.

Properties
Name Type Description
children object

Дочірній елемент публічного маршруту.

Source:
Returns:

JSX-елемент публічного маршруту або перенаправлення.

Type
object

(async) addCustomFood(req, res) → {Promise.<void>}

Додає власний продукт до персонального списку користувача.

Перевіряє наявність обов'язкових полів і створює запис у таблиці custom_foods. Значення білків, жирів і вуглеводів за замовчуванням дорівнюють 0, якщо їх не передано.

Parameters:
Name Type Description
req object

HTTP-запит з даними продукту в тілі запиту.

res object

HTTP-відповідь зі створеним продуктом або повідомленням про помилку.

Source:
Returns:
Type
Promise.<void>

(async) addFoodLog(req, res) → {Promise.<void>}

Додає новий запис про спожиту їжу до щоденника користувача.

Перевіряє наявність обов'язкових полів, створює запис у таблиці food_logs і повертає створений об'єкт. Якщо дата не передана, використовує поточну дату.

Parameters:
Name Type Description
req object

HTTP-запит з даними запису харчування в тілі запиту.

res object

HTTP-відповідь зі створеним записом або повідомленням про помилку.

Source:
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-відповідь з підтвердженням видалення або повідомленням про помилку.

Source:
Returns:
Type
Promise.<void>

(async) getCustomFoods(req, res) → {Promise.<void>}

Повертає список власних продуктів, створених поточним користувачем.

Результат сортується за назвою у алфавітному порядку.

Parameters:
Name Type Description
req object

HTTP-запит з даними авторизованого користувача.

res object

HTTP-відповідь зі списком користувацьких продуктів або повідомленням про помилку.

Source:
Returns:
Type
Promise.<void>

(async) getFoodLogs(req, res) → {Promise.<void>}

Повертає список записів харчування поточного користувача за обрану дату.

Якщо дата не передана, використовує поточну дату. Результат сортується за часом створення у зростаючому порядку.

Parameters:
Name Type Description
req object

HTTP-запит з необов'язковою датою в query-параметрі.

res object

HTTP-відповідь зі списком записів харчування або повідомленням про помилку.

Source:
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-відповідь зі статистикою по днях або повідомленням про помилку.

Source:
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-відповідь з даними профілю або повідомленням про помилку.

Source:
Returns:
Type
Promise.<void>

(async) login(req, res) → {Promise.<void>}

Автентифікує користувача за email і паролем та повертає JWT-токен.

Перевіряє наявність обов'язкових полів, шукає користувача в базі даних, порівнює хеш пароля, у разі успіху повертає токен і базову інформацію про користувача.

Parameters:
Name Type Description
req object

HTTP-запит з email і password у тілі запиту.

res object

HTTP-відповідь з токеном і даними користувача.

Source:
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-відповідь з токеном і даними користувача.

Source:
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-відповідь зі списком знайдених продуктів або повідомленням про помилку.

Source:
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-відповідь з оновленими даними профілю або повідомленням про помилку.

Source:
Returns:
Type
Promise.<void>

useAuth() → {object}

Повертає значення контексту автентифікації.

Використовується компонентами для доступу до поточного користувача, стану завантаження та методів login/logout.

Source:
Returns:

Об'єкт контексту автентифікації з user, loading, login і logout.

Type
object