diff --git a/src/modules/search/domain/services/SearchService.ts b/src/modules/search/domain/services/SearchService.ts index e82c6efa..b05f1983 100644 --- a/src/modules/search/domain/services/SearchService.ts +++ b/src/modules/search/domain/services/SearchService.ts @@ -30,7 +30,7 @@ export class SearchService { const metadata = metadataResult.value; // 2. Check if content meets minimum length for indexing - const chunk = Chunk.create(metadata.title, metadata.description); + const chunk = Chunk.create(metadata); if (!chunk.meetsMinLength()) { // Skip indexing silently - content too short return ok(undefined); @@ -86,10 +86,12 @@ export class SearchService { // 2. Filter out results with insufficient content const filteredResults = similarResult.value.filter(result => { - const chunk = Chunk.create( - result.metadata.title, - result.metadata.description, - ); + // Create UrlMetadata from the search result metadata + const metadataResult = UrlMetadata.create(result.metadata); + if (metadataResult.isErr()) { + return false; + } + const chunk = Chunk.create(metadataResult.value); return chunk.meetsMinLength(); }); diff --git a/src/modules/search/domain/value-objects/Chunk.ts b/src/modules/search/domain/value-objects/Chunk.ts index 8049d671..509e1f51 100644 --- a/src/modules/search/domain/value-objects/Chunk.ts +++ b/src/modules/search/domain/value-objects/Chunk.ts @@ -1,4 +1,5 @@ import { ValueObject } from '../../../../shared/domain/ValueObject'; +import { UrlMetadata } from '../../../cards/domain/value-objects/UrlMetadata'; interface ChunkProps { value: string; @@ -19,8 +20,11 @@ export class Chunk extends ValueObject { super(props); } - public static create(title?: string, description?: string): Chunk { - const content = [title, description].filter(Boolean).join(' ').trim(); + public static create(metadata: UrlMetadata): Chunk { + const content = [metadata.title, metadata.description] + .filter(Boolean) + .join(' ') + .trim(); return new Chunk({ value: content }); } diff --git a/src/modules/search/infrastructure/UpstashVectorDatabase.ts b/src/modules/search/infrastructure/UpstashVectorDatabase.ts index 82270466..b5eb049b 100644 --- a/src/modules/search/infrastructure/UpstashVectorDatabase.ts +++ b/src/modules/search/infrastructure/UpstashVectorDatabase.ts @@ -6,7 +6,7 @@ import { FindSimilarUrlsParams, UrlSearchResult, } from '../domain/IVectorDatabase'; -import { UrlMetadataProps } from '../../cards/domain/value-objects/UrlMetadata'; +import { UrlMetadata, UrlMetadataProps } from '../../cards/domain/value-objects/UrlMetadata'; import { Chunk } from '../domain/value-objects/Chunk'; interface UpstashMetadata extends UrlMetadataProps { @@ -26,7 +26,11 @@ export class UpstashVectorDatabase implements IVectorDatabase { async indexUrl(params: IndexUrlParams): Promise> { try { // Use Chunk to create the data content - const chunk = Chunk.create(params.title, params.description); + const metadataResult = UrlMetadata.create(params); + if (metadataResult.isErr()) { + return err(new Error(`Invalid metadata: ${metadataResult.error.message}`)); + } + const chunk = Chunk.create(metadataResult.value); await this.index.upsert({ id: params.url,