1+ import { SearchItem , SearchType } from "./types" ;
2+
13import { ConfigService } from "src/config/service" ;
24import { LoggerService } from "src/logger/service" ;
35import { MeiliSearch } from "meilisearch" ;
4- import { SearchItem } from "./types" ;
56import { Service } from "typedi" ;
67
78@Service ( )
@@ -11,17 +12,45 @@ export class SearchService {
1112 private readonly configService : ConfigService ,
1213 private readonly logger : LoggerService ,
1314 ) {
15+ this . logger . info ( { message : "Initializing MeiliSearch client" } ) ;
1416 const { MEILISEARCH_URL , MEILISEARCH_MASTER_KEY } =
1517 this . configService . env ( ) ;
1618
1719 this . meilisearch = new MeiliSearch ( {
1820 host : MEILISEARCH_URL ,
1921 apiKey : MEILISEARCH_MASTER_KEY ,
2022 } ) ;
23+ this . logger . info ( {
24+ message : `MeiliSearch client initialized with url ${ MEILISEARCH_URL } ` ,
25+ } ) ;
2126 }
2227
2328 public search = async ( query : string ) : Promise < SearchItem [ ] > => {
2429 this . logger . info ( { message : `Searching for ${ query } ` } ) ;
2530 return [ ] ;
2631 } ;
32+
33+ public index = async (
34+ index : SearchType ,
35+ data : SearchItem [ ] ,
36+ ) : Promise < void > => {
37+ this . logger . info ( {
38+ message : `Indexing ${ data . length } items in ${ index } ` ,
39+ } ) ;
40+ await this . meilisearch . index ( index ) . addDocuments ( data ) ;
41+ this . logger . info ( {
42+ message : `Indexed ${ data . length } items in ${ index } ` ,
43+ } ) ;
44+ } ;
45+
46+ public ensureIndexes = async ( ) : Promise < void > => {
47+ await this . meilisearch . createIndex ( "project" ) ;
48+ this . logger . info ( { message : "project index created" } ) ;
49+
50+ await this . meilisearch . createIndex ( "contribution" ) ;
51+ this . logger . info ( { message : "contribution index created" } ) ;
52+
53+ await this . meilisearch . createIndex ( "contributor" ) ;
54+ this . logger . info ( { message : "contributor index created" } ) ;
55+ } ;
2756}
0 commit comments