Skip to content

NECROshizo/grocery-store

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

7 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Grocery-store

ОписаниС

Backend сСрвис для ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ².

Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ

Python PostgreSQL Docker

Django Django Rest Framework Gunicorn

Ruff Pre-commit

ВрСбования

Π§Π΅ΠΊ лист с трСбованиями
  • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ катСгориями ΠΈ подкатСгориями

    • Π”ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания, рСдактирования, удалСния ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ ΠΈ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² Π² Π°Π΄ΠΌΠΈΠ½ΠΊΠ΅.
    • ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΈ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅, slug-имя, ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.
    • ΠŸΠΎΠ΄ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ связаны с Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠ΅ΠΉ.
    • Π”ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ эндпоинт для просмотра всСх ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ с подкатСгориями. Π”ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ прСдусмотрСна пагинация.
  • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌΠΈ

    • Π”ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ добавлСния, измСнСния, удалСния ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² Π² Π°Π΄ΠΌΠΈΠ½ΠΊΠ΅.
    • ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ относится ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠΈ, соотвСтствСнно, ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ. Π”ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅, slug-имя, ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² 3-Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€Π°Ρ…, Ρ†Π΅Π½Ρƒ.
    • Π”ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ эндпоинт Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² с ΠΏΠ°Π³ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Π² Π²Ρ‹Π²ΠΎΠ΄Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ поля: Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅, slug, катСгория, подкатСгория, Ρ†Π΅Π½Π°, список ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.
  • ΠšΠΎΡ€Π·ΠΈΠ½Π°

    • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ эндпоинт добавлСния, измСнСния (ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ количСства), удалСния ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π² ΠΊΠΎΡ€Π·ΠΈΠ½Π΅.
    • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ эндпоинт Π²Ρ‹Π²ΠΎΠ΄Π° состава ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ с подсчСтом количСства Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² ΠΈ суммы стоимости Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² Π² ΠΊΠΎΡ€Π·ΠΈΠ½Π΅.
    • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠΉ очистки ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹.
  • ΠŸΡ€Π°Π²Π° доступа

    • ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ эндпоинтам ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ любой ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ.
    • ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ эндпоинтам ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ со своСй ΠΊΠΎΡ€Π·ΠΈΠ½ΠΎΠΉ.
  • Авторизация

    • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΠΎ Ρ‚ΠΎΠΊΠ΅Π½Ρƒ.
  • Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ

    • ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ pre-commit.
    • НастроСн Π»ΠΈΠ½Ρ‚Π΅Ρ€ ruff.
    • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠ²Π°Ρ€Ρ‹ списком.
    • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ запуск ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² Docker.

Запуск ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Запуск локально с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Docker

  1. ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

    git clone git@github.com:NECROshizo/grocery-store.git
    cd grocery-store
  2. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ» .env согласно ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ .env.example.

  3. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ infra ΠΈ собСритС ΠΈ запуститС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Docker Compose.

    cd infra
    docker-compose -f docker-compose.local.yaml up --build
  4. Для остановки ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

    docker-compose -f docker-compose.local.yaml down

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½.

Настройка ΠΈ запуск локально для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Poetry ΠΊΠ°ΠΊ инструмСнт управлСния зависимостями.

  1. ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

    git clone git@github.com:NECROshizo/grocery-store.git
    cd diary-workout-tracker-backend
  2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ активация Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ окруТСния ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Poetry.

    2.1 Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ окруТСния:

    python -m venv venv
    source venv/Scripts/activate

    для Linux и macOS:

    python3 -m venv venv
    source venv/bin/activate

    2.2 ИспользованиС Poetry:

    pip install poetry
    poetry shell
    poetry install

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: вСрсия Python Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ^3.12.

  1. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ pre-commit.

    poetry run pre-commit install
  2. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ» .env согласно ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ .env.example.

  3. Бапуск postgresql(ΠΏΡ€ΠΈ нСобходимости):

cd infra/
docker-compose -f docker-compose.local.yaml up --build
cd ..
  1. ЗапуститС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ:

    ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС:

    python backend/manage.py migrate
    python backend/manage.py collectstatic --noinput

    Для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… запусков:

    python backend/manage.py runserver

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ настроСн ΠΈ Π³ΠΎΡ‚ΠΎΠ² ΠΊ локальной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅.

ОписаниС эндпоинтов

Π­Π½Π΄ΠΏΠΎΠΈΠ½Ρ‚Ρ‹ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ (JWT)

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (POST /auth/users/)

РСгистрация Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Request:

{
  "username": "user1",
  "password": "password123",
  "email": "user1@example.com"
}

Response:

{
  "email": "user1@example.com",
  "username": "user1",
  "id": 1
}

Status Code: 201 CREATED

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ JWT Ρ‚ΠΎΠΊΠ΅Π½Π° (POST /auth/jwt/create/)

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ JWT Ρ‚ΠΎΠΊΠ΅Π½Π° для Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Request:

{
  "username": "user1",
  "password": "password123"
}

Response:

{
  "access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  "refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
}

Status Code: 200 OK

ОбновлСниС JWT Ρ‚ΠΎΠΊΠ΅Π½Π° (POST /auth/jwt/refresh/)

ОбновлСниС просрочСнного JWT Ρ‚ΠΎΠΊΠ΅Π½Π°.

Request:

{
  "refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
}

Response:

{
  "access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
}

Status Code: 200 OK

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° JWT Ρ‚ΠΎΠΊΠ΅Π½Π° (POST /auth/jwt/verify/)

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ JWT Ρ‚ΠΎΠΊΠ΅Π½Π°.

Request:

{
  "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
}

Response:

{
  "detail": "Token is valid"
}

Status Code: 200 OK

Π­Π½Π΄ΠΏΠΎΠΈΠ½Ρ‚Ρ‹ прилоТСния

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ (GET /api/v1/categories/)

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка всСх ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ.

Авторизация Π½Π΅ трСбуСтся

Response:

{
  "count": 2,
  "next": null,
  "previous": null,
  "results": [
    {
  	"title": "ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ 1",
  	"slug": "kategoriya-1",
  	"subcategories": [
  	  {
  		"title": "ΠŸΠΎΠ΄ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ 1",
  		"slug": "podkategoriya-1",
  		"image": "http://example.com/media/image.jpg"
  	  },
  	  {
  		"title": "ΠŸΠΎΠ΄ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ 2",
  		"slug": "podkategoriya-2",
  		"image": "http://example.com/media/image.jpg"
  	  }
  	],
  	"image": "http://example.com/media/image.jpg"
    },
    {
  	"title": "ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ 2",
  	"slug": "kategoriya-2",
  	"subcategories": [],
  	"image": "http://example.com/media/image.jpg"
    }
  ]
}

Status Code: 200 OK

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² (GET /api/v1/products/)

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка всСх ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ².

Авторизация Π½Π΅ трСбуСтся

Response:

{
  "count": 2,
  "next": null,
  "previous": null,
  "results": [
    {
      "title": "ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ 1",
      "price": "100.00",
      "slug": "produkt-1",
      "category": {
        "title": "ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ 1",
        "slug": "kategoriya-1",
        "image": "http://example.com/media/image.jpg"
      },
      "subcategory": {
        "title": "ΠŸΠΎΠ΄ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ 1",
        "slug": "podkategoriya-1",
        "image": "http://example.com/media/image.jpg"
      },
      "images": [
        "http://example.com/media/original_image.jpg",
        "http://example.com/media/medium_image.jpg",
        "http://example.com/media/small_image.jpg"
      ]
    },
    {
      "title": "ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ 2",
      "price": "50.00",
      "slug": "produkt-2",
      "category": {
        "title": "ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ 2",
        "slug": "kategoriya-2",
        "image": "http://example.com/media/image.jpg"
      },
      "subcategory": {
        "title": "ΠŸΠΎΠ΄ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ 2",
        "slug": "podkategoriya-2",
        "image": "http://example.com/media/image.jpg"
      },
      "images": [
        "http://example.com/media/original_image.jpg",
        "http://example.com/media/medium_image.jpg",
        "http://example.com/media/small_image.jpg"
      ]
    }
  ]
}

Status Code: 200 OK

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ (GET /api/v1/shopping-cart/)

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² Π² ΠΊΠΎΡ€Π·ΠΈΠ½Π΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ с суммарной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ количСствС Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² Π² ΠΊΠΎΡ€Π·ΠΈΠ½Π΅ ΠΈ ΠΎΠ±Ρ‰Π΅ΠΉ стоимости всСх Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ²

ВрСбуСтся авторизация ΠΏΠΎ JWT-Ρ‚ΠΎΠΊΠ΅Π½Ρƒ

Response:

{
  "count": 2,
  "next": null,
  "previous": null,
  "results": [
    {
      "product": {
        "title": "ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ 1",
        "price": "100.00",
        "slug": "produkt-1",
        "category": {
          "title": "ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ 1",
          "slug": "kategoriya-1",
          "image": "http://example.com/media/image.jpg"
        },
        "subcategory": {
          "title": "ΠŸΠΎΠ΄ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ 1",
          "slug": "podkategoriya-1",
          "image": "http://example.com/media/image.jpg"
        },
        "images": [
          "http://example.com/media/original_image.jpg",
          "http://example.com/media/medium_image.jpg",
          "http://example.com/media/small_image.jpg"
        ]
      },
      "count": 2
    },
    {
      "product": {
        "title": "ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ‚ 2",
        "price": "50.00",
        "slug": "produkt-2",
        "category": {
          "title": "ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ 2",
          "slug": "kategoriya-2",
          "image": "http://example.com/media/image.jpg"
        },
        "subcategory": {
          "title": "ΠŸΠΎΠ΄ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ 2",
          "slug": "podkategoriya-2",
          "image": "http://example.com/media/image.jpg"
        },
        "images": [
          "http://example.com/media/original_image.jpg",
          "http://example.com/media/medium_image.jpg",
          "http://example.com/media/small_image.jpg"
        ]
      },
      "count": 1
    }
  ],
  "summary": {
    "total_items": 3,
    "total_price": "250.00"
  }
}

Status Code: 200 OK

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΡ€Π·ΠΈΠ½Ρƒ (POST /api/v1/shopping-cart/)

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² Π² ΠΊΠΎΡ€Π·ΠΈΠ½Ρƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ‚ΠΎΠ²Π°Ρ€Π° Π² ΠΊΠΎΡ€Π·ΠΈΠ½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΎΠ²Π°Ρ€Ρ‹ ΡΡƒΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊ Ρ‚ΠΎΠΌΡƒ количСству Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ.

ВрСбуСтся авторизация ΠΏΠΎ JWT-Ρ‚ΠΎΠΊΠ΅Π½Ρƒ

Request:

{
  "products": [
    {
      "product": "produkt-1",
      "count": 2
    },
    {
      "product": "produkt-2",
      "count": 1
    }
  ]
}

Response:

{
  "result": "success"
}

Status Code: 201 CREATE

ОбновлСниС ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ (PATCH/PUT /api/v1/shopping-cart/)

ОбновлСниС количСства ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² Π² ΠΊΠΎΡ€Π·ΠΈΠ½Π΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ‚ΠΎΠ²Π°Ρ€Π° Π² ΠΊΠΎΡ€Π·ΠΈΠ½Π΅ Π΅Π³ΠΎ количСство обновляСтся Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ΅

ВрСбуСтся авторизация ΠΏΠΎ JWT-Ρ‚ΠΎΠΊΠ΅Π½Ρƒ

Request:

{
  "products": [
    {
      "product": "produkt-1",
      "count": 3
    },
    {
      "product": "produkt-2",
      "count": 1
    }
  ]
}

Response:

{
  "result": "success"
}

Status Code: 200 OK

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ (DELETE /api/v1/shopping-cart/)

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² ΠΈΠ· ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ‚ΠΎΠ²Π°Ρ€Π° Π² ΠΊΠΎΡ€Π·ΠΈΠ½Π΅ Π΅Π³ΠΎ количСство ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡΡ Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ΅ количСство, Ссли количСство сниТаСтся Π΄ΠΎ 0, Ρ‚ΠΎ Ρ‚ΠΎΠ²Π°Ρ€ удаляСтся ΠΈΠ· ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹

ВрСбуСтся авторизация ΠΏΠΎ JWT-Ρ‚ΠΎΠΊΠ΅Π½Ρƒ

Request:

{
  "products": [
    {
      "product": "produkt-1",
      "count": 1
    },
    {
      "product": "produkt-2",
      "count": 1
    }
  ]
}

Response:

{
  "result": "success"
}

Status Code: 204 NO CONTENT

ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ (DELETE /api/v1/shopping-cart/clear/)

Полная очистка ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

ВрСбуСтся авторизация ΠΏΠΎ JWT-Ρ‚ΠΎΠΊΠ΅Π½Ρƒ

Response:

{
  "result": "success"
}

Status Code: 204 NO CONTENT