refactor(events): harden V3 String-Only ID vision and fix Session Alert store error

- Standardized Event module logic files to strictly use random string IDs, ensuring frontend consistency and avoiding 'Integer Trap' 404s.
- Refactored 'ae_comp__event_session_alert.svelte' to accept a plain object instead of a store/observable, resolving the 'store_invalid_shape' error in list loops.
- Updated all callers of the alert component to pass unwrapped session objects.
- Cleaned up event-related UI components to remove redundant '_random' field lookups and align with V3 CRUD patterns.
- Updated project metadata (GEMINI.md, TODO.md) to reflect the new memory structure and latest hardened state.
This commit is contained in:
Scott Idem
2026-01-27 12:18:12 -05:00
parent a704779d1b
commit 30413e32d2
15 changed files with 589 additions and 473 deletions

View File

@@ -53,36 +53,32 @@
let ae_triggers: key_val = $state({});
console.log(`event_presenter_id:`, $lq__event_presenter_obj?.event_presenter_id);
// console.log(`event_presenter_id:`, $lq__event_presenter_obj?.event_presenter_id);
console.log(`event_presentation_id:`, $lq__event_presentation_obj?.event_presentation_id);
// console.log(`event_presentation_id:`, $lq__event_presentation_obj?.event_presentation_id);
// ae_tmp.biography = '';
ae_tmp.biography = null;
// ae_tmp.biography = $lq__event_presenter_obj?.biography ?? '';
// console.log(`ae_tmp.biography:`, ae_tmp.biography);
// $: if ($lq__event_presenter_obj?.biography && ae_tmp.biography === null) {
// // WHAT WAS THIS FOR HERE??? // ae_tmp.biography = JSON.parse(JSON.stringify($lq__event_presenter_obj?.biography ?? ''));
// ae_tmp.biography = $lq__event_presenter_obj?.biography ?? '';
// console.log(`ae_tmp.biography:`, ae_tmp.biography);
// }
$effect(() => {
if (browser && ae_tmp.biography === null && $lq__event_presenter_obj?.biography) {
ae_tmp.biography = $lq__event_presenter_obj?.biography ?? '';
console.log(`ae_tmp.biography:`, ae_tmp.biography);
if (log_lvl) {
console.log(`ae_tmp.biography:`, ae_tmp.biography);
}
}
});
$slct.person_obj_kv = {}; // This is intended for the person presenter lookup list when generated.
onMount(() => {
console.log('Events Pres Mgmt: presenter_view.svelte');
console.log(`event_presenter_id:`, $lq__event_presenter_obj?.event_presenter_id);
if (log_lvl) {
console.log(`Events Pres Mgmt: presenter_view.svelte - event_presenter_id: ${$lq__event_presenter_obj?.event_presenter_id}`, $lq__event_presenter_obj);
}
$slct_trigger = 'load__event_file_obj_li';
// ae_tmp.biography = $lq__event_presenter_obj?.biography;
});
ae_promises.generate_qr_code_url = null;
@@ -190,27 +186,6 @@
<span class="text-sm text-surface-800-200"> Presenter: </span>
</h3>
<!-- {#await ae_promises.generate_qr_code_obj_id}
Generating...
{:then result}
{#if ae_promises.generate_qr_code_obj_id}
<span class="float-right flex flex-col items-center justify-center">
<img
class="qr_code qr_type_obj_id h-32 w-32 hover:h-48 hover:w-48"
class:hidden={!$ae_loc.manager_access}
style=""
src={result}
alt="Object ID QR code"
/>
<span>
<span class="fas fa-qrcode"></span>
Presenter ID
</span>
</span>
{/if}
{/await} -->
{#await ae_promises.generate_qr_code_url}
Generating...
{:then result}
@@ -1065,7 +1040,7 @@
api_cfg={$ae_api}
object_type={'event_presenter'}
object_id={$lq__event_presenter_obj?.event_presenter_id}
field_name={'person_id_random'}
field_name={'person_id'}
field_type={'select'}
field_value={$lq__event_presenter_obj.person_id}
select_option_li={$slct.person_obj_kv}
@@ -1160,14 +1135,14 @@
.then(function (load_results) {
console.log(`Loaded person_obj_li:`, load_results);
// We need to make this ready for the select option list. Convert the list to a key value pair with the person_id_random as the key. We also need to set the option text value to: full_name (primary_email)
// We need to make this ready for the select option list. Convert the list to a key value pair with the person_id as the key. We also need to set the option text value to: full_name (primary_email)
if (load_results) {
let person_obj_li = load_results;
let person_obj_kv = {};
person_obj_kv[''] = '-- Select a person --';
person_obj_li.forEach((person_obj) => {
let option_text = `${person_obj?.last_first_name ?? person_obj?.given_name} (${person_obj?.primary_email?.length ? person_obj?.primary_email : '-- not set --'})`;
person_obj_kv[person_obj.person_id_random] =
person_obj_kv[person_obj.person_id] =
option_text;
});
$slct.person_obj_kv = person_obj_kv;
@@ -1264,11 +1239,11 @@
}
}
let person_data = {
account_id_random: $slct.account_id,
account_id: $slct.account_id,
source_code: 'manual:SK:presenter',
external_id: $lq__event_presenter_obj?.external_id ?? null,
external_sys_id: $lq__event_presenter_obj?.external_id ?? null,
// user_id_random: user_obj.user_id_random,
// user_id: user_obj.user_id,
given_name: $lq__event_presenter_obj.given_name ?? 'New',
family_name: $lq__event_presenter_obj?.family_name ?? null,
primary_email: $lq__event_presenter_obj?.email ?? null,
@@ -1294,7 +1269,7 @@
events_func.update_ae_obj__event_presenter({
api_cfg: $ae_api,
event_presenter_id: $lq__event_presenter_obj?.event_presenter_id,
data_kv: { person_id_random: new_person_obj.person_id_random },
data_kv: { person_id: new_person_obj.person_id },
log_lvl: 0
});
}}