Ana içeriğe atla

Documentation Index

Fetch the complete documentation index at: https://ziva.zeleza.ru/llms.txt

Use this file to discover all available pages before exploring further.

Temel Kullanım Örnekleri

Bu sayfa Ziva ile TUI uygulamaları oluşturmanın pratik örneklerini içerir. Tüm örnekler çalıştırılmaya hazırdır ve kütüphanenin ana özelliklerini gösterir.

Örnek 1: Basit Onay

Onay görevi ile temel örnek:
package main

import (
    "fmt"
    "log"
    "github.com/qzeleza/ziva"
)

func main() {
    // Onay görevi oluştur
    confirm := ziva.NewYesNoTask(
        "Eylem Onayı",
        "Tüm geçici dosyalar silinsin mi?",
    )

    // Kuyruk oluştur ve görev ekle
    queue := ziva.NewQueue("Sistem Temizliği")
    queue.AddTasks(confirm)

    // Çalıştır
    if err := queue.Run(); err != nil {
        log.Fatal(err)
    }

    // Sonucu işle
    if confirm.IsYes() {
        fmt.Println("🗑️  Geçici dosyalar silindi")
    } else {
        fmt.Println("❌ İşlem iptal edildi")
    }
}

Örnek 2: Listeden Seçim

Listeden tek seçenek seçme örneği:
package main

import (
    "fmt"
    "log"
    "github.com/qzeleza/ziva"
)

func main() {
    // Açıklamalı seçenekler
    environments := []string{
        "dev||Geliştirme ortamı - yerel makine",
        "staging||Test ortamı - QA için",
        "production||Canlı ortam - kullanıcılar",
    }

    // Seçim görevi oluştur
    envTask := ziva.NewSingleSelectTask(
        "Dağıtım Ortamı Seçimi",
        environments,
    ).WithDefaultItem("staging")

    // Kuyruğu yapılandır ve çalıştır
    queue := ziva.NewQueue("Uygulama Dağıtımı")
    queue.WithAppName("DeployTool")
    queue.AddTasks(envTask)

    if err := queue.Run(); err != nil {
        log.Fatal(err)
    }

    // Sonucu al
    selected := envTask.GetSelected()
    fmt.Printf("🚀 Dağıtım ortamı: %s\n", selected)
}

Örnek 3: Çoklu Seçim

Birden fazla bileşen seçme örneği:
package main

import (
    "fmt"
    "log"
    "strings"
    "github.com/qzeleza/ziva"
)

func main() {
    // Kurulacak bileşenler
    components := []string{
        "web||Web sunucusu",
        "api||REST API",
        "db||Veritabanı",
        "cache||Önbellek",
        "monitoring||İzleme",
        "backup||Yedekleme",
    }

    // Çoklu seçim görevi oluştur
    compTask := ziva.NewMultiSelectTask(
        "Kurulacak bileşenleri seçin",
        components,
    ).WithSelectAll("Tümünü kur").
      WithDefaultItems([]string{"web", "api"})

    queue := ziva.NewQueue("Sistem Kurulumu")
    queue.AddTasks(compTask)

    if err := queue.Run(); err != nil {
        log.Fatal(err)
    }

    // Seçilen bileşenleri göster
    selected := compTask.GetSelected()
    if len(selected) > 0 {
        fmt.Printf("📦 Kurulacaklar: %s\n",
            strings.Join(selected, ", "))
    } else {
        fmt.Println("❌ Hiçbir bileşen seçilmedi")
    }
}

Örnek 4: Doğrulama ile Giriş

Doğrulama ile kullanıcı verisi toplama örneği:
package main

import (
    "fmt"
    "log"
    "github.com/qzeleza/ziva"
)

func main() {
    v := ziva.DefaultValidators

    // Doğrulama ile giriş alanları oluştur
    name := ziva.NewInputTask("İsim", "Adınızı girin:").
        WithValidator(v.Required())

    email := ziva.NewInputTask("Email", "Email adresinizi girin:").
        WithInputType(ziva.InputTypeEmail).
        WithValidator(v.Email())

    website := ziva.NewInputTask("Site", "Website URL (opsiyonel):").
        WithValidator(v.OptionalURL())

    // Kuyruk oluştur
    queue := ziva.NewQueue("Kullanıcı Kaydı")
    queue.WithAppName("UserReg")
    queue.AddTasks(name, email, website)

    if err := queue.Run(); err != nil {
        log.Fatal(err)
    }

    // Toplanan bilgileri göster
    fmt.Println("\n✅ Kayıt tamamlandı:")
    fmt.Printf("İsim: %s\n", name.GetValue())
    fmt.Printf("Email: %s\n", email.GetValue())
    if website.GetValue() != "" {
        fmt.Printf("Website: %s\n", website.GetValue())
    }
}

Örnek 5: Fonksiyonel Görev

Uzun süren işlem yürütme örneği:
package main

import (
    "log"
    "math/rand"
    "time"
    "github.com/qzeleza/ziva"
)

func main() {
    // Rapor verileri
    var stats struct {
        FilesProcessed int
        Errors         int
        Duration       time.Duration
    }

    // Fonksiyonel görev oluştur
    processTask := ziva.NewFuncTask(
        "Dosya İşleme",
        func() error {
            start := time.Now()

            // Dosya işleme simülasyonu
            for i := 0; i < 100; i++ {
                time.Sleep(50 * time.Millisecond)
                stats.FilesProcessed++

                // Rastgele hatalar
                if rand.Intn(20) == 0 {
                    stats.Errors++
                }
            }

            stats.Duration = time.Since(start)
            return nil
        },
        // Sonuç özeti fonksiyonu
        ziva.WithSummaryFunction(func() []string {
            return []string{
                fmt.Sprintf("İşlenen dosya: %d", stats.FilesProcessed),
                fmt.Sprintf("Hata: %d", stats.Errors),
                fmt.Sprintf("Süre: %v", stats.Duration.Round(time.Millisecond)),
            }
        }),
    )

    queue := ziva.NewQueue("Toplu İşlem")
    queue.AddTasks(processTask)

    if err := queue.Run(); err != nil {
        log.Fatal(err)
    }
}

Örnek 6: Kapsamlı Uygulama

Web sunucusu yapılandırması için tam örnek:
package main

import (
    "fmt"
    "log"
    "strconv"
    "time"
    "github.com/qzeleza/ziva"
)

type ServerConfig struct {
    Host    string
    Port    int
    SSL     bool
    CertPath string
    Modules  []string
}

func main() {
    config := &ServerConfig{}

    // Yapılandırma görevlerini oluştur
    tasks := createConfigTasks(config)

    // Kuyruğu yapılandır
    queue := ziva.NewQueue("Web Sunucusu Yapılandırması")
    queue.WithAppName("WebServerSetup").
          WithTasksNumbered(true, "[%02d]").
          WithTitleColor(ziva.BlueBright, true)

    queue.AddTasks(tasks...)

    if err := queue.Run(); err != nil {
        log.Fatal(err)
    }

    // Son yapılandırmayı göster
    printConfig(config)
}

func createConfigTasks(config *ServerConfig) []ziva.Task {
    v := ziva.DefaultValidators

    // 1. Host
    hostTask := ziva.NewInputTask("Sunucu Host", "IP adresi veya domain:").
        WithValidator(v.Required()).
        WithTimeout(30*time.Second, "localhost")

    // 2. Port
    portTask := ziva.NewInputTask("Port", "Sunucu portu (1-65535):").
        WithInputType(ziva.InputTypeNumber).
        WithValidator(v.Port()).
        WithTimeout(15*time.Second, "8080")

    // 3. SSL
    sslTask := ziva.NewYesNoTask("SSL", "HTTPS etkinleştirilsin mi?").
        WithDefaultItem("Evet")

    // 4. Modüller
    modules := []string{
        "auth||Kullanıcı kimlik doğrulama",
        "cors||Cross-Origin Resource Sharing",
        "compress||Yanıt sıkıştırma",
        "static||Statik dosyalar",
        "proxy||Ters proxy",
        "cache||Önbellek",
    }

    moduleTask := ziva.NewMultiSelectTask("Modüller", modules).
        WithSelectAll("Tüm modülleri etkinleştir").
        WithDefaultItems([]string{"auth", "static"})

    // 5. Yapılandırma uygulama fonksiyonel görevi
    applyTask := ziva.NewFuncTask(
        "Yapılandırma Uygulama",
        func() error {
            // Yapılandırmayı topla
            config.Host = hostTask.GetValue()
            if port, err := strconv.Atoi(portTask.GetValue()); err == nil {
                config.Port = port
            }
            config.SSL = sslTask.IsYes()
            config.Modules = moduleTask.GetSelected()

            // Ayar uygulama simülasyonu
            time.Sleep(2 * time.Second)
            return nil
        },
        ziva.WithSummaryFunction(func() []string {
            return []string{
                "Yapılandırma uygulandı",
                "Sunucu başlatılmaya hazır",
            }
        }),
    )

    return []ziva.Task{hostTask, portTask, sslTask, moduleTask, applyTask}
}

func printConfig(config *ServerConfig) {
    fmt.Println("\n🔧 Sunucu Yapılandırması:")
    fmt.Printf("Adres: %s:%d\n", config.Host, config.Port)
    fmt.Printf("SSL: %v\n", config.SSL)
    fmt.Printf("Modüller: %v\n", config.Modules)

    // Bağlantı URL'si
    protocol := "http"
    if config.SSL {
        protocol = "https"
    }
    fmt.Printf("\n🌐 URL: %s://%s:%d\n", protocol, config.Host, config.Port)
}

Kullanım İpuçları

1. Görev Gruplandırma

İlgili görevleri mantıksal olarak gruplandırın:
// Kimlik doğrulama grubu
authTasks := []ziva.Task{
    ziva.NewInputTask("Username", "Kullanıcı adı:"),
    ziva.NewInputTask("Password", "Şifre:").WithInputType(ziva.InputTypePassword),
}

// Ayarlar grubu
configTasks := []ziva.Task{
    ziva.NewSingleSelectTask("Theme", themes),
    ziva.NewYesNoTask("Notifications", "Bildirimler etkinleştirilsin mi?"),
}

queue.AddTasks(authTasks...)
queue.AddTasks(configTasks...)

2. İptal İşleme

queue := ziva.NewQueue("Kurulum")
if err := queue.Run(); err != nil {
    if err == context.Canceled {
        fmt.Println("❌ Kurulum kullanıcı tarafından iptal edildi")
        return
    }
    log.Fatal(err)
}

3. Yapılandırma Kaydetme

// Başarılı yürütmeden sonra
config := collectResults(tasks...)
if err := saveConfig(config); err != nil {
    log.Printf("Kayıt hatası: %v", err)
}

Ayrıca Bakınız