@@ -7,12 +7,14 @@ import gleam/http/request
77import gleam/int
88import gleam/json
99import gleam/list
10+ import gleam/option
1011import gleam/order
1112import gleam/result
1213import gleam/string
1314import gleam/uri
1415import packages/error . { type Error }
1516import packages/storage . { type Database }
17+ import packages/text_search
1618import wisp
1719
1820pub fn try ( a : Result ( a, e) , f : fn ( a) -> Result ( b, e) ) -> Result ( b, e) {
@@ -30,23 +32,26 @@ type State {
3032 hex_api_key : String ,
3133 last_logged : Time ,
3234 db : storage . Database ,
35+ text_search : text_search . TextSearchIndex ,
3336 )
3437}
3538
3639pub fn sync_new_gleam_releases (
3740 hex_api_key : String ,
3841 db : Database ,
42+ text_search : text_search . TextSearchIndex ,
3943) -> Result ( Nil , Error ) {
4044 wisp . log_info ( "Syncing new releases from Hex" )
4145 use limit <- try ( storage . get_most_recent_hex_timestamp ( db ) )
4246 use latest <- try (
4347 sync_packages ( State (
4448 page : 1 ,
45- limit : limit ,
49+ limit : ,
4650 newest : limit ,
47- hex_api_key : hex_api_key ,
51+ hex_api_key : ,
4852 last_logged : birl . now ( ) ,
49- db : db ,
53+ db : ,
54+ text_search : ,
5055 ) ) ,
5156 )
5257 let latest = storage . upsert_most_recent_hex_timestamp ( db , latest )
@@ -56,12 +61,23 @@ pub fn sync_new_gleam_releases(
5661
5762pub fn fetch_and_sync_package (
5863 db : storage . Database ,
64+ text_search : text_search . TextSearchIndex ,
5965 package_name : String ,
6066 secret hex_api_key : String ,
6167) -> Result ( Nil , Error ) {
68+ let state =
69+ State (
70+ page : 0 ,
71+ limit : birl . now ( ) ,
72+ newest : birl . now ( ) ,
73+ hex_api_key : ,
74+ last_logged : birl . now ( ) ,
75+ db : ,
76+ text_search : ,
77+ )
6278 use package <- try ( get_api_package ( package_name , secret : hex_api_key ) )
6379 wisp . log_info ( "Syncing package data from Hex" )
64- use _ <- try ( sync_single_package ( db , package , hex_api_key ) )
80+ use _ <- try ( sync_single_package ( state , package , hex_api_key ) )
6581 wisp . log_info ( "Done" )
6682 Ok ( Nil )
6783}
@@ -176,15 +192,15 @@ fn sync_package(state: State, package: hexpm.Package) -> Result(State, Error) {
176192 Ok ( state )
177193 }
178194 _ -> {
179- use _ <- try ( insert_package_and_releases ( package , releases , state . db ) )
195+ use _ <- try ( insert_package_and_releases ( package , releases , state ) )
180196 let state = State ( .. state , last_logged : birl . now ( ) )
181197 Ok ( state )
182198 }
183199 }
184200}
185201
186202fn sync_single_package (
187- db : storage . Database ,
203+ state : State ,
188204 package : hexpm . Package ,
189205 secret hex_api_key : String ,
190206) -> Result ( Nil , Error ) {
@@ -195,7 +211,7 @@ fn sync_single_package(
195211 Ok ( Nil )
196212 }
197213 _ -> {
198- use _ <- try ( insert_package_and_releases ( package , releases , db ) )
214+ use _ <- try ( insert_package_and_releases ( package , releases , state ) )
199215 Ok ( Nil )
200216 }
201217 }
@@ -231,7 +247,7 @@ fn log_if_needed(state: State, time: Time) -> State {
231247fn insert_package_and_releases (
232248 package : hexpm . Package ,
233249 releases : List ( hexpm . Release ) ,
234- db : storage . Database ,
250+ state : State ,
235251) -> Result ( Nil , Error ) {
236252 let assert Ok ( latest ) =
237253 releases
@@ -243,10 +259,20 @@ fn insert_package_and_releases(
243259 |> string . join ( ", v" )
244260 wisp . log_info ( "Saving " <> package . name <> " v" <> versions )
245261
246- use _ <- try ( storage . upsert_package_from_hex ( db , package , latest . version ) )
262+ use _ <- try ( text_search . update (
263+ state . text_search ,
264+ package . name ,
265+ package . meta . description |> option . unwrap ( "" ) ,
266+ ) )
267+
268+ use _ <- try ( storage . upsert_package_from_hex (
269+ state . db ,
270+ package ,
271+ latest . version ,
272+ ) )
247273
248274 releases
249- |> list . try_each ( storage . upsert_release ( db , package . name , _) )
275+ |> list . try_each ( storage . upsert_release ( state . db , package . name , _) )
250276}
251277
252278fn lookup_release (
0 commit comments