File "ProjectGroupController.php"
Full Path: /var/www/html/back/app/Http/Controllers/Api/V1/ProjectGroupController.php
File size: 3.66 KB
MIME-type: text/x-php
Charset: utf-8
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Api\V1;
use App\Attributes\OpenApiResponse;
use App\Domain\Article\Enums\ArticleTypeEnum;
use App\Domain\Project\Requests\CreateProjectGroupRequest;
use App\Domain\Project\Services\projectGroupService;
use App\Http\Controllers\Api\ApiController;
use App\Http\Resources\CashFlowCreditResource;
use App\Http\Resources\CashFlowDebitResource;
use App\Http\Resources\ShowProjectGroupResource;
use App\Models\ProjectGroup;
use App\Responses\ResponseDto;
use App\Services\CashFlow\ActiveTabProjectService;
use App\Services\CashFlowService;
use Illuminate\Support\Facades\Log;
use Knuckles\Scribe\Attributes\Group;
use Illuminate\Http\Request;
/**
* Контроллер для управления группами.
*/
class ProjectGroupController extends ApiController
{
protected ProjectGroupService $projectGroupService;
public function __construct(projectGroupService $articleService, protected CashFlowService $cashFlowService, protected ActiveTabProjectService $tabProjectService)
{
$this->projectGroupService = $articleService;
}
/**
* Получить список групп проектов.
*/
#[Group('projects')]
#[OpenApiResponse(ProjectGroup::class)]
public function index(int $modelID): ResponseDto
{
return new ResponseDto(
data: $this->projectGroupService->getAll($modelID),
status: true
);
}
/**
* Получить группу по ID.
*/
#[Group('projects')]
#[OpenApiResponse(ProjectGroup::class)]
public function show(int $modelID, int $id, Request $request): ResponseDto
{
$group = $this->projectGroupService->findById($id);
$sort = $request->get('sort');
$direction = $request->get('sort_direction', 'ASC');
if ($sort) {
//TODO сделать сортировку в $group
}
return new ResponseDto(
data: new ShowProjectGroupResource($this->projectGroupService->findById($id)),
status: true
);
}
/**
* Создать новую группу.
*
* @queryParam name string
* @queryParam description string
* @queryParam projects array[]
*/
#[Group('projects')]
#[OpenApiResponse(ProjectGroup::class)]
public function store(int $modelID, CreateProjectGroupRequest $request): ResponseDto
{
return new ResponseDto(
data: $this->projectGroupService->create($modelID, $request),
status: true
);
}
/**
* Обновить существующую группу.
*/
#[Group('projects')]
#[OpenApiResponse(ProjectGroup::class)]
public function update(int $modelID, int $id, Request $request)
{
$data = $request->all();
return new ResponseDto(
status: (bool)$this->projectGroupService->update($id, $data)
);
}
/**
* Удалить группу.
*/
#[Group('projects')]
#[OpenApiResponse(ResponseDto::class)]
public function destroy(int $modelID, int $id): ResponseDto
{
return new ResponseDto(
status: (bool)$this->projectGroupService->delete($id)
);
}
public function getGroupedByArticle($modelId, $groupId, Request $request)
{
$paymentsMadeInput = $request->input('payments_made');
$filters = [
'date_from' => $request->input('date_from'),
'date_to' => $request->input('date_to'),
'payments_made' => $paymentsMadeInput ?? null,
];
return $this->projectGroupService->getGroupedByArticleForProjetsGroup($modelId, $groupId, $filters);
}
}