Files
haushalt/backend/src/Service/TaskManager.php
Marek Lenczewski b998940caa update
2026-03-31 18:09:15 +02:00

77 lines
1.9 KiB
PHP

<?php
namespace App\Service;
use App\DTO\Request\CreateTaskRequest;
use App\DTO\Request\UpdateTaskRequest;
use App\Entity\Task;
use App\Enum\TaskStatus;
use App\Repository\CategoryRepository;
use Doctrine\ORM\EntityManagerInterface;
class TaskManager
{
public function __construct(
private EntityManagerInterface $em,
private CategoryRepository $categoryRepository,
) {}
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);
$category = $request->categoryId !== null
? $this->categoryRepository->find($request->categoryId)
: null;
$task->setCategory($category);
$status = TaskStatus::tryFrom($request->status);
if ($status !== null) {
$task->setStatus($status);
}
$task->setDate($request->date ? new \DateTime($request->date) : null);
$this->em->flush();
return $task;
}
public function toggleTask(Task $task): Task
{
$newStatus = $task->getStatus() === TaskStatus::Active
? TaskStatus::Done
: TaskStatus::Active;
$task->setStatus($newStatus);
$this->em->flush();
return $task;
}
public function deleteTask(Task $task): void
{
$this->em->remove($task);
$this->em->flush();
}
}