The ledger package is designed to manage user balances and transactions within a ledger system. It uses AWS DynamoDB for storage and integrates with AWS SES for email notifications.
You can import the package directly, go get github.com/adonese/ledger@latest
To use the API, authenticate with AWS by initializing a DynamoDB client using InitializeLedger.
func InitializeLedger(accessKey, secretKey, region string) (*dynamodb.Client, error)Parameters:
accessKey: AWS access key.secretKey: AWS secret key.region: AWS region.
Returns:
*dynamodb.Client: A client for interacting with AWS DynamoDB.error: Error message, if any.
func CheckUsersExist(dbSvc *dynamodb.Client, accountIds []string) ([]string, error)Purpose: Checks if users exist in the DynamoDB table.
Parameters:
dbSvc: DynamoDB client.accountIds: List of user account IDs.
Returns:
[]string: List of account IDs that do not exist.error: Error message if the operation fails.
func CreateAccountWithBalance(dbSvc *dynamodb.Client, accountId string, amount float64) errorPurpose: Creates a new account with an initial balance.
Parameters:
dbSvc: DynamoDB client.accountId: The unique identifier for the account.amount: Initial amount to be set for the account.
Returns:
error: Error message if the operation fails.
func InquireBalance(dbSvc *dynamodb.Client, AccountID string) (float64, error)Purpose: Inquires about the balance of a user's account.
Parameters:
dbSvc: DynamoDB client.AccountID: The unique identifier for the account.
Returns:
float64: The current balance of the account.error: Error message if the operation fails.
func TransferCredits(dbSvc *dynamodb.Client, fromAccountID, toAccountID string, amount float64) errorPurpose: Transfers credits from one account to another.
Parameters:
dbSvc: DynamoDB client.fromAccountID: The account ID to debit.toAccountID: The account ID to credit.amount: The amount to be transferred.
Returns:
error: Error message if the operation fails.
func GetTransactions(dbSvc *dynamodb.Client, accountID string, limit int32, lastTransactionID string) ([]LedgerEntry, string, error)Purpose: Retrieves a list of transactions for an account.
Parameters:
dbSvc: DynamoDB client.accountID: The account ID.limit: Maximum number of transactions to retrieve.lastTransactionID: ID of the last transaction retrieved (for pagination).
Returns:
[]LedgerEntry: List of ledger entries.string: The ID of the last transaction retrieved.error: Error message if the operation fails.
func HandleDynamoDBStream(ctx context.Context, event events.DynamoDBEvent) errorPurpose: Handles DynamoDB stream events to send email notifications.
Parameters:
ctx: Context.event: DynamoDB event.
Returns:
error: Error message if the operation fails.
func SendEmail(sesSvc *ses.Client, msg Message) errorPurpose: Sends an email notification.
Parameters:
sesSvc: AWS SES client.msg: Message containing email details.
Returns:
error: Error message if the operation fails.
func SendSMS(sms SMS) errorPurpose: Sends an SMS notification.
Parameters:
sms: SMS structure containing the details for the SMS message.
Returns:
error: Error message if the operation fails.
Short-term Goals:
- Refine the current DynamoDB schema to improve performance for high transaction volumes.
- Implement a caching layer to reduce read latency for frequently accessed data.
- Develop a more robust error handling and logging mechanism for easier debugging and maintenance.
Mid-term Goals:
- Integrate
with additional AWS services for analytics and real-time monitoring of transactions. 2. Support multi-currency transactions and automatic currency conversion based on real-time exchange rates. 3. Provide a user interface for account management and transaction history.
Long-term Goals:
- Expand the ledger system to support blockchain technologies for increased security and transparency.
- Establish a plugin system allowing third-party extensions and integrations.
- Implement AI-driven fraud detection and prevention systems.