API витрины магазина. Позволяет наполнять витрину магазина товарами, а также назначать для товаров ответственных сотрудников.
Содержание
# Смигрировать базу данных
docker run -it --rm \
--env STOREFRONT_DB_URL=postgresql://api:hackme@HOST:5432/storefront \
janeturueva/storefront \
storefront-db upgrade head
# Запустить контейнер
docker run -d --rm -p8080:8080 \
--env STOREFRONT_HOST=0.0.0.0 \
--env STOREFRONT_PORT=8080 \
--env STOREFRONT_DB_URL=postgresql://api:hackme@${DB_HOST}:5432/storefront \
--env STOREFRONT_REDIS_URL=redis://${REDIS_HOST} \
janeturueva/storefront
curl --header "Content-Type: application/json" --request POST \
--data '{"name":"ООО Рога и Копыта"}' \
http://localhost:8080/companies
{
"data": {
"company_id": 1,
"name": "ООО Рога и Копыта",
"created_at": "2019-03-13T20:11:58.150475+00:00",
"updated_at": "2019-03-13T20:11:58.150483+00:00"
}
}
curl http://localhost:8080/companies
{
"data": [
{
"company_id": 1,
"name": "ООО Рога и Копыта",
"created_at": "2019-03-13T20:11:58.150475+00:00",
"updated_at": "2019-03-13T20:11:58.150483+00:00"
}
]
}
curl http://localhost:8080/companies/1
{
"data": {
"company_id": 1,
"name": "ООО Рога и Копыта",
"created_at": "2019-03-13T20:11:58.150475+00:00",
"updated_at": "2019-03-13T20:11:58.150483+00:00"
}
}
curl --header "Content-Type: application/json" --request PUT \
--data '{"name":"ООО Рога и Копыта 2"}' \
http://localhost:8080/companies/1
{
"data": {
"company_id": 1,
"name": "ООО Рога и Копыта 2",
"created_at": "2019-03-13T20:11:58.150475+00:00",
"updated_at": "2019-03-13T20:44:22.235562+00:00"
}
}
curl --request=DELETE http://localhost:8080/companies/1
curl --header "Content-Type: application/json" --request POST \
--data '{"name":"Василий Пупкин", "company_id": 1}' \
http://localhost:8080/employees
{
"data": {
"employee_id": 1,
"name": "Василий Пупкин",
"company_id": 1,
"created_at": "2019-03-13T20:15:03.125603+00:00",
"updated_at": "2019-03-13T20:15:03.125611+00:00"
}
}
curl http://localhost:8080/employees
{
"data": [
{
"employee_id": 1,
"name": "Василий Пупкин",
"company_id": 1,
"created_at": "2019-03-13T20:15:03.125603+00:00",
"updated_at": "2019-03-13T20:15:03.125611+00:00"
}
]
}
curl http://localhost:8080/employees/1
{
"data": {
"employee_id": 1,
"name": "Василий Пупкин",
"company_id": 1,
"created_at": "2019-03-13T20:15:03.125603+00:00",
"updated_at": "2019-03-13T20:15:03.125611+00:00"
}
}
curl --header "Content-Type: application/json" --request PUT \
--data '{"name":"Василий Пупкин 2", "company_id": 1}' \
http://localhost:8080/employees/1
{
"data": {
"employee_id": 1,
"name": "Василий Пупкин 2",
"company_id": 1,
"created_at": "2019-03-13T20:15:03.125603+00:00",
"updated_at": "2019-03-13T20:15:03.125611+00:00"
}
}
curl --request DELETE http://localhost:8080/employees/1
curl --header "Content-Type: application/json" --request POST \
--data '{"name":"Молоко", "price": 10.00}' \
http://localhost:8080/products
{
"data": {
"product_id": 1,
"name": "Молоко",
"price": 10,
"created_at": "2019-03-13T20:17:20.869164+00:00",
"updated_at": "2019-03-13T20:17:20.869171+00:00"
}
}
curl http://localhost:8080/products
{
"data": [
{
"product_id": 1,
"name": "Молоко",
"price": 10,
"created_at": "2019-03-13T20:17:12.226921+00:00",
"updated_at": "2019-03-13T20:17:12.226944+00:00"
}
]
}
curl http://localhost:8080/products/1
{
"data": {
"product_id": 1,
"name": "Молоко",
"price": 10,
"created_at": "2019-03-13T20:17:12.226921+00:00",
"updated_at": "2019-03-13T20:17:12.226944+00:00"
}
}
curl --header "Content-Type: application/json" --request PUT \
--data '{"name":"Молоко топленое", "price": 10.00}' \
http://localhost:8080/products/1
{
"data": {
"product_id": 1,
"name": "Молоко топленое",
"price": 10,
"created_at": "2019-03-13T20:17:12.226921+00:00",
"updated_at": "2019-03-13T20:17:12.226944+00:00"
}
}
curl --request DELETE http://localhost:8080/products/1
curl --header "Content-Type: application/json" --request POST \
--data '{"product_id": 1}' \
http://localhost:8080/employees/1/products
{
"data": {
"created_at": "2019-03-13T20:17:12.226921+00:00",
"name": "Молоко",
"price": 10.0,
"product_id": 1,
"updated_at": "2019-03-13T20:17:12.226944+00:00"
}
}
curl http://localhost:8080/employees/1/products
{
"data": [
{
"product_id": 1,
"name": "Молоко",
"price": 10,
"created_at": "2019-03-13T20:17:12.226921+00:00",
"updated_at": "2019-03-13T20:17:12.226944+00:00"
}
]
}
curl --request DELETE http://localhost:8080/employees/1/products/1
# Склонировать репозиторий
git clone git@github.com:JaneTurueva/storefront.git
cd storefront
# Создать окружение и установить все зависимости
make devenv
# Активировать виртуальное окружение
source env/bin/activate
# Поднять окружение (postgres и redis)
docker-compose up -d
# Смигрировать базу данных
storefront-db upgrade head
# Создать докер image
make build
Для тестирования потребуется postgresql сервер с правами на создание и удаление баз данных: для каждого теста будет создана отдельная база данных, запущены миграции, а после того как тест будет закончен база будет удалена.
Тесты проверяют функционал API, а также структуру возвращаемых данных с помощью jsonschema (не в handlers, чтобы не тратить лишнее время на обработку запросов в production в aiohttp-validate декораторе).
export CI_DB_URL=postgresql://api:hackme@0.0.0.0:5432/storefront
export CI_REDIS_URL=redis://localhost
# Будет запущен py.test, pylama
make test