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
|
// 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
|
// Add conditions
|
||||||
const conditions = [orm.eq(schema.extensionData.extId, searchParams.extId)]
|
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}%`))
|
conditions.push(orm.like(schema.extensionData.searchText, `%${searchParams.searchText}%`))
|
||||||
break
|
break
|
||||||
case SearchModeEnum.FTS:
|
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}`)
|
conditions.push(orm.sql`${schema.extensionDataFts.searchText} MATCH ${searchParams.searchText}`)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@ -297,34 +305,25 @@ export async function searchExtensionData(searchParams: {
|
|||||||
conditions.push(orm.lt(schema.extensionData.createdAt, searchParams.beforeCreatedAt))
|
conditions.push(orm.lt(schema.extensionData.createdAt, searchParams.beforeCreatedAt))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add ordering
|
// Build the final query with all conditions and modifiers
|
||||||
if (searchParams.orderByCreatedAt) {
|
const query = baseQuery
|
||||||
query.orderBy(
|
.where(orm.and(...conditions))
|
||||||
searchParams.orderByCreatedAt === SQLSortOrderEnum.Asc
|
.orderBy(
|
||||||
? orm.asc(schema.extensionData.createdAt)
|
searchParams.orderByCreatedAt
|
||||||
: orm.desc(schema.extensionData.createdAt)
|
? searchParams.orderByCreatedAt === SQLSortOrderEnum.Asc
|
||||||
|
? orm.asc(schema.extensionData.createdAt)
|
||||||
|
: orm.desc(schema.extensionData.createdAt)
|
||||||
|
: searchParams.orderByUpdatedAt
|
||||||
|
? searchParams.orderByUpdatedAt === SQLSortOrderEnum.Asc
|
||||||
|
? orm.asc(schema.extensionData.updatedAt)
|
||||||
|
: orm.desc(schema.extensionData.updatedAt)
|
||||||
|
: orm.asc(schema.extensionData.createdAt) // Default ordering
|
||||||
)
|
)
|
||||||
}
|
.limit(searchParams.limit ?? 100) // Default limit
|
||||||
|
.offset(searchParams.offset ?? 0) // Default offset
|
||||||
if (searchParams.orderByUpdatedAt) {
|
|
||||||
query.orderBy(
|
|
||||||
searchParams.orderByUpdatedAt === SQLSortOrderEnum.Asc
|
|
||||||
? orm.asc(schema.extensionData.updatedAt)
|
|
||||||
: orm.desc(schema.extensionData.updatedAt)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add limit and offset
|
|
||||||
if (searchParams.limit) {
|
|
||||||
query.limit(searchParams.limit)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (searchParams.offset) {
|
|
||||||
query.offset(searchParams.offset)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Execute query and convert results
|
// Execute query and convert results
|
||||||
const results = await query.where(orm.and(...conditions)).all()
|
const results = await query.all()
|
||||||
return results.map((rawData) => {
|
return results.map((rawData) => {
|
||||||
// @ts-expect-error - rawData is unknown, but will be safe parsed with valibot
|
// @ts-expect-error - rawData is unknown, but will be safe parsed with valibot
|
||||||
return convertRawExtDataToExtData(rawData)
|
return convertRawExtDataToExtData(rawData)
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
import * as schema from "@kksh/drizzle/schema"
|
import * as schema from "@kksh/drizzle/schema"
|
||||||
import { Button, Input } from "@kksh/svelte5"
|
import { Button, Input } from "@kksh/svelte5"
|
||||||
import { CmdTypeEnum, Ext } from "@kunkunapi/src/models/extension"
|
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 { db } from "$lib/orm/database"
|
||||||
import * as orm from "drizzle-orm"
|
import * as orm from "drizzle-orm"
|
||||||
import { Inspect } from "svelte-inspect-value"
|
import { Inspect } from "svelte-inspect-value"
|
||||||
@ -100,24 +100,25 @@
|
|||||||
>
|
>
|
||||||
Get Extension Data By ID
|
Get Extension Data By ID
|
||||||
</Button>
|
</Button>
|
||||||
<div class="flex gap-2">
|
<form
|
||||||
|
class="flex gap-1"
|
||||||
|
onsubmit={async (e) => {
|
||||||
|
e.preventDefault()
|
||||||
|
const _data = await searchExtensionData({
|
||||||
|
extId: 1,
|
||||||
|
searchMode: SearchModeEnum.FTS,
|
||||||
|
searchText: searchText,
|
||||||
|
orderByCreatedAt: SQLSortOrderEnum.Desc,
|
||||||
|
limit: 10,
|
||||||
|
fields: ["search_text", "data"]
|
||||||
|
})
|
||||||
|
console.log(_data)
|
||||||
|
data = _data
|
||||||
|
inspectTitle = "Search Results"
|
||||||
|
}}
|
||||||
|
>
|
||||||
<Input class="" bind:value={searchText} placeholder="Search Text" />
|
<Input class="" bind:value={searchText} placeholder="Search Text" />
|
||||||
<Button
|
<Button class="" type="submit">Search Extension Data</Button>
|
||||||
class=""
|
</form>
|
||||||
onclick={async () => {
|
<Inspect name={inspectTitle} value={data} expandLevel={2} />
|
||||||
const _data = await searchExtensionData({
|
|
||||||
extId: 1,
|
|
||||||
searchMode: SearchModeEnum.FTS,
|
|
||||||
searchText: searchText,
|
|
||||||
limit: 10
|
|
||||||
})
|
|
||||||
console.log(_data)
|
|
||||||
data = _data
|
|
||||||
inspectTitle = "Search Results"
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
Search Extension Data
|
|
||||||
</Button>
|
|
||||||
</div>
|
|
||||||
<Inspect name={inspectTitle} value={data} />
|
|
||||||
</main>
|
</main>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user