Bu proje, kullanıcıların dijital ödemeler yapabileceği ve faturalarını arkadaşlarıyla bölebileceği modern bir web uygulamasıdır.
- 🔐 ID Tabanlı Giriş: Kayıt olmadan, sadece kullanıcı ID'si ile giriş
- 💸 Para Transferi: Kullanıcılar arası hızlı para transferi
- 💳 Ödeme Sistemi: İşyerlerine ödeme yapma
- 🧾 Fatura Bölme: İki farklı yöntemle fatura bölme
- Eşit Bölme: Tutarı eşit olarak bölme
- Ağırlıklı Bölme: Belirli oranlarda bölme
- 💰 Cüzdan Yönetimi: Bakiye görüntüleme ve yükleme
- 📊 Özet Raporları: Borç/alacak özetleri
- Node.js - Runtime environment
- Express.js - Web framework
- SQLite - Database
- SOLID Principles - Clean architecture
- HTML5 - Markup
- CSS3 - Modern styling with CSS Grid/Flexbox
- Vanilla JavaScript - No framework dependencies
- Helmet.js - Security headers
- CORS - Cross-origin resource sharing
- Rate Limiting - API rate limiting
npm installnpm run init-db# Geliştirme modu (nodemon ile)
npm run dev
# Üretim modu
npm startTarayıcınızda http://localhost:3000 adresine gidin.
- U1 - Ayşe (250 TL bakiye)
- U2 - Ali (90 TL bakiye)
- U3 - Deniz (30 TL bakiye)
POST /api/auth/login- Kullanıcı girişiGET /api/auth/profile- Kullanıcı profiliGET /api/auth/users/search- Kullanıcı aramaPOST /api/auth/logout- Çıkış
POST /api/payments/transfer- Para transferiPOST /api/payments/payment- İşyerine ödemePOST /api/payments/topup- Bakiye yüklemeGET /api/payments/balance- Bakiye sorgulama
POST /api/splits/equal- Eşit fatura bölmePOST /api/splits/weighted- Ağırlıklı fatura bölmeGET /api/splits/summary- Fatura özetiGET /api/splits- Kullanıcının fatura bölmeleriGET /api/splits/:splitId- Fatura detayıPOST /api/splits/:splitId/settle- Fatura ödemeDELETE /api/splits/:splitId- Fatura iptal
├── database/
│ └── schema.sql # Veritabanı şeması
├── public/
│ ├── index.html # Frontend HTML
│ ├── styles.css # CSS stilleri
│ └── app.js # Frontend JavaScript
├── src/
│ ├── app.js # Ana uygulama
│ ├── container/
│ │ └── Container.js # Dependency Injection
│ ├── controllers/
│ │ ├── AuthController.js # Kimlik doğrulama kontrolcüsü
│ │ ├── PaymentController.js # Ödeme kontrolcüsü
│ │ └── BillSplitController.js # Fatura bölme kontrolcüsü
│ ├── database/
│ │ ├── Database.js # Veritabanı bağlantısı
│ │ └── init.js # Veritabanı başlatma
│ ├── domain/
│ │ ├── User.js # Kullanıcı modeli
│ │ ├── Transaction.js # İşlem modeli
│ │ ├── BillSplit.js # Fatura bölme modeli
│ │ └── Wallet.js # Cüzdan modeli
│ ├── middleware/
│ │ └── auth.js # Kimlik doğrulama middleware
│ ├── repositories/
│ │ ├── BaseRepository.js # Temel repository
│ │ ├── UserRepository.js # Kullanıcı repository
│ │ ├── TransactionRepository.js # İşlem repository
│ │ ├── WalletRepository.js # Cüzdan repository
│ │ └── BillSplitRepository.js # Fatura bölme repository
│ ├── routes/
│ │ ├── auth.js # Kimlik doğrulama rotaları
│ │ ├── payments.js # Ödeme rotaları
│ │ └── billSplits.js # Fatura bölme rotaları
│ └── services/
│ ├── AuthService.js # Kimlik doğrulama servisi
│ ├── PaymentService.js # Ödeme servisi
│ └── BillSplitService.js # Fatura bölme servisi
├── package.json
└── README.md
Bu proje SOLID prensiplerine uygun olarak geliştirilmiştir:
- Her sınıf tek bir sorumluluğa sahiptir
- Controller'lar sadece HTTP isteklerini yönetir
- Service'ler sadece business logic içerir
- Repository'ler sadece veri erişimi yapar
- Yeni ödeme türleri kolayca eklenebilir
- Yeni split türleri extend edilebilir
- Middleware'ler genişletilebilir
- Tüm repository'ler BaseRepository'den türer
- Polymorphic davranış desteklenir
- Küçük, odaklanmış interface'ler
- Her service sadece ihtiyacı olan metotları kullanır
- High-level modüller low-level modüllere bağımlı değil
- Dependency injection container kullanılır
- Abstraction'lara bağımlılık
// U1'den U2'ye 50 TL transfer
POST /api/payments/transfer
{
"toUserId": "U2",
"amount": 50.00
}// TX_PAY_123 işlemini U2 ve U3 ile eşit böl
POST /api/splits/equal
{
"originalTxId": "TX_PAY_123",
"debtorUserIds": ["U2", "U3"]
}// TX_PAY_123 işlemini ağırlıklı böl
POST /api/splits/weighted
{
"originalTxId": "TX_PAY_123",
"debtorWeights": [
{"userId": "U2", "weight": 2.0},
{"userId": "U3", "weight": 1.0}
]
}- Rate limiting (15 dakikada 100 istek)
- Input validation
- SQL injection koruması
- XSS koruması
- Security headers
- Uygulamayı başlatın
- U1, U2 veya U3 ile giriş yapın
- Para transferi yapın
- İşyerine ödeme yapın
- Faturayı bölün
- Borçları ödeyin
- Domain model oluşturun
- Repository ekleyin
- Service logic yazın
- Controller oluşturun
- Route tanımlayın
- Frontend entegrasyonu yapın
MIT License