225 lines
4.9 KiB
Markdown
225 lines
4.9 KiB
Markdown
# 🗄️ 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
|
||
``` |