# 🗄️ 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ı Açı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 ```