# Dijital Rehber - Dijital Rehber Uygulaması

## Proje Genel Bakış
Dijital Rehber, Türkiye'deki müzeler ve tarihi yerler için dijital rehber uygulamasıdır. Uygulama, sesli anlatım, yönlendirme ve her konum için detaylı bilgi ile dijital rehberlik sağlar. Kurulum gerektirmeden QR kod aracılığıyla erişilecek şekilde tasarlanmıştır ve bu sayede herhangi bir cihazdan erişilebilir.

## Teknoloji Yığını
- **Arka Uç Çerçevesi**: Laravel 10
- **Ön Uç**: Tailwind CSS, JavaScript
- **Derleme Aracı**: Vite
- **Veritabanı**: MySQL (Laravel kurallarına göre varsayılan)
- **PHP Sürümü**: ^8.1

## Proje Yapısı
```
dijitalrehber.akildoluisler.com/
├── app/                    # Uygulama çekirdeği
│   ├── Console/            # Artisan komutları
│   ├── Exceptions/         # Hata yönetimi
│   ├── Http/               # Denetleyiciler, ara yazılımlar
│   ├── Models/             # Eloquent modelleri
│   └── Providers/          # Servis sağlayıcılar
├── bootstrap/              # Çerçeve başlatma
├── config/                 # Yapılandırma dosyaları
├── database/               # Geçişler, tohumlar, fabrikalar
├── public/                 # Genel varlıklar ve giriş noktası
├── resources/              # Görünümler, CSS, JS
├── routes/                 # Rota tanımlamaları
├── storage/                # Derlenmiş görünümler, önbellek, günlükler
├── tests/                  # Test dosyaları
└── vendor/                 # Composer bağımlılıkları
```

## Ana Bağımlılıklar
- **Laravel Framework**: Temel çerçeve
- **Guzzle**: HTTP istemcisi
- **getID3**: Ses meta verisi çıkarma
- **Laravel Sanctum**: API kimlik doğrulama
- **Laravel Tinker**: Laravel REPL

## Ön Uç Bağımlılıkları
- **Vite**: Derleme aracı
- **Tailwind CSS**: CSS çerçevesi
- **Axios**: HTTP istemcisi

## Veritabanı Şeması
Uygulama aşağıdaki ana modelleri ve tabloları kullanır:

### Temel Modeller
1. **User** - Standart Laravel kullanıcı modeli
2. **City** - Uygulamadaki şehirleri temsil eder
3. **District** - Şehirler içindeki ilçeleri temsil eder
4. **Place** - Müzeleri/tarihi yerleri temsil eder
5. **Section** - Bir yer içindeki bölümleri temsil eder (örn. odalar, salonlar)
6. **Artifact** - Bölümler içindeki bireysel eserleri/nitelikli nesneleri temsil eder

### İlişkiler
- `City` → `District` (bire çok)
- `City` → `Place` (bire çok)
- `District` → `Place` (bire çok)
- `Place` → `Section` (bire çok)
- `Place` → `Artifact` (bire çok)
- `Section` → `Artifact` (bire çok)
- `Section` → `Place` (çoka bire)

## Yönergeler
Uygulamanın aşağıdaki ana yönergeleri vardır:
- `/` - Ana sayfa (ana giriş sayfası)
- `/app/artifacts/index/{id}` - Bir bölümdeki eserleri listele
- `/app/artifacts/show/{placeId}/{id}` - Belirli bir eserin detaylarını göster
- `/app/places/index/{id}` - Bir yerdeki bölümleri listele
- `/app/places/show/{placeId}/{id}` - Bir yerin detaylarını göster

## Özellikler
1. **QR Kod Erişimi**: Kullanıcılar uygulamayı yüklemek zorunda kalmadan QR kodları tarayarak uygulamaya erişebilirler
2. **Çok Seviyeli Gezinme**: Şehirler → İlçeler → Yerler → Bölümler → Eserler
3. **Sesli Anlatım**: Her eserle ilişkili sesli içerik vardır
4. **İlerleme Takibi**: Tamamlanma yüzdesini ve tahmini kalan süreyi gösterir
5. **Görüntü Desteği**: Birden fazla görüntü formatını destekler (.jpg, .png, .webp)
6. **Duyarlı Tasarım**: Çeşitli cihaz boyutlarında çalışır

## Ana Denetleyiciler
1. **HomeController** - Ana giriş sayfasını işler
2. **PlaceController** - Yer/bölüm görünümlerini yönetir
3. **ArtifactController** - Eser görünümlerini ve ses/görüntü işleme işlevlerini yönetir

## Görünüm Yapısı
- `resources/views/`
  - `home.blade.php` - Ana giriş sayfası
  - `layouts/` - Şablon kalıpları
  - `app/` - Uygulamaya özel görünümler
    - `artifacts/` - Eserle ilgili görünümler
    - `places/` - Yer/bölüm görünümleri
    - `layouts/` - Uygulama düzeni
    - `components/` - Yeniden kullanılabilir bileşenler

## Özel Özellikler
- **Ses Oynatıcı**: Geri sarma/ileri sarma işlevselliğine sahip yerleşik ses oynatıcı
- **İlerleme Takibi**: Tamamlanma yüzdesini gösteren görsel ilerleme çubuğu
- **Gezinme Kontrolleri**: Eserler arasında kolay gezinme
- **Çok Biçimli Görüntü Desteği**: Sistem .jpg, .png, .webp ve .jpeg görüntü biçimlerini işleyebilir
- **Önbellekleme**: 24 saatlik önbellekleme ile ses süresi hesaplama

## Dosya Organizasyonu
Uygulama kullanıcı tarafından yüklenen içeriği aşağıdaki revize edilmiş yapıda saklar:
```
public/
└── uploads/
    └── venues/                     ← Tüm mekanlar burada
        └── bursa/                  ← İl veya bölge adı (slug)
            ├── ulucami/            ← Mekan slug'ı
            │   ├── exhibits/       ← Eserler
            │   │   ├── 1/          ← Eser ID'si (veya slug)
            │   │   │   ├── img/
            │   │   │   │   ├── small/
            │   │   │   │   ├── medium/
            │   │   │   │   └── large/     ← İsteğe bağlı
            │   │   │   ├── audio/
            │   │   │   │   └── tr.mp3     ← Dil desteği için
            │   │   │   └── docs/
            │   │   │       └── tr.pdf
            │   │   └── 2/
            │   │       └── ...
            │   ├── logo.png        ← Mekan logosu / kapak görseli
            │   ├── map.jpg         ← Harita veya plan
            │   └── meta.json       ← Opsiyonel: mekan açıklaması, koordinat vb.
            └── panorama1453/
                └── exhibits/
                    └── ...
```

## Özelleştirme
Uygulama, tercihe göre dosya varlığını kontrol eden Artifact modelinde dinamik resim yolu yöntemi uygulanarak birden fazla resim formatını (.png, .jpg, .webp, .jpeg) desteklemek için geliştirilmiştir.

## Geliştirme Araçları
- Komut satırı işlemleri için Laravel Artisan
- Varlık oluşturma için Vite
- Test için PHPUnit
- Kod biçimlendirme için Laravel Pint

## Dağıtım
Uygulama, `.env` dosyalarıyla ortam yapılandırması yapan standart Laravel dağıtım uygulamalarını takip eder ve bağımlılık yönetimi için Composer kullanır.