Backend ΡΠ΅ΡΠ²ΠΈΡ Π΄Π»Ρ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ².
Π§Π΅ΠΊ Π»ΠΈΡΡ Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌΠΈ
-
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΠΌΠΈ ΠΈ ΠΏΠΎΠ΄ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΠΌΠΈ
- ΠΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ, ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ ΠΈ ΠΏΠΎΠ΄ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ ΡΠΎΠ²Π°ΡΠΎΠ² Π² Π°Π΄ΠΌΠΈΠ½ΠΊΠ΅.
- ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ ΠΈ ΠΏΠΎΠ΄ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅, slug-ΠΈΠΌΡ, ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
- ΠΠΎΠ΄ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠ΅ΠΉ.
- ΠΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΠ½Π΄ΠΏΠΎΠΈΠ½Ρ Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π²ΡΠ΅Ρ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ Ρ ΠΏΠΎΠ΄ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΠΌΠΈ. ΠΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π° ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ.
-
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°ΠΌΠΈ
- ΠΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ² Π² Π°Π΄ΠΌΠΈΠ½ΠΊΠ΅.
- ΠΡΠΎΠ΄ΡΠΊΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ ΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ. ΠΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅, slug-ΠΈΠΌΡ, ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² 3-Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ°Ρ , ΡΠ΅Π½Ρ.
- ΠΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΠ½Π΄ΠΏΠΎΠΈΠ½Ρ Π²ΡΠ²ΠΎΠ΄Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ² Ρ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΠ΅ΠΉ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΠ΄ΡΠΊΡ Π² Π²ΡΠ²ΠΎΠ΄Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΠ»Ρ: Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅, slug, ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ, ΠΏΠΎΠ΄ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ, ΡΠ΅Π½Π°, ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ.
-
ΠΠΎΡΠ·ΠΈΠ½Π°
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ½Π΄ΠΏΠΎΠΈΠ½Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ (ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π°), ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° Π² ΠΊΠΎΡΠ·ΠΈΠ½Π΅.
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ½Π΄ΠΏΠΎΠΈΠ½Ρ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΎΡΡΠ°Π²Π° ΠΊΠΎΡΠ·ΠΈΠ½Ρ Ρ ΠΏΠΎΠ΄ΡΡΠ΅ΡΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠΎΠ²Π°ΡΠΎΠ² ΠΈ ΡΡΠΌΠΌΡ ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ ΡΠΎΠ²Π°ΡΠΎΠ² Π² ΠΊΠΎΡΠ·ΠΈΠ½Π΅.
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΎΡΠΈΡΡΠΊΠΈ ΠΊΠΎΡΠ·ΠΈΠ½Ρ.
-
ΠΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ°
- ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΡΠ½Π΄ΠΏΠΎΠΈΠ½ΡΠ°ΠΌ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ ΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ Π»ΡΠ±ΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
- ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΡΠ½Π΄ΠΏΠΎΠΈΠ½ΡΠ°ΠΌ ΠΊΠΎΡΠ·ΠΈΠ½Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π°Π²ΡΠΎΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΠΊΠΎΡΠ·ΠΈΠ½ΠΎΠΉ.
-
ΠΠ²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎ ΡΠΎΠΊΠ΅Π½Ρ.
-
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ
- ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π½Ρ pre-commit.
- ΠΠ°ΡΡΡΠΎΠ΅Π½ Π»ΠΈΠ½ΡΠ΅Ρ ruff.
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠΎΠ²Π°ΡΡ ΡΠΏΠΈΡΠΊΠΎΠΌ.
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π² Docker.
-
ΠΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ.
git clone git@github.com:NECROshizo/grocery-store.git cd grocery-store
-
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»
.env
ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΡΠ°Π±Π»ΠΎΠ½Ρ .env.example. -
ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ
infra
ΠΈ ΡΠΎΠ±Π΅ΡΠΈΡΠ΅ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Docker Compose.cd infra docker-compose -f docker-compose.local.yaml up --build
-
ΠΠ»Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
docker-compose -f docker-compose.local.yaml down
Π’Π΅ΠΏΠ΅ΡΡ Π²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ Π·Π°ΠΏΡΡΠ΅Π½.
ΠΡΠΎΠ΅ΠΊΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Poetry ΠΊΠ°ΠΊ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ.
-
ΠΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ.
git clone git@github.com:NECROshizo/grocery-store.git cd diary-workout-tracker-backend
-
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ Π°ΠΊΡΠΈΠ²Π°ΡΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ 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.
-
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ pre-commit.
poetry run pre-commit install
-
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»
.env
ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΡΠ°Π±Π»ΠΎΠ½Ρ .env.example. -
Π‘Π°ΠΏΡΡΠΊ postgresql(ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ):
cd infra/
docker-compose -f docker-compose.local.yaml up --build
cd ..
-
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΡΡΡΠ½ΡΡ:
ΠΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅:
python backend/manage.py migrate python backend/manage.py collectstatic --noinput
ΠΠ»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π·Π°ΠΏΡΡΠΊΠΎΠ²:
python backend/manage.py runserver
Π’Π΅ΠΏΠ΅ΡΡ Π²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π½Π°ΡΡΡΠΎΠ΅Π½ ΠΈ Π³ΠΎΡΠΎΠ² ΠΊ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (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