<?php

namespace App\Modules\{{ module }}\Infrastructure;

use App\Modules\{{ module }}\Domain\{{ module }};
use App\Modules\{{ module }}\Domain\{{ module }}Repository;
use App\Modules\{{ module }}\Domain\Id{{ module }};
use App\Modules\Shared\Domain\Storage\Criteria\ConcreteStorageCriteria;
use App\Modules\Shared\Infraestructure\DBRequester;
use App\Modules\Shared\Infraestructure\Storage\Criteria\LaravelCriteriaMatcher;

final class Mysql{{ module }}Repository implements {{ module }}Repository
{
    public function find(ConcreteStorageCriteria $criteria)
    {
        return LaravelCriteriaMatcher::match($criteria);
    }

    public function search(ConcreteStorageCriteria $criteria)
    {
        return LaravelCriteriaMatcher::match($criteria);
    }

    public function insert({{ module }} $model)
    {
        return new Id{{ module }}(DBRequester::requestInsert($model));
    }

    public function updatePartial({{ module }} $model)
    {
        return DBRequester::requestUpdatePartial($model);
    }
}
