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

# Zamanlanmis Gorev

> Organizasyonunuzda belirli araliklarla calisan zamanlanmis otomasyon betikleri.

### Zamanlanmis Gorev (Cron Job)

Zamanlanmis Gorevler, duzenliaraliklar da JavaScript kodu calistiran otomasyon betikleridir. Organizasyonlarin veri senkronizasyonu, hesaplamalar, bildirimler ve dis sistemlerle entegrasyonlari otomatiklestirmesini saglar.

#### Bir Bakista

* JavaScript kodu guvenli sandbox ortaminda calisir
* Yapilandirabilir zamanlamalar: 5dk, 10dk, 15dk, 30dk, 1s, 2s, 4s, 6s, 12s, gunluk, haftalik
* Organizasyon verilerine, veritabani islemlerine, HTTP istemcisine ve e-postaya erisim
* Ortam degiskenleri ve sifrelenmis gizli deger destegi
* Maksimum 5 dakika calisma suresi
* Test icin manuel tetikleme secenegi

#### Veri Yapisi

```typescript theme={null}
// apps/azalt/src/server/db/types/cron-job.ts (basitlestirilmis)
interface CronJob {
  id: string;
  name: string;
  description: string | null;
  code: string;                    // Calistirilacak JavaScript kodu
  schedule: CronJobSchedule;       // Calisma sikligi
  isActive: boolean;               // Calismayi etkinlestir/devre disi birak
  organizationId: string;
  createdById: string;
  lastExecutionAt: Date | null;    // Son calisma zamani
  nextExecutionAt: Date | null;    // Sonraki planlanmis calisma
  metadata: JsonValue | null;      // Ozel meta veriler
}

type CronJobSchedule =
  | "5m"   // Her 5 dakikada
  | "10m"  // Her 10 dakikada
  | "15m"  // Her 15 dakikada
  | "30m"  // Her 30 dakikada
  | "1h"   // Her saat
  | "2h"   // Her 2 saatte
  | "4h"   // Her 4 saatte
  | "6h"   // Her 6 saatte
  | "12h"  // Her 12 saatte
  | "1d"   // Gunluk
  | "1w";  // Haftalik
```

#### Sandbox Ortami

JavaScript kodunuz bu API'lere erisimi olan izole bir sandbox'ta calisir:

| API            | Aciklama                                                        |
| -------------- | --------------------------------------------------------------- |
| `organization` | Mevcut organizasyon verileri ve lokasyonlar                     |
| `db`           | Veritabani islemleri (RLS ile organizasyona kapsamli)           |
| `fetch`        | Harici API cagrilari icin HTTP istemcisi                        |
| `email`        | Bildirim e-postalari gonderme                                   |
| `env`          | Ortam degiskenleri ("variable" tipli CronJobVariable'lar)       |
| `secrets`      | Sifrelenmis gizli degerler ("secret" tipli CronJobVariable'lar) |
| `console`      | Gunlukleme (calisma gunluklerinde yakalanir)                    |

#### Ornek Kod

```javascript theme={null}
// Harici API'den veri senkronizasyonu
const response = await fetch('https://api.example.com/data', {
  headers: { 'Authorization': `Bearer ${secrets.API_KEY}` }
});

const data = await response.json();
console.log(`${data.items.length} oge cekildi`);

// Verileri isle ve kaydet
for (const item of data.items) {
  await db.insertInto('CustomTable')
    .values({ externalId: item.id, value: item.value })
    .execute();
}

// Bildirim gonder
await email.send({
  to: env.ADMIN_EMAIL,
  subject: 'Veri Senkronizasyonu Tamamlandi',
  body: `${data.items.length} oge basariyla senkronize edildi.`
});

return { synced: data.items.length };
```

#### Guvenlik ve Izinler

* **Olusturma/Guncelleme/Silme**: Sahip rolu gerekli
* **Goruntuleme/Calistirma**: Herhangi bir organizasyon uyesi
* **Sandbox**: Kod, dosya sistemi erisimi olmadan izole VM'de calisir
* **RLS**: Veritabani sorgulari satir duzeyi guvenlik politikalarina uyar
* **Gizli Degerler**: Organizasyonun sifreleme anahtari kullanilarak duragan halde sifrelenir
* **Zaman Asimi**: 5 dakika sonra otomatik sonlandirma

#### Calisma Akisi

1. Zamanlayici `nextExecutionAt <= simdi` ve `isActive = true` olan gorevleri bulur
2. Gorev kodu guvenli sandbox'ta calistirilir
3. Calisma sonucu (basari/basarisizlik, gunlukler, cikti) kaydedilir
4. `nextExecutionAt` zamanlamaya gore hesaplanir
5. `lastExecutionAt` guncellenir

#### API Notlari

* `cronJob.list`: Calisma istatistikleri ve degisken sayilariyla gorevleri dondurur
* `cronJob.get`: Kod ve son calismalar dahil tam gorev detaylarini dondurur
* `cronJob.create`: Yeni gorev olusturur (guvenlik icin pasif baslar)
* `cronJob.execute`: Calismayi manuel tetikler (test icin kullanisli)
* `cronJob.toggle`: Zamanlanmis calismayi etkinlestir/devre disi birak

#### Ilgili Kavramlar

* CronJobVariable - Gorevler icin ortam degiskenleri ve gizli degerler
* CronJobExecution - Calisma gecmisi ve gunlukler
