Bislang hat RepoConfigController::delete() nur die Projektkonfiguration geloescht - die Tickets des Projekts blieben (nur ohne Projektfarbe, Issue #34) dauerhaft im Kanban sichtbar. Jetzt loescht der Endpunkt zusaetzlich alle Tickets, deren repo-Feld auf das entfernte Projekt zeigt.
62 lines
1.8 KiB
PHP
62 lines
1.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Monitor\Api\Controller;
|
|
|
|
use InvalidArgumentException;
|
|
use Monitor\Api\Http\Request;
|
|
use Monitor\Api\Http\Response;
|
|
use Monitor\Api\Repository\RepoConfigRepository;
|
|
use Monitor\Api\Repository\TicketRepository;
|
|
|
|
final class RepoConfigController
|
|
{
|
|
public function __construct(
|
|
private readonly RepoConfigRepository $repoConfigs,
|
|
private readonly TicketRepository $tickets,
|
|
) {
|
|
}
|
|
|
|
public function index(Request $request): Response
|
|
{
|
|
return Response::json(['repos' => $this->repoConfigs->all()]);
|
|
}
|
|
|
|
public function create(Request $request): Response
|
|
{
|
|
try {
|
|
$repo = $this->repoConfigs->create($request->body);
|
|
} catch (InvalidArgumentException $e) {
|
|
return Response::error($e->getMessage(), 422);
|
|
}
|
|
|
|
return Response::json(['repo' => $repo], 201);
|
|
}
|
|
|
|
/** @param array<string, string> $params */
|
|
public function update(Request $request, array $params): Response
|
|
{
|
|
try {
|
|
$repo = $this->repoConfigs->update((int) $params['id'], $request->body);
|
|
} catch (InvalidArgumentException $e) {
|
|
return Response::error($e->getMessage(), 422);
|
|
}
|
|
|
|
return Response::json(['repo' => $repo]);
|
|
}
|
|
|
|
/**
|
|
* Issue #43: Nach dem Entfernen eines Projekts sollen auch dessen Tickets aus dem Kanban
|
|
* verschwinden statt (wie zuvor, Issue #34) nur ihre Projektfarbe zu verlieren.
|
|
*
|
|
* @param array<string, string> $params
|
|
*/
|
|
public function delete(Request $request, array $params): Response
|
|
{
|
|
$repo = $this->repoConfigs->delete((int) $params['id']);
|
|
$this->tickets->deleteByRepo($repo['owner'] . '/' . $repo['repo']);
|
|
|
|
return Response::json(['deleted' => true]);
|
|
}
|
|
}
|