refactor: Use random IDs as primary keys in IDB

This commit refactors the IndexedDB schema to use the string-based random IDs as primary keys instead of the numeric auto-incrementing IDs. This change affects the 'badge' table and all related components that interact with it. The badge detail page and list component have been updated to use the new primary key for more efficient and consistent data retrieval.
This commit is contained in:
Scott Idem
2025-11-18 17:49:16 -05:00
parent 97d41adb12
commit c8c19a35a6
3 changed files with 31 additions and 58 deletions

View File

@@ -807,7 +807,7 @@ export class MySubClassedDexie extends Dexie {
// badge: '++id, full_name, email' // Primary key and indexed props // badge: '++id, full_name, email' // Primary key and indexed props
badge: ` badge: `
id, id_random, event_badge_id, event_badge_id_random, event_badge_id_random, event_badge_id, id,
event_id, event_id_random, event_id, event_id_random,
full_name, full_name_override, email, email_override, full_name, full_name_override, email, email_override,
affiliations, affiliations_override, affiliations, affiliations_override,

View File

@@ -48,10 +48,7 @@
if (log_lvl) { if (log_lvl) {
console.log(`*** LiveQuery: lq__event_badge_obj *** event_badge_id=${event_badge_id}`); console.log(`*** LiveQuery: lq__event_badge_obj *** event_badge_id=${event_badge_id}`);
} }
let results = await db_events.badge let results = await db_events.badge.get(event_badge_id);
.where('event_badge_id_random')
.equals(event_badge_id)
.first();
if (log_lvl) { if (log_lvl) {
console.log(`*** LiveQuery: lq__event_badge_obj *** results=`, results); console.log(`*** LiveQuery: lq__event_badge_obj *** results=`, results);
} }

View File

@@ -3,15 +3,7 @@
// Exports // Exports
container_class_li?: string | Array<string>; container_class_li?: string | Array<string>;
// export let display_mode: string = 'default'; // 'default', 'compact', 'minimal', 'launcher' // export let display_mode: string = 'default'; // 'default', 'compact', 'minimal', 'launcher'
use_id_li?: boolean; badge_obj_li?: Array<any>;
event_badge_id_li?: Array<string>;
qry_idb?: boolean;
qry_str?: string;
qry_type_code?: string;
// event_badge_obj_li?: Array<any>;
link_to_type?: string;
link_to_id?: string;
// export let lq__event_presentation_obj
log_lvl?: number; log_lvl?: number;
show_sensitive_fields?: boolean; show_sensitive_fields?: boolean;
hide_affiliations?: boolean; hide_affiliations?: boolean;
@@ -22,8 +14,6 @@
let { let {
container_class_li = [], container_class_li = [],
badge_obj_li = [], badge_obj_li = [],
link_to_type,
link_to_id,
log_lvl = $bindable(0), log_lvl = $bindable(0),
show_sensitive_fields = true, show_sensitive_fields = true,
hide_affiliations = false, hide_affiliations = false,
@@ -31,52 +21,38 @@
hide_badge_type = false hide_badge_type = false
}: Props = $props(); }: Props = $props();
// *** Import Svelte specific import { liveQuery } from 'dexie';
// import { goto } from '$app/navigation'; import { db_events } from '$lib/ae_events/db_events';
import { ae_loc } from '$lib/stores/ae_stores';
// *** Import other supporting libraries let trusted_access = $derived(ae_loc.trusted_access);
// import { liveQuery } from 'dexie'; // No longer needed
// *** Import Aether specific variables and functions let lq__event_badge_obj_li = $derived(
// import type { key_val } from '$lib/stores/ae_stores'; liveQuery(async () => {
// import { ae_util } from '$lib/ae_utils/ae_utils'; // No longer needed if (badge_obj_li?.length) {
// import { api } from '$lib/api/api'; // No longer needed const ids = badge_obj_li.map((b) => b.event_badge_id_random);
import { return await db_events.badge.bulkGet(ids);
ae_snip, }
ae_loc, return [];
ae_sess, })
ae_api, );
ae_trig,
slct,
slct_trigger
} from '$lib/stores/ae_stores';
import {
events_loc,
events_sess,
events_slct,
events_trigger
} from '$lib/stores/ae_events_stores';
// import { db_events } from '$lib/ae_events/db_events'; // No longer needed
let trusted_access = $derived($ae_loc.trusted_access);
</script> </script>
<section class="px-1 flex flex-col gap-1 items-center justify-center space-y-1"> <section class="px-1 flex flex-col gap-1 items-center justify-center space-y-1">
<!-- event_badge_id_li?.length && --> <!-- event_badge_id_li?.length && -->
{#if badge_obj_li?.length} {#if $lq__event_badge_obj_li?.length}
<header class="w-full flex flex-row gap-1 items-center justify-start"> <header class="w-full flex flex-row gap-1 items-center justify-start">
<h2 class="text-base">Results:</h2> <h2 class="text-base">Results:</h2>
<div class="text-3xl font-bold preset-filled-success-100-900 px-4 rounded-lg"> <div class="text-3xl font-bold preset-filled-success-100-900 px-4 rounded-lg">
<span class="fas fa-list-ol mx-4"></span> <span class="fas fa-list-ol mx-4"></span>
{badge_obj_li.length}&times; {$lq__event_badge_obj_li.length}&times;
</div> </div>
</header> </header>
<!-- The email should only be the first 3 chars and then @domain name. --> <!-- The email should only be the first 3 chars and then @domain name. -->
<ul class="list-disc list-inside"> <ul class="list-disc list-inside">
{#each badge_obj_li as event_badge_obj (event_badge_obj.event_badge_id_random)} {#each $lq__event_badge_obj_li as event_badge_obj (event_badge_obj.event_badge_id_random)}
<li <li
class=" class="
border-b border-gray-300 dark:border-gray-600 py-0.5 border-b border-gray-300 dark:border-gray-600 py-0.5
@@ -106,17 +82,17 @@
{/if} {/if}
</span> </span>
<span class="font-bold"> <span class="font-bold">
{#if event_badge_obj.full_name_override} {#if event_badge_obj.full_name_override}
{event_badge_obj.full_name_override} {event_badge_obj.full_name_override}
{:else if event_badge_obj.full_name} {:else if event_badge_obj.full_name}
{event_badge_obj.full_name} {event_badge_obj.full_name}
{:else if event_badge_obj.given_name} {:else if event_badge_obj.given_name}
{event_badge_obj.given_name} {event_badge_obj.family_name} {event_badge_obj.given_name} {event_badge_obj.family_name}
{:else} {:else}
-- no name -- -- no name --
{/if} {/if}
</span> </span>
</a> </a>
{#if show_sensitive_fields} {#if show_sensitive_fields}