<?php

namespace App\Domains\{{domain}}\{{model}}\Services;

use App\Domains\{{domain}}\{{model}}\DTOs\{{model}}DTO;
use App\Domains\{{domain}}\{{model}}\Models\{{model}};
use Illuminate\Contracts\Pagination\LengthAwarePaginator;
use Illuminate\Support\Facades\DB;

class {{model}}Services
{
    public function index(): LengthAwarePaginator 
    {
        return {{model}}::query()
            ->latest("created_at")
            ->paginate(perPage: request("perPage") ?? 10);
    }

    public function find($id): {{model}}
    {
        return {{model}}::query()->findOrFail($id);
    }

    public function store({{model}}DTO $dto): void
    {
        DB::transaction(function () use ($dto) {
            {{model}}::query()->create((array) $dto);
        });
    }
    public function update({{model}}DTO $dto ,{{model}} ${{modelLower}} ): void
    {
        DB::transaction(function () use ($dto,${{modelLower}}) {
            ${{modelLower}}->update((array) $dto);
        });
    }
    public function destroy({{model}} ${{modelLower}}): void
    {
        DB::transaction(function () use (${{modelLower}}) {

            ${{modelLower}}->delete();

        });
    }

    
}