feat(medusa): Rollout index engine behind feature flag (#11431)
**What** - Add index engine feature flag - apply it to the `store/products` end point as well as `admin/products` - Query builder various fixes - search capabilities on full data of every entities. The `q` search will be applied to all involved joined table for selection/where clauses Co-authored-by: Carlos R. L. Rodrigues <37986729+carlos-r-l-rodrigues@users.noreply.github.com>
This commit is contained in:
co-authored by
Carlos R. L. Rodrigues
parent
3b69f5a105
commit
448dbcb596
@@ -178,8 +178,14 @@ export default class IndexModuleService
|
||||
return this.schemaObjectRepresentation_
|
||||
}
|
||||
|
||||
const baseSchema = `
|
||||
scalar DateTime
|
||||
scalar Date
|
||||
scalar Time
|
||||
scalar JSON
|
||||
`
|
||||
const [objectRepresentation, entityMap] = buildSchemaObjectRepresentation(
|
||||
this.moduleOptions_.schema ?? defaultSchema
|
||||
baseSchema + (this.moduleOptions_.schema ?? defaultSchema)
|
||||
)
|
||||
|
||||
this.schemaObjectRepresentation_ = objectRepresentation
|
||||
|
||||
@@ -13,8 +13,8 @@ import {
|
||||
InjectTransactionManager,
|
||||
isDefined,
|
||||
MedusaContext,
|
||||
promiseAll,
|
||||
toMikroORMEntity,
|
||||
unflattenObjectKeys,
|
||||
} from "@medusajs/framework/utils"
|
||||
import {
|
||||
EntityManager,
|
||||
@@ -250,10 +250,11 @@ export class PostgresProvider implements IndexTypes.StorageProvider {
|
||||
const { take, skip, order: inputOrderBy = {} } = config.pagination ?? {}
|
||||
|
||||
const select = normalizeFieldsSelection(fields)
|
||||
const where = flattenObjectKeys(filters)
|
||||
const where = flattenObjectKeys(unflattenObjectKeys(filters))
|
||||
|
||||
const joinWhere = flattenObjectKeys(joinFilters)
|
||||
const orderBy = flattenObjectKeys(inputOrderBy)
|
||||
const inputOrderByObj = unflattenObjectKeys(inputOrderBy)
|
||||
const joinWhere = flattenObjectKeys(unflattenObjectKeys(joinFilters))
|
||||
const orderBy = flattenObjectKeys(inputOrderByObj)
|
||||
|
||||
const { manager } = sharedContext as { manager: SqlEntityManager }
|
||||
let hasPagination = false
|
||||
@@ -266,7 +267,10 @@ export class PostgresProvider implements IndexTypes.StorageProvider {
|
||||
}
|
||||
}
|
||||
|
||||
const requestedFields = deepMerge(deepMerge(select, filters), inputOrderBy)
|
||||
const requestedFields = deepMerge(
|
||||
deepMerge(select, filters),
|
||||
inputOrderByObj
|
||||
)
|
||||
|
||||
const connection = manager.getConnection()
|
||||
const qb = new QueryBuilder({
|
||||
@@ -288,26 +292,20 @@ export class PostgresProvider implements IndexTypes.StorageProvider {
|
||||
requestedFields,
|
||||
})
|
||||
|
||||
const [sql, sqlCount] = qb.buildQuery({
|
||||
const sql = qb.buildQuery({
|
||||
hasPagination,
|
||||
returnIdOnly: !!keepFilteredEntities,
|
||||
hasCount,
|
||||
})
|
||||
|
||||
const promises: Promise<any>[] = []
|
||||
|
||||
promises.push(manager.execute(sql))
|
||||
|
||||
if (hasCount && sqlCount) {
|
||||
promises.push(manager.execute(sqlCount))
|
||||
}
|
||||
|
||||
let [resultSet, count] = await promiseAll(promises)
|
||||
const resultSet = await manager.execute(sql)
|
||||
|
||||
const resultMetadata: IndexTypes.QueryFunctionReturnPagination | undefined =
|
||||
hasPagination
|
||||
? {
|
||||
count: hasCount ? parseInt(count[0].count) : undefined,
|
||||
count: hasCount
|
||||
? parseInt(resultSet[0]?.count_total ?? 0)
|
||||
: undefined,
|
||||
skip,
|
||||
take,
|
||||
}
|
||||
@@ -436,7 +434,7 @@ export class PostgresProvider implements IndexTypes.StorageProvider {
|
||||
{
|
||||
onConflictAction: "merge",
|
||||
onConflictFields: ["id", "name"],
|
||||
onConflictMergeFields: ["data", "staled_at"],
|
||||
onConflictMergeFields: ["staled_at"],
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user