639 lines
18 KiB
TypeScript
639 lines
18 KiB
TypeScript
import Dexie, { type Table } from 'dexie';
|
|
import type { list } from 'postcss';
|
|
import type { key_val } from './ae_stores';
|
|
import type { o } from 'vitest/dist/reporters-B7ebVMkT.js';
|
|
|
|
// li = list
|
|
// kv = key value list
|
|
|
|
export interface Event {
|
|
id: string;
|
|
// id_random: string;
|
|
event_id: string;
|
|
event_id_random: string;
|
|
|
|
code: string;
|
|
|
|
account_id: string;
|
|
account_id_random: string;
|
|
|
|
conference: boolean;
|
|
type: string;
|
|
name: string;
|
|
summary: null|string;
|
|
description: null|string;
|
|
|
|
start_datetime: Date;
|
|
end_datetime: Date;
|
|
timezone: null|string;
|
|
location_address_json: null|string;
|
|
|
|
mod_abstracts_json: null|key_val;
|
|
mod_badges_json: null|key_val;
|
|
mod_exhibits_json: null|key_val;
|
|
mod_pres_mgmt_json: null|key_val;
|
|
cfg_json: null|key_val;
|
|
|
|
enable: null|boolean;
|
|
hide: null|boolean;
|
|
priority: null|boolean
|
|
sort: null|number;
|
|
group: null|string;
|
|
notes: null|string;
|
|
created_on: Date;
|
|
updated_on: null|Date;
|
|
|
|
// Additional fields for convenience (database views)
|
|
file_count?: null|number;
|
|
file_count_all?: null|number;
|
|
internal_use_count?: null|number;
|
|
event_file_id_li_json?: null|string;
|
|
}
|
|
|
|
|
|
export interface Badge {
|
|
// id?: number;
|
|
id_random: string;
|
|
event_badge_id_random: string;
|
|
|
|
event_id_random: string;
|
|
pronouns: null|string;
|
|
informal_name: null|string;
|
|
title_names: null|string;
|
|
given_name: string;
|
|
middle_name: null|string;
|
|
family_name: null|string;
|
|
designations: null|string;
|
|
|
|
professional_title: null|string;
|
|
professional_title_override: null|string;
|
|
|
|
full_name: string;
|
|
full_name_override: null|string;
|
|
|
|
affiliations: string;
|
|
affiliations_override: null|string;
|
|
|
|
email: string;
|
|
email_override: null|string;
|
|
|
|
address_line_1: null|string;
|
|
address_line_2: null|string;
|
|
address_line_3: null|string;
|
|
city: null|string;
|
|
country_subdivision_code: null|string;
|
|
state_province: null|string;
|
|
state_province_abb: null|string;
|
|
postal_code: null|string;
|
|
country_alpha_2_code: null|string;
|
|
country: null|string;
|
|
full_address: null|string;
|
|
location: null|string;
|
|
location_override: null|string;
|
|
|
|
query_str: null|string;
|
|
|
|
badge_type: string;
|
|
badge_type_code: string;
|
|
badge_type_code_override: null|string;
|
|
badge_type_override: null|string;
|
|
external_event_id: string;
|
|
external_id: string;
|
|
external_person_id: string;
|
|
|
|
enable: null|boolean;
|
|
hide: null|boolean;
|
|
priority: null|boolean
|
|
sort: null|number;
|
|
group: null|string;
|
|
notes: null|string;
|
|
created_on: Date;
|
|
updated_on: null|Date;
|
|
}
|
|
|
|
|
|
export interface Exhibit {
|
|
// id?: number;
|
|
id_random: string;
|
|
event_exhibit_id_random: string;
|
|
|
|
event_id_random: string;
|
|
code: string;
|
|
name: string;
|
|
// tagline: null|string;
|
|
description: null|string;
|
|
staff_passcode: null
|
|
data_json: null|string;
|
|
|
|
leads_api_access: null|boolean;
|
|
leads_custom_questions_json: null|string;
|
|
leads_device_sm_qty: null|number;
|
|
leads_device_lg_qty: null|number;
|
|
license_max: number;
|
|
license_li_json: null|string;
|
|
cfg_json: string;
|
|
|
|
enable: null|boolean;
|
|
hide: null|boolean;
|
|
priority: null|boolean
|
|
sort: null|number;
|
|
group: null|string;
|
|
notes: null|string;
|
|
created_on: Date;
|
|
updated_on: null|Date;
|
|
}
|
|
|
|
|
|
export interface Exhibit_tracking {
|
|
// id?: number;
|
|
id_random: string;
|
|
event_exhibit_tracking_id_random: string;
|
|
|
|
event_exhibit_id_random: string;
|
|
event_badge_id_random: string;
|
|
event_person_id_random: null|string; // Is this needed?
|
|
|
|
external_person_id: null|string; // This is an email address
|
|
|
|
exhibitor_notes: null|string;
|
|
|
|
responses_json: null|string;
|
|
data_json: null|string;
|
|
|
|
event_exhibit_name: string; // Extra field for convenience
|
|
|
|
event_badge_title_names: null|string;
|
|
event_badge_given_name: string;
|
|
event_badge_family_name: null|string;
|
|
event_badge_designations: null|string;
|
|
event_badge_full_name: string;
|
|
event_badge_full_name_override: null|string;
|
|
|
|
event_badge_professional_title: null|string;
|
|
event_badge_professional_title_override: null|string;
|
|
|
|
event_badge_affiliations: null|string;
|
|
event_badge_affiliations_override: null|string;
|
|
|
|
event_badge_email: null|string;
|
|
event_badge_email_override: null|string;
|
|
|
|
event_badge_location: null|string;
|
|
event_badge_location_override: null|string;
|
|
|
|
event_badge_country: null|string;
|
|
|
|
enable: null|boolean;
|
|
hide: null|boolean;
|
|
priority: null|boolean
|
|
sort: null|number;
|
|
group: null|string;
|
|
notes: null|string;
|
|
created_on: Date;
|
|
updated_on: null|Date;
|
|
}
|
|
|
|
|
|
export interface Registration {
|
|
// Nothing here yet
|
|
}
|
|
|
|
export interface File {
|
|
id: string;
|
|
id_random: string;
|
|
event_file_id: string;
|
|
event_file_id_random: string;
|
|
|
|
hosted_file_id: string;
|
|
hosted_file_id_random: string;
|
|
hash_sha256: string;
|
|
|
|
for_type?: string;
|
|
for_id?: string;
|
|
for_id_random?: string;
|
|
|
|
event_id_random: string;
|
|
event_session_id_random?: string;
|
|
event_presentation_id_random?: string;
|
|
event_presenter_id_random?: string;
|
|
event_location_id_random?: string;
|
|
|
|
filename: string;
|
|
extension: string;
|
|
|
|
open_in_os?: null|string; // null, empty, 'mac', or 'win'
|
|
|
|
lu_file_purpose_id: string;
|
|
lu_event_file_purpose_name: string;
|
|
file_purpose: string;
|
|
|
|
enable: null|boolean;
|
|
hide?: null|boolean;
|
|
priority?: null|boolean
|
|
sort?: null|number;
|
|
group?: null|string;
|
|
notes?: null|string;
|
|
created_on: Date;
|
|
updated_on?: null|Date;
|
|
|
|
// Additional fields for convenience (database views)
|
|
filename_no_ext: string;
|
|
filename_w_ext: string;
|
|
hosted_file_content_type: string;
|
|
file_size: number; // In bytes
|
|
hosted_file_size?: number; // In bytes
|
|
|
|
event_location_code?: null|string;
|
|
event_location_name?: null|string;
|
|
event_session_code?: null|string;
|
|
event_session_name?: string;
|
|
event_session_start_datetime?: null|Date;
|
|
event_presentation_code?: null|string;
|
|
event_presentation_name?: string;
|
|
event_presentation_start_datetime?: null|Date;
|
|
event_presenter_given_name?: null|string;
|
|
event_presenter_family_name?: null|string;
|
|
event_presenter_full_name?: null|string;
|
|
event_presenter_email?: null|string;
|
|
}
|
|
|
|
|
|
// Updated 2024-06-25
|
|
export interface Location {
|
|
id: string;
|
|
// id_random: string;
|
|
event_location_id: string;
|
|
event_location_id_random: string;
|
|
|
|
external_id?: null|string;
|
|
code?: null|string;
|
|
|
|
type_code?: string;
|
|
|
|
event_id: string;
|
|
event_id_random: string;
|
|
|
|
name: string;
|
|
description?: null|string;
|
|
|
|
passcode?: null|string;
|
|
|
|
hide_event_launcher?: null|boolean;
|
|
|
|
alert?: null|boolean;
|
|
alert_msg?: null|string;
|
|
|
|
data_json?: null|string;
|
|
|
|
enable: null|boolean;
|
|
hide?: null|boolean;
|
|
priority?: null|boolean
|
|
sort?: null|number;
|
|
group?: null|string;
|
|
notes?: null|string;
|
|
created_on: Date;
|
|
updated_on?: null|Date;
|
|
|
|
// Additional fields for convenience (database views)
|
|
file_count?: null|number;
|
|
file_count_all?: null|number;
|
|
internal_use_count?: null|number;
|
|
event_file_id_li_json?: null|string;
|
|
|
|
event_name?: null|string;
|
|
|
|
// A key value list of the sessions
|
|
event_session_kv?: null|key_val;
|
|
// A key value list of the files
|
|
event_file_kv?: null|key_val;
|
|
}
|
|
|
|
|
|
// Updated 2024-06-19
|
|
export interface Session {
|
|
id: string;
|
|
// id_random: string;
|
|
event_session_id: string;
|
|
event_session_id_random: string;
|
|
|
|
external_id: null|string;
|
|
code: null|string;
|
|
|
|
for_type: string;
|
|
for_id: string;
|
|
for_id_random: string;
|
|
|
|
type_code?: string;
|
|
|
|
event_id: string;
|
|
event_id_random: string;
|
|
event_location_id: null|string;
|
|
event_location_id_random: null|string;
|
|
|
|
poc_person_id: null|string;
|
|
poc_person_id_random: null|string;
|
|
|
|
name: string;
|
|
description: null|string;
|
|
|
|
start_datetime: null|Date;
|
|
end_datetime: null|Date;
|
|
|
|
passcode: null|string;
|
|
|
|
hide_event_launcher: null|boolean;
|
|
|
|
alert: null|boolean;
|
|
alert_msg: null|string;
|
|
|
|
data_json: null|string;
|
|
|
|
enable: null|boolean;
|
|
hide: null|boolean;
|
|
priority: null|boolean
|
|
sort: null|number;
|
|
group: null|string;
|
|
notes: null|string;
|
|
created_on: Date;
|
|
updated_on: null|Date;
|
|
|
|
// Additional fields for convenience (database views)
|
|
file_count?: null|number; // Only files directly under a session
|
|
file_count_all?: null|number; // All files under a session
|
|
internal_use_count?: null|number; // Files marked for internal use
|
|
event_file_id_li_json?: null|string;
|
|
|
|
poc_person_given_name?: null|string;
|
|
poc_person_family_name?: null|string;
|
|
poc_person_full_name?: null|string;
|
|
poc_person_primary_email?: null|string;
|
|
poc_person_passcode?: null|string;
|
|
poc_kv_json?: null|string;
|
|
|
|
event_name?: null|string;
|
|
|
|
event_location_code?: null|string;
|
|
event_location_name?: null|string;
|
|
|
|
// A key value list of the presentations
|
|
event_presentation_kv?: null|key_val;
|
|
event_presentation_li?: null|list;
|
|
// A key value list of the files
|
|
event_file_kv?: null|key_val;
|
|
event_file_li?: null|list;
|
|
}
|
|
|
|
|
|
// Updated 2024-06-10
|
|
export interface Presentation {
|
|
id: string;
|
|
// id_random: string;
|
|
event_presentation_id: string;
|
|
event_presentation_id_random: string;
|
|
|
|
external_id?: null|string;
|
|
code?: null|string;
|
|
|
|
for_type?: string;
|
|
for_id?: string;
|
|
for_id_random?: string;
|
|
|
|
type_code?: string;
|
|
|
|
event_id: string;
|
|
event_id_random: string;
|
|
event_session_id: string;
|
|
event_session_id_random: string;
|
|
event_abstract_id?: null|string;
|
|
event_abstract_id_random?: null|string;
|
|
|
|
abstract_code?: null|string;
|
|
|
|
name: string;
|
|
description?: null|string;
|
|
|
|
start_datetime?: null|Date;
|
|
end_datetime?: null|Date;
|
|
|
|
passcode?: null|string;
|
|
|
|
hide_event_launcher?: null|boolean;
|
|
|
|
enable: null|boolean;
|
|
hide?: null|boolean;
|
|
priority?: null|boolean;
|
|
sort?: null|number;
|
|
group?: null|string;
|
|
notes?: null|string;
|
|
created_on: Date;
|
|
updated_on?: null|Date;
|
|
|
|
// Additional fields for convenience (database views)
|
|
// file_count: null|number;
|
|
|
|
event_session_code?: null|string;
|
|
event_session_name?: null|string;
|
|
|
|
// A key value list of the presenters
|
|
event_presenter_kv?: null|key_val;
|
|
event_presenter_li?: null|list;
|
|
}
|
|
|
|
|
|
// Updated 2024-06-10
|
|
export interface Presenter {
|
|
id: string;
|
|
// id_random: string;
|
|
event_presenter_id: string;
|
|
event_presenter_id_random: string;
|
|
|
|
external_id?: string;
|
|
code?: string;
|
|
|
|
event_id: string;
|
|
event_id_random: string;
|
|
event_session_id: string;
|
|
event_session_id_random: string;
|
|
event_person_id?: null|string;
|
|
event_person_id_random?: null|string;
|
|
event_presentation_id: string;
|
|
event_presentation_id_random: string;
|
|
person_id?: null|string;
|
|
person_id_random?: null|string;
|
|
person_profile_id?: null|string;
|
|
person_profile_id_random?: null|string; // The new table person_profile will be used soon...
|
|
|
|
pronouns?: null|string;
|
|
informal_name?: null|string;
|
|
title_names?: null|string;
|
|
given_name: string;
|
|
middle_name?: null|string;
|
|
family_name?: null|string;
|
|
designations?: null|string;
|
|
|
|
professional_title?: null|string;
|
|
|
|
full_name?: string;
|
|
|
|
affiliations?: null|string;
|
|
|
|
email?: string;
|
|
|
|
biography?: null|string;
|
|
|
|
agree?: null|boolean;
|
|
comments?: null|string;
|
|
|
|
passcode?: null|string;
|
|
|
|
hide_event_launcher?: null|boolean;
|
|
|
|
data_json?: null|string;
|
|
|
|
enable: null|boolean;
|
|
hide?: null|boolean;
|
|
priority?: null|boolean
|
|
sort?: null|number;
|
|
group?: null|string;
|
|
notes?: null|string;
|
|
created_on?: Date;
|
|
updated_on?: null|Date;
|
|
|
|
// Additional fields for convenience (database views)
|
|
file_count?: null|number;
|
|
// file_count_all?: null|number;
|
|
// internal_use_count?: null|number;
|
|
event_file_id_li_json?: null|string;
|
|
|
|
event_session_code?: null|string;
|
|
event_session_name?: string;
|
|
event_session_start_datetime?: null|Date;
|
|
event_presentation_code?: null|string;
|
|
event_presentation_name?: string;
|
|
event_presentation_start_datetime?: null|Date;
|
|
|
|
person_external_id?: null|string; // This may be semi-random or unique only withing the account.
|
|
person_external_sys_id?: null|string; // Generated by an external system. Ideally this should be something like a UUID. It may be the same as the external_id if nothing given.
|
|
person_given_name?: string;
|
|
person_family_name?: null|string;
|
|
person_full_name?: null|string;
|
|
person_professional_title?: null|string;
|
|
person_affiliations?: null|string;
|
|
person_primary_email?: null|string;
|
|
person_passcode?: null|string;
|
|
|
|
// A key value list of the files
|
|
event_file_kv?: null|key_val;
|
|
}
|
|
|
|
|
|
// Updated 2024-06-10
|
|
export class MySubClassedDexie extends Dexie {
|
|
// 'badges' is added by dexie when declaring the stores()
|
|
// We just tell the typing system this is the case
|
|
events!: Table<Event>;
|
|
badges!: Table<Badge>;
|
|
exhibits!: Table<Exhibit>;
|
|
exhibit_tracking!: Table<Exhibit_tracking>;
|
|
files!: Table<File>;
|
|
locations!: Table<Location>;
|
|
sessions!: Table<Session>;
|
|
presentations!: Table<Presentation>;
|
|
presenters!: Table<Presenter>;
|
|
|
|
constructor() {
|
|
super('ae_events_db');
|
|
this.version(1).stores({
|
|
events: `
|
|
id, event_id, event_id_random,
|
|
code,
|
|
account_id, account_id_random,
|
|
conference, type,
|
|
name,
|
|
start_datetime, end_datetime,
|
|
timezone,
|
|
cfg_json,
|
|
enable, hide, priority, sort, group, notes, created_on, updated_on`,
|
|
|
|
// badges: '++id, full_name, email' // Primary key and indexed props
|
|
badges: `
|
|
id_random, event_badge_id_random, event_id_random,
|
|
full_name, full_name_override, email, email_override,
|
|
affiliations, affiliations_override,
|
|
badge_type, badge_type_code, badge_type_code_override, badge_type_override,
|
|
external_event_id, external_id, external_person_id,
|
|
enable, hide, priority, sort, group, notes, created_on, updated_on`,
|
|
|
|
exhibits: `
|
|
id_random, event_exhibit_id_random,
|
|
code, name, description, staff_passcode,
|
|
data_json, license_max, license_li_json, cfg_json,
|
|
enable, hide, priority, sort, group, notes, created_on, updated_on, [priority+name]`,
|
|
|
|
exhibit_tracking: `
|
|
id_random, event_exhibit_tracking_id_random, event_exhibit_id_random, event_badge_id_random, event_person_id_random,
|
|
exhibitor_notes, responses_json, data_json,
|
|
event_badge_full_name, event_badge_email,
|
|
enable, hide, priority, sort, group, notes, created_on, updated_on`,
|
|
|
|
sessions: `
|
|
id, event_session_id, event_session_id_random,
|
|
external_id, code,
|
|
for_type, for_id, for_id_random,
|
|
type_code,
|
|
event_id, event_location_id,
|
|
poc_person_id,
|
|
event_id_random, event_location_id_random,
|
|
poc_person_id_random,
|
|
name, start_datetime, end_datetime,
|
|
hide_event_launcher,
|
|
enable, hide, priority, sort, group, created_on, updated_on`,
|
|
|
|
files: `
|
|
id, id_random, event_file_id, event_file_id_random,
|
|
hosted_file_id, hosted_file_id_random,
|
|
hash_sha256,
|
|
for_type, for_id, for_id_random,
|
|
event_id_random, event_session_id_random, event_presentation_id_random, event_presenter_id_random, event_location_id_random,
|
|
filename, extension,
|
|
lu_file_purpose_id, lu_event_file_purpose_name, file_purpose,
|
|
enable, hide, priority, sort, group, created_on, updated_on`,
|
|
|
|
locations: `
|
|
id, event_location_id, event_location_id_random,
|
|
external_id, code,
|
|
event_id, event_id_random,
|
|
name, description,
|
|
passcode,
|
|
hide_event_launcher,
|
|
alert, alert_msg,
|
|
data_json,
|
|
enable, hide, priority, sort, group, created_on, updated_on`,
|
|
|
|
presentations: `
|
|
id, event_presentation_id, event_presentation_id_random,
|
|
external_id, code,
|
|
for_type, for_id, for_id_random,
|
|
type_code,
|
|
event_id_random, event_session_id_random, event_abstract_id_random,
|
|
abstract_code, name, description, start_datetime, end_datetime,
|
|
hide_event_launcher,
|
|
enable, hide, priority, sort, group, created_on, updated_on`,
|
|
|
|
presenters: `
|
|
id, event_presenter_id, event_presenter_id_random,
|
|
external_id, code,
|
|
event_id, event_session_id, event_person_id, event_presentation_id,
|
|
event_id_random, event_session_id_random, event_person_id_random, event_presentation_id_random,
|
|
person_id, person_profile_id,
|
|
person_id_random, person_profile_id_random,
|
|
given_name, family_name,
|
|
full_name, affiliations, email,
|
|
agree,
|
|
hide_event_launcher,
|
|
enable, hide, priority, sort, group, created_on, updated_on`,
|
|
});
|
|
}
|
|
}
|
|
|
|
export const db_events = new MySubClassedDexie(); |