Skip to content

atavada/my-wallet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MyWallet Backend - Go Version

Backend API untuk aplikasi MyWallet yang ditulis dengan Go (Golang).

📋 Prerequisites

  • Go 1.21 atau lebih tinggi
  • PostgreSQL (Neon Database)
  • Redis (Upstash)

🛠️ Tech Stack

  • Framework: Gin
  • Database: PostgreSQL via pgx driver (Neon compatible)
  • Cache/Rate Limiting: Redis via go-redis (Upstash compatible)
  • Cron Jobs: robfig/cron
  • Environment: godotenv

📦 Installation

  1. Install Go dari https://go.dev/dl/

  2. Install dependencies:

cd backend-go
go mod tidy
  1. Edit .env dengan kredensial yang sesuai

🏃 Running the Application

Development Mode

go run main.go

📁 Project Structure

backend-go/
├── main.go                # Entry point
├── config/
│   ├── db.go              # Database configuration
│   ├── redis.go           # Redis configuration
│   └── cron.go            # Cron job configuration
├── controllers/
│   └── transaction_controller.go  # Transaction handlers
├── middleware/
│   └── ratelimiter.go     # Rate limiting middleware
├── models/
│   └── transaction.go     # Data models
├── routes/
│   └── routes.go          # Route definitions
├── go.mod                 # Dependencies
├── .env.example           # Environment variables template
└── README.md

🔌 API Endpoints

Health Check

  • GET /api/health - Check server status

Transactions

  • GET /api/transactions/:userId - Get all transactions for a user
  • POST /api/transactions - Create a new transaction
  • DELETE /api/transactions/:id - Delete a transaction
  • GET /api/transactions/summary/:userId - Get financial summary

Request Examples

Create Transaction:

POST /api/transactions
{
  "user_id": "user_123",
  "title": "Salary",
  "amount": 5000000,
  "category": "income"
}

🔐 Rate Limiting

API menggunakan rate limiting dengan Redis:

  • Limit: 100 requests per 60 detik
  • Response: 429 Too Many Requests jika melebihi limit

⏰ Cron Job

Jika NODE_ENV=production, server akan menjalankan cron job yang melakukan ping ke API setiap 14 menit.

📚 Learning Resources

🐛 Troubleshooting

Redis Connection

Pastikan UPSTASH_REDIS_REST_URL dan TOKEN benar di .env

Database Connection

Format DATABASE_URL:

postgresql://username:password@host:port/database?sslmode=require

Port Already in Use

Ubah PORT di .env jika 5001 sudah digunakan

📝 License

MIT

👨‍💻 Author

Ardha Tavada

About

Backend API for MyWallet application written in Go (Golang).

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages