77 lines
1.9 KiB
PHP
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();
|
|
}
|
|
}
|