Skip to content

FitHub — система управления фитнес-клубом, где администраторы управляют тренерами, зонами и пользователями, а клиенты создают заказы и включают 2FA для безопасности.

Notifications You must be signed in to change notification settings

Ullyminat/FitHub

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

_________________________  __      ______  
___  ____/__(_)_  /___  / / /___  ____  /_ 
__  /_   __  /_  __/_  /_/ /_  / / /_  __ \
_  __/   _  / / /_ _  __  / / /_/ /_  /_/ /
/_/      /_/  \__/ /_/ /_/  \__,_/ /_.___/ 

Описание

Этот проект представляет собой систему управления фитнес-клубом, которая позволяет администраторам управлять тренерами, зонами посещения, пользователями и заказами. Пользователи могут регистрироваться, создавать заказы, включать двухфакторную аутентификацию (2FA) и управлять своими данными. Тренеры могут управлять своими профилями и просматривать своих клиентов.

Возможности

Администратор:

  • Создание, обновление и удаление тренеров.
  • Создание, обновление и удаление зон посещения.
  • Управление пользователями (назначение ролей, удаление).
  • Поиск пользователей и тренеров по различным критериям.

Пользователь:

  • Регистрация и аутентификация.
  • Создание заказов на посещение зон и тренировок с тренерами.
  • Управление профилем (изменение данных, смена пароля).
  • Включение и отключение двухфакторной аутентификации (2FA).

Тренер:

  • Управление своим профилем (изменение данных, смена пароля).
  • Просмотр своих клиентов.
  • Удаление своего аккаунта.

Установка

Необходимые компоненты

  • Node.js — Серверная платформа.
  • MongoDB — База данных.
  • Multer — Для загрузки файлов.
  • bcrypt — Для хеширования паролей.
  • jsonwebtoken — Для аутентификации.
  • speakeasy и qrcode — Для двухфакторной аутентификации.

Шаги установки

  1. Клонируйте репозиторий:

    git clone https://github.com/Ullyminat/FitHub.git
    cd FitHub
  2. Установите зависимости:

    npm install
  3. Настройте файл .env:

    Создайте файл .env в корне проекта и укажите строку подключения к базе данных MongoDB, порт для запуска сервера, секретный ключ для JWT и другие необходимые переменные:

    DB=mongodb://localhost:27017/fitness
    PORT=3000
    SECRET=your_jwt_secret
  4. Запустите сервер:

    npm start

    Сервер будет доступен по адресу: http://localhost:3000.

API Эндпоинты

Базовый URL: /

Администратор

  • Создание тренера

    • URL: /admin/create_trainer
    • Метод: POST
    • Пример запроса (form-data):
      name: Иван
      surname: Иванов
      patronymic: Иванович
      telephone: 79991234567
      password: Password123!
      cost: 500
      picture: (файл изображения)
      
    • Пример ответа:
      {
        "msg": "Создан тренер"
      }
  • Обновление тренера

    • URL: /admin/update_trainer/:id
    • Метод: PUT
    • Пример запроса:
      {
        "name": "Иван",
        "surname": "Петров",
        "patronymic": "Иванович",
        "telephone": "79991234567",
        "cost": 600
      }
    • Пример ответа:
      {
        "msg": "Данные тренера обновлены"
      }
  • Удаление тренера

    • URL: /admin/delete_trainer/:id
    • Метод: DELETE
    • Пример ответа:
      {
        "msg": "Тренер удалён"
      }
  • Создание зоны посещения

    • URL: /admin/create_area
    • Метод: POST
    • Пример запроса (form-data):
      area: Зона силовых тренировок
      cost: 100
      picture: (файл изображения)
      
    • Пример ответа:
      {
        "msg": "Создана зона посещения"
      }
  • Обновление зоны посещения

    • URL: /admin/update_area/:id
    • Метод: PUT
    • Пример запроса:
      {
        "area": "Зона кардио",
        "cost": 150
      }
    • Пример ответа:
      {
        "msg": "Данные обновлены"
      }
  • Удаление зоны посещения

    • URL: /admin/delete_area/:id
    • Метод: DELETE
    • Пример ответа:
      {
        "msg": "Успешно удалён!"
      }

Пользователь

  • Регистрация

    • URL: /user/create
    • Метод: POST
    • Пример запроса (form-data):
      name: Алексей
      surname: Смирнов
      patronymic: Игоревич
      telephone: 79991234568
      password: Password123!
      picture: (файл изображения)
      
    • Пример ответа:
      {
        "msg": "Создан"
      }
  • Аутентификация

    • URL: /user/login
    • Метод: POST
    • Пример запроса:
      {
        "telephone": "79991234568",
        "password": "Password123!"
      }
    • Пример ответа:
      {
        "user": {
          "telephone": "79991234568",
          "_id": "652f1c3b8e9d4c001c9b2e1a"
        },
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
      }
  • Создание заказа

    • 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: /user/get_orders
    • Метод: GET
    • Пример ответа:
      [
        {
          "_id": "652f1c3b8e9d4c001c9b2e1c",
          "user": "652f1c3b8e9d4c001c9b2e1a",
          "amount": 1250,
          "valid_until": "30.10.2023",
          "areas": ["652f1c3b8e9d4c001c9b2e1a"],
          "trainer": "652f1c3b8e9d4c001c9b2e1b"
        }
      ]
  • Включение 2FA

    • URL: /user/enable_2fa
    • Метод: POST
    • Пример ответа:
      {
        "qrCode": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...",
        "secret": "JBSWY3DPEHPK3PXP"
      }
  • Отключение 2FA

    • URL: /user/disable_2fa
    • Метод: POST
    • Пример ответа:
      {
        "msg": "2FA отключен"
      }

Тренер

  • Аутентификация

    • URL: /trainer/login
    • Метод: POST
    • Пример запроса:
      {
        "telephone": "79991234567",
        "password": "Password123!"
      }
    • Пример ответа:
      {
        "user": {
          "telephone": "79991234567",
          "_id": "652f1c3b8e9d4c001c9b2e1b"
        },
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
      }
  • Получение клиентов

    • URL: /trainer/get_users
    • Метод: GET
    • Пример ответа:
      [
        {
          "_id": "652f1c3b8e9d4c001c9b2e1a",
          "name": "Алексей",
          "surname": "Смирнов",
          "telephone": "79991234568"
        }
      ]
  • Обновление профиля

    • URL: /trainer/update
    • Метод: PUT
    • Пример запроса:
      {
        "name": "Иван",
        "surname": "Петров",
        "patronymic": "Иванович",
        "telephone": "79991234567",
        "cost": 600
      }
    • Пример ответа:
      {
        "msg": "Данные обновлены"
      }
  • Удаление профиля

    • URL: /trainer/delete
    • Метод: DELETE
    • Пример ответа:
      {
        "msg": "Тренер удалён"
      }

Структура проекта

📂 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                 # Документация

About

FitHub — система управления фитнес-клубом, где администраторы управляют тренерами, зонами и пользователями, а клиенты создают заказы и включают 2FA для безопасности.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published