2025-07-04 13:11:18 +08:00
2025-07-04 11:56:23 +08:00
2025-07-04 12:55:08 +08:00
2025-07-04 12:55:08 +08:00
2025-07-04 11:56:23 +08:00
2025-07-04 13:11:18 +08:00
2025-07-04 12:55:08 +08:00
2025-07-04 13:10:30 +08:00

Intrasys - Internal Transfers System

Rust PostgreSQL Axum Axum Axum

Intrasys is an internal financial transfers application built with Rust and Axum, providing HTTP endpoints for account management and transaction processing with PostgreSQL as the backing database.

Features

  • Account creation with initial balance
  • Account balance queries
  • Secure transaction processing between accounts
  • Atomic transaction handling with database integrity
  • Precise decimal arithmetic for financial amounts

Prerequisites

  • Rust (latest stable version)
  • Docker (for database provisioning)
  • PostgreSQL client (optional)

Quick Start

1. Provision PostgreSQL Database

Run a PostgreSQL container with Docker:

docker run --name intrasys-pg -d -e POSTGRES_PASSWORD=password -p 127.0.0.1:5432:5432 postgres:alpine

2. Configure Environment

Create a .env file in the project root:

echo "DATABASE_URL=postgres://postgres:password@localhost:5432/postgres" > .env

3. Run the Application

cargo run

The application will be available at http://localhost:3000

API Endpoints

Account Management

  • Create Account
    POST /accounts

    {
      "account_id": 123,
      "initial_balance": "100.23344"
    }
    
  • Get Account Balance
    GET /accounts/{account_id}
    Response:

    {
      "account_id": 123,
      "balance": "100.23344"
    }
    

Transactions

  • Process Transaction
    POST /transactions
    {
      "source_account_id": 123,
      "destination_account_id": 456,
      "amount": "50.12345"
    }
    

Development Setup

  1. Install Rust toolchain:

    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    
  2. Clone the repository:

    git clone https://github.com/yourusername/intrasys.git
    cd intrasys
    
  3. Run database migrations (optional - the app will create tables if they don't exist):

    sqlx migrate run
    

Testing

Run the test suite with:

cargo test

Assumptions

  • All accounts use the same currency
  • No authentication or authorization is implemented
  • Decimal precision of 10 decimal places is sufficient for financial amounts
  • Account IDs are positive integers

License

MIT License

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Description
No description provided
Readme 107 KiB
Languages
Rust 91.6%
Dockerfile 8.4%