aimeos / ai-client-jsonapi

Aimeos frontend JSON API
GNU Lesser General Public License v3.0
28 stars 6 forks source link

Promotion Filter #17

Closed exemplari closed 2 years ago

exemplari commented 2 years ago

https://aimeos.org/docs/latest/frontend/jsonapi/catalog/#get-products-by-category

I have several product with multiple catalog tags. They all have a Default category , some have Promotion type 'home' and some have promotion type of the category name. Some have both promotions of 'home' and category name.

curl -X GET '/jsonapi/product?site=default&filter%5Bf_listtype%5D=promotion&filter%5Bf_catid%5D=1'

This should retrieve the 'promotion' category of 'home' = 1.

{ "meta": { "total": 33, "prefix": null, "content-baseurl": "/aimeos"

I receive 33 result count, however there are 70+ items in home promotions category.

curl -X GET '/jsonapi/product?site=default&filter%5Bf_listtype%5D=promotion&filter%5Bf_catid%5D=2'

Promotions of type Category 2: I receive 0 results count, however there are 3 items in that category. According to the admin /admin/default/jqadm/get/catalog/2?locale=en#product > Filter by type promotion

/jsonapi/product?site=default&filter[f_listtype]=promotion&filter[f_catid]=3

Promotions of type Category 3. I receive 2 result count, my count is 8

The products are all enabled. I have stock quantity checks off. Ran php artisan aimeos:jobs "index/rebuild"

aimeos/ai-client-jsonapi 2021.07.x-dev 0c764ae

2021.07.x-dev 0c764ae

/jsonapi/product?site=default&sort=-ctime&include=attribute,media,price,price/property,product,product/property,text,catalog,supplier,stock&page[offset]=0&page[limit]=4&filter[f_catid]=2&filter[f_listtype]=promotion

{ "meta": { "total": 0, "prefix": null, "content-baseurl": "/aimeos

SELECT * FROM mshop_index_catalog WHERE catid LIKE '2' AND listtype LIKE 'promotion'

114 | 1. | 2 | promotion | 0 | 2021-09-29 05:56:39 142 | 1. | 2 | promotion | 0 | 2021-09-29 05:56:39 143 | 1. | 2 | promotion | 0 | 20

3 Items expected.

$filter from Aimeos\Controller\Frontend\Product\Standard function search


Aimeos\MW\Criteria\SQL {#455
  -conn: Aimeos\MW\DB\Connection\DBAL {#377
    -connection: Doctrine\DBAL\Connection {#381
      #_conn: Doctrine\DBAL\Driver\PDO\Connection {#384
        inTransaction: false
        attributes: {
          CASE: NATURAL
          ERRMODE: EXCEPTION
          AUTOCOMMIT: 1
          PERSISTENT: false
          DRIVER_NAME: "mysql"
          SERVER_INFO: "Uptime: 31864  Threads: 2  Questions: 62478  Slow queries: 0  Opens: 145  Open tables: 138  Queries per second avg: 1.960"
          ORACLE_NULLS: NATURAL
          CLIENT_VERSION: "mysqlnd 7.4.20"
          SERVER_VERSION: "5.5.5-10.5.10-MariaDB-1:10.5.10+maria~focal"
          STATEMENT_CLASS: array:2 [
            0 => "Doctrine\DBAL\Driver\PDO\Statement"
            1 => []
          ]
          EMULATE_PREPARES: 1
          CONNECTION_STATUS: "mariadb via TCP/IP"
          DEFAULT_FETCH_MODE: BOTH
        }
      }
      #_config: Doctrine\DBAL\Configuration {#378
        #_attributes: []
      }
      #_eventManager: Doctrine\Common\EventManager {#379
        -_listeners: []
      }
      #_expr: Doctrine\DBAL\Query\Expression\ExpressionBuilder {#382
        -connection: Doctrine\DBAL\Connection {#381}
      }
      -autoCommit: true
      -transactionNestingLevel: 0
      -transactionIsolationLevel: null
      -nestTransactionsWithSavepoints: false
      -params: array:14 [
        "adapter" => "mysql"
        "host" => "mariadb"
        "port" => "3306"
        "socket" => ""
        "stmt" => array:1 [
          0 => "SET SESSION sort_buffer_size=2097144; SET NAMES 'utf8mb4'; SET SESSION sql_mode='ANSI'"
        ]
        "limit" => 3
        "defaultTableOptions" => array:2 [
          "charset" => "utf8mb4"
          "collate" => "utf8mb4_unicode_ci"
        ]
        "driverOptions" => array:4 [
          8 => 0
          3 => 2
          11 => 0
          17 => false
        ]
        "driver" => "pdo_mysql"
      ]
      -platform: null
      #_schemaManager: null
      #_driver: Doctrine\DBAL\Driver\PDO\MySQL\Driver {#380}
      -isRollbackOnly: false
      #defaultFetchMode: 2
    }
    -txnumber: 0
    -stmts: array:1 [
      0 => "SET SESSION sort_buffer_size=2097144; SET NAMES 'utf8mb4'; SET SESSION sql_mode='ANSI'"
    ]
    -params: array:14 [
      "adapter" => "mysql"
      "host" => "mariadb"
      "port" => "3306"
      "socket" => ""
      "stmt" => array:1 [
        0 => "SET SESSION sort_buffer_size=2097144; SET NAMES 'utf8mb4'; SET SESSION sql_mode='ANSI'"
      ]
      "limit" => 3
      "defaultTableOptions" => array:2 [
        "charset" => "utf8mb4"
        "collate" => "utf8mb4_unicode_ci"
      ]
      "driverOptions" => []
      "driver" => "pdo_mysql"
    ]
  }
  -conditions: Aimeos\MW\Criteria\Expression\Combine\SQL {#456
    -expressions: array:4 [
      0 => Aimeos\MW\Criteria\Expression\Compare\SQL {#447
        -conn: Aimeos\MW\DB\Connection\DBAL {#377}
        -operator: "!="
        -name: "index.catalog.id"
        -value: null
        -exprPlugins: []
      }
      1 => Aimeos\MW\Criteria\Expression\Combine\SQL {#446
        -expressions: array:3 [
          0 => Aimeos\MW\Criteria\Expression\Combine\SQL {#395
            -expressions: array:2 [
              0 => Aimeos\MW\Criteria\Expression\Combine\SQL {#394
                -expressions: array:1 [
                  0 => Aimeos\MW\Criteria\Expression\Compare\SQL {#393
                    -conn: Aimeos\MW\DB\Connection\DBAL {#377}
                    -operator: "=="
                    -name: "product.status"
                    -value: 1
                    -exprPlugins: []
                  }
                ]
                -operator: "&&"
              }
              1 => Aimeos\MW\Criteria\Expression\Compare\SQL {#392
                -conn: Aimeos\MW\DB\Connection\DBAL {#377}
                -operator: "=="
                -name: "1"
                -value: "1"
                -exprPlugins: []
              }
            ]
            -operator: "&&"
          }
          1 => Aimeos\MW\Criteria\Expression\Combine\SQL {#442
            -expressions: array:3 [
              0 => Aimeos\MW\Criteria\Expression\Compare\SQL {#396
                -conn: Aimeos\MW\DB\Connection\DBAL {#377}
                -operator: "=="
                -name: "product.type"
                -value: "event"
                -exprPlugins: []
              }
              1 => Aimeos\MW\Criteria\Expression\Compare\SQL {#397
                -conn: Aimeos\MW\DB\Connection\DBAL {#377}
                -operator: "=="
                -name: "product.datestart"
                -value: null
                -exprPlugins: []
              }
              2 => Aimeos\MW\Criteria\Expression\Compare\SQL {#439
                -conn: Aimeos\MW\DB\Connection\DBAL {#377}
                -operator: "<="
                -name: "product.datestart"
                -value: "2021-09-29 07:11:00"
                -exprPlugins: []
              }
            ]
            -operator: "||"
          }
          2 => Aimeos\MW\Criteria\Expression\Combine\SQL {#445
            -expressions: array:2 [
              0 => Aimeos\MW\Criteria\Expression\Compare\SQL {#443
                -conn: Aimeos\MW\DB\Connection\DBAL {#377}
                -operator: "=="
                -name: "product.dateend"
                -value: null
                -exprPlugins: []
              }
              1 => Aimeos\MW\Criteria\Expression\Compare\SQL {#444
                -conn: Aimeos\MW\DB\Connection\DBAL {#377}
                -operator: ">="
                -name: "product.dateend"
                -value: "2021-09-29 07:11:00"
                -exprPlugins: []
              }
            ]
            -operator: "||"
          }
        ]
        -operator: "&&"
      }
      2 => Aimeos\MW\Criteria\Expression\Compare\SQL {#451
        -conn: Aimeos\MW\DB\Connection\DBAL {#377}
        -operator: "=="
        -name: "index.catalog.id"
        -value: array:1 [
          0 => "2"
        ]
        -exprPlugins: []
      }
      3 => Aimeos\MW\Criteria\Expression\Compare\SQL {#452
        -conn: Aimeos\MW\DB\Connection\DBAL {#377}
        -operator: ">="
        -name: "index.catalog:position("promotion",["2"])"
        -value: 0
        -exprPlugins: []
      }
    ]
    -operator: "&&"
  }
  -sortations: array:3 [
    0 => Aimeos\MW\Criteria\Expression\Sort\SQL {#450
      -conn: Aimeos\MW\DB\Connection\DBAL {#377}
      -operator: "-"
      -name: "product.ctime"
      -exprPlugins: []
    }
    1 => Aimeos\MW\Criteria\Expression\Sort\SQL {#453
      -conn: Aimeos\MW\DB\Connection\DBAL {#377}
      -operator: "+"
      -name: "sort:index.catalog:position("promotion",["2"])"
      -exprPlugins: []
    }
    2 => Aimeos\MW\Criteria\Expression\Sort\SQL {#454
      -conn: Aimeos\MW\DB\Connection\DBAL {#377}
      -operator: "+"
      -name: "product.id"
      -exprPlugins: []
    }
  ]
  -sliceStart: 0
  -sliceSize: 4
}
exemplari commented 2 years ago

OMG, this is not an API issue. The admin is displaying incorrectly.

/admin/default/jqadm/get/catalog/2?locale=en#product

This displays all products as enabled, even when they are disabled.

Filtering by promotions and enabled is showing incorrect.