added README.md

This commit is contained in:
2025-07-04 13:05:49 +08:00
parent 303159ef30
commit ee50111ff3

125
README.md Normal file
View File

@@ -0,0 +1,125 @@
# Intrasys - Internal Transfers System
![Rust](https://img.shields.io/badge/rust-%23000000.svg?logo=rust&logoColor=white)
![PostgreSQL](https://img.shields.io/badge/PostgreSQL-316192?style=for-square&logo=postgresql&logoColor=white)
![Axum](https://img.shields.io/badge/Tokio-1.46-green?style=for-square)
![Axum](https://img.shields.io/badge/Sqlx-0.8-green?style=for-square)
![Axum](https://img.shields.io/badge/Axum-0.8-green?style=for-square)
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:
```bash
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:
```bash
echo "DATABASE_URL=postgres://postgres:password@localhost:5432/postgres" > .env
```
### 3. Run the Application
```bash
cargo run
```
The application will be available at `http://localhost:3000`
## API Endpoints
### Account Management
- **Create Account**
`POST /accounts`
```json
{
"account_id": 123,
"initial_balance": "100.23344"
}
```
- **Get Account Balance**
`GET /accounts/{account_id}`
Response:
```json
{
"account_id": 123,
"balance": "100.23344"
}
```
### Transactions
- **Process Transaction**
`POST /transactions`
```json
{
"source_account_id": 123,
"destination_account_id": 456,
"amount": "50.12345"
}
```
## Development Setup
1. Install Rust toolchain:
```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
2. Clone the repository:
```bash
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):
```bash
sqlx migrate run
```
## Testing
Run the test suite with:
```bash
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.