0.1.5Updated 6 months ago
declare namespace Ledger {

  interface Entry {
    id?: number

    key: string

    amount: number
    remaining: number

    timestamp: Date

    reason?: string
    description?: string
    reference?: string
    meta?: string

    source: string
    request_id?: string

    expiration_date?: Date
    expired?: boolean
  }

  namespace Entry {

    type Unentered = Omit<Entry, 'id' | 'timestamp' | 'remaining'> & { remaining?: number }

    type DataResponse = {
      entry: Entry,
      deducted_from_entries: (Entry & { consumption_id: number })[],
      deducted_by_entries: (Entry & { consumption_id: number })[]
    }

    interface AddResponseFailure {
      added: false
      reason: string
    }

    interface AddResponseSuccess {
      added: true
      balance: number
    }

    type Response = AddResponseFailure | AddResponseSuccess

  }
}