0.1.6Updated a month ago
declare namespace Ledger {
  interface Consumption {
    id?: number
    consumption_entry_id: number
    source_entry_id: number
    amount_deducted: number
    timestamp: Date
  }

  namespace Consumption {
    namespace Function {
      interface UpdatedEntry {
        id: number
        remaining: number
        deducted: number
      }
  
      interface ResponseSuccess {
        updated_entries: UpdatedEntry[]
        new_entry_id: number
        new_user_balance: number
        error_message: null
      }
  
      interface ResponseFailure {
        updated_entries: null
        new_entry_id: null
        new_user_balance: null
        error_message: string
      }
  
      type Response = ResponseSuccess | ResponseFailure
    }

    interface ConsumptionSuccessResponse {
      key: string
      success: true
      balance: number
      params: Entry
      consumption_data: Omit<Function.Response, 'new_user_balance'>
    }

    interface ConsumptionFailureResponse {
      key: string
      success: false
      reason: string
      params: Entry
    }

    type ConsumptionResponse = ConsumptionSuccessResponse | ConsumptionFailureResponse

    type Entry = Pick<Ledger.Entry, 'key' | 'amount' | 'source' | 'reference' | 'description' | 'request_id'>
  }
}