Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

store_api

Simple Store API

API для управления остатками на складе


  • Стек: Django(DRF), Django-Channels, Aiogram, Redis, Celery, Uvicorn, Pytest, Python 3.10+
  • Для MongoDB (версия 6+) используется образ без AVX - заменить при необходимости
  • Команда для запуска сервиса: CURRENT_UID=0:0 docker-compose -f docker-compose.yml up --build
  • Для проверки работы веб-сокетов можно использовать расширение "Web Socket Client" для браузера Google Chrome (адрес: ws://localhost:8000/ws/stores/{store_id})
  • Об .env файле:
    STORE_IDS=abc111 xyz000 - id складов через пробел
    SPECIAL_USER=ХХХХХХХХХ - телеграм ID получателя отчета
    REPORT_TIME='18:25' - время ежедневного отчета (если не задано - отправляется в 21:00 по умолчанию)
  • Для прогона тестов запустить сервис с помощью команды:
    CURRENT_UID=0:0 docker-compose -f docker-compose.dev.yml up
    (в .env файле везде указать 127.0.0.1)
  • Для отдельного запуска Django команда:
    uvicorn store_dashboard.asgi:application
    Для отдельного запуска бота команда:
    python3 report_bot.py
    Для отдельного запуска Celery команда:
    python3 -m celery -A store_dashboard worker --beat --loglevel=info

Описание задания:

Представим, что у нас есть склад товаров. Нам нужно сделать API для управления остатками.

Даны: items и stores - модели на ваше усмотрение.

Используем:

  • MongoDB
  • FastApi / Django / Flask - без разницы
  • Websockets
  • docker-compose

Все нужно покрыть тестами. И сокеты и API.

Дополнительно:

  1. Можно написать pod для kubernetes
  2. Симулировать в тестах большую параллельную нагрузку на операции demand/supply, чтобы все корректно считалось
  3. TG бот, отправляющий в 21 остатки склада

GET /stores/{store_id}

RESPONSE

{
	store: {
		store_id: '',
		report: [{
			item_id: '',
			quantity: 10
		}]
	}
	
}

GET /stores/{store_id}/xlsx_report

RESPONSE

Должен отдавать файл с xlsx с текущими остатками склада.

POST /stores/{store_id}

REQUEST

{
	operation: 'demand', // supply
	item_id: '',
	quantity: 10
}

RESPONSE

{
	store: {
		store_id: '',
		report: []
	}
}

POST /stores/{store_id}/group_op

REQUEST

{
	operation: 'demand', // supply
	items: [ {
		item_id: '',
		quantity: 10
	}]
}

RESPONSE

{
	store: {
		store_id: '',
		report: []
	}
}

POST /stores/{store_id}/clean

RESPONSE

{
	store: {
		store_id: '',
		report: []
	}
}

Websockets

Нужно обеспечить подключение к сообщением от склада по store_id. В момент происхождения изменений должен отправляться report.

TG-бот

Набросать телеграм бота, который будет отправлять в 21:00 отчет по остатку склада - только захардкоженному user_id.

About

API for storage management

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages