API endpoints to delete customer/project/activity (#5181)

* added service methods with events to delete customer, project, activity
* added API endpoints to delete customer, project, activity
* added tests for new API endpoints
This commit is contained in:
Kevin Papst
2024-11-27 15:25:13 +01:00
committed by GitHub
parent f13b81ede7
commit e030ff08db
13 changed files with 408 additions and 80 deletions

View File

@@ -9,6 +9,7 @@
namespace App\API;
use App\Activity\ActivityService;
use App\Entity\Activity;
use App\Entity\ActivityRate;
use App\Entity\User;
@@ -46,7 +47,8 @@ final class ActivityController extends BaseApiController
private readonly ViewHandlerInterface $viewHandler,
private readonly ActivityRepository $repository,
private readonly EventDispatcherInterface $dispatcher,
private readonly ActivityRateRepository $activityRateRepository
private readonly ActivityRateRepository $activityRateRepository,
private readonly ActivityService $activityService
) {
}
@@ -208,6 +210,25 @@ final class ActivityController extends BaseApiController
return $this->viewHandler->handle($view);
}
/**
* Delete an existing activity
*
* [DANGER] This will also delete ALL linked timesheets.
* Maybe use `PATCH` instead and mark it as inactive with `visible=false`?
*/
#[IsGranted('delete', 'activity')]
#[OA\Delete(responses: [new OA\Response(response: 204, description: 'Delete one activity')])]
#[OA\Parameter(name: 'id', description: 'Activity ID to delete', in: 'path', required: true)]
#[Route(path: '/{id}', name: 'delete_activity', requirements: ['id' => '\d+'], methods: ['DELETE'])]
public function deleteAction(Activity $activity): Response
{
$this->activityService->deleteActivity($activity);
$view = new View(null, Response::HTTP_NO_CONTENT);
return $this->viewHandler->handle($view);
}
/**
* Sets the value of a meta-field for an existing activity
*/