0.1.3•Updated 6 months ago
import { DataTypeQuery } from "@infinity-beyond/classes/query.ts";
interface UpdatedEntry {
id: number
remaining: number
deducted: number
}
interface ConsumptionResponse {
updated_entries: UpdatedEntry[]
new_entry_id: number
new_user_balance: number
}
interface ConsumptionResponseSuccess {
updated_entries: UpdatedEntry[]
new_entry_id: number
new_user_balance: number
error_message: null
}
interface ConsumptionResponseFailure {
updated_entries: null
new_entry_id: null
new_user_balance: null
error_message: string
}
export type ConsumptionResponseMapped = ConsumptionResponseSuccess | ConsumptionResponseFailure
export const ConsumeFromLedger = new DataTypeQuery<
[
/* $1 */ p_key: string,
/* $2 */ p_amount: number,
/* $3 */ p_source: string,
/* $4 */ p_reference: string | undefined,
/* $5 */ p_description: string | undefined,
/* $6 */ p_request_id: string | undefined,
], {
slug: string
}, ConsumptionResponseMapped
>(
`SELECT * FROM {slug}_process_consumption($1, $2, $3, $4, $5, $6)`,
(rows: ConsumptionResponse[]) => rows.map(row => {
return {
new_entry_id: row.new_entry_id,
updated_entries: row.updated_entries,
new_user_balance: row.new_user_balance,
} as ConsumptionResponseMapped;
})
);