import * as sql from 'mssql'; import { config } from './config'; import { log } from './log'; interface ProcedureResult { status: number; message: string; data: any[] | any | null; } interface ProcedureReference { [key: string]: any; } /** * Executes a stored procedure in the database. * * @param procedureName - The name of the stored procedure * @param reference - The input parameters for the procedure * @param useRecordsets - If true, returns result.recordsets; otherwise returns result.recordset * @returns Promise */ export const executeProcedure = async ( procedureName: string, reference: ProcedureReference = {}, useRecordsets: boolean = false ): Promise => { try { const request = new sql.Request(); for (const key of Object.keys(reference)) { request.input(key, reference[key]); } const result = await request.execute(procedureName); const data = useRecordsets ? result.recordsets : result.recordset; return { status: 200, message: 'Success', data }; } catch (err) { if (config.get.logingMode()) { log('Procedure', procedureName, err instanceof Error ? err.message : String(err)); } return { status: 500, message: 'Error', data: null }; } };