File "ArticleToProjectController.php"

Full Path: /var/www/html/back/app/Http/Controllers/Api/V1/ArticleToProjectController.php
File size: 2.67 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\ArticleToProject\Requests\CreateArticleToProjectRequest;
use App\Domain\ArticleToProject\Requests\UpdateArticleToProjectRequest;
use App\Domain\ArticleToProject\Services\ArticleToProjectService;
use App\Http\Controllers\Api\ApiController;
use App\Http\Resources\ArticleToProjectResource;
use App\Responses\ResponseDto;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Knuckles\Scribe\Attributes\Group;

/**
 * Управление связками статьи и проекта
 */
class ArticleToProjectController extends ApiController
{
    public function __construct(
        protected ArticleToProjectService $service
    )
    {
    }


    public function allProjects(int $id,Request $request)
    {
        return new ResponseDto(
            data: $this->service->allProjects($id, $request)
        );
    }

    public function index(int $id, $projectId, Request $request)
    {
        $articleType = $request->query('article_type');
        return new ResponseDto(
            data: ArticleToProjectResource::collection($this->service->index($projectId, $articleType))
        );
    }

    /**
     * Создание связки статьи и проекта
     */
    #[Group('articles')]
    #[OpenApiResponse(ResponseDto::class)]
    public function store(int $id, Request $request): ResponseDto
    {
        return new ResponseDto(
            status: $this->service->create($request->all())
        );
    }

    /**
     * Обновление связки статьи и проекта
     */
//    #[Group('articles')]
//    #[OpenApiResponse(ResponseDto::class)]

    public function update($id, $articleId, Request $request)
    {
        $projectId = $request->query('projectId');
        $amountLimit = $request->query('amount_limit');

        Log::info('id' . json_encode($id));
        Log::info('aa' . json_encode($articleId));
        Log::info('pp' . json_encode($projectId));
        Log::info('amountLimit' . json_encode($amountLimit));

        return new ResponseDto(
            status: $this->service->update($articleId, $projectId, $amountLimit)
        );
    }

    /**
     * Удаление связки статьи и проекта
     */
    #[Group('articles')]
    #[OpenApiResponse(ResponseDto::class)]
    public function destroy(int $id, $articleId, Request $request): ResponseDto
    {
        $projectId = $request->query('projectId');
        $newArticleId = $request->query('newArticleId');

        return new ResponseDto(
            status: $this->service->delete($articleId, $projectId, $newArticleId)
        );
    }
}