feat(integrations): реализованы методы работы с API Recommerce
Добавлены методы для управления категориями и товарами (CRUD), а также получение списка заказов с поддержкой пагинации и фильтрации.
This commit is contained in:
@@ -0,0 +1,29 @@
|
|||||||
|
# Generated by Django 5.0.10 on 2026-01-11 23:29
|
||||||
|
|
||||||
|
import integrations.fields
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('integrations', '0002_alter_recommerceintegration_api_token_and_more'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='recommerceintegration',
|
||||||
|
name='api_token',
|
||||||
|
field=integrations.fields.EncryptedCharField(blank=True, help_text='Токен авторизации из панели управления Recommerce', max_length=2000, verbose_name='API Токен (x-auth-token)'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='woocommerceintegration',
|
||||||
|
name='consumer_key',
|
||||||
|
field=integrations.fields.EncryptedCharField(blank=True, help_text='REST API Consumer Key (хранится зашифрованным)', max_length=1020, verbose_name='Consumer Key'),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='woocommerceintegration',
|
||||||
|
name='consumer_secret',
|
||||||
|
field=integrations.fields.EncryptedCharField(blank=True, help_text='REST API Consumer Secret (хранится зашифрованным)', max_length=1020, verbose_name='Consumer Secret'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -100,3 +100,69 @@ class RecommerceService:
|
|||||||
return False, 'Не удалось подключиться к серверу'
|
return False, 'Не удалось подключиться к серверу'
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return False, str(e)
|
return False, str(e)
|
||||||
|
|
||||||
|
# ========== Categories ==========
|
||||||
|
|
||||||
|
def get_category(self, sku: str) -> Tuple[bool, dict, str]:
|
||||||
|
"""Получить категорию по SKU"""
|
||||||
|
return self._request('GET', f'catalog/categories/{sku}')
|
||||||
|
|
||||||
|
def create_category(self, data: dict) -> Tuple[bool, dict, str]:
|
||||||
|
"""
|
||||||
|
Создать категорию.
|
||||||
|
|
||||||
|
Обязательные поля в data:
|
||||||
|
- sku: артикул категории
|
||||||
|
- title: название категории
|
||||||
|
"""
|
||||||
|
return self._request('POST', 'catalog/categories', data=data)
|
||||||
|
|
||||||
|
def update_category(self, sku: str, data: dict) -> Tuple[bool, dict, str]:
|
||||||
|
"""Обновить категорию (только переданные поля)"""
|
||||||
|
return self._request('POST', f'catalog/categories/{sku}', data=data)
|
||||||
|
|
||||||
|
def delete_category(self, sku: str) -> Tuple[bool, dict, str]:
|
||||||
|
"""Удалить категорию"""
|
||||||
|
return self._request('DELETE', f'catalog/categories/{sku}')
|
||||||
|
|
||||||
|
# ========== Products ==========
|
||||||
|
|
||||||
|
def get_product(self, sku: str) -> Tuple[bool, dict, str]:
|
||||||
|
"""Получить товар по SKU"""
|
||||||
|
return self._request('GET', f'catalog/products/{sku}')
|
||||||
|
|
||||||
|
def create_product(self, data: dict) -> Tuple[bool, dict, str]:
|
||||||
|
"""
|
||||||
|
Создать товар.
|
||||||
|
|
||||||
|
Обязательные поля в data:
|
||||||
|
- name: название товара
|
||||||
|
- sku: артикул товара
|
||||||
|
- parent_category_sku: артикул категории
|
||||||
|
- price[amount]: цена
|
||||||
|
- price[currency]: валюта (BYN|RUB|USD|EUR|KZT)
|
||||||
|
"""
|
||||||
|
return self._request('POST', 'catalog/products', data=data)
|
||||||
|
|
||||||
|
def update_product(self, sku: str, data: dict) -> Tuple[bool, dict, str]:
|
||||||
|
"""Обновить товар (только переданные поля)"""
|
||||||
|
return self._request('POST', f'catalog/products/{sku}', data=data)
|
||||||
|
|
||||||
|
def delete_product(self, sku: str) -> Tuple[bool, dict, str]:
|
||||||
|
"""Удалить товар"""
|
||||||
|
return self._request('DELETE', f'catalog/products/{sku}')
|
||||||
|
|
||||||
|
# ========== Orders ==========
|
||||||
|
|
||||||
|
def get_orders(self, page: int = 1, updated_after: str = None) -> Tuple[bool, dict, str]:
|
||||||
|
"""
|
||||||
|
Получить список заказов.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
page: номер страницы (по 100 заказов)
|
||||||
|
updated_after: фильтр 'Y-m-d-H-i-s' - только заказы после даты
|
||||||
|
"""
|
||||||
|
params = {'page': page}
|
||||||
|
if updated_after:
|
||||||
|
params['updated_after'] = updated_after
|
||||||
|
return self._request('GET', 'orders', params=params)
|
||||||
|
|||||||
Reference in New Issue
Block a user