149 lines
4.6 KiB
TypeScript
149 lines
4.6 KiB
TypeScript
import Dexie, { type Table } from 'dexie';
|
|
|
|
import type { key_val } from './ae_stores';
|
|
|
|
// li = list
|
|
// kv = key value list
|
|
// json = JSON string
|
|
// ux = user experience (mode)
|
|
// LLM = Large Language Model (AI)
|
|
|
|
// Updated 2024-08-20
|
|
export interface Note {
|
|
id: string; // actually "id_random"
|
|
note_id: string;
|
|
|
|
// Essentially this is a change log of notes
|
|
snapshot_id?: string; // This is the original note ID. If deleted, then delete all children notes.
|
|
previous_id?: null|string; // This is the old or parent note ID
|
|
next_id?: null|string; // This is the new or child note ID
|
|
|
|
external_id?: null|string;
|
|
import_id?: null|string;
|
|
code?: null|string;
|
|
|
|
for_type?: null|string;
|
|
for_id?: null|string;
|
|
|
|
type_code?: null|string;
|
|
|
|
account_id?: null|string; // Owner account of the note
|
|
person_id?: null|string; // Owner person of the note
|
|
// event_id?: null|string; // Assign to an event???
|
|
// location_id?: null|string; // Assign to a location???
|
|
|
|
name: string; // or the title
|
|
summary?: null|string; // LLM (AI) generated summary...???
|
|
outline?: null|string; // LLM (AI) generated outline...???
|
|
|
|
note?: null|string;
|
|
note_html?: null|string;
|
|
note_json?: null|string;
|
|
|
|
start_datetime?: null|Date;
|
|
end_datetime?: null|Date;
|
|
timezone?: null|string;
|
|
|
|
hide_event_launcher?: null|boolean;
|
|
|
|
alert?: null|boolean; // LLM (AI) generated summary...???
|
|
alert_msg?: null|string; // LLM (AI) generated summary...???
|
|
|
|
data_json?: null|string; // We always need to store something extra...
|
|
|
|
ux_mode?: null|string; // 'mobile' or 'desktop'
|
|
|
|
// This only allows for basic access to the content.
|
|
passcode_read?: null|string; // For LLM (AI) generated summary...???
|
|
passcode_read_expire?: null|Date;
|
|
passcode_write?: null|string;
|
|
passcode_write_expire?: null|Date
|
|
|
|
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 note
|
|
note_file_id_li_json?: null|string;
|
|
|
|
// One person
|
|
person__given_name?: null|string;
|
|
person__family_name?: null|string;
|
|
person__full_name?: null|string;
|
|
person__primary_email?: null|string;
|
|
person__passcode?: null|string;
|
|
|
|
// JSON formatted key value pairs for multiple people: {id: name, email, etc.}
|
|
person__kv_json?: null|string;
|
|
|
|
note_name?: null|string;
|
|
|
|
note_location_code?: null|string;
|
|
note_location_name?: null|string;
|
|
|
|
// A key value list of the presentations
|
|
note_presentation_kv?: null|key_val;
|
|
note_presentation_li?: null|[];
|
|
// A key value list of the files
|
|
note_file_kv?: null|key_val;
|
|
note_file_li?: null|[];
|
|
|
|
// note_collection_id?: null|string; // For a collection of notes?
|
|
|
|
// Future standard fields!!!
|
|
obj_id?: null|string;
|
|
obj_ext_uid?: null|string; // Probably not needed for notes
|
|
obj_ext_id?: null|string; // Probably not needed for notes
|
|
obj_import_id?: null|string; // Probably not needed for notes
|
|
obj_code?: null|string;
|
|
obj_account_id?: null|string;
|
|
obj_passcode?: null|string;
|
|
obj_type?: null|string; // Should always be 'note' in this case
|
|
obj_type_ver_id?: null|string; // The ID from the table for the object type
|
|
obj_name?: null|string;
|
|
obj_summary?: null|string; // LLM (AI) generated summary...???
|
|
obj_outline?: null|string; // LLM (AI) generated outline...???
|
|
obj_description?: null|string; // Probably not needed for notes
|
|
obj_enable?: null|boolean;
|
|
obj_enable_on?: null|Date;
|
|
obj_archive_on?: null|Date;
|
|
obj_hide?: null|boolean;
|
|
obj_priority?: null|number;
|
|
obj_sort?: null|number;
|
|
obj_group?: null|string;
|
|
obj_cfg_json?: null|string;
|
|
obj_notes?: null|string; // Not the same as the "note" in the object type named "Note".
|
|
obj_created_on?: Date;
|
|
obj_updated_on?: null|Date;
|
|
}
|
|
|
|
|
|
// Updated 2024-06-10
|
|
export class MySubClassedDexie extends Dexie {
|
|
// We just tell the typing system this is the case
|
|
note!: Table<Note>;
|
|
|
|
constructor() {
|
|
super('ae_notes_db');
|
|
this.version(1).stores({
|
|
note: `
|
|
id, note_id,
|
|
code,
|
|
account_id,
|
|
conference, type,
|
|
name,
|
|
start_datetime, end_datetime,
|
|
timezone,
|
|
enable, hide, priority, sort, group, notes, created_on, updated_on`,
|
|
});
|
|
}
|
|
}
|
|
|
|
export const db_notes = new MySubClassedDexie();
|