> ## Documentation Index
> Fetch the complete documentation index at: https://docs.crafter.net.tr/llms.txt
> Use this file to discover all available pages before exploring further.

# Geliştirme

> Değişiklikleri yerel ortamda önizleyin ve API ile entegrasyon sağlayın.

<Info>
  **Ön Koşul**: Lütfen devam etmeden önce Node.js'in güncel bir sürümünün (v18 veya üstü) yüklü olduğundan emin olun.
</Info>

Crafter projenizi yerel makinenizde çalıştırmak ve geliştirmek için bu adımları izleyin.

**Adım 1**: Proje klasörünüze gidin (`.env.local` dosyasının bulunduğu yer) ve aşağıdaki komutu çalıştırın:

```bash theme={null}
npm run dev
```

Yerel geliştirme sunucusu başlatıldığında, web sitenizin bir önizlemesi `http://localhost:3000` adresinde erişilebilir olacaktır.

### Özel Port Kullanımı

Varsayılan olarak, Next.js 3000 portunu kullanır. Farklı bir port kullanmak için `--port` bayrağını ekleyebilirsiniz. Örneğin, projeyi 3333 portunda çalıştırmak için şu komutu kullanın:

```bash theme={null}
npm run dev -- --port 3333
```

Eğer belirlediğiniz port kullanımda ise, sistem otomatik olarak bir sonraki uygun portu deneyecektir.

## API Entegrasyonu ve Geliştirme

Crafter, sunucu verilerinizi yönetmek ve özel entegrasyonlar oluşturmak için güçlü bir API sunar. Tüm API endpoint'lerini ve modellerini Swagger arayüzü üzerinden inceleyebilirsiniz.

<Card title="Detaylı API Dokümantasyonu" icon="code" href="https://dev.crafter.net.tr">
  Tüm API endpoint'lerini, gerekli parametreleri ve yanıt modellerini görmek için Swagger arayüzünü ziyaret edin.
</Card>

### Önemli: Origin Header Zorunluluğu

Güvenlik nedeniyle, Crafter API'sine gönderilen tüm isteklerde `Origin` başlığının (header) bulunması **zorunludur**. Bu başlığın değeri, isteği yapan web sitesinin adresi olmalıdır. Aksi takdirde, isteğiniz API tarafından reddedilecektir.

<Warning>
  API'ye istek gönderirken `Origin` başlığına, [Crafter Yönetim Paneli](https://crafter.net.tr)'nde kayıtlı olan `website_url` değerinizi eklemeyi unutmayın.
</Warning>

### Örnek 1: Site Bilgilerini Çekme

Aşağıda `GET` metodu ile site yapılandırma bilgilerini çeken örnek bir API isteği görebilirsiniz:

```javascript theme={null}
// Örnek: Site yapılandırma bilgilerini çekme isteği
const websiteId = process.env.NEXT_PUBLIC_WEBSITE_ID;
const websiteUrl = 'https://sitenizinadresi.com'; // Kendi site adresiniz

fetch(`https://api.crafter.net.tr/website/get`, {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Origin': websiteUrl 
  },
  body: JSON.stringify({
    id: websiteId
  })
})
.then(response => response.json())
.then(data => {
  console.log('Site Bilgileri:', data);
})
.catch(error => {
  console.error('API Hatası:', error);
});
```

### Örnek 2: Lisans Anahtarı Doğrulama

Aşağıda `POST` metodu ile lisans anahtarının geçerliliğini kontrol eden örnek bir API isteği görebilirsiniz. Bu endpoint, `swagger` üzerinden de görüldüğü gibi, gönderilen anahtarın doğruluğunu teyit eder.

```javascript theme={null}
// Örnek: Lisans anahtarını doğrulama isteği
const licenceKey = process.env.NEXT_PUBLIC_LICENCE_KEY;
const websiteUrl = 'https://sitenizinadresi.com'; // Kendi site adresiniz

fetch('https://api.crafter.net.tr/v1/website/key/verify', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Origin': websiteUrl
  },
  body: JSON.stringify({
    key: licenceKey
  })
})
.then(response => response.json())
.then(data => {
  if (data.success) {
    console.log('Lisans anahtarı başarıyla doğrulandı.');
  } else {
    console.log('Lisans doğrulama hatası:', data.message);
  }
})
.catch(error => {
  console.error('API Hatası:', error);
});
```

## Sorun Giderme

<AccordionGroup>
  <Accordion title="`npm run dev` komutu çalışmıyor veya hata veriyor">
    Bu durum genellikle eksik veya eski paketlerden kaynaklanır. Aşağıdaki adımları deneyin:

    1. `node_modules` klasörünü ve `package-lock.json` dosyasını silin.
    2. Node.js sürümünüzün güncel olduğundan emin olun (v18+).
    3. Paketleri yeniden yükleyin: `npm install`
    4. Projeyi tekrar başlatın: `npm run dev`
  </Accordion>

  <Accordion title="API'den 'Origin not allowed' hatası alıyorum">
    Bu hata, isteğinizdeki `Origin` başlığının eksik veya yanlış olduğunu gösterir.

    * İsteğinizin `headers` bölümünde `Origin` başlığının bulunduğundan emin olun.
    * `Origin` başlığının değerinin, Crafter panelinde kayıtlı olan site adresinizle birebir aynı olduğunu kontrol edin.
  </Accordion>
</AccordionGroup>
