Skip to content

Instantly share code, notes, and snippets.

@leomp12
Last active January 18, 2023 14:45
Show Gist options
  • Select an option

  • Save leomp12/847b3f269e2c947d4de892e4b5aebbec to your computer and use it in GitHub Desktop.

Select an option

Save leomp12/847b3f269e2c947d4de892e4b5aebbec to your computer and use it in GitHub Desktop.

Revisions

  1. leomp12 revised this gist Jan 18, 2023. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions README.md
    Original file line number Diff line number Diff line change
    @@ -10,7 +10,7 @@ e corpo como o exemplo abaixo:
    {
    "$match": {
    "created_at": { "$gte": "2022-12-16T19:59:43.659Z" },
    "financial_status.current": { "$ne": "paid" }
    "transactions.status.current": { "$in": ["pending", "under_analysis"] }
    }
    },
    { "$unwind": "$items" },
    @@ -38,7 +38,7 @@ e corpo como o exemplo abaixo:

    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 pedidos pagos (`"paid"`) não serão considerados na agregação.
    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:

    @@ -92,7 +92,7 @@ Se preferir, você pode filtrar a agregação com uma lista de SKUs (`"items.sku
    {
    "$match": {
    "created_at": { "$gte": "2022-12-16T19:59:43.659Z" },
    "financial_status.current": { "$ne": "paid" },
    "transactions.status.current": { "$in": ["pending", "under_analysis"] },
    "items.sku": { "$in": ["123", "456", "789", "abc"] }
    }
    }
  2. leomp12 revised this gist Jan 16, 2023. No changes.
  3. leomp12 revised this gist Jan 16, 2023. 1 changed file with 2 additions and 0 deletions.
    2 changes: 2 additions & 0 deletions README.md
    Original file line number Diff line number Diff line change
    @@ -84,6 +84,8 @@ Neste exemplo todos SKUs com "estoque reservado" serão retornados em uma respos
    }
    ```

    ---

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

    ```json
  4. leomp12 created this gist Jan 16, 2023.
    97 changes: 97 additions & 0 deletions README.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,97 @@
    # 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](https://developers.e-com.plus/docs/api/#/store/authenticate-yourself/authenticate-yourself)
    e corpo como o exemplo abaixo:

    ```json
    {
    "resource": "orders",
    "pipeline": [
    {
    "$match": {
    "created_at": { "$gte": "2022-12-16T19:59:43.659Z" },
    "financial_status.current": { "$ne": "paid" }
    }
    },
    { "$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 pedidos pagos (`"paid"`) não serão considerados na agregação.

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

    ```json
    {
    "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:

    ```json
    {
    "$match": {
    "created_at": { "$gte": "2022-12-16T19:59:43.659Z" },
    "financial_status.current": { "$ne": "paid" },
    "items.sku": { "$in": ["123", "456", "789", "abc"] }
    }
    }
    ```