mirror of
https://git.sr.ht/~tsileo/microblog.pub
synced 2025-06-05 21:59:23 +02:00
Boostrap full-text search for the outbox
This commit is contained in:
52
app/admin.py
52
app/admin.py
@ -1,4 +1,5 @@
|
||||
from datetime import datetime
|
||||
from typing import Any
|
||||
|
||||
import httpx
|
||||
from fastapi import APIRouter
|
||||
@ -149,6 +150,57 @@ async def get_lookup(
|
||||
)
|
||||
|
||||
|
||||
@router.get("/search")
|
||||
async def admin_search(
|
||||
request: Request,
|
||||
query: str | None = None,
|
||||
db_session: AsyncSession = Depends(get_db_session),
|
||||
) -> templates.TemplateResponse | RedirectResponse:
|
||||
|
||||
results: list[Any] = []
|
||||
if query:
|
||||
results = (
|
||||
(
|
||||
await db_session.execute(
|
||||
select(models.OutboxObject)
|
||||
.join(
|
||||
models.outbox_fts,
|
||||
models.outbox_fts.c.rowid == models.OutboxObject.id,
|
||||
)
|
||||
.options(
|
||||
joinedload(
|
||||
models.OutboxObject.outbox_object_attachments
|
||||
).options(joinedload(models.OutboxObjectAttachment.upload)),
|
||||
joinedload(models.OutboxObject.relates_to_inbox_object).options(
|
||||
joinedload(models.InboxObject.actor),
|
||||
),
|
||||
joinedload(
|
||||
models.OutboxObject.relates_to_outbox_object
|
||||
).options(
|
||||
joinedload(
|
||||
models.OutboxObject.outbox_object_attachments
|
||||
).options(joinedload(models.OutboxObjectAttachment.upload)),
|
||||
),
|
||||
)
|
||||
.where(models.outbox_fts.c.outbox_fts.op("MATCH")(query))
|
||||
.limit(20)
|
||||
)
|
||||
) # type: ignore
|
||||
.unique()
|
||||
.scalars()
|
||||
)
|
||||
|
||||
return await templates.render_template(
|
||||
db_session,
|
||||
request,
|
||||
"admin_search.html",
|
||||
{
|
||||
"query": query,
|
||||
"results": results,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@router.get("/new")
|
||||
async def admin_new(
|
||||
request: Request,
|
||||
|
Reference in New Issue
Block a user