my-projects-website/app/application/app/Repositories/ProjectFeedbackRepository.php

39 lines
1.3 KiB
PHP

<?php declare(strict_types=1);
namespace App\Repositories;
use App\Contracts\Search;
use App\Dto\Builder\ProjectFeedback as ProjectFeedbackBuilderDto;
use App\Models\Project;
use App\Models\ProjectFeedback;
use App\Services\ProjectFeedback\BuilderCommand;
use App\Services\Search\CreateSearchInstanceCommand;
final readonly class ProjectFeedbackRepository
{
public function __construct(
private CreateSearchInstanceCommand $createSearchInstanceCommand,
private BuilderCommand $builderCommand
) { }
public function getFeedbacks(ProjectFeedbackBuilderDto $projectFeedbackBuilderDto, array $with = []): Search
{
$query = $this->builderCommand->execute(
query: ProjectFeedback::query()->with($with),
projectFeedbackBuilderDto: $projectFeedbackBuilderDto
);
return $this->createSearchInstanceCommand->execute($query);
}
public function getFeedbacksByProject(Project $project, ProjectFeedbackBuilderDto $projectFeedbackBuilderDto, array $with = []): Search
{
$query = $this->builderCommand->execute(
query: $project->feedbacks()->with($with),
projectFeedbackBuilderDto: $projectFeedbackBuilderDto
);
return $this->createSearchInstanceCommand->execute($query);
}
}