fixed searchExtensionData orm function

This commit is contained in:
Huakun Shen 2025-03-26 11:48:24 -04:00
parent 9c89395d5e
commit 288c9b554a
No known key found for this signature in database
2 changed files with 47 additions and 47 deletions

View File

@ -261,7 +261,16 @@ export async function searchExtensionData(searchParams: {
}
// Build the query
const query = db.select(selectQuery).from(schema.extensionData)
let baseQuery = db.select(selectQuery).from(schema.extensionData)
// Add FTS join if needed
if (searchParams.searchMode === SearchModeEnum.FTS && searchParams.searchText) {
// @ts-expect-error - The join type is correct but TypeScript can't infer it properly
baseQuery = baseQuery.innerJoin(
schema.extensionDataFts,
orm.eq(schema.extensionData.dataId, schema.extensionDataFts.dataId)
)
}
// Add conditions
const conditions = [orm.eq(schema.extensionData.extId, searchParams.extId)]
@ -283,7 +292,6 @@ export async function searchExtensionData(searchParams: {
conditions.push(orm.like(schema.extensionData.searchText, `%${searchParams.searchText}%`))
break
case SearchModeEnum.FTS:
// For FTS, we need to use a raw SQL query since Drizzle doesn't support MATCH directly
conditions.push(orm.sql`${schema.extensionDataFts.searchText} MATCH ${searchParams.searchText}`)
break
}
@ -297,34 +305,25 @@ export async function searchExtensionData(searchParams: {
conditions.push(orm.lt(schema.extensionData.createdAt, searchParams.beforeCreatedAt))
}
// Add ordering
if (searchParams.orderByCreatedAt) {
query.orderBy(
searchParams.orderByCreatedAt === SQLSortOrderEnum.Asc
// Build the final query with all conditions and modifiers
const query = baseQuery
.where(orm.and(...conditions))
.orderBy(
searchParams.orderByCreatedAt
? searchParams.orderByCreatedAt === SQLSortOrderEnum.Asc
? orm.asc(schema.extensionData.createdAt)
: orm.desc(schema.extensionData.createdAt)
)
}
if (searchParams.orderByUpdatedAt) {
query.orderBy(
searchParams.orderByUpdatedAt === SQLSortOrderEnum.Asc
: searchParams.orderByUpdatedAt
? searchParams.orderByUpdatedAt === SQLSortOrderEnum.Asc
? orm.asc(schema.extensionData.updatedAt)
: orm.desc(schema.extensionData.updatedAt)
: orm.asc(schema.extensionData.createdAt) // Default ordering
)
}
// Add limit and offset
if (searchParams.limit) {
query.limit(searchParams.limit)
}
if (searchParams.offset) {
query.offset(searchParams.offset)
}
.limit(searchParams.limit ?? 100) // Default limit
.offset(searchParams.offset ?? 0) // Default offset
// Execute query and convert results
const results = await query.where(orm.and(...conditions)).all()
const results = await query.all()
return results.map((rawData) => {
// @ts-expect-error - rawData is unknown, but will be safe parsed with valibot
return convertRawExtDataToExtData(rawData)

View File

@ -11,7 +11,7 @@
import * as schema from "@kksh/drizzle/schema"
import { Button, Input } from "@kksh/svelte5"
import { CmdTypeEnum, Ext } from "@kunkunapi/src/models/extension"
import { SearchModeEnum } from "@kunkunapi/src/models/sql"
import { SearchModeEnum, SQLSortOrderEnum } from "@kunkunapi/src/models/sql"
import { db } from "$lib/orm/database"
import * as orm from "drizzle-orm"
import { Inspect } from "svelte-inspect-value"
@ -100,24 +100,25 @@
>
Get Extension Data By ID
</Button>
<div class="flex gap-2">
<Input class="" bind:value={searchText} placeholder="Search Text" />
<Button
class=""
onclick={async () => {
<form
class="flex gap-1"
onsubmit={async (e) => {
e.preventDefault()
const _data = await searchExtensionData({
extId: 1,
searchMode: SearchModeEnum.FTS,
searchText: searchText,
limit: 10
orderByCreatedAt: SQLSortOrderEnum.Desc,
limit: 10,
fields: ["search_text", "data"]
})
console.log(_data)
data = _data
inspectTitle = "Search Results"
}}
>
Search Extension Data
</Button>
</div>
<Inspect name={inspectTitle} value={data} />
<Input class="" bind:value={searchText} placeholder="Search Text" />
<Button class="" type="submit">Search Extension Data</Button>
</form>
<Inspect name={inspectTitle} value={data} expandLevel={2} />
</main>