Files
hMarket/docs/database-setup.md
2026-02-03 01:22:08 +03:00

4.9 KiB
Raw Blame History

🗄️ Veritabanı Kurulum Talimatları

MariaDB Kurulumu

Windows için MariaDB Kurulumu

  1. MariaDB İndirme

  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ü

    # Servisin çalışıp çalışmadığını kontrol edin
    net start MariaDB
    

MariaDB Veritabanı Oluşturma

  1. MariaDB'ye Bağlanma

    mysql -u root -p
    
  2. Veritabanı Oluşturma

    -- 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

cd backend
npm install

2. Environment Dosyasını Ayarla

# .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

# 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

# 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

# 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

-- 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

# 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ü

# MariaDB loglarını kontrol et
tail -f /var/log/mysql/error.log

# Uygulama loglarını kontrol et
npm run dev