mirror of
https://github.com/kunkunsh/kunkun.git
synced 2025-07-03 06:51:29 +00:00
fixed searchExtensionData orm function
This commit is contained in:
parent
9c89395d5e
commit
288c9b554a
@ -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)
|
||||
|
@ -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>
|
||||
|
Loading…
x
Reference in New Issue
Block a user