Files
OSIT-AE-App-Svelte/src/lib/ae_posts/db_posts.ts

152 lines
4.0 KiB
TypeScript

import Dexie, { type Table } from 'dexie';
import type { key_val } from '$lib/stores/ae_stores';
// li = list
// kv = key value list
/**
* Post - A bulletin board post
* Related Files:
* - src/lib/ae_posts/ae_posts__post.ts (API)
* - src/routes/idaa/(idaa)/bb/[post_id]/+page.svelte (View)
* - src/routes/idaa/(idaa)/bb/ae_idaa_comp__post_obj_li.svelte (Search List)
*/
export interface Post {
id: string;
// id_random: string;
post_id: string;
// post_id_random: string;
account_id: string;
// account_id_random: string;
person_id?: null | string;
external_person_id?: null | string; // For IDAA this is the Novi UUID
user_id?: null | string;
topic_id?: string;
topic?: string; // or topic_name?
topic_name?: string;
name: null | string;
title: null | string;
// summary?: null|string;
content?: null | string;
anonymous?: null | boolean;
full_name?: null | string;
email?: null | string;
notify?: null | boolean;
enable_comments?: null | boolean;
archive?: null | boolean;
archive_on?: null | Date;
linked_li_json?: null | string;
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;
// Generated fields for sorting locally only
tmp_sort_1?: null | string;
tmp_sort_2?: null | string;
// Additional fields for convenience (database views)
post_comment_count?: number;
// Placeholder for generated temp data
hosted_file_id_li?: null | Array<string>;
hosted_file_obj_li?: null | Array<any>;
upload_complete?: boolean;
}
/**
* Post_Comment - A comment on a bulletin board post
* Related Files:
* - src/lib/ae_posts/ae_posts__post_comment.ts (API)
* - src/routes/idaa/(idaa)/bb/[post_id]/ae_idaa_comp__post_comment_obj_li.svelte (Comment List View)
* - src/routes/idaa/(idaa)/bb/ae_idaa_comp__post_comment_obj_id_edit.svelte (Edit View)
*/
export interface Post_Comment {
id: string;
// id_random: string;
post_comment_id: string;
// post_comment_id_random: string;
post_id: string;
// post_id_random: string;
external_person_id?: null | string; // For IDAA this is the Novi UUID
name: null | string;
title: null | string;
// summary?: null|string;
content?: null | string;
anonymous?: null | boolean;
full_name?: null | string;
email?: null | string;
notify?: null | boolean;
linked_li_json?: null | string;
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;
// Generated fields for sorting locally only
tmp_sort_1?: null | string;
tmp_sort_2?: null | string;
// Additional fields for convenience (database views)
}
// Updated 2024-09-25
export class MySubClassedDexie extends Dexie {
// We just tell the typing system this is the case
post!: Table<Post>;
comment!: Table<Post_Comment>;
constructor() {
super('ae_posts_db');
this.version(1).stores({
post: `
id, post_id,
account_id,
topic_id, topic,
name,
title,
full_name, email,
archive, archive_on,
tmp_sort_1, tmp_sort_2,
enable, hide, priority, sort, group, notes, created_on, updated_on, [updated_on+created_on], [created_on+updated_on]`,
comment: `
id, post_comment_id,
post_id,
name,
title,
full_name, email,
tmp_sort_1, tmp_sort_2,
enable, hide, priority, sort, group, notes, created_on, updated_on, [updated_on+created_on]`
});
}
}
export const db_posts = new MySubClassedDexie();