Service - User Account Balance

From Izara Wiki
Revision as of 04:37, 20 January 2023 by Sven the Barbarian (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Overview

Manages a users balance owed to the project.

Repository

https://bitbucket.org/izara-core-user-accounts/izara-core-user-accounts-user-account-balance

DynamoDB tables

Standard Config Table Per Service

Configuration tags

{
	configKey: "..."
	configTag: "..."
	configValue: xxx // eg: "..."
}

UserBalance

{
	userId: xxx
	balance: xxx
	currencyId: ###
}
  • partition key: userId
  • sort key: (none)
  • record is created when user is first made, but if it does not for some reason we could perhaps make the record with a default currency (eg USD)

Transaction

  • Want to be able to filter by time
{
	userId: xxx
	timeTransactionId: xxx
	amount: xxx
	transactionTag: xxx
	currencyId: ###
	originalCurrencyId: ###
	originalAmount: xxx
	conversionRate: xxx
}
  • partition key: userId
  • sort key: timeTransactionId
  • timeTransactionId: {timestamp}_{random uuid for transactionId} add uuid to ensure each sortKey is unique
  • transactionTag: standardized tag set be external service to identify the type of transaction
  • currencyId: record the converted to currency (will match UserBalance currency unless we allow to change currency in future)
  • originalCurrencyId: of the transaction amount from external service
  • originalAmount: from external service before conversion to user's currency
  • conversionRate: record the rate used to perform conversion

Currency

Each user sets the currency they want their account balance to be recorded in, when a transaction is received it notes which currency the amount was calculated in and this service converts it to the user's currency using our systems mid-market exchange rates.

Running balance

When a transaction is received, converted, and saved we update the user's balance. Be careful of race conditions and perhaps code a flow that recalculates the balance from all transactions, similar to account limits.

When user goes negative

Perhaps trigger adding roles to the user that restrict their limits/access to actions.

Working documents

User Account Balance