monitor/api/src/Controller/RepoConfigController.php
fds2610-bot 076dca2aef Tickets eines entfernten Projekts aus dem Kanban entfernen (Issue #43)
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.
2026-08-09 20:14:14 +02:00

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]);
}
}