This commit is contained in:
Marek Lenczewski
2026-03-31 18:09:15 +02:00
parent b6a4548732
commit b998940caa
48 changed files with 717 additions and 816 deletions

View File

@@ -2,26 +2,40 @@
namespace App\Service;
use App\DTO\Request\ToggleRequest;
use App\DTO\Request\CreateTaskRequest;
use App\DTO\Request\UpdateTaskRequest;
use App\DTO\Response\ToggleResponse;
use App\Entity\Task;
use App\Entity\TaskSchema;
use App\Enum\TaskSchemaStatus;
use App\Enum\TaskStatus;
use App\Repository\CategoryRepository;
use App\Repository\TaskRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpKernel\Exception\HttpException;
class TaskManager
{
public function __construct(
private EntityManagerInterface $em,
private CategoryRepository $categoryRepository,
private TaskRepository $taskRepository,
) {}
public function createTask(CreateTaskRequest $request): Task
{
$task = new Task();
$task->setName($request->name);
if ($request->categoryId !== null) {
$category = $this->categoryRepository->find($request->categoryId);
$task->setCategory($category);
}
if ($request->date !== null) {
$task->setDate(new \DateTime($request->date));
}
$this->em->persist($task);
$this->em->flush();
return $task;
}
public function updateTask(Task $task, UpdateTaskRequest $request): Task
{
$task->setName($request->name);
@@ -43,27 +57,15 @@ class TaskManager
return $task;
}
public function toggleTaskStatus(TaskSchema $schema, ToggleRequest $request): ToggleResponse
public function toggleTask(Task $task): Task
{
if ($schema->getStatus() === TaskSchemaStatus::Inactive) {
throw new HttpException(422, 'Inaktive Aufgaben können nicht umgeschaltet werden.');
}
$task = $request->date !== null
? $this->taskRepository->findBySchemaAndDate($schema, new \DateTime($request->date))
: $this->taskRepository->findOneBy(['schema' => $schema, 'date' => null]);
if (!$task) {
throw new HttpException(404, 'Task nicht gefunden.');
}
$newStatus = $task->getStatus() === TaskStatus::Active
? TaskStatus::Completed
? TaskStatus::Done
: TaskStatus::Active;
$task->setStatus($newStatus);
$this->em->flush();
return new ToggleResponse(completed: $newStatus === TaskStatus::Completed);
return $task;
}
public function deleteTask(Task $task): void