cattr-app/server-application

View on GitHub
app/Http/Controllers/Api/ProjectMemberController.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Requests\ProjectMember\BulkEditProjectMemberRequest;
use App\Http\Requests\ProjectMember\ShowProjectMemberRequest;
use App\Services\ProjectMemberService;
use CatEvent;
use Filter;
use Illuminate\Http\JsonResponse;
use Illuminate\Validation\ValidationException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Throwable;

class ProjectMemberController extends Controller
{
    /**
     * @param ShowProjectMemberRequest $request
     * @return JsonResponse
     * @throws Throwable
     */
    public function list(ShowProjectMemberRequest $request): JsonResponse
    {
        $data = $request->validated();

        throw_unless($data, ValidationException::withMessages([]));

        $projectMembers = ProjectMemberService::getMembers($data['project_id']);

        $projectMembers['users'] = $projectMembers['users'] ?? [];

        return responder()->success($projectMembers)->respond();
    }

    /**
     * @param BulkEditProjectMemberRequest $request
     * @return JsonResponse
     */
    public function bulkEdit(BulkEditProjectMemberRequest $request): JsonResponse
    {
        $data = Filter::process(Filter::getRequestFilterName(), $request->validated());

        $userRoles = [];

        foreach ($data['user_roles'] as $value) {
            $userRoles[$value['user_id']] = ['role_id' => $value['role_id']];
        }

        CatEvent::dispatch(Filter::getBeforeActionEventName(), [$data['project_id'], $userRoles]);

        ProjectMemberService::syncMembers($data['project_id'], $userRoles);

        CatEvent::dispatch(Filter::getAfterActionEventName(), [$data['project_id'], $userRoles]);

        return responder()->success()->respond(204);
    }
}