Files
ddd-example/src/Zone/Company/Application/Repositories/Eloquent/CompanyRepository.php
T
2022-10-04 20:58:33 +08:00

50 lines
1.7 KiB
PHP

<?php
namespace Src\Zone\Company\Application\Repositories\Eloquent;
use Src\Zone\Company\Application\Mappers\CompanyMapper;
use Src\Zone\Company\Domain\Model\Company;
use Src\Zone\Company\Domain\Repositories\CompanyRepositoryInterface;
use Src\Zone\Company\Infrastructure\EloquentModels\CompanyEloquentModel;
class CompanyRepository implements CompanyRepositoryInterface
{
public function findAll(): array
{
$companies = [];
foreach (CompanyEloquentModel::all() as $companyEloquent) {
$companies[] = CompanyMapper::fromEloquent($companyEloquent);
}
return $companies;
}
public function findById(string $id): Company
{
$companyEloquent = CompanyEloquentModel::query()->findOrFail($id);
return CompanyMapper::fromEloquent($companyEloquent);
}
public function findByVat(string $vat): Company
{
$companyEloquent = CompanyEloquentModel::query()->where('vat', $vat)->firstOrFail();
return CompanyMapper::fromEloquent($companyEloquent);
}
public function store(Company $company): Company
{
$companyEloquent = CompanyMapper::toEloquent($company);
$companyEloquent->save();
return CompanyMapper::fromEloquent($companyEloquent);
}
public function update(Company $company): void
{
$companyArray = $company->toArray();
$companyEloquent = CompanyEloquentModel::query()->findOrFail($company->id);
$companyEloquent->fill($companyArray);
$companyEloquent->save();
}
public function delete(int $company_id): void
{
$companyEloquent = CompanyEloquentModel::query()->findOrFail($company_id);
$companyEloquent->delete();
}
}