Upgrade database schema to version 2 and remove unused meta_* columns

- Increment `SCHEMA_VERSION` to 2 in `schema.ts`.
- Remove all `meta_*` columns from database tables.
- Add migration logic to handle schema upgrades and clean up unused columns.
- Modify database models and repository methods to exclude `meta_*` fields for stricter typings and improved structure.
- Refactor and optimize query statements across repositories to align with new schema changes.
This commit is contained in:
natreex
2025-11-26 19:17:40 -05:00
parent 736b9a3609
commit 9648d9e9be
13 changed files with 178 additions and 131 deletions

View File

@@ -4,35 +4,28 @@ import System from "../System.js";
export interface LocationQueryResult extends Record<string, SQLiteValue> {
loc_id: string;
loc_name: string;
loc_meta: string;
element_id: string;
element_name: string;
element_description: string;
element_meta: string;
sub_element_id: string;
sub_elem_name: string;
sub_elem_description: string;
sub_elem_meta: string;
}
export interface LocationElementQueryResult extends Record<string, SQLiteValue> {
sub_element_id: string;
sub_elem_name: string;
sub_elem_description: string;
sub_elem_meta: string;
element_id: string;
element_name: string;
element_description: string;
element_meta: string;
}
export interface LocationByTagResult extends Record<string, SQLiteValue> {
element_name: string;
element_description: string;
element_meta: string;
sub_elem_name: string;
sub_elem_description: string;
sub_elem_meta: string;
}
export default class LocationRepo {
@@ -40,7 +33,7 @@ export default class LocationRepo {
let result: LocationQueryResult[];
try {
const db: Database = System.getDb();
const query = 'SELECT loc_id,loc_name, loc_meta, element.element_id AS element_id, element.element_name, element.element_description, element.element_meta, sub_elem.sub_element_id AS sub_element_id,sub_elem.sub_elem_name,sub_elem.sub_elem_description,sub_elem.sub_elem_meta FROM `book_location` AS location LEFT JOIN location_element AS element ON location.loc_id=element.location LEFT JOIN location_sub_element AS sub_elem ON element.element_id=sub_elem.element_id WHERE location.user_id=? AND location.book_id=?';
const query = 'SELECT loc_id, loc_name, element.element_id AS element_id, element.element_name, element.element_description, sub_elem.sub_element_id AS sub_element_id, sub_elem.sub_elem_name, sub_elem.sub_elem_description FROM book_location AS location LEFT JOIN location_element AS element ON location.loc_id=element.location LEFT JOIN location_sub_element AS sub_elem ON element.element_id=sub_elem.element_id WHERE location.user_id=? AND location.book_id=?';
result = db.all(query, [userId, bookId]) as LocationQueryResult[];
} catch (e: unknown) {
if (e instanceof Error) {
@@ -217,7 +210,7 @@ export default class LocationRepo {
let result: LocationElementQueryResult[];
try {
const db: Database = System.getDb();
const query = 'SELECT se.sub_element_id AS sub_element_id, se.sub_elem_name, se.sub_elem_description, se.sub_elem_meta, el.element_id AS element_id, el.element_name, el.element_description, el.element_meta FROM location_sub_element AS se RIGHT JOIN location_element AS el ON se.element_id = el.element_id LEFT JOIN book_location AS lo ON el.location = lo.loc_id WHERE lo.book_id = ? AND lo.user_id = ?';
const query = 'SELECT se.sub_element_id AS sub_element_id, se.sub_elem_name, se.sub_elem_description, el.element_id AS element_id, el.element_name, el.element_description FROM location_sub_element AS se RIGHT JOIN location_element AS el ON se.element_id = el.element_id LEFT JOIN book_location AS lo ON el.location = lo.loc_id WHERE lo.book_id = ? AND lo.user_id = ?';
result = db.all(query, [bookId, userId]) as LocationElementQueryResult[];
} catch (e: unknown) {
if (e instanceof Error) {
@@ -242,10 +235,8 @@ export default class LocationRepo {
const query: string = `
SELECT el.element_name,
el.element_description,
el.element_meta,
se.sub_elem_name,
se.sub_elem_description,
se.sub_elem_meta
se.sub_elem_description
FROM location_element AS el
LEFT JOIN location_sub_element AS se ON el.element_id = se.element_id
WHERE el.user_id = ?