Modern bir giyim e-ticaret uygulamasi. NestJS + Prisma backend, Next.js frontend ve Docker Compose ile tam entegre calisir.
| Katman | Teknoloji |
|---|---|
| Backend | NestJS 10, Prisma 5, PostgreSQL 15 |
| Frontend | Next.js 14 (App Router), React 18, Tailwind CSS |
| Auth | JWT, Passport.js, bcrypt |
| Altyapi | Docker, Docker Compose, Redis |
- Rate limiting (IP bazli, brute-force koruması)
- Refresh token rotation (eski tokenlar gecersiz)
- HMAC-SHA256 webhook signature dogrulamasi
- Magic bytes ile MIME spoof koruması
- Helmet ile HTTP guvenlik header'lari
- XSS sanitization
- CSRF koruması
- JWT tabanli kimlik dogrulama (Access + Refresh Token)
- Kullanici kaydi ve girisi
- Profil yonetimi
- Adres ekleme/duzenleme
- Urun listeleme ve filtreleme
- Urun detay sayfasi
- Kategoriye gore filtreleme (hiyerarsik)
- Varyant secimi (beden, renk)
- Stok takibi
- Veritabani tabanli sepet (oturum acinca korunur)
- Urun ekleme/cikarma
- Miktar guncelleme
- Varyant bazli sepet
- Checkout islemi
- Siparis olusturma
- Siparis gecmisi
- Siparis durumu takibi
- Fake odeme saglayici (test icin)
- Webhook endpoint
- Odeme simulasyonu
- Dashboard (istatistikler, son siparisler)
- Urun CRUD islemleri
- Varyant yonetimi
- Stok guncelleme
- Kategori yonetimi
- Siparis listeleme ve durum guncelleme
- Urun fotografi yukleme
- Dark mode destegi (sistem tercihi + manuel)
- Responsive tasarim
- Loading state'leri
- Toast bildirimleri
eTicaret/
|-- backend/
| |-- prisma/
| | |-- schema.prisma # Veritabani semasi
| | |-- migrations/ # Veritabani migration'lari
| | +-- seed.js # Ornek veri
| |-- src/
| | |-- auth/ # Kimlik dogrulama modulu
| | |-- users/ # Kullanici modulu
| | |-- categories/ # Kategori modulu
| | |-- products/ # Urun modulu
| | |-- cart/ # Sepet modulu
| | |-- orders/ # Siparis modulu
| | |-- payments/ # Odeme modulu
| | |-- upload/ # Dosya yukleme modulu
| | |-- admin/ # Admin modulu
| | +-- prisma/ # Prisma servisi
| +-- Dockerfile
|-- frontend/
| |-- src/
| | |-- app/ # Next.js sayfalari
| | |-- components/ # React bilesenleri
| | |-- contexts/ # Context providers
| | +-- lib/ # Yardimci fonksiyonlar
| +-- Dockerfile
|-- docker-compose.yml
|-- .gitignore
+-- README.md
- Docker ve Docker Compose
- Node.js 20+ (lokal gelistirme icin)
# Projeyi klonlayin
git clone <repo-url>
cd eTicaret
# .env dosyasini olusturun
cp .env.example .env
# Docker Compose ile baslatin
docker compose up -d
# Loglari izleyin
docker compose logs -f# Backend
cd backend
npm install
cp .env.example .env
npm run prisma:generate
npm run prisma:migrate
npm run start:dev
# Frontend (yeni terminal)
cd frontend
npm install
npm run dev| Servis | URL | Aciklama |
|---|---|---|
| Frontend | http://localhost:3000 | Web uygulamasi |
| Admin Panel | http://localhost:3000/admin | Yonetim paneli |
| API | http://localhost:3001 | Backend API |
| PostgreSQL | localhost:5432 | Veritabani |
| Redis | localhost:6379 | Cache servisi |
| Rol | Sifre | |
|---|---|---|
| Admin | admin@example.com | Admin123! |
| Method | Endpoint | Aciklama |
|---|---|---|
| POST | /api/auth/register | Kullanici kaydi |
| POST | /api/auth/login | Giris |
| POST | /api/auth/refresh | Token yenileme |
| POST | /api/auth/logout | Cikis |
| GET | /api/auth/me | Mevcut kullanici |
| Method | Endpoint | Aciklama |
|---|---|---|
| GET | /api/products | Urun listesi |
| GET | /api/products/:slug | Urun detayi |
| GET | /api/products?categoryId=X | Kategoriye gore |
| Method | Endpoint | Aciklama |
|---|---|---|
| GET | /api/categories | Kategori listesi |
| GET | /api/categories/:slug | Kategori detayi |
| Method | Endpoint | Aciklama |
|---|---|---|
| GET | /api/cart | Sepeti getir |
| POST | /api/cart/add | Sepete ekle |
| PUT | /api/cart/item/:id | Miktar guncelle |
| DELETE | /api/cart/item/:id | Sepetten cikar |
| DELETE | /api/cart/clear | Sepeti temizle |
| Method | Endpoint | Aciklama |
|---|---|---|
| GET | /api/orders | Siparislerim |
| GET | /api/orders/:id | Siparis detayi |
| POST | /api/orders | Siparis olustur |
| Method | Endpoint | Aciklama |
|---|---|---|
| POST | /api/payments/initiate/:orderId | Odeme baslat |
| POST | /api/payments/webhook | Webhook (provider) |
| GET | /api/payments/status/:orderId | Odeme durumu |
| Method | Endpoint | Aciklama |
|---|---|---|
| GET | /api/admin/stats | Dashboard istatistikleri |
| GET | /api/admin/products | Tum urunler |
| POST | /api/admin/products | Urun ekle |
| PUT | /api/admin/products/:id | Urun guncelle |
| DELETE | /api/admin/products/:id | Urun sil |
| POST | /api/admin/products/:id/variants | Varyant ekle |
| PUT | /api/admin/variants/:id | Varyant guncelle |
| DELETE | /api/admin/variants/:id | Varyant sil |
| GET | /api/admin/orders | Tum siparisler |
| PUT | /api/admin/orders/:id/status | Siparis durumu |
| GET | /api/admin/categories | Tum kategoriler |
| POST | /api/admin/categories | Kategori ekle |
| PUT | /api/admin/categories/:id | Kategori guncelle |
| DELETE | /api/admin/categories/:id | Kategori sil |
User ----------+-------- Address
|
+-------- Cart --------- CartItem --------+
| |
+-------- Order -------- OrderItem -------+------ ProductVariant
| | |
+-- Payment | Product
| |
+------ ProductImage
|
Category
- User: Kullanici bilgileri, rol (USER/ADMIN)
- Address: Teslimat adresleri
- Category: Urun kategorileri (hiyerarsik, parent-child)
- Product: Urun bilgileri
- ProductVariant: Beden, renk, fiyat, stok
- ProductImage: Urun gorselleri
- Cart: Kullanici sepeti
- CartItem: Sepet urunleri
- Order: Siparisler
- OrderItem: Siparis kalemleri
- Payment: Odeme kayitlari
Asagidaki degiskenler .env dosyasinda tanimlanmalidir:
DATABASE_URL=postgresql://postgres:postgres@db:5432/ecommerce
JWT_SECRET=your-super-secret-jwt-key
JWT_REFRESH_SECRET=your-super-secret-refresh-key
JWT_EXPIRATION=15m
JWT_REFRESH_EXPIRATION=7d
PORT=3001
NEXT_PUBLIC_API_URL=http://localhost:3001
- Rate limiting (IP bazli)
- Refresh token rotation
- Webhook HMAC dogrulamasi
- MIME spoof koruması (magic bytes)
- Helmet HTTP headers
- Input validation
- HTTPS zorunlu kilma
- CORS production ayarlari
# Güçlü, benzersiz secret'lar kullanin
JWT_SECRET=<min-32-karakter-rastgele>
JWT_REFRESH_SECRET=<min-32-karakter-rastgele>
WEBHOOK_SECRET=<min-32-karakter-rastgele>
# Production'da debug kapatın
NODE_ENV=production- Rate limiting
- Dark mode
- Guvenlik sertlestirme
- Urun arama (Elasticsearch)
- Redis cache entegrasyonu
- Gercek odeme entegrasyonu (Stripe/iyzico)
- E-posta bildirimleri
- Urun yorumlari ve puanlama
- Favorilere ekleme
- Kupon sistemi
- Coklu dil destegi
- PWA destegi
MIT
Son Guncelleme: Ocak 2026