_________________________ __ ______
___ ____/__(_)_ /___ / / /___ ____ /_
__ /_ __ /_ __/_ /_/ /_ / / /_ __ \
_ __/ _ / / /_ _ __ / / /_/ /_ /_/ /
/_/ /_/ \__/ /_/ /_/ \__,_/ /_.___/
Этот проект представляет собой систему управления фитнес-клубом, которая позволяет администраторам управлять тренерами, зонами посещения, пользователями и заказами. Пользователи могут регистрироваться, создавать заказы, включать двухфакторную аутентификацию (2FA) и управлять своими данными. Тренеры могут управлять своими профилями и просматривать своих клиентов.
- Создание, обновление и удаление тренеров.
- Создание, обновление и удаление зон посещения.
- Управление пользователями (назначение ролей, удаление).
- Поиск пользователей и тренеров по различным критериям.
- Регистрация и аутентификация.
- Создание заказов на посещение зон и тренировок с тренерами.
- Управление профилем (изменение данных, смена пароля).
- Включение и отключение двухфакторной аутентификации (2FA).
- Управление своим профилем (изменение данных, смена пароля).
- Просмотр своих клиентов.
- Удаление своего аккаунта.
- Node.js — Серверная платформа.
- MongoDB — База данных.
- Multer — Для загрузки файлов.
- bcrypt — Для хеширования паролей.
- jsonwebtoken — Для аутентификации.
- speakeasy и qrcode — Для двухфакторной аутентификации.
-
Клонируйте репозиторий:
git clone https://github.com/Ullyminat/FitHub.git cd FitHub -
Установите зависимости:
npm install
-
Настройте файл
.env:Создайте файл
.envв корне проекта и укажите строку подключения к базе данных MongoDB, порт для запуска сервера, секретный ключ для JWT и другие необходимые переменные:DB=mongodb://localhost:27017/fitness PORT=3000 SECRET=your_jwt_secret
-
Запустите сервер:
npm start
Сервер будет доступен по адресу:
http://localhost:3000.
-
Создание тренера
- URL:
/admin/create_trainer - Метод:
POST - Пример запроса (form-data):
name: Иван surname: Иванов patronymic: Иванович telephone: 79991234567 password: Password123! cost: 500 picture: (файл изображения) - Пример ответа:
{ "msg": "Создан тренер" }
- URL:
-
Обновление тренера
- URL:
/admin/update_trainer/:id - Метод:
PUT - Пример запроса:
{ "name": "Иван", "surname": "Петров", "patronymic": "Иванович", "telephone": "79991234567", "cost": 600 } - Пример ответа:
{ "msg": "Данные тренера обновлены" }
- URL:
-
Удаление тренера
- URL:
/admin/delete_trainer/:id - Метод:
DELETE - Пример ответа:
{ "msg": "Тренер удалён" }
- URL:
-
Создание зоны посещения
- URL:
/admin/create_area - Метод:
POST - Пример запроса (form-data):
area: Зона силовых тренировок cost: 100 picture: (файл изображения) - Пример ответа:
{ "msg": "Создана зона посещения" }
- URL:
-
Обновление зоны посещения
- URL:
/admin/update_area/:id - Метод:
PUT - Пример запроса:
{ "area": "Зона кардио", "cost": 150 } - Пример ответа:
{ "msg": "Данные обновлены" }
- URL:
-
Удаление зоны посещения
- URL:
/admin/delete_area/:id - Метод:
DELETE - Пример ответа:
{ "msg": "Успешно удалён!" }
- URL:
-
Регистрация
- URL:
/user/create - Метод:
POST - Пример запроса (form-data):
name: Алексей surname: Смирнов patronymic: Игоревич telephone: 79991234568 password: Password123! picture: (файл изображения) - Пример ответа:
{ "msg": "Создан" }
- URL:
-
Аутентификация
- URL:
/user/login - Метод:
POST - Пример запроса:
{ "telephone": "79991234568", "password": "Password123!" } - Пример ответа:
{ "user": { "telephone": "79991234568", "_id": "652f1c3b8e9d4c001c9b2e1a" }, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." }
- URL:
-
Создание заказа
- URL:
/user/create_order - Метод:
POST - Пример запроса:
{ "areas": ["652f1c3b8e9d4c001c9b2e1a"], "trainer": "652f1c3b8e9d4c001c9b2e1b", "valid_period": 30 } - Пример ответа:
{ "msg": "Заказ успешно создан", "order": { "_id": "652f1c3b8e9d4c001c9b2e1c", "user": "652f1c3b8e9d4c001c9b2e1a", "amount": 1250, "valid_until": "30.10.2023", "areas": ["652f1c3b8e9d4c001c9b2e1a"], "trainer": "652f1c3b8e9d4c001c9b2e1b" } }
- URL:
-
Получение заказов
- URL:
/user/get_orders - Метод:
GET - Пример ответа:
[ { "_id": "652f1c3b8e9d4c001c9b2e1c", "user": "652f1c3b8e9d4c001c9b2e1a", "amount": 1250, "valid_until": "30.10.2023", "areas": ["652f1c3b8e9d4c001c9b2e1a"], "trainer": "652f1c3b8e9d4c001c9b2e1b" } ]
- URL:
-
Включение 2FA
- URL:
/user/enable_2fa - Метод:
POST - Пример ответа:
{ "qrCode": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...", "secret": "JBSWY3DPEHPK3PXP" }
- URL:
-
Отключение 2FA
- URL:
/user/disable_2fa - Метод:
POST - Пример ответа:
{ "msg": "2FA отключен" }
- URL:
-
Аутентификация
- URL:
/trainer/login - Метод:
POST - Пример запроса:
{ "telephone": "79991234567", "password": "Password123!" } - Пример ответа:
{ "user": { "telephone": "79991234567", "_id": "652f1c3b8e9d4c001c9b2e1b" }, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." }
- URL:
-
Получение клиентов
- URL:
/trainer/get_users - Метод:
GET - Пример ответа:
[ { "_id": "652f1c3b8e9d4c001c9b2e1a", "name": "Алексей", "surname": "Смирнов", "telephone": "79991234568" } ]
- URL:
-
Обновление профиля
- URL:
/trainer/update - Метод:
PUT - Пример запроса:
{ "name": "Иван", "surname": "Петров", "patronymic": "Иванович", "telephone": "79991234567", "cost": 600 } - Пример ответа:
{ "msg": "Данные обновлены" }
- URL:
-
Удаление профиля
- URL:
/trainer/delete - Метод:
DELETE - Пример ответа:
{ "msg": "Тренер удалён" }
- URL:
📂 FitHub
├── 📂 config
│ ├── db_connect.mjs # Подключение к базе данных MongoDB
│ └── multerConfig.mjs # Конфигурация Multer для загрузки файлов
├── 📂 controllers
│ ├── adminController.mjs # Логика для администратора
│ ├── trainerController.mjs # Логика для тренера
│ └── userController.mjs # Логика для пользователя
├── 📂 middleware
│ ├── authToken.mjs # Middleware для проверки JWT
│ └── roleCheck.mjs # Middleware для проверки роли пользователя
├── 📂 models
│ ├── area.mjs # Модель зоны посещения
│ ├── order.mjs # Модель заказа
│ ├── trainer.mjs # Модель тренера
│ └── user.mjs # Модель пользователя
├── 📂 routes
│ ├── adminRouter.mjs # Роутинг для администратора
│ ├── trainerRouter.mjs # Роутинг для тренера
│ └── userRouter.mjs # Роутинг для пользователя
├── .env # Конфигурация окружения
├── index.mjs # Главный файл приложения
├── package.json # Пакетный менеджер
└── README.md # Документация