# Changelog - Apper Note

Tüm önemli değişiklikler bu dosyada dokümante edilecektir.

Format: [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
Versiyonlama: [Semantic Versioning](https://semver.org/spec/v2.0.0.html)

## [Unreleased]

### 🐛 Bug Fixes
- **[FIXED]** Panoya kopyalama işlevi çalışmıyor hatası düzeltildi
  - Sorun: `@vite` direktifi comment'te olduğu için JavaScript yüklenmiyordu
  - Çözüm: Global `copyToClipboard` fonksiyonu `app.blade.php` layout'a eklendi
  - Hem Livewire event (`wire:click`) hem onclick desteği
  - `livewire:init` event listener ile Livewire 3 uyumluluğu
  - Clipboard API + fallback (execCommand) desteği
  - Başarılı kopyalama için toast notification
  - Not içeriği butonu için `json_encode()` ile güvenli escape (addslashes + quotes yerine)

### ⚡ Performance
- **[IMPROVED]** Satır kopyalama işlevi Livewire'dan JavaScript'e taşındı
  - Livewire round-trip yerine direkt browser API çağrısı
  - `wire:click` → `onclick` değişikliği
  - Daha hızlı ve responsive kullanıcı deneyimi
  - Backend'den `copyToClipboard()` metodu kaldırıldı (artık gerekli değil)

### Planlanıyor
- Not versiyonlama sistemi
- Zengin metin editörü (TinyMCE)
- Real-time collaboration
- Export/Import özellikleri

---

## [1.0.1] - 2024-11-22

### 🐛 Bug Fixes & UX Improvements

#### Etiket Yönetimi İyileştirmeleri
- **[FIXED]** Ana ekrandaki drag-drop etiket ekleme kaldırıldı (karmaşıklık azaltıldı)
- **[ADDED]** Note modal'a etiket ekleme input'u eklendi
  - Enter tuşu desteği
  - "Ekle" butonu (input dolu olduğunda görünür)
  - 300ms debounce ile performans optimizasyonu
- **[IMPROVED]** `createLabel()` method'u geliştirildi
  - Türkçe karakter normalizasyonu (ğ→g, ş→s, ü→u, vb.)
  - Case-insensitive duplicate kontrolü
  - Direkt `sync()` ile ilişki güncelleme
- **[IMPROVED]** `toggleLabel()` method'u optimize edildi
  - `saveNote()` çağrısı kaldırıldı
  - Direkt `sync()` kullanımı
  - `note-updated` event dispatch'i

#### Event Propagation Düzeltmeleri
- **[FIXED]** Etiket/şirket span'lerine tıklayınca modal açılma sorunu
  - Tüm span'lere `wire:click.stop` eklendi
  - Remove butonlarına da `wire:click.stop` eklendi
- **[IMPROVED]** Not kartlarındaki X işaretleri görünürlüğü
  - SVG stroke renkleri düzeltildi: `stroke-{{ $color }}-700/50`
  - Hover efektleri eklendi: `group-hover:stroke-{{ $color }}-700/75`
  - Tıklanabilir alan genişletildi (`absolute -inset-1`)

#### JavaScript İyileştirmeleri  
- **[REMOVED]** `note-dnd.js`'den label drag-drop kodu kaldırıldı
- **[KEPT]** Company drag-drop aktif kaldı

#### UI/UX İyileştirmeleri
- **[ADDED]** Seçili etiketlerde check_circle ikonu (✓)
- **[IMPROVED]** Empty state mesajı: "Henüz etiket yok. Yukarıdan yeni etiket ekleyebilirsiniz."

#### Dosya Değişiklikleri
- `resources/views/livewire/all-notes.blade.php`
- `resources/views/livewire/note-modal.blade.php`
- `app/Livewire/NoteModal.php`
- `resources/js/note-dnd.js`

---

## [1.0.0] - 2024-11-22

### 🎉 İlk Tam Versiyon

#### ✅ Tamamlanan Görevler

##### Backend
- [x] Laravel 11 kurulumu ve yapılandırması
- [x] Jetstream multi-tenant yapısı
- [x] Livewire 3 migration tamamlandı
- [x] CurrentTeamScope global scope implementasyonu
- [x] Note CRUD işlemleri
- [x] Label ve Company many-to-many ilişkileri
- [x] Drag & Drop API entegrasyonu

##### Frontend
- [x] Dashboard tamamen Livewire ile yeniden yazıldı
- [x] Tüm eski view'lar temizlendi (notes.blade.php, notes-vanilla.blade.php, edit-note.blade.php)
- [x] Alpine.js bağımlılığı minimize edildi
- [x] Vite build sistemi optimizasyonu
- [x] Tailwind CSS safelist konfigürasyonu (dinamik renkler için)
- [x] Toast notification sistemi
- [x] Masonry layout implementasyonu

##### Özellikler
- [x] Not oluşturma, düzenleme, silme
- [x] Not sabitleme (pin/unpin)
- [x] Etiket sistemi
  - [x] Dinamik etiket oluşturma
  - [x] Etiket arama ve filtreleme
  - [x] Drag & drop ile not'a etiket ekleme
- [x] Şirket sistemi
  - [x] Şirket arama ve filtreleme
  - [x] Drag & drop ile not'a şirket ekleme
- [x] Hızlı arama (Ctrl+K)
  - [x] Title'da arama
  - [x] Content'te arama
  - [x] Etiketlerde arama
  - [x] Şirketlerde arama
  - [x] Türkçe karakter normalizasyonu

### 📝 Değişiklikler Detay

#### [2025-11-22 16:00] - Livewire 3 Full Migration
**Dosyalar**: 
- `app/Livewire/AllNotes.php`
- `resources/views/livewire/all-notes.blade.php`

**Değişiklikler**:
- `Livewire.emit()` → `window.Livewire.dispatch()` 
- Event parametreleri object formatına çevrildi
- `#[On('event-name')]` attribute syntax kullanıldı
- Computed properties için `$this->propertyName` syntax'ı düzeltildi

**Neden**: Livewire 3 API uyumluluğu için gerekli

#### [2025-11-22 14:30] - Şirket Arama Livewire'a Taşındı
**Dosyalar**:
- `app/Livewire/AllNotes.php`
- `resources/views/livewire/all-notes.blade.php`

**Değişiklikler**:
- Alpine.js x-data, x-show, x-model direktifleri kaldırıldı
- `$showCompanySearch` property eklendi
- `$companySearchText` property eklendi
- `toggleCompanySearch()` metodu eklendi
- `clearCompanySearch()` metodu eklendi
- `getFilteredCompaniesProperty()` computed property eklendi
- Türkçe karakter normalizasyonu backend'e taşındı

**Neden**: Tüm state yönetimini Livewire'da merkezileştirmek

#### [2025-11-22 12:00] - Dashboard Basitleştirilmesi
**Dosyalar**:
- `resources/views/dashboard.blade.php`
- `routes/web.php`
- `app/Http/Controllers/NoteController.php`

**Değişiklikler**:
- Dashboard view'ı sadece `@livewire('all-notes')` içeriyor
- Eski component include'ları kaldırıldı:
  - `@include('components.new-note')`
  - `@include('components.pinned-notes')`
  - `@include('components.all-notes')`
  - `@include('components.empty-plant')`
- Notification component tekrarı kaldırıldı
- Vanilla JS route'ları ve metodları silindi:
  - `/notes` route
  - `/notes-vanilla` route
  - API endpoint'leri (/api/notes, /api/labels, vb.)
  - `NoteController::notes()`
  - `NoteController::notesVanilla()`
  - `NoteController::getNotes()`
  - `NoteController::getLabels()`
  - `NoteController::getCompanies()`
  - `NoteController::pinNote()`
  - `NoteController::deleteNote()`
  - API metodları

**Neden**: Kod tekrarını önlemek, single source of truth

#### [2025-11-22 10:00] - Vite Konfigürasyonu
**Dosyalar**:
- `vite.config.js`
- `tailwind.config.js`
- `resources/views/layouts/app.blade.php`

**Değişiklikler**:
- `@vite` directive aktif edildi
- CDN Tailwind/Alpine kaldırıldı
- Safelist pattern'leri eklendi (18 renk paleti)
- TinyMCE manualChunks konfigürasyonu kaldırıldı

**Neden**: Modern build sistemi, daha hızlı yükleme

### 🐛 Düzeltilen Hatalar

#### Storage İzin Hatası
**Hata**: `file_put_contents(): Failed to open stream: Permission denied`
**Çözüm**: 
```bash
chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache
```

#### Undefined Variable $filteredCompanies
**Hata**: Blade template'de computed property'ye erişim hatası
**Çözüm**: `$filteredCompanies` → `$this->filteredCompanies`

#### MySQL Authentication Plugin Hatası
**Hata**: `SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client`
**Çözüm**: `config/database.php` dosyasına PDO options eklendi

#### Session/Cookie Domain Hatası
**Hata**: Login butonunda çalışmama
**Çözüm**: 
- `SESSION_DOMAIN` → `null` (localhost için)
- `SESSION_SECURE_COOKIE` → `false` (localhost için)

#### Alpine.js Duplicate Instance
**Hata**: Console'da Alpine.js duplicate uyarısı
**Çözüm**: 
- Manuel `Alpine.start()` kaldırıldı
- Livewire'ın Alpine instance'ı kullanıldı
- `livewire:init` event ile plugin yükleme

### 🔧 Teknik Değişiklikler

#### Database Config
**Dosya**: `config/database.php`
```php
'options' => [
    PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
    PDO::MYSQL_ATTR_LOCAL_INFILE => true,
]
```

#### Tailwind Safelist
**Dosya**: `tailwind.config.js`
```javascript
safelist: [
  {
    pattern: /bg-(slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose)-(50|100|200|300|400|500|600|700|800|900)/,
  },
  // ... diğer pattern'ler
]
```

#### Livewire Event Handling
**Dosya**: `resources/js/note-dnd.js`
```javascript
// Eski (Livewire 2)
Livewire.emit('add-label-to-note', noteId, labelId);

// Yeni (Livewire 3)
window.Livewire.dispatch('add-label-to-note', {
    noteId: noteId,
    labelId: labelId
});
```

### 📊 Performans

#### Build Size
- **CSS**: 992.22 KB (gzip: 131.19 KB)
- **JS**: 45.80 KB (gzip: 17.31 KB)
- **Total**: 1.03 MB (gzip: 148.5 KB)

#### Build Time
- **Development**: ~1-2 saniye
- **Production**: ~3-4 saniye

### 🚀 Deployment

#### Sunucu Bilgileri
- **Host**: Contabo
- **IP**: 167.86.89.222
- **Domain**: note.apper.com.tr
- **Path**: /var/www/apper/note.apper
- **Web Server**: Nginx

#### Deployment Adımları
1. Local'de değişiklik yap
2. `npm run build` çalıştır
3. SFTP ile dosyaları yükle
4. SSH ile cache temizle
5. Production cache oluştur

### 📚 Dokümantasyon

Eklenen Dokümantasyon:
- `DEPLOYMENT.md` - Deployment talimatları
- `PROJECT-STRUCTURE.md` - Proje yapısı detayları
- `.github/copilot-instructions.md` - GitHub Copilot talimatları
- `CHANGELOG.md` - Bu dosya
- `FIX-PERMISSIONS.txt` - Storage izin düzeltme kılavuzu
- `fix-permissions.sh` - Otomatik izin düzeltme script'i
- `deploy-commands.sh` - Deployment komutları script'i

### 🎯 Notlar

#### Kullanılan Teknolojiler
- Laravel 11.x
- Livewire 3.x
- Alpine.js 3.15.2 (minimal)
- Tailwind CSS 3.1.0
- Vite 5.3.5
- PHP 8.1+
- MySQL 8.0+

#### Önemli Kararlar
1. **Tam Livewire**: Vanilla JS ve eski component'ler kaldırıldı
2. **Minimal Alpine**: Sadece toast notifications ve focus plugin
3. **Dynamic Colors**: Safelist ile tüm Tailwind renkleri kullanılabilir
4. **Computed Properties**: Filtreleme işlemleri backend'de
5. **Event-Driven**: Livewire events ile component iletişimi

---

## Versiyonlama Notları

### [1.0.0] Neden?
Bu versiyon, projenin ilk stabil ve production-ready hali. Tüm temel özellikler tamamlandı, Livewire 3 migration yapıldı ve production'da test edildi.

### Gelecek Versiyonlar
- **1.1.0**: Not versiyonlama, zengin metin editörü
- **1.2.0**: Real-time collaboration
- **2.0.0**: API v2, mobile app desteği
