feat: search backend (#537)

* docs: transient docs

* chore: cleanup

* webvtt WIP

* webvtt field

* chore: webvtt tests comments

* chore: remove useless tests

* feat: search TASK.md

* feat: full text search by title/webvtt

* chore: search api task

* feat: search api

* feat: search API

* chore: rm task md

* chore: roll back unnecessary validators

* chore: pr review WIP

* chore: pr review WIP

* chore: pr review

* chore: top imports

* feat: better lint + ci

* feat: better lint + ci

* feat: better lint + ci

* feat: better lint + ci

* chore: lint

* chore: lint

* fix: db datetime definitions

* fix: flush() params

* fix: update transcript mutability expectation / test

* fix: update transcript mutability expectation / test

* chore: auto review

* chore: new controller extraction

* chore: new controller extraction

* chore: cleanup

* chore: review WIP

* chore: pr WIP

* chore: remove ci lint

* chore: openapi regeneration

* chore: openapi regeneration

* chore: postgres test doc

* fix: .dockerignore for arm binaries

* fix: .dockerignore for arm binaries

* fix: cap test loops

* fix: cap test loops

* fix: cap test loops

* fix: get_transcript_topics

* chore: remove flow.md docs and claude guidance

* chore: remove claude.md db doc

* chore: remove claude.md db doc

* chore: remove claude.md db doc

* chore: remove claude.md db doc
This commit is contained in:
Igor Loskutov
2025-08-13 10:03:38 -04:00
committed by GitHub
parent a42ed12982
commit 6fb5cb21c2
29 changed files with 3213 additions and 1493 deletions

View File

@@ -209,7 +209,6 @@ export const $GetTranscript = {
},
created_at: {
type: "string",
format: "date-time",
title: "Created At",
},
share_mode: {
@@ -395,7 +394,6 @@ export const $GetTranscriptMinimal = {
},
created_at: {
type: "string",
format: "date-time",
title: "Created At",
},
share_mode: {
@@ -758,8 +756,15 @@ export const $Page_GetTranscriptMinimal_ = {
title: "Items",
},
total: {
type: "integer",
minimum: 0,
anyOf: [
{
type: "integer",
minimum: 0,
},
{
type: "null",
},
],
title: "Total",
},
page: {
@@ -800,7 +805,7 @@ export const $Page_GetTranscriptMinimal_ = {
},
},
type: "object",
required: ["items", "total", "page", "size"],
required: ["items", "page", "size"],
title: "Page[GetTranscriptMinimal]",
} as const;
@@ -814,8 +819,15 @@ export const $Page_Room_ = {
title: "Items",
},
total: {
type: "integer",
minimum: 0,
anyOf: [
{
type: "integer",
minimum: 0,
},
{
type: "null",
},
],
title: "Total",
},
page: {
@@ -856,7 +868,7 @@ export const $Page_Room_ = {
},
},
type: "object",
required: ["items", "total", "page", "size"],
required: ["items", "page", "size"],
title: "Page[Room]",
} as const;
@@ -973,6 +985,136 @@ export const $RtcOffer = {
title: "RtcOffer",
} as const;
export const $SearchResponse = {
properties: {
results: {
items: {
$ref: "#/components/schemas/SearchResult",
},
type: "array",
title: "Results",
},
total: {
type: "integer",
minimum: 0,
title: "Total",
description: "Total number of search results",
},
query: {
type: "string",
minLength: 1,
title: "Query",
description: "Search query text",
},
limit: {
type: "integer",
maximum: 100,
minimum: 1,
title: "Limit",
description: "Results per page",
},
offset: {
type: "integer",
minimum: 0,
title: "Offset",
description: "Number of results to skip",
},
},
type: "object",
required: ["results", "total", "query", "limit", "offset"],
title: "SearchResponse",
} as const;
export const $SearchResult = {
properties: {
id: {
type: "string",
minLength: 1,
title: "Id",
},
title: {
anyOf: [
{
type: "string",
},
{
type: "null",
},
],
title: "Title",
},
user_id: {
anyOf: [
{
type: "string",
},
{
type: "null",
},
],
title: "User Id",
},
room_id: {
anyOf: [
{
type: "string",
},
{
type: "null",
},
],
title: "Room Id",
},
created_at: {
type: "string",
title: "Created At",
},
status: {
type: "string",
minLength: 1,
title: "Status",
},
rank: {
type: "number",
maximum: 1,
minimum: 0,
title: "Rank",
},
duration: {
anyOf: [
{
type: "number",
minimum: 0,
},
{
type: "null",
},
],
title: "Duration",
description: "Duration in seconds",
},
search_snippets: {
items: {
type: "string",
},
type: "array",
title: "Search Snippets",
description: "Text snippets around search matches",
},
},
type: "object",
required: [
"id",
"created_at",
"status",
"rank",
"duration",
"search_snippets",
],
title: "SearchResult",
description: "Public search result model with computed fields.",
} as const;
export const $SourceKind = {
type: "string",
enum: ["room", "live", "file"],
@@ -1397,6 +1539,7 @@ export const $WherebyWebhookEvent = {
title: "Type",
},
data: {
additionalProperties: true,
type: "object",
title: "Data",
},
@@ -1414,11 +1557,15 @@ export const $Word = {
},
start: {
type: "number",
minimum: 0,
title: "Start",
description: "Time in seconds with float part",
},
end: {
type: "number",
minimum: 0,
title: "End",
description: "Time in seconds with float part",
},
speaker: {
type: "integer",