update
This commit is contained in:
@@ -2,18 +2,25 @@
|
||||
|
||||
namespace App\Service;
|
||||
|
||||
use App\DTO\Request\ToggleRequest;
|
||||
use App\DTO\Request\UpdateTaskRequest;
|
||||
use App\DTO\Response\TaskResponse;
|
||||
use App\Entity\Task;
|
||||
use App\DTO\Response\ToggleResponse;
|
||||
use App\Entity\TaskSchema;
|
||||
use App\Enum\TaskSchemaStatus;
|
||||
use App\Enum\TaskStatus;
|
||||
use App\Entity\Task;
|
||||
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,
|
||||
private TaskSerializer $taskSerializer,
|
||||
) {}
|
||||
|
||||
@@ -39,6 +46,29 @@ class TaskManager
|
||||
return $this->taskSerializer->serializeTask($task, new \DateTimeImmutable('today'));
|
||||
}
|
||||
|
||||
public function toggleTaskStatus(TaskSchema $schema, ToggleRequest $request): ToggleResponse
|
||||
{
|
||||
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::Active;
|
||||
$task->setStatus($newStatus);
|
||||
$this->em->flush();
|
||||
|
||||
return new ToggleResponse(completed: $newStatus === TaskStatus::Completed);
|
||||
}
|
||||
|
||||
public function deleteTask(Task $task): void
|
||||
{
|
||||
$this->em->remove($task);
|
||||
|
||||
Reference in New Issue
Block a user