Skip to content

Instantly share code, notes, and snippets.

@nepalez
Last active December 6, 2016 11:42
Show Gist options
  • Save nepalez/7008a293bd1e8f21654bf599976970a8 to your computer and use it in GitHub Desktop.
Save nepalez/7008a293bd1e8f21654bf599976970a8 to your computer and use it in GitHub Desktop.

Структуры данных

Общая схема связей

                              site
                                ^
                                |
                                *
account <-------------------* showcase <---------------------.
   ^                            ^                            |
   |                            |                         shipping
   |                            |                            ^
   *                            *                            |
product <-------------------* listing *----------------------.
   ^                            ^
   |                            |
   *                            *
product_variation <---------* listing_variation

Product

Вложенная структура данных следующего вида

---
:id: 26
:url: https://somewhere
:deleted: false
:banned: false
:language: ru
:title:
  :value: Гравицапа
  :required: true
:subtitle:
  :value: Основа любого пепелаца
:description:
  :value: Пепелац без гравицапы не летает, дорогой (с)
:condition:
  :value: Почти новый
:condition_description:
  :value: Совсем новый, пробег 1 a.e., слегка помят по краям
:condition_id:
  :value: '823'
:productid:
  :value: '238492'
:brand:
  :value: Pluck Inc
:country:
  :value: RU
:location:
  :value: Pluck planet embassy
:values:
  :value:
  - Размер
  - Мощность
:pictures:
  :value:
  - http://example.com/pepelaz.jpg
:uuid:
  :value: 12345678-90ab-cdef-1234-567890abcdef
:listings:
- :id: 26
  :url: 
  :published: true
  :finished_at: '2017-01-05T09:37:58Z'
  :publication_url: 
  :allow_paid_subtitle:
    :value: false
  :allow_paid_placement:
    :value: true
  :allow_paid_images:
    :value: false
  :selected:
    :value: true
  :category_id:
    :value: 3
    :title: Star ship engines
  :shipping_profile_id:
    :value: 2
    :name: Ecelop Express
  :showcase:
    :id: 27
    :site_id: 77
    :language: de
    :currency: EUR
    :code: DE
    :domain: ebay.de
    :metric: metric
    :globalid: EBAY-DE
    :paid_options:
      :free_placement: 50
      :max_insertion_fee: 0.35
      :free_pictures: 12
      :picture_fee: nil
      :subtitle_fee: 0.5
    :shipping_profiles:
    - :id: 2
      :name: Ecelop Express
:variations:
- :id: 24
  :sku:
    :value: GZ001
    :required: true
  :ean:
    :value: 8e934u24
  :isbn:
    :value: 
  :upc:
    :value: '89324775'
  :values:
    :value:
    - Большой
    - 10 MWt
  :quantity:
    :value: 1
  :price:
    :value: 88818.07
    :currency: RUB
  :pictures:
    :value:
    - http://example.com/big_pepelaz.png
  :listings:
  - :id: 24
    :exchange_rate: 0.01456
    :price:
      :value: 1396.22
      :currency: EUR
      :custom: false
    :site_id: 77
    :showcase_id: 27
    :listing_id: 26

Методы

Во всех методах в случае ошибки (кроме 404 и 500) возвращаю json вида:

{
  "errors": {
    "base":             ["некачественный товар"],
    "title":            ["обязательный параметр"],
    "listings[0][sku]": ["оскорбляет чувства верующих"]
  }
}

Под ключом errors идет объект с ошибками. Ключами являются

  • base - ошибка относится к объекту в целом
  • title - ошибка относится к определенному полю
  • variations[0][sku] - ошибка относится к вложенному элементу (sku первой вариации)

Под каждым ключом - массив с одним или несколькими сообщениями об ошибке для данного элемента.

GET /products

Cписок всех активных (не удаленных, не забаненых) товаров аккаунта. Пока добавил 3 фильтра:

  • active=false - отсекает активные товары
  • banned=true - добавляет забаненые товары
  • deleted=true - добавляет удаленные товары

Возвращает json с массивом товаров { products: [...] }

GET /products/:id

Находит товар по id (поиск среди продуктов текущего пользователя)

Возвращает json с данными товара { product: { ... } }

POST /products

Добавляет товар. Работает аналогично PUT products/:id

PUT products/:id

Редактирует товар (текущего пользователя).

Принимает товар в виде плоского или вложенного (с листингами и вариациями) списка. Везде используется upsert (создание или редактирование).

Недостающие листинги на всех витринах пользователя создаются автоматически (с указанными категориями, если есть). Если указаны вариации, то они также разворачиваются по витринам. Если у вариации есть цена, она ставится на витрине как есть, иначе конвертируется из цены исходной вариации.

Возвращает json с данными товара { product: { ... } }

Если какие-то вариации удалены, они будут удалены из базы (вместе с вариациями на всех витринах)

DELETE /products/:id

Удаляет товар (товар не удаляется, а помечается как удаленный). Удаленные листинги товаров будут сняты с публикаций асинхронно. Возвращает 200 без тела

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment