PHPackages                             fukibay/laravel-starter-pack - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. fukibay/laravel-starter-pack

ActiveLaravel-package[Utility &amp; Helpers](/categories/utility)

fukibay/laravel-starter-pack
============================

Starter pack: minimal scaffolding helpers for new Laravel projects.

v1.0.0(8mo ago)12MITPHPPHP ^8.1

Since Sep 2Pushed 8mo agoCompare

[ Source](https://github.com/Furkan-Can-Bayrak/fukibay-laravel-starter-pack)[ Packagist](https://packagist.org/packages/fukibay/laravel-starter-pack)[ RSS](/packages/fukibay-laravel-starter-pack/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (9)Versions (2)Used By (0)

Fukibay Laravel Starter Pack
============================

[](#fukibay-laravel-starter-pack)

[![MIT License](https://camo.githubusercontent.com/784362b26e4b3546254f1893e778ba64616e362bd6ac791991d2c9e880a3a64e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667)](https://choosealicense.com/licenses/mit/)

**Fukibay Laravel Starter Pack**, Repository ve Service katmanlarını kullanarak temiz mimariyle proje geliştirenler için tasarlanmış, akıllı bir kod üretim (scaffolding) ve altyapı kurulum paketidir. Tekrarlayan kurulum ve kodlama adımlarını **tek bir interaktif komutla** otomatize ederek, doğrudan projenizin iş mantığına odaklanmanızı sağlar.

🎯 Felsefemiz
------------

[](#-felsefemiz)

Bu paket, "örtük" varsayımlar yerine **açık ve net** komutları tercih eder. Amacımız, geliştirme sürecinizi hızlandırırken, kodun kontrolünün daima sizde kalmasını sağlamaktır. Ürettiğimiz kodun ve kurduğumuz altyapının güvenilir, esnek ve öngörülebilir olmasını garanti ederiz.

🚀 Temel Özellikler
------------------

[](#-temel-özellikler)

- **🧠 Akıllı Kurulum Sihirbazı:** Tek bir komutla (`fukibay:install`) tüm temel altyapıyı kurun. Sihirbaz, size interaktif olarak veritabanı sürücünüzü sorar ve yapılandırmanızı otomatik olarak yapar.
- **Akıllı Kod Üretimi:** `make` komutları ile saniyeler içinde, projenizin yapısına tam uyumlu Repository ve Service sınıfları oluşturun.
- **🤖 Otomatik Soft Deletes Entegrasyonu:**
    - Repository oluştururken modelinizdeki `SoftDeletes` trait'ini **otomatik olarak algılar**.
    - Service oluştururken, ilgili repository'nin soft-delete destekli olup olmadığını **anlar** ve gerekli `ProxiesSoftDeletes` trait'ini sınıfa **otomatik olarak ekler**.
- **⚡ Güçlü ve Esnek Sorgulama:** `QueryParameters` DTO'su sayesinde karmaşık `where`, `relation`, `orderBy`, `limit`, `scope` ve `exists` gibi sorguları zincirlemeden, tek bir nesne ile temiz bir şekilde yapın.
- **🛠️ Kullanıma Hazır Yardımcılar:** Kurulumla birlikte gelen `ApiResponder`, `HandlesFiles` gibi trait'lerle API yanıtlarınızı ve dosya yönetimini anında standartlaştırın.
- **🛡️ Otomatik API Hata Yönetimi:** Kurulum, `ValidationException` gibi yaygın API hatalarını otomatik olarak yakalayıp standart bir JSON formatında döndüren bir `Handler.php` dosyası içerir.
- **Veritabanı Sürücü Desteği:** Repository'lerinizi `PostgreSql` ve `MySql` için özel alt klasörlerde oluşturarak projenizi düzenli tutar.

📦 Kurulum
---------

[](#-kurulum)

Paketi projenize kurmak ve çalışır hale getirmek sadece iki adımdır.

#### Adım 1: Composer ile Paketi Yükleyin

[](#adım-1-composer-ile-paketi-yükleyin)

```
composer require fukibay/laravel-starter-pack
```

#### Adım 2: Akıllı Kurulum Sihirbazını Çalıştırın

[](#adım-2-akıllı-kurulum-sihirbazını-çalıştırın)

```
php artisan fukibay:install
```

Bu komut, size hangi veritabanı sürücüsünü kullandığınızı soracak ve ardından gerekli tüm yapılandırma ve temel dosyaları projenize otomatik olarak kuracaktır.

```
 ╔═══════════════════════════════════════════════╗
 ║ Fukibay Laravel Starter Pack Kurulum Sihirbazı ║
 ╚═══════════════════════════════════════════════╝

 1. Yapılandırma dosyası yayınlanıyor...

 Repository'leriniz için bir veritabanı sürücüsü seçin.
 Bu seçim, dosyaların hangi alt klasöre oluşturulacağını belirleyecektir.

 Hangi veritabanı sürücüsünü kullanıyorsunuz?
  PostgreSql
  MySql
 > 0

Veritabanı sürücüsü PostgreSql olarak ayarlandı.

 2. Gerekli arayüz, trait ve temel sınıflar kopyalanıyor...
  Yazıldı: app/Repositories/Contracts/BaseRepositoryInterface.php
  ...

 ✅ Kurulum başarıyla tamamlandı!
 ...
```

🛠️ Kullanım Akışı
-----------------

[](#️-kullanım-akışı)

### Adım 1: Repository Oluşturma

[](#adım-1-repository-oluşturma)

Bir Eloquent Modeli'ne bağlı yeni bir repository ve arayüzü oluşturmak için `fukibay:make:repository` komutunu kullanın.

```
php artisan fukibay:make:repository UserRepository --model=User
```

Bu komut iki dosya oluşturur:

1. **Arayüz:** `app/Repositories/Contracts/UserRepositoryInterface.php`
2. **Sınıf:** `app/Repositories/PostgreSql/UserRepository.php` (yapılandırmanıza göre)

> **Neden `--model` parametresi zorunlu?**Model adını repository adından tahmin etmek (`UserRepository` -&gt; `User`) basit durumlarda işe yarasa da, karmaşık isimlendirmelerde ve farklı namespace yapılarında hatalara yol açabilir. `--model` parametresini zorunlu kılarak, hangi modelin kullanılacağını **açıkça belirtmenizi** sağlıyor ve böylece %100 güvenilir ve hatasız kod üretiyoruz. Bu, paketin temel felsefesidir.

**Soft Deletes Algılaması:**Eğer `User` modeliniz `Illuminate\Database\Eloquent\SoftDeletes` trait'ini kullanıyorsa, oluşturulan `UserRepository` sınıfı ve arayüzü bunu **otomatik olarak algılayıp** `SoftDeletesRepositoryInterface`'i ve ilgili trait'i uygulayacaktır.

### Adım 2: Service Oluşturma (Akıllı Kısım)

[](#adım-2-service-oluşturma-akıllı-kısım)

İlgili repository'yi kullanan bir servis sınıfı oluşturun.

```
php artisan fukibay:make:service UserService
```

**Paketin zekası burada devreye giriyor:**

- Komut, `UserService` için `UserRepositoryInterface`'in gerektiğini anlar.
- Daha sonra bu arayüzün `SoftDeletesRepositoryInterface`'i genişletip genişletmediğini kontrol eder.
- Eğer cevap **evet** ise, `ProxiesSoftDeletes` trait'ini servis sınıfına **otomatik olarak ekler!**

**Örnek Çıktı (Eğer User modeli SoftDeletes kullanıyorsa):**

```
// app/Services/UserService.php (Otomatik oluşturulan kod)
namespace App\Services;

use App\Repositories\Contracts\UserRepositoryInterface;
use Fukibay\StarterPack\Traits\ProxiesSoftDeletes; // OTOMATİK EKLENDİ!

class UserService extends BaseService
{
    use ProxiesSoftDeletes; // OTOMATİK EKLENDİ!

    public function __construct(UserRepositoryInterface $userRepository)
    {
        parent::__construct($userRepository);
    }
}```
Bu sayede, soft-delete metotlarını kullanmak için herhangi bir ek işlem yapmanıza gerek kalmaz.

### Adım 3: Service Provider ile Bağlama

Oluşturduğunuz arayüzleri ve sınıfları Laravel'in Service Container'ına tanıtın.

```php
// app/Providers/AppServiceProvider.php
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Repositories\Contracts\UserRepositoryInterface;
use App\Repositories\PostgreSql\UserRepository; // Yapılandırmanıza göre doğru yolu seçin

class AppServiceProvider extends ServiceProvider
{
    public function register(): void
    {
        $this->app->bind(
            UserRepositoryInterface::class,
            UserRepository::class
        );
    }
    // ...
}
```

### Adım 4: Gelişmiş Sorgular (`QueryParameters`)

[](#adım-4-gelişmiş-sorgular-queryparameters)

Paketin en güçlü yanlarından biri, `QueryParameters` DTO'su ile karmaşık ve okunabilir sorgular yapabilmektir.

**Örnek Senaryo:** Onaylanmış (`status=approved`), puanı 80'den yüksek (`score > 80`), profili (`profile` ilişkisi) olan ve en yeniye göre sıralanmış kullanıcıları getirelim.

```
// Bir Controller veya başka bir Service içinde...
use App\Services\UserService;
use App\Repositories\Criteria\QueryParameters;

class UserController extends Controller
{
    public function __construct(private UserService $userService) {}

    public function index()
    {
        $criteria = new QueryParameters(
            filters: [
                'status'     => 'approved',
                'score'      => ['>', 80],
                'exists'     => ['profile'], // 'profile' ilişkisi olanlar
            ],
            relations: ['profile', 'posts'], // Eager loading
            orderBy: ['created_at' => 'desc']
        );

        $users = $this->userService->paginate($criteria);

        // ...
    }
}
```

**Desteklenen Filtre Operatörleri:**`=`, `!=`, `>`, `>=`, `
