Skip to content

Backend проекта "магазин продуктов".

License

Notifications You must be signed in to change notification settings

VladislavYar/grocery_store_sarafan

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

grocery_store_sarafan

Описание

Backend проекта "магазин продуктов".


Эндпоинты

Получение категорий

  method: GET
  Authorization: No Auth
  URL: http://domaine:port/api/v1/categories/
  Status: 200 OK
  Response:
            {
                "count": 1,
                "next": "http://domaine:port/api/v1/categories/?page={int}",
                "previous": "http://domaine:port/api/v1/categories/?page={int}",
                "results": [
                    {
                        "title": "str",
                        "slug": "str",
                        "image": "http://domaine:port/media/images/{str}.png",
                        "subcategories": [
                            {
                                "title": "str",
                                "slug": "str",
                                "image": "http://domaine:port/media/images/{str}.png"
                            }
                        ]
                    }
                ]
            }

Получение продуктов

  method: GET
  Authorization: No Auth
  URL: http://domaine:port/api/v1/products/
  Status: 200 OK
  Response:
            {
                "count": 1,
                "next": "http://domaine:port/api/v1/products/?page={int}",
                "previous": "http://domaine:port/api/v1/products/?page={int}",
                "results": [
                    {
                        "title": "str",
                        "slug": "str",
                        "image": [
                            "http://domaine:port/media/images/{str}.png",
                            "http://domaine:port/media/images/{str}.png",
                            "http://domaine:port/media/images/{str}.png"
                        ],
                        "price": 1,
                        "category": "str",
                        "subcategory": "str"
                    }
                ]
            }

Регистрация пользователя

  method: POST
  Authorization: No Auth
  URL: http://domaine:port/api/v1/auth/users/
  Status: 201 Created
  Request:
            {
                "username": "str",
                "password": "str"
            }
  Response:
            {
                "email": "str",
                "username": "str",
                "id": 1
            }

Получение токена

  method: POST
  Authorization: No Auth
  URL: http://domaine:port/api/v1/auth/jwt/create/
  Status: 200 OK
  Request:
            {
                "username": "str",
                "password": "str"
            }
  Response:
            {
                "refresh": "str",
                "access": "str"
            }

Добавление/изменение/удаление товара из корзины

  method: POST
  Authorization: Bearer Token
  URL: http://domaine:port/api/v1/basket/
  Status: 201 Create
  Request:
            {
                "product": "str",
                "count":  1
            }
  Response:
            {
                "product": {
                    "title": "str",
                    "slug": "str",
                    "image": [
                        "http://domaine:port/media/images/{str}.png",
                        "http://domaine:port/media/images/{str}.png",
                        "http://domaine:port/media/images/{str}.png"
                    ],
                    "price": 1,
                    "category": "str",
                    "subcategory": "str"
                },
                "count": 1,
                "total_price_product": 1
            }
  method: PUT, PATCH
  Authorization: Bearer Token
  URL: http://domaine:port/api/v1/basket/
  Status: 200 OK
  Request:
            {
                "product": "str",
                "count":  1
            }
  Response:
            {
                "product": {
                    "title": "str",
                    "slug": "str",
                    "image": [
                        "http://domaine:port/media/images/{str}.png",
                        "http://domaine:port/media/images/{str}.png",
                        "http://domaine:port/media/images/{str}.png"
                    ],
                    "price": 1,
                    "category": "str",
                    "subcategory": "str"
                },
                "count": 1,
                "total_price_product": 1
            }
  method: DELETE
  Authorization: Bearer Token
  URL: http://domaine:port/api/v1/basket/
  Status: 204 No Content
  Request:
            {
                "product": "str",
                "count":  1
            }

Получение информации по корзине

  method: GET
  Authorization: Bearer Token
  URL: http://domaine:port/api/v1/basket/info/
  Status: 200 OK
  Response:
            {
                "products": [
                    {
                        "product": {
                            "title": "str",
                            "slug": "str",
                            "image": [
                                "http://domaine:port/media/images/{str}.png",
                                "http://domaine:port/media/images/{str}.png",
                                "http://domaine:port/media/images/{str}.png"
                            ],
                            "price": 1,
                            "category": "str",
                            "subcategory": "str"
                        },
                        "count": 1,
                        "total_price_product": 1
                    }
                ],
                "total_count": 1011,
                "total_price_products": 6066
            }

Очистка корзины

  method: DELETE
  Authorization: Bearer Token
  URL: http://domaine:port/api/v1/basket/clean/
  Status: 204 No Content

Как запустить

Через Docker

  • 1. Создать и заполнить файл .env в папке infra по шаблону .env.example.
  • 2. Если имеется утилита Make, в корне проекта выполнить команду make project-init,

    иначе

    выполнить команду docker compose -f ./infra/docker-compose.yml --env-file ./infra/.env up -d.

    Docker соберёт контейнеры с postgreSQL, приложением, выполнит миграцию,

    заполнит БД тестовыми категориями, подкатегориями и продуктами, создаст superuser-a.

    После сервер будет доступен по адрессу: http://127.0.0.1:8000/.

  • Примечание

    3. В контейнер с приложением проброшен volume с кодом, изменение кода в проекте обновляет его в контейнере и перезапускает сервер.

  • 4. Последующие запуски проекта осуществляются через команду make project-start

    или

    docker compose -f ./infra/docker-compose-start.yml --env-file ./infra/.env up -d

Через консоль

  • 1. Создать и заполнить файл .env в папке infra по шаблону .env.example.
  • 2. Создать БД в postgreSQL.

  • 3. Перейти в корень проекта и создать виртуальное окружение python -m venv venv.

  • 4. Активировать виртуальное окружение source venv/Scripts/activate.

  • 5. Установить зависимости pip install -r requirements.txt.

  • 6. Выполнить миграцию БД python src/manage.py migrate.

  • 7. Создать superuser-a python src/manage.py createsuperuser --noinput.

  • 8. Заполнить БД тестовыми данными(категории, подкатегории, продукты) python src/manage.py test_data.

  • 9. Запустить сервер python src/manage.py runserver.

  • 10. Сервер будет доступен по адрессу: http://127.0.0.1:8000/.


Стек