feat(database): add DatabaseInterface.ts with abstract class for CRUD operations

This commit is contained in:
2026-06-22 05:35:21 +00:00
parent 29261fb0f2
commit f1c8b8ea81
+290
View File
@@ -0,0 +1,290 @@
export type User = {
id: string;
email: string;
password_hash: string;
display_name: string;
role: string;
is_active: number;
created_at?: string;
updated_at?: string;
};
export type Session = {
id: string;
user_id: string;
token_hash: string;
expires_at: string;
created_at?: string;
ip_address?: string;
user_agent?: string;
};
export type Project = {
id: string;
name: string;
description?: string;
owner_id: string;
units: string;
created_at: string;
updated_at: string;
thumbnail_path?: string;
};
export type ProjectMember = {
id: string;
project_id: string;
user_id: string;
role: string;
invited_at?: string;
accepted_at?: string;
};
export type Layer = {
id: string;
project_id: string;
name: string;
visible: number;
locked: number;
color?: string;
line_type?: string;
transparency: number;
sort_order: number;
created_at?: string;
};
export type Element = {
id: string;
project_id: string;
layer_id?: string;
element_type: string;
geometry: string;
style?: string;
metadata?: string;
created_at?: string;
updated_at?: string;
};
export type Block = {
id: string;
project_id: string;
name: string;
base_element_ids: string;
created_at?: string;
};
export type BlockInstance = {
id: string;
project_id: string;
block_id: string;
layer_id?: string;
position_x: number;
position_y: number;
rotation: number;
scale_x: number;
scale_y: number;
created_at?: string;
};
export type BackgroundImage = {
id: string;
project_id: string;
file_path: string;
position_x: number;
position_y: number;
scale: number;
rotation: number;
opacity: number;
created_at?: string;
};
export type Version = {
id: string;
project_id: string;
label?: string;
description?: string;
snapshot_data: Buffer;
created_by?: string;
created_at?: string;
};
export type Plugin = {
id: string;
name: string;
version: string;
display_name: string;
description?: string;
manifest: string;
is_active: number;
installed_at?: string;
activated_at?: string;
};
export type Setting = {
id: string;
user_id?: string;
key: string;
value: string;
updated_at?: string;
};
export type AIConfig = {
id: string;
scope: string;
project_id?: string;
api_base_url?: string;
api_key_encrypted?: string;
model: string;
created_at?: string;
updated_at?: string;
};
export type Webhook = {
id: string;
project_id: string;
url: string;
event: string;
is_active: number;
created_at?: string;
};
export type AuditLog = {
id: string;
user_id?: string;
project_id?: string;
action: string;
details?: string;
ip_address?: string;
created_at?: string;
};
export interface DatabaseInterface {
// Users
createUser(user: Omit<User, 'id'>): Promise<User>;
getUserById(id: string): Promise<User | null>;
getUserByEmail(email: string): Promise<User | null>;
updateUser(id: string, updates: Partial<User>): Promise<User>;
deleteUser(id: string): Promise<boolean>;
getAllUsers(): Promise<User[]>;
// Sessions
createSession(session: Omit<Session, 'id'>): Promise<Session>;
getSessionById(id: string): Promise<Session | null>;
getSessionByToken(token_hash: string): Promise<Session | null>;
updateSession(id: string, updates: Partial<Session>): Promise<Session>;
deleteSession(id: string): Promise<boolean>;
deleteExpiredSessions(): Promise<number>;
// Projects
createProject(project: Omit<Project, 'id' | 'created_at' | 'updated_at'>): Promise<Project>;
getProjectById(id: string): Promise<Project | null>;
getProjectsByOwner(owner_id: string): Promise<Project[]>;
updateProject(id: string, updates: Partial<Project>): Promise<Project>;
deleteProject(id: string): Promise<boolean>;
getAllProjects(): Promise<Project[]>;
// Project Members
createProjectMember(member: Omit<ProjectMember, 'id'>): Promise<ProjectMember>;
getProjectMemberById(id: string): Promise<ProjectMember | null>;
getProjectMembers(project_id: string): Promise<ProjectMember[]>;
updateProjectMember(id: string, updates: Partial<ProjectMember>): Promise<ProjectMember>;
deleteProjectMember(id: string): Promise<boolean>;
isProjectMember(project_id: string, user_id: string): Promise<boolean>;
// Layers
createLayer(layer: Omit<Layer, 'id'>): Promise<Layer>;
getLayerById(id: string): Promise<Layer | null>;
getLayersByProject(project_id: string): Promise<Layer[]>;
updateLayer(id: string, updates: Partial<Layer>): Promise<Layer>;
deleteLayer(id: string): Promise<boolean>;
getAllLayers(): Promise<Layer[]>;
// Elements
createElement(element: Omit<Element, 'id'>): Promise<Element>;
getElementById(id: string): Promise<Element | null>;
getElementsByProject(project_id: string): Promise<Element[]>;
getElementsByLayer(layer_id: string): Promise<Element[]>;
updateElement(id: string, updates: Partial<Element>): Promise<Element>;
deleteElement(id: string): Promise<boolean>;
getAllElements(): Promise<Element[]>;
// Blocks
createBlock(block: Omit<Block, 'id'>): Promise<Block>;
getBlockById(id: string): Promise<Block | null>;
getBlocksByProject(project_id: string): Promise<Block[]>;
updateBlock(id: string, updates: Partial<Block>): Promise<Block>;
deleteBlock(id: string): Promise<boolean>;
getAllBlocks(): Promise<Block[]>;
// Block Instances
createBlockInstance(instance: Omit<BlockInstance, 'id'>): Promise<BlockInstance>;
getBlockInstanceById(id: string): Promise<BlockInstance | null>;
getBlockInstancesByProject(project_id: string): Promise<BlockInstance[]>;
getBlockInstancesByBlock(block_id: string): Promise<BlockInstance[]>;
updateBlockInstance(id: string, updates: Partial<BlockInstance>): Promise<BlockInstance>;
deleteBlockInstance(id: string): Promise<boolean>;
getAllBlockInstances(): Promise<BlockInstance[]>;
// Background Images
createBackgroundImage(image: Omit<BackgroundImage, 'id'>): Promise<BackgroundImage>;
getBackgroundImageById(id: string): Promise<BackgroundImage | null>;
getBackgroundImagesByProject(project_id: string): Promise<BackgroundImage[]>;
updateBackgroundImage(id: string, updates: Partial<BackgroundImage>): Promise<BackgroundImage>;
deleteBackgroundImage(id: string): Promise<boolean>;
getAllBackgroundImages(): Promise<BackgroundImage[]>;
// Versions
createVersion(version: Omit<Version, 'id'>): Promise<Version>;
getVersionById(id: string): Promise<Version | null>;
getVersionsByProject(project_id: string): Promise<Version[]>;
updateVersion(id: string, updates: Partial<Version>): Promise<Version>;
deleteVersion(id: string): Promise<boolean>;
getAllVersions(): Promise<Version[]>;
// Plugins
createPlugin(plugin: Omit<Plugin, 'id' | 'installed_at' | 'activated_at'>): Promise<Plugin>;
getPluginById(id: string): Promise<Plugin | null>;
getPluginByName(name: string): Promise<Plugin | null>;
updatePlugin(id: string, updates: Partial<Plugin>): Promise<Plugin>;
deletePlugin(id: string): Promise<boolean>;
getAllPlugins(): Promise<Plugin[]>;
getActivePlugins(): Promise<Plugin[]>;
// Settings
createSetting(setting: Omit<Setting, 'id'>): Promise<Setting>;
getSettingById(id: string): Promise<Setting | null>;
getSettingByKey(key: string, user_id?: string): Promise<Setting | null>;
updateSetting(id: string, updates: Partial<Setting>): Promise<Setting>;
deleteSetting(id: string): Promise<boolean>;
getAllSettings(): Promise<Setting[]>;
// AI Config
createAIConfig(config: Omit<AIConfig, 'id'>): Promise<AIConfig>;
getAIConfigById(id: string): Promise<AIConfig | null>;
getAIConfigByProject(project_id: string): Promise<AIConfig | null>;
updateAIConfig(id: string, updates: Partial<AIConfig>): Promise<AIConfig>;
deleteAIConfig(id: string): Promise<boolean>;
getAllAIConfigs(): Promise<AIConfig[]>;
// Webhooks
createWebhook(webhook: Omit<Webhook, 'id'>): Promise<Webhook>;
getWebhookById(id: string): Promise<Webhook | null>;
getWebhooksByProject(project_id: string): Promise<Webhook[]>;
updateWebhook(id: string, updates: Partial<Webhook>): Promise<Webhook>;
deleteWebhook(id: string): Promise<boolean>;
getAllWebhooks(): Promise<Webhook[]>;
// Audit Log
createAuditLog(log: Omit<AuditLog, 'id'>): Promise<AuditLog>;
getAuditLogById(id: string): Promise<AuditLog | null>;
getAuditLogsByUser(user_id: string): Promise<AuditLog[]>;
getAuditLogsByProject(project_id: string): Promise<AuditLog[]>;
getAllAuditLogs(): Promise<AuditLog[]>;
// Migration
runMigration(migrationScript: string): Promise<void>;
getMigrationVersion(): Promise<number>;
setMigrationVersion(version: number): Promise<void>;
// Utility
close(): Promise<void>;
}