Skip to content

Instantly share code, notes, and snippets.

@leomp12
Last active January 18, 2023 14:45
Show Gist options
  • Save leomp12/847b3f269e2c947d4de892e4b5aebbec to your computer and use it in GitHub Desktop.
Save leomp12/847b3f269e2c947d4de892e4b5aebbec to your computer and use it in GitHub Desktop.
E-Com Plus - Buscando "reserva de estoque" em pedidos

E-Com Plus - Buscando "reserva de estoque" em pedidos por data/status e agrupamento por SKU

Envie um POST https://api.e-com.plus/v1/$aggregate.json com autenticação e corpo como o exemplo abaixo:

{
  "resource": "orders",
  "pipeline": [
    {
      "$match": {
        "created_at": { "$gte": "2022-12-16T19:59:43.659Z" },
        "transactions.status.current": { "$in": ["pending", "under_analysis"] }
      }
    },
    { "$unwind": "$items" },
    {
      "$project": {
        "product_id": "$items.product_id",
        "sku": "$items.sku",
        "stock_status": "$items.stock_status",
        "quantity": "$items.quantity"
      }
    },
    { "$match": { "stock_status": "released" } },
    {
      "$group": {
        "_id": "$sku",
        "reserved_stock": { "$sum": "$quantity" },
        "sku": { "$first": "$sku" },
        "product_id": { "$first": "$product_id" }
      }
    },
    { "$project" : { "_id": 0 } }
  ]
}

Alterando a data mínima ("2022-12-16T19:59:43.659Z" no exemplo) para 1 mês atrás (ou um pouco mais, dependendo da operação da loja) e possivelmente o(s) status a ser ignorado, neste exemplo apenas pedidos pendente ("pending") ou em análise ("under_analysis") serão considerados na agregação.

Neste exemplo todos SKUs com "estoque reservado" serão retornados em uma resposta como:

{
  "result": [
    {
      "reserved_stock": 1,
      "sku": "cx-ed-1052",
      "product_id": "5c70168cc626be23430d4fd9"
    },
    {
      "reserved_stock": 1,
      "sku": "cd-acl-9965-777-8",
      "product_id": "5c702e1cc626be23430d500e"
    },
    {
      "reserved_stock": 1,
      "sku": "cd-acl-9965-509-5",
      "product_id": "5c702e1cc626be23430d500e"
    },
    {
      "reserved_stock": 1,
      "sku": "hd-csr-303",
      "product_id": "5c701c8ac626be23430d4fe5"
    },
    {
      "reserved_stock": 1,
      "sku": "cd-acl-9965-304-4",
      "product_id": "5c702e1cc626be23430d500e"
    },
    {
      "reserved_stock": 5,
      "sku": "ms-csr-303",
      "product_id": "5c7010a3c626be23430d4fb4"
    },
    {
      "reserved_stock": 2,
      "sku": "HBT6818",
      "product_id": "5c769d1fc626be23430d50a0"
    }
  ]
}

Se preferir, você pode filtrar a agregação com uma lista de SKUs ("items.sku") editando o primeiro passo do pipeline na request:

{
  "$match": {
    "created_at": { "$gte": "2022-12-16T19:59:43.659Z" },
    "transactions.status.current": { "$in": ["pending", "under_analysis"] },
    "items.sku": { "$in": ["123", "456", "789", "abc"] }
  }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment