protoobject
Version:
A universal class for creating any JSON objects and simple manipulations with them.
98 lines (97 loc) • 3.22 kB
TypeScript
import { DatabaseSync } from "node:sqlite";
import { ProtoObject } from "./proto-object.js";
import { ProtoObjectStaticMethods } from "../types/static-methods.js";
export declare enum RecordState {
ACTIVE = 0,
DELETED = 1
}
export interface ProtoObjectSQLiteBase {
id?: string;
created_at?: Date;
updated_at?: Date;
record_state?: RecordState;
}
export interface ProtoObjectSQLiteStaticMethods<T extends ProtoObjectSQLite<T>> extends ProtoObjectStaticMethods<T> {
table: string;
primaryKey: string;
getById<T extends ProtoObjectSQLite<T>>(db: DatabaseSync, id: string): Promise<T | undefined>;
findBy<T extends ProtoObjectSQLite<T>>(db: DatabaseSync, criteria: Partial<T>): Promise<T[]>;
findOneBy<T extends ProtoObjectSQLite<T>>(db: DatabaseSync, criteria: Partial<T>): Promise<T | undefined>;
count<T extends ProtoObjectSQLite<T>>(db: DatabaseSync, criteria?: Partial<T>): Promise<number>;
createTable(db: DatabaseSync): Promise<void>;
dropTable(db: DatabaseSync): Promise<void>;
}
/**
* A universal class for creating ProtoObject entities with SQLite integration
* Extends ProtoObject with database operations using node:sqlite
*/
export declare class ProtoObjectSQLite<T extends ProtoObjectSQLite<T>> extends ProtoObject<T> {
constructor(data?: Partial<T>);
static table: string;
static primaryKey: string;
/**
* Find record by ID
*/
static getById<T extends ProtoObjectSQLite<T>>(db: DatabaseSync, id: string): Promise<T | undefined>;
/**
* Find records by criteria
*/
static findBy<T extends ProtoObjectSQLite<T>>(db: DatabaseSync, criteria: Partial<T>): Promise<T[]>;
/**
* Find one record by criteria
*/
static findOneBy<T extends ProtoObjectSQLite<T>>(db: DatabaseSync, criteria: Partial<T>): Promise<T | undefined>;
/**
* Count records matching criteria
*/
static count<T extends ProtoObjectSQLite<T>>(db: DatabaseSync, criteria?: Partial<T>): Promise<number>;
/**
* Create table for this entity
* Override in subclasses to define custom schema
*/
static createTable(db: DatabaseSync): Promise<void>;
/**
* Drop table for this entity
*/
static dropTable(db: DatabaseSync): Promise<void>;
/**
* Reload current instance from database
*/
reload(db: DatabaseSync): Promise<T>;
/**
* Save (insert or update) record to database
*/
save(db: DatabaseSync): Promise<T>;
/**
* Insert new record
*/
insert(db: DatabaseSync): Promise<T>;
/**
* Update existing record
*/
update(db: DatabaseSync): Promise<T>;
/**
* Soft delete (mark as deleted)
*/
softDelete(db: DatabaseSync): Promise<T>;
/**
* Hard delete (remove from database)
*/
delete(db: DatabaseSync): Promise<void>;
/**
* Check if record exists in database
*/
exists(db: DatabaseSync): Promise<boolean>;
/**
* Enhanced fromJSON with Date parsing
*/
static fromJSON<T>(data: {
[key: string]: unknown;
}): T;
/**
* Enhanced toJSON with Date serialization
*/
toJSON(): {
[]: any;
};
}