hMarket Trae ilk versiyon

This commit is contained in:
hOLOlu
2026-02-03 01:22:08 +03:00
commit 2b861156fe
74 changed files with 42127 additions and 0 deletions

225
docs/database-setup.md Normal file
View File

@@ -0,0 +1,225 @@
# 🗄️ Veritabanı Kurulum Talimatları
## MariaDB Kurulumu
### Windows için MariaDB Kurulumu
1. **MariaDB İndirme**
- [MariaDB resmi sitesinden](https://mariadb.org/download/) Windows sürümünü indirin
- MSI installer'ı çalıştırın
2. **Kurulum Adımları**
```
- "Custom" kurulum seçin
- Root şifresini belirleyin (güvenli bir şifre seçin)
- Port: 3306 (varsayılan)
- Character Set: UTF8
```
3. **Servis Kontrolü**
```bash
# Servisin çalışıp çalışmadığını kontrol edin
net start MariaDB
```
### MariaDB Veritabanı Oluşturma
1. **MariaDB'ye Bağlanma**
```bash
mysql -u root -p
```
2. **Veritabanı Oluşturma**
```sql
-- HMarket veritabanını oluştur
CREATE DATABASE hmarket CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- Uygulama için kullanıcı oluştur
CREATE USER 'hmarket_user'@'localhost' IDENTIFIED BY 'güvenli_şifre_buraya';
-- Kullanıcıya yetki ver
GRANT ALL PRIVILEGES ON hmarket.* TO 'hmarket_user'@'localhost';
-- Yetkileri yenile
FLUSH PRIVILEGES;
-- Çıkış
EXIT;
```
## Backend Kurulumu
### 1. Bağımlılıkları Yükle
```bash
cd backend
npm install
```
### 2. Environment Dosyasını Ayarla
```bash
# .env.example dosyasını .env olarak kopyala
copy .env.example .env
# .env dosyasını düzenle ve veritabanı bilgilerini gir
```
### 3. .env Dosyası Örnek Konfigürasyonu
```env
# Veritabanı bağlantısı
DATABASE_URL="mysql://hmarket_user:güvenli_şifre_buraya@localhost:3306/hmarket"
# JWT ayarları
JWT_SECRET=super-gizli-jwt-anahtari-buraya-yazin
JWT_EXPIRES_IN=7d
# Sunucu ayarları
PORT=3001
NODE_ENV=development
CORS_ORIGIN=http://localhost:3000
```
### 4. Prisma Kurulumu ve Veritabanı Migrasyonu
```bash
# Prisma client'ı oluştur
npm run db:generate
# Veritabanı şemasını uygula
npm run db:push
# Başlangıç verilerini yükle
npm run db:seed
```
### 5. Sunucuyu Başlat
```bash
# Geliştirme modu
npm run dev
# Üretim modu
npm start
```
## Veritabanı Şemasııklaması
### Ana Tablolar
#### 1. **users** - Kullanıcılar
- Kullanıcı bilgileri, kimlik doğrulama
- Admin yetkileri
- Profil bilgileri
#### 2. **shopping_lists** - Alışveriş Listeleri
- Liste bilgileri (isim, açıklama, renk)
- Sahiplik bilgisi
- Aktiflik durumu
#### 3. **list_members** - Liste Üyeleri
- Çoklu kullanıcı desteği
- Rol tabanlı yetkilendirme (admin, member, viewer)
- Katılım tarihi
#### 4. **products** - Ürünler
- Ürün bilgileri (isim, barkod, kategori)
- Marka bilgisi
- Resim desteği
#### 5. **list_items** - Liste Öğeleri
- Listedeki ürünler
- Miktar, birim, fiyat bilgileri
- Satın alma durumu
- Öncelik seviyeleri
#### 6. **categories** - Kategoriler
- Ürün kategorileri
- Icon ve renk desteği
- Sıralama
#### 7. **price_history** - Fiyat Geçmişi
- Ürün fiyat takibi
- Mağaza ve konum bilgisi
- Zaman serisi verileri
#### 8. **notifications** - Bildirimler
- Push notification desteği
- Bildirim türleri
- Okunma durumu
#### 9. **activities** - Aktivite Logu
- Gerçek zamanlı güncellemeler için
- Kullanıcı aktiviteleri
- JSON veri desteği
### İlişkiler
```
User (1) -----> (N) ShoppingList (sahiplik)
User (N) <----> (N) ShoppingList (üyelik - ListMember tablosu üzerinden)
ShoppingList (1) -----> (N) ListItem
Product (1) -----> (N) ListItem
Product (1) -----> (N) PriceHistory
Category (1) -----> (N) Product
User (1) -----> (N) Notification
User (1) -----> (N) Activity
ShoppingList (1) -----> (N) Activity
```
## Performans Optimizasyonları
### İndeksler
Prisma otomatik olarak aşağıdaki indeksleri oluşturur:
- Primary key'ler
- Unique constraint'ler
- Foreign key'ler
### Ek Optimizasyonlar
```sql
-- Sık kullanılan sorgular için ek indeksler
CREATE INDEX idx_list_items_list_purchased ON list_items(listId, isPurchased);
CREATE INDEX idx_activities_list_created ON activities(listId, createdAt);
CREATE INDEX idx_price_history_product_created ON price_history(productId, createdAt);
```
## Yedekleme
### Otomatik Yedekleme Script'i
```bash
# Günlük yedekleme
mysqldump -u hmarket_user -p hmarket > backup_$(date +%Y%m%d).sql
# Haftalık tam yedekleme
mysqldump -u hmarket_user -p --all-databases > full_backup_$(date +%Y%m%d).sql
```
## Sorun Giderme
### Yaygın Hatalar
1. **Bağlantı Hatası**
```
Error: P1001: Can't reach database server
```
- MariaDB servisinin çalıştığını kontrol edin
- Bağlantı bilgilerini doğrulayın
2. **Yetki Hatası**
```
Error: Access denied for user
```
- Kullanıcı yetkilerini kontrol edin
- Şifrenin doğru olduğundan emin olun
3. **Şema Hatası**
```
Error: Table doesn't exist
```
- `npm run db:push` komutunu çalıştırın
- Veritabanının doğru oluşturulduğunu kontrol edin
### Log Kontrolü
```bash
# MariaDB loglarını kontrol et
tail -f /var/log/mysql/error.log
# Uygulama loglarını kontrol et
npm run dev
```