UNPKG

protoobject

Version:

A universal class for creating any JSON objects and simple manipulations with them.

98 lines (97 loc) 3.22 kB
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(): { [key: string]: any; }; }