From f4006e7226485378b6414a80567f8d2cb8394b1a Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Tue, 2 Jul 2024 14:00:39 -0400 Subject: [PATCH] The rate limited and delayed search is now working. --- src/lib/element_manage_event_file_li.svelte | 4 +- .../event/[slug]/+page.svelte | 233 +++++++++++++----- 2 files changed, 174 insertions(+), 63 deletions(-) diff --git a/src/lib/element_manage_event_file_li.svelte b/src/lib/element_manage_event_file_li.svelte index 5fbdaa39..3f554b6e 100644 --- a/src/lib/element_manage_event_file_li.svelte +++ b/src/lib/element_manage_event_file_li.svelte @@ -49,8 +49,8 @@ let lq__event_file_obj_li = liveQuery( ); onMount(() => { - console.log('Element - Manage Event File List'); - console.log(`link_to_type: ${link_to_type}; link_to_id: ${link_to_id}`); + // console.log('Element - Manage Event File List'); + // console.log(`link_to_type: ${link_to_type}; link_to_id: ${link_to_id}`); $slct_trigger = 'load__event_file_obj_li'; }); diff --git a/src/routes/events_pres_mgmt/event/[slug]/+page.svelte b/src/routes/events_pres_mgmt/event/[slug]/+page.svelte index 8b91b7a6..ad883ffe 100644 --- a/src/routes/events_pres_mgmt/event/[slug]/+page.svelte +++ b/src/routes/events_pres_mgmt/event/[slug]/+page.svelte @@ -63,6 +63,7 @@ let event_obj_v2 = db_events.events.get($events_slct.event_id); let event_session_id_random_li: string[] = ['VSBH-19-41-50']; // let event_session_id_random_li: string[] = ['VSBH-19-41-51']; +// let event_session_id_random_li: string[] = ['']; // let event_session_id_random_li: string[] = []; // event_session_id_random_li = []; @@ -79,13 +80,13 @@ let lq_kv__event_session_obj_li = liveQuery( () => db_events.sessions .bulkGet(event_session_id_random_li) .then(results => { - console.log(`LQ Results:`, results); + // console.log(`LQ Results:`, results); // If the results are an array if (results.length == 1) { // If the first item is undefined we need to do something. if (results[0] == undefined) { console.log('Something went wrong! No sessions found?'); - return []; + // return []; // return [{ id: '' }]; // return 'NOTHING???'; } @@ -156,12 +157,14 @@ $: if ($events_trigger == 'load__event_session_obj_li' && $events_slct.event_id) $events_trigger = null; - if ( $ae_loc.administrator_access || $ae_loc.trusted_access ) { - console.log('*** Administrator or Trusted Access ***'); - handle_search__event_session($events_sess.pres_mgmt.fulltext_search_qry_str); - } else if ( $events_sess?.pres_mgmt.fulltext_search_qry_str.length > 2 ) { - console.log('Trusted access search'); - handle_search__event_session($events_sess.pres_mgmt.fulltext_search_qry_str); + if ( $events_sess?.pres_mgmt.fulltext_search_qry_str.length > 2 ) { + console.log('*** Search string is valid ***'); + // handle_search__event_session($events_sess.pres_mgmt.fulltext_search_qry_str); + process_search_string($events_sess.pres_mgmt.fulltext_search_qry_str); + } else if ( $ae_loc.administrator_access || $ae_loc.trusted_access ) { + console.log('*** Administrator Access or Trusted Access ***'); + // handle_search__event_session($events_sess.pres_mgmt.fulltext_search_qry_str); + process_search_string($events_sess.pres_mgmt.fulltext_search_qry_str); } else { console.log('*** No search string or too short ***'); $events_slct.event_session_obj_li = []; @@ -173,8 +176,22 @@ $: if ($events_trigger == 'load__event_session_obj_li' && $events_slct.event_id) } -function handle_search__event_session(search_str: string) { - console.log('handle_search__event_session()'); +function process_search_string(search_str: string) { + console.log('process_search_string()'); + + if ( $ae_loc.administrator_access || $ae_loc.trusted_access ) { + console.log('*** Administrator or Trusted Access ***'); + } else if (search_str.length > 1 ) { + console.log('*** Search string is valid ***'); + // $events_slct.event_session_obj_li = []; + // $events_sess.pres_mgmt.fulltext_search_qry_str = ''; + } else { + console.log('*** No search string or too short ***'); + $events_slct.event_session_obj_li = []; + // event_session_id_random_li = []; + return false; + + } // let type_code = $events_sess.pres_mgmt.search_badge_type_code; @@ -196,6 +213,7 @@ function handle_search__event_session(search_str: string) { lk_search_str_new = search_str.trim().replace(',', ' ').replace(';', ' ').replaceAll(' ', '%').replaceAll(' ', '%'); lk_search_str_new = `%${lk_search_str_new}%`; } + console.log(`"${search_str}"`); let params = { @@ -218,36 +236,106 @@ function handle_search__event_session(search_str: string) { params['qry__limit'] = 35; } - if ($events_sess.status_qry__search == 'loading') { - console.log('*** $events_sess.status_qry__search == loading ***'); + handle_search__event_session({ + api_cfg: $ae_api, + event_id: $events_slct.event_id, + ft_search_str: ft_search_str_new, + lk_search_str: lk_search_str_new, + // fulltext_search_qry_str: ft_search_str_new, + // ft_presenter_search_qry_str: null, + // like_search_qry_str: lk_search_str_new, + // like_presentation_search_qry_str: lk_search_str_new, + // like_presenter_search_qry_str: lk_search_str_new, + params: params, + try_cache: false, + log_lvl: 0, + }); +} - setTimeout(() => { - console.log("Delayed for X second."); - $events_sess.status_qry__search = 'loading'; +async function handle_search__event_session( + { + api_cfg, + event_id, + ft_search_str = '', + lk_search_str = '', + search_delay = 0, + max_tries = 5, + params = { + 'qry__enabled': 'enabled', + 'qry__hidden': 'not_hidden', + 'qry__limit': 35,}, + try_cache=false, + log_lvl=1, + }: { + api_cfg: any, + event_id: string, + ft_search_str?: string, + lk_search_str?: string, + search_delay?: number, // In milliseconds + max_tries?: number, + params?: key_val, + try_cache?: boolean, + log_lvl?: number, + } + ) { + console.log('handle_search__event_session()'); + + if ($events_sess.pres_mgmt?.status_qry__search != null && $events_sess.pres_mgmt?.status_qry__search != 'done') { + console.log('*** TEST SEARCH - $events_sess.pres_mgmt.status_qry__search != done ***'); + // WARNING: This is a temporary fix for the search string. It needs to be fixed in the future. Using lk_search_str for now. + $events_sess.pres_mgmt.status_qry__last_request_str = lk_search_str; + + // We want to delay the initial search request to give the previous search request to finish. + let random_delay = Math.floor(Math.random() * 50); + search_delay += 50+random_delay; + } + + let count = 0; + let request_loop = setInterval(() => { + count++; + console.log(`*** TEST SEARCH - Search delay: ${search_delay} *** count=${count}`); + if (count >= max_tries) { + console.log('*** TEST SEARCH - Max tries reached ***'); + clearInterval(request_loop); + } + + if ($events_sess.pres_mgmt?.status_qry__search != null && $events_sess.pres_mgmt?.status_qry__search != 'done') { + let random_delay = Math.floor(Math.random() * 25); + search_delay += 25+random_delay; + console.log(`*** TEST SEARCH - $events_sess.pres_mgmt.status_qry__search == loading wait *** search_delay=${search_delay}`); + // $events_sess.status_qry__last_request_str = lk_search_str; + } else { + console.log('*** TEST SEARCH - $events_sess.pres_mgmt.status_qry__search != loading ***'); + + $events_sess.pres_mgmt.status_qry__search = 'loading'; search_submit_results = events_func.handle_search__event_session({ api_cfg: $ae_api, event_id: $events_slct.event_id, // type_code: type_code, - fulltext_search_qry_str: ft_search_str_new, + fulltext_search_qry_str: ft_search_str, ft_presenter_search_qry_str: null, - like_search_qry_str: lk_search_str_new, - like_presentation_search_qry_str: lk_search_str_new, - like_presenter_search_qry_str: lk_search_str_new, + like_search_qry_str: lk_search_str, + like_presentation_search_qry_str: lk_search_str, + like_presenter_search_qry_str: lk_search_str, // external_event_id: $events_loc.pres_mgmt.default__external_registration_id, params: params, - try_cache: false, - log_lvl: 1, + try_cache: try_cache, + log_lvl: 0, }) .then(function (search_results) { + // Processing the results from the search. + $events_sess.pres_mgmt.status_qry__search = 'processing'; $events_slct.event_session_obj_li = search_results; console.log(search_results); - $events_sess.status_qry__search = 'done'; + // $events_sess.pres_mgmt.status_qry__search = 'done'; }) .finally(() => { - console.log('Search done. Pulling out the event_session_id_randoms.'); - // console.log(`test1: ${$lq_kv__event_session_obj_li}`); + if (log_lvl) { + console.log('TEST SEARCH - Search done. Pulling out the event_session_id_randoms.'); + } + // console.log(`TEST search: ${$lq_kv__event_session_obj_li}`); event_session_id_random_li = []; @@ -258,48 +346,71 @@ function handle_search__event_session(search_str: string) { } event_session_id_random_li = tmp_li; - console.log(`event_session_id_random_li:`, event_session_id_random_li); + // event_session_id_random_li = $events_slct.event_session_obj_li.map(session_obj => session_obj.event_session_id_random); + + // Finally done with the search. + $events_sess.pres_mgmt.status_qry__search = 'done'; + + if (log_lvl > 1) { + console.log(`TEST SEARCH - event_session_id_random_li:`, event_session_id_random_li); + console.log(`TEST SEARCH - search live query: ${$lq_kv__event_session_obj_li}`); + } + }); - }, 250); - } else { - console.log('*** $events_sess.status_qry__search != loading ***'); + clearInterval(request_loop); + } + }, search_delay); - $events_sess.status_qry__search = 'loading'; - search_submit_results = events_func.handle_search__event_session({ - api_cfg: $ae_api, - event_id: $events_slct.event_id, - // type_code: type_code, - fulltext_search_qry_str: ft_search_str_new, - ft_presenter_search_qry_str: null, - like_search_qry_str: lk_search_str_new, - like_presentation_search_qry_str: lk_search_str_new, - like_presenter_search_qry_str: lk_search_str_new, - // external_event_id: $events_loc.pres_mgmt.default__external_registration_id, - params: params, - try_cache: false, - log_lvl: 1, - }) - .then(function (search_results) { - $events_slct.event_session_obj_li = search_results; - console.log(search_results); - $events_sess.status_qry__search = 'done'; - }) - .finally(() => { - console.log('Search done. Pulling out the event_session_id_randoms.'); - // console.log(`test2: ${$lq_kv__event_session_obj_li}`); + // if ($events_sess.pres_mgmt.status_qry__search == 'loading') { + // console.log('*** $events_sess.pres_mgmt.status_qry__search == loading ***'); - event_session_id_random_li = []; + // setTimeout(() => { + // console.log("Delayed for X second."); - // We need to loop through the array of objects and get the event_session_id_random from each object a new list of event_session_id_randoms. Then we can use this list to get the full objects from the database. - for (let i = 0; i < $events_slct.event_session_obj_li.length; i++) { - event_session_id_random_li.push($events_slct.event_session_obj_li[i].event_session_id_random); - } - // event_session_id_random_li = $events_slct.event_session_obj_li.map(session_obj => session_obj.event_session_id_random); - console.log(`event_session_id_random_li:`, event_session_id_random_li); - console.log(`test3: ${$lq_kv__event_session_obj_li}`); - }); - } + // $events_sess.pres_mgmt.status_qry__search = 'loading'; + + // search_submit_results = events_func.handle_search__event_session({ + // api_cfg: api_cfg, + // event_id: event_id, + // // type_code: type_code, + // fulltext_search_qry_str: ft_search_str, + // ft_presenter_search_qry_str: null, + // like_search_qry_str: lk_search_str, + // like_presentation_search_qry_str: lk_search_str, + // like_presenter_search_qry_str: lk_search_str, + // // external_event_id: $events_loc.pres_mgmt.default__external_registration_id, + // params: params, + // try_cache: try_cache, + // log_lvl: log_lvl, + // }) + // .then(function (search_results) { + // $events_slct.event_session_obj_li = search_results; + // console.log(search_results); + // $events_sess.pres_mgmt.status_qry__search = 'done'; + // }) + // .finally(() => { + // console.log('Search done. Pulling out the event_session_id_randoms.'); + // // console.log(`TEST search delay: ${$lq_kv__event_session_obj_li}`); + + // event_session_id_random_li = []; + + // // We need to loop through the array of objects and get the event_session_id_random from each object a new list of event_session_id_randoms. Then we can use this list to get the full objects from the database. + // let tmp_li = []; // This is to prevent the array from constantly updating and triggering the liveQuery. + // for (let i = 0; i < $events_slct.event_session_obj_li.length; i++) { + // tmp_li.push($events_slct.event_session_obj_li[i].event_session_id_random); + // } + // event_session_id_random_li = tmp_li; + + // console.log(`event_session_id_random_li:`, event_session_id_random_li); + // console.log(`TEST search delay live query: ${$lq_kv__event_session_obj_li}`); + // }); + // }, search_delay); + // } else { + // console.log('*** $events_sess.pres_mgmt.status_qry__search != loading ***'); + + + // }