import Dexie, { type Table } from 'dexie'; import type { key_val } from './ae_stores'; // 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; // IDAA Recovery Meetings contact_li_json?: null|string[]; // full_name, email, phone_mobile, phone_home, phone_office, other_text external_person_id?: null|string; physical?: null|boolean; virtual?: null|boolean; weekday_sunday?: null|boolean; weekday_monday?: null|boolean; weekday_tuesday?: null|boolean; weekday_wednesday?: null|boolean; weekday_thursday?: null|boolean; weekday_friday?: null|boolean; weekday_saturday?: null|boolean; recurring_start_time?: null|string; // 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_type_code?: null|string; event_session_name?: string; event_session_start_datetime?: null|Date; event_session_end_datetime?: null|Date; event_presentation_code?: null|string; event_presentation_type_code?: null|string; event_presentation_name?: string; event_presentation_start_datetime?: null|Date; event_presentation_end_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; poc_agree?: null|boolean; // General catchall for agreement or consent by the POC poc_kv_json?: null|key_val; // Key value list of the POC by type (examples: 'advocate', 'chair', 'champion', 'moderator', 'organizer') 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; ux_mode?: null|string; // 'colloquium', 'lecture', 'panel', 'poster', 'symposium', 'workshop' // colloquium - Specialists present on related topics with questions // symposium - A discussion, less formal 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; 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; // General catchall for agreement or consent 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; badges!: Table; exhibits!: Table; exhibit_tracking!: Table; files!: Table; locations!: Table; sessions!: Table; presentations!: Table; presenters!: Table; constructor() { super('ae_events_db'); this.version(2).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, ux_mode, 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();