Added time entry api endpoints; Increased phpstan level; renamed to solidtime

This commit is contained in:
Constantin Graf
2024-02-26 14:27:12 +01:00
parent e60e502612
commit 9c5a238dda
36 changed files with 1716 additions and 461 deletions

View File

@@ -11,11 +11,22 @@ use App\Http\Resources\V1\Project\ProjectResource;
use App\Models\Organization;
use App\Models\Project;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Resources\Json\JsonResource;
class ProjectController extends Controller
{
protected function checkPermission(Organization $organization, string $permission, ?Project $project = null): void
{
parent::checkPermission($organization, $permission);
if ($project !== null && $project->organization_id !== $organization->id) {
throw new AuthorizationException('Project does not belong to organization');
}
}
/**
* Get projects
*
* @throws AuthorizationException
*/
public function index(Organization $organization): JsonResource
@@ -29,17 +40,22 @@ class ProjectController extends Controller
}
/**
* Get project
*
* @throws AuthorizationException
*/
public function show(Organization $organization, Project $project): JsonResource
{
$this->checkPermission($organization, 'projects:view');
$this->checkPermission($organization, 'projects:view', $project);
$project->load('organization');
return new ProjectResource($project);
}
/**
* Create project
*
* @throws AuthorizationException
*/
public function store(Organization $organization, ProjectStoreRequest $request): JsonResource
@@ -55,11 +71,13 @@ class ProjectController extends Controller
}
/**
* Update project
*
* @throws AuthorizationException
*/
public function update(Organization $organization, Project $project, ProjectUpdateRequest $request): JsonResource
{
$this->checkPermission($organization, 'projects:update');
$this->checkPermission($organization, 'projects:update', $project);
$project->name = $request->input('name');
$project->color = $request->input('color');
$project->save();
@@ -68,13 +86,17 @@ class ProjectController extends Controller
}
/**
* Delete project
*
* @throws AuthorizationException
*/
public function destroy(Organization $organization, Project $project): JsonResource
public function destroy(Organization $organization, Project $project): JsonResponse
{
$this->checkPermission($organization, 'projects:delete');
$this->checkPermission($organization, 'projects:delete', $project);
$project->delete();
return new ProjectResource($project);
return response()
->json(null, 204);
}
}