- Управление парковочными местами (16 мест двух типов)
- Регистрация въезда/выезда транспортных средств
- Автоматический расчет стоимости парковки
- Статистика загруженности и доходов
- WebSocket для мгновенных обновлений статуса
- FastAPI - высокопроизводительный веб-фреймворк
- WebSocket - обновления в реальном времени
- MongoDB - хранение данных о парковочных местах и ТС
- Pydantic - валидация данных
- CORS - поддержка кросс-доменных запросов
- 18 парковочных мест:
- 2 места для электромобилей ⚡
- 14 обычных места 🚗
POST /api/vehicle/arrive- регистрация постановки на определенное местоPOST /api/vehicle/depart/{vehicle_id}- обработка выезда
GET /api/parking/status- текущий статус парковкиGET /api/vehicles- список активных ТСGET /api/stats- статистика (по умолчанию за 1 день)
- Клонируйте репозиторий:
git clone https://github.com/SabirovSR/parking-server.git cd parking-server
-
Установите зависимости:
pip install -r app/requirements.txt
-
Создайте файл .env и добавьте подключение к базе данных:
MONGODB_URI=ваше_подключение_к_базе -
Запустите сервес:
uvicorn main:app --reload
-
Подключение к базе не требуется. Сервис базы данных создается вместе с сервисом парковки
- Сделан volum, для того чтобы при перезапуске сервера данные сохранялись
volumes: - mongodb_data:/data/db -
Соберите образ:
docker-compose build
-
Запустите контейнер:
docker-compose up -d
- Общее количество парковочных мест: 16
- Места для электромобилей: 14 и 15
| Тип ТС | Тариф (руб/мин) |
|---|---|
| Автомобиль | 1.5 |
| Электромобиль | 2.5 |
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"curl "http://localhost:8008/api/stats/vehicles?time_range=10m&interval=1m"- Электромобили могут парковаться только на местах 14 и 15
- Обычные автомобили не могут парковаться на местах для электромобилей
- Одно транспортное средство не может занимать несколько мест одновременно
- Статистика доступна с интервалами от 10 секунд до 1 часа
- Временные диапазоны статистики: 1 минута, 10 минут, 1 час, 1 день
Проект распространяется под лицензией MIT.