Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚗 Smart Parking Management System

🌟 Система управления умной парковкой

FastAPI-приложение для автоматизации работы парковки.

📌 Основные функции

  • Управление парковочными местами (16 мест двух типов)
  • Регистрация въезда/выезда транспортных средств
  • Автоматический расчет стоимости парковки
  • Статистика загруженности и доходов

⚙️ Технологический стек

  • FastAPI - высокопроизводительный веб-фреймворк
  • MongoDB - хранение данных о парковочных местах и ТС
  • Pydantic - валидация данных
  • CORS - поддержка кросс-доменных запросов

🏗️ Структура парковки

  • 16 парковочных мест:
    • 2 места для электромобилей ⚡
    • 14 обычных места 🚗

🛠 Установка и запуск

  • Клонируйте репозиторий:
    git clone https://github.com/SabirovSR/parking-server.git
    cd parking-server

Локальный запуск

  1. Установите зависимости:

    pip install -r app/requirements.txt
  2. Создайте файл .env и добавьте подключение к базе данных:

    MONGODB_URI=ваше_подключение_к_базе
    
  3. Запустите сервес:

    uvicorn main:app --reload
    

🐳 Docker-развертывание

  1. Подключение к базе не требуется. Сервис базы данных создается вместе с сервисом парковки

    • Сделан volum, для того чтобы при перезапуске сервера данные сохранялись
    volumes:
      - mongodb_data:/data/db
    
  2. Соберите образ:

    docker-compose build
  3. Запустите контейнер:

    docker-compose up -d

Конфигурация

  • Общее количество парковочных мест: 16
  • Места для электромобилей: 14 и 15

💰 Тарифы

Тип ТС Тариф (руб/мин)
Автомобиль 1.5
Электромобиль 2.5

📡 API Endpoints

🚘 Регистрация заезда

POST /api/vehicle/arrive

Регистрирует прибытие транспортного средства на парковку.

Тело запроса:

{
    "vehicle_id": "string",
    "spot_id": "integer",
    "isEv": "boolean",
    "type": "string"
}

Возможные ответы:

  • 200: Успешная регистрация
  • 400: Ошибка валидации (место занято, неверный тип места и т.д.)

🚘 Регистрация выезда

POST /api/vehicle/depart/{vehicle_id}

Регистрирует выезд транспортного средства и рассчитывает стоимость.

Параметры:

  • vehicle_id: ID транспортного средства

Возможные ответы:

  • 200: Успешный выезд
{
    "status": "success",
    "cost": "number",
    "duration_minutes": "number"
}
  • 404: Транспортное средство не найдено
  • 400: Уже оплачено

📊 Статус парковки

GET /api/parking/status

Возвращает текущее состояние всех парковочных мест.

Активные транспортные средства

GET /api/vehicles

Возвращает список всех транспортных средств, находящихся на парковке.

📊 Статистика по количеству машин

GET /api/stats/vehicles

Возвращает статистику по количеству машин за указанный период.

Параметры запроса:

  • time_range: Диапазон времени ("1m", "10m", "1h", "1d")
  • interval: Интервал группировки ("10s", "1m", "5m", "15m", "1h")

📊 Статистика по выручке

GET /api/stats/revenue

Возвращает статистику по выручке за указанный период.

Параметры запроса:

  • time_range: Диапазон времени ("1m", "10m", "1h", "1d")
  • interval: Интервал группировки ("10s", "1m", "5m", "15m", "1h")

📊 Статистика по времени стоянки

GET /api/stats/duration

Возвращает статистику по времени стоянки за указанный период.

Параметры запроса:

  • time_range: Диапазон времени ("1m", "10m", "1h", "1d")
  • interval: Интервал группировки ("10s", "1m", "5m", "15m", "1h")

📊 Общая выручка

GET /api/stats/total-revenue

Возвращает общую выручку за все время.

Сброс базы данных

POST /api/reset

Сбрасывает все коллекции в базе данных и переинициализирует парковочные места.

Примеры использования

Регистрация заезда электромобиля

curl -X POST "http://localhost:8008/api/vehicle/arrive" \
     -H "Content-Type: application/json" \
     -d '{"vehicle_id": "EV123", "spot_id": 14, "isEv": true, "type": "evCar"}'

Получение статистики по выручке за последний час

curl "http://localhost:8008/api/stats/revenue?time_range=1h&interval=5m"

Получение статистики по количеству машин за последние 10 минут

curl "http://localhost:8008/api/stats/vehicles?time_range=10m&interval=1m"

Ограничения

  1. Электромобили могут парковаться только на местах 14 и 15
  2. Обычные автомобили не могут парковаться на местах для электромобилей
  3. Одно транспортное средство не может занимать несколько мест одновременно
  4. Статистика доступна с интервалами от 10 секунд до 1 часа
  5. Временные диапазоны статистики: 1 минута, 10 минут, 1 час, 1 день

📄 Лицензия

Проект распространяется под лицензией MIT.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages