feat(utils): Support free text configuration (#6942)
**What** - Add support for searchable entity properties to configure default free text search when providing a `q` filter - `@Searchable` decorator to mark a property or relation to be searchable form the current entity FIXES CORE-1910
This commit is contained in:
1 parent
a0005faa14
commit
21990fcd4b
19 files changed
+424
-205
No files matched your search
@@ -9,6 +9,7 @@ import {
|
||||
import {
|
||||
createPsqlIndexStatementHelper,
|
||||
generateEntityId,
|
||||
Searchable,
|
||||
} from "@medusajs/utils"
|
||||
|
||||
import { StockLocationAddress } from "./stock-location-address"
|
||||
@@ -43,6 +44,7 @@ export class StockLocation {
|
||||
@Property({ columnType: "timestamptz", nullable: true })
|
||||
deleted_at: Date | null = null
|
||||
|
||||
@Searchable()
|
||||
@Property({ columnType: "text" })
|
||||
name: string
|
||||
|
||||
|
||||
@@ -1,2 +1 @@
|
||||
export { MikroOrmBaseRepository as BaseRepository } from "@medusajs/utils"
|
||||
export { StockLocationRepository } from "./stock-location"
|
||||
@@ -1,52 +0,0 @@
|
||||
import { Context, DAL } from "@medusajs/types"
|
||||
|
||||
import { StockLocation } from "@models"
|
||||
import { mikroOrmBaseRepositoryFactory } from "@medusajs/utils"
|
||||
|
||||
export class StockLocationRepository extends mikroOrmBaseRepositoryFactory<StockLocation>(
|
||||
StockLocation
|
||||
) {
|
||||
async find(
|
||||
findOptions: DAL.FindOptions<StockLocation & { q?: string }> = {
|
||||
where: {},
|
||||
},
|
||||
context: Context
|
||||
): Promise<StockLocation[]> {
|
||||
const findOptions_ = { ...findOptions }
|
||||
findOptions_.options ??= {}
|
||||
|
||||
this.applyFreeTextSearchFilters<StockLocation>(
|
||||
findOptions_,
|
||||
this.getFreeTextSearchConstraints
|
||||
)
|
||||
|
||||
return await super.find(findOptions_, context)
|
||||
}
|
||||
|
||||
async findAndCount(
|
||||
findOptions: DAL.FindOptions<StockLocation & { q?: string }> = {
|
||||
where: {},
|
||||
},
|
||||
context: Context
|
||||
): Promise<[StockLocation[], number]> {
|
||||
const findOptions_ = { ...findOptions }
|
||||
findOptions_.options ??= {}
|
||||
|
||||
this.applyFreeTextSearchFilters<StockLocation>(
|
||||
findOptions_,
|
||||
this.getFreeTextSearchConstraints
|
||||
)
|
||||
|
||||
return await super.findAndCount(findOptions_, context)
|
||||
}
|
||||
|
||||
protected getFreeTextSearchConstraints(q: string) {
|
||||
return [
|
||||
{
|
||||
name: {
|
||||
$ilike: `%${q}%`,
|
||||
},
|
||||
},
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user