From 7b3fa72880a3974f2ece9615d58fcb1c6569e026 Mon Sep 17 00:00:00 2001 From: JohnDoe6345789 Date: Fri, 26 Dec 2025 00:54:00 +0000 Subject: [PATCH] code: dbal,lua,script (6 files) --- .../entities/lua-script/create-lua-script.ts | 39 ++++++++++++++++ .../entities/lua-script/delete-lua-script.ts | 23 ++++++++++ .../entities/lua-script/get-lua-script.ts | 22 +++++++++ dbal/ts/src/core/entities/lua-script/index.ts | 9 ++++ .../entities/lua-script/list-lua-scripts.ts | 43 +++++++++++++++++ .../entities/lua-script/update-lua-script.ts | 46 +++++++++++++++++++ 6 files changed, 182 insertions(+) create mode 100644 dbal/ts/src/core/entities/lua-script/create-lua-script.ts create mode 100644 dbal/ts/src/core/entities/lua-script/delete-lua-script.ts create mode 100644 dbal/ts/src/core/entities/lua-script/get-lua-script.ts create mode 100644 dbal/ts/src/core/entities/lua-script/index.ts create mode 100644 dbal/ts/src/core/entities/lua-script/list-lua-scripts.ts create mode 100644 dbal/ts/src/core/entities/lua-script/update-lua-script.ts diff --git a/dbal/ts/src/core/entities/lua-script/create-lua-script.ts b/dbal/ts/src/core/entities/lua-script/create-lua-script.ts new file mode 100644 index 000000000..289e121a4 --- /dev/null +++ b/dbal/ts/src/core/entities/lua-script/create-lua-script.ts @@ -0,0 +1,39 @@ +/** + * @file create-lua-script.ts + * @description Create Lua script operation + */ +import type { LuaScript, CreateLuaScriptInput, Result } from '../types'; +import type { InMemoryStore } from '../store/in-memory-store'; +import { validateLuaSyntax } from '../validation/lua-script-validation'; + +/** + * Create a new Lua script in the store + */ +export async function createLuaScript( + store: InMemoryStore, + input: CreateLuaScriptInput +): Promise> { + if (!input.name || input.name.length > 100) { + return { success: false, error: { code: 'VALIDATION_ERROR', message: 'Name required (max 100)' } }; + } + if (!input.code) { + return { success: false, error: { code: 'VALIDATION_ERROR', message: 'Code required' } }; + } + if (!validateLuaSyntax(input.code)) { + return { success: false, error: { code: 'VALIDATION_ERROR', message: 'Invalid Lua syntax' } }; + } + + const script: LuaScript = { + id: store.generateId('lua_script'), + name: input.name, + description: input.description ?? '', + code: input.code, + category: input.category ?? 'general', + isActive: input.isActive ?? true, + createdAt: new Date(), + updatedAt: new Date(), + }; + + store.luaScripts.set(script.id, script); + return { success: true, data: script }; +} diff --git a/dbal/ts/src/core/entities/lua-script/delete-lua-script.ts b/dbal/ts/src/core/entities/lua-script/delete-lua-script.ts new file mode 100644 index 000000000..6eae1b45a --- /dev/null +++ b/dbal/ts/src/core/entities/lua-script/delete-lua-script.ts @@ -0,0 +1,23 @@ +/** + * @file delete-lua-script.ts + * @description Delete Lua script operation + */ +import type { Result } from '../types'; +import type { InMemoryStore } from '../store/in-memory-store'; + +/** + * Delete a Lua script by ID + */ +export async function deleteLuaScript(store: InMemoryStore, id: string): Promise> { + if (!id) { + return { success: false, error: { code: 'VALIDATION_ERROR', message: 'ID required' } }; + } + + const script = store.luaScripts.get(id); + if (!script) { + return { success: false, error: { code: 'NOT_FOUND', message: `Lua script not found: ${id}` } }; + } + + store.luaScripts.delete(id); + return { success: true, data: true }; +} diff --git a/dbal/ts/src/core/entities/lua-script/get-lua-script.ts b/dbal/ts/src/core/entities/lua-script/get-lua-script.ts new file mode 100644 index 000000000..f5369b816 --- /dev/null +++ b/dbal/ts/src/core/entities/lua-script/get-lua-script.ts @@ -0,0 +1,22 @@ +/** + * @file get-lua-script.ts + * @description Get Lua script operation + */ +import type { LuaScript, Result } from '../types'; +import type { InMemoryStore } from '../store/in-memory-store'; + +/** + * Get a Lua script by ID + */ +export async function getLuaScript(store: InMemoryStore, id: string): Promise> { + if (!id) { + return { success: false, error: { code: 'VALIDATION_ERROR', message: 'ID required' } }; + } + + const script = store.luaScripts.get(id); + if (!script) { + return { success: false, error: { code: 'NOT_FOUND', message: `Lua script not found: ${id}` } }; + } + + return { success: true, data: script }; +} diff --git a/dbal/ts/src/core/entities/lua-script/index.ts b/dbal/ts/src/core/entities/lua-script/index.ts new file mode 100644 index 000000000..3abe5e2f4 --- /dev/null +++ b/dbal/ts/src/core/entities/lua-script/index.ts @@ -0,0 +1,9 @@ +/** + * @file index.ts + * @description Barrel export for Lua script operations + */ +export { createLuaScript } from './create-lua-script'; +export { getLuaScript } from './get-lua-script'; +export { updateLuaScript } from './update-lua-script'; +export { deleteLuaScript } from './delete-lua-script'; +export { listLuaScripts } from './list-lua-scripts'; diff --git a/dbal/ts/src/core/entities/lua-script/list-lua-scripts.ts b/dbal/ts/src/core/entities/lua-script/list-lua-scripts.ts new file mode 100644 index 000000000..963e53ad1 --- /dev/null +++ b/dbal/ts/src/core/entities/lua-script/list-lua-scripts.ts @@ -0,0 +1,43 @@ +/** + * @file list-lua-scripts.ts + * @description List Lua scripts with filtering and pagination + */ +import type { LuaScript, ListOptions, Result } from '../types'; +import type { InMemoryStore } from '../store/in-memory-store'; + +/** + * List Lua scripts with filtering and pagination + */ +export async function listLuaScripts( + store: InMemoryStore, + options: ListOptions = {} +): Promise> { + const { filter = {}, sort = {}, page = 1, limit = 20 } = options; + + let scripts = Array.from(store.luaScripts.values()); + + // Apply filters + if (filter.isActive !== undefined) { + scripts = scripts.filter((s) => s.isActive === filter.isActive); + } + if (filter.category !== undefined) { + scripts = scripts.filter((s) => s.category === filter.category); + } + + // Apply sorting + if (sort.name) { + scripts.sort((a, b) => (sort.name === 'asc' ? a.name.localeCompare(b.name) : b.name.localeCompare(a.name))); + } else if (sort.createdAt) { + scripts.sort((a, b) => + sort.createdAt === 'asc' + ? a.createdAt.getTime() - b.createdAt.getTime() + : b.createdAt.getTime() - a.createdAt.getTime() + ); + } + + // Apply pagination + const start = (page - 1) * limit; + const paginated = scripts.slice(start, start + limit); + + return { success: true, data: paginated }; +} diff --git a/dbal/ts/src/core/entities/lua-script/update-lua-script.ts b/dbal/ts/src/core/entities/lua-script/update-lua-script.ts new file mode 100644 index 000000000..f81c4d355 --- /dev/null +++ b/dbal/ts/src/core/entities/lua-script/update-lua-script.ts @@ -0,0 +1,46 @@ +/** + * @file update-lua-script.ts + * @description Update Lua script operation + */ +import type { LuaScript, UpdateLuaScriptInput, Result } from '../types'; +import type { InMemoryStore } from '../store/in-memory-store'; +import { validateLuaSyntax } from '../validation/lua-script-validation'; + +/** + * Update an existing Lua script + */ +export async function updateLuaScript( + store: InMemoryStore, + id: string, + input: UpdateLuaScriptInput +): Promise> { + if (!id) { + return { success: false, error: { code: 'VALIDATION_ERROR', message: 'ID required' } }; + } + + const script = store.luaScripts.get(id); + if (!script) { + return { success: false, error: { code: 'NOT_FOUND', message: `Lua script not found: ${id}` } }; + } + + if (input.name !== undefined) { + if (!input.name || input.name.length > 100) { + return { success: false, error: { code: 'VALIDATION_ERROR', message: 'Invalid name' } }; + } + script.name = input.name; + } + + if (input.code !== undefined) { + if (!input.code || !validateLuaSyntax(input.code)) { + return { success: false, error: { code: 'VALIDATION_ERROR', message: 'Invalid Lua code' } }; + } + script.code = input.code; + } + + if (input.description !== undefined) script.description = input.description; + if (input.category !== undefined) script.category = input.category; + if (input.isActive !== undefined) script.isActive = input.isActive; + + script.updatedAt = new Date(); + return { success: true, data: script }; +}