update
This commit is contained in:
@@ -4,10 +4,12 @@ namespace App\Service;
|
||||
|
||||
use App\DTO\Request\CreateSchemaRequest;
|
||||
use App\DTO\Request\UpdateSchemaRequest;
|
||||
use App\Entity\Task;
|
||||
use App\Entity\TaskSchema;
|
||||
use App\Enum\TaskSchemaStatus;
|
||||
use App\Enum\TaskSchemaType;
|
||||
use App\Repository\CategoryRepository;
|
||||
use App\Repository\TaskRepository;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
|
||||
class TaskSchemaManager
|
||||
@@ -15,10 +17,11 @@ class TaskSchemaManager
|
||||
public function __construct(
|
||||
private EntityManagerInterface $em,
|
||||
private CategoryRepository $categoryRepository,
|
||||
private TaskRepository $taskRepository,
|
||||
private TaskSynchronizer $taskSynchronizer,
|
||||
) {}
|
||||
|
||||
public function createSchema(CreateSchemaRequest $request): TaskSchema
|
||||
public function createSchema(CreateSchemaRequest $request): TaskSchema|array
|
||||
{
|
||||
$schema = new TaskSchema();
|
||||
$schema->setName($request->name ?? '');
|
||||
@@ -30,6 +33,14 @@ class TaskSchemaManager
|
||||
$this->em->persist($schema);
|
||||
$this->em->flush();
|
||||
|
||||
if ($schema->getTaskType() === TaskSchemaType::Single) {
|
||||
$tasks = $this->createSingleTasks($schema);
|
||||
$this->em->remove($schema);
|
||||
$this->em->flush();
|
||||
|
||||
return $tasks;
|
||||
}
|
||||
|
||||
return $schema;
|
||||
}
|
||||
|
||||
@@ -50,6 +61,19 @@ class TaskSchemaManager
|
||||
return $schema;
|
||||
}
|
||||
|
||||
public function deleteSchema(TaskSchema $schema, bool $deleteTasks = false): void
|
||||
{
|
||||
if ($deleteTasks) {
|
||||
$tasks = $this->taskRepository->findBy(['schema' => $schema]);
|
||||
foreach ($tasks as $task) {
|
||||
$this->em->remove($task);
|
||||
}
|
||||
}
|
||||
|
||||
$this->em->remove($schema);
|
||||
$this->em->flush();
|
||||
}
|
||||
|
||||
private function applyFields(TaskSchema $schema, CreateSchemaRequest|UpdateSchemaRequest $request): void
|
||||
{
|
||||
if ($request->status !== null) {
|
||||
@@ -59,19 +83,16 @@ class TaskSchemaManager
|
||||
}
|
||||
}
|
||||
|
||||
if ($request->taskType !== null) {
|
||||
$taskType = TaskSchemaType::tryFrom($request->taskType);
|
||||
if ($request->type !== null) {
|
||||
$taskType = TaskSchemaType::tryFrom($request->type);
|
||||
if ($taskType !== null) {
|
||||
$schema->setTaskType($taskType);
|
||||
}
|
||||
}
|
||||
|
||||
$schema->setDeadline($request->deadline !== null ? new \DateTime($request->deadline) : null);
|
||||
$schema->setStartDate($request->startDate !== null ? new \DateTime($request->startDate) : null);
|
||||
$schema->setEndDate($request->endDate !== null ? new \DateTime($request->endDate) : null);
|
||||
$schema->setWeekdays($request->weekdays);
|
||||
$schema->setMonthDays($request->monthDays);
|
||||
$schema->setYearDays($request->yearDays);
|
||||
$schema->setDays($request->days);
|
||||
}
|
||||
|
||||
private function resolveCategory(TaskSchema $schema, UpdateSchemaRequest|CreateSchemaRequest $request): void
|
||||
@@ -93,16 +114,37 @@ class TaskSchemaManager
|
||||
}
|
||||
}
|
||||
|
||||
public function deleteSchema(TaskSchema $schema): void
|
||||
{
|
||||
$this->em->remove($schema);
|
||||
$this->em->flush();
|
||||
}
|
||||
|
||||
private function applyDefaults(TaskSchema $schema): void
|
||||
{
|
||||
if ($schema->getTaskType() !== TaskSchemaType::Single && $schema->getStartDate() === null) {
|
||||
$schema->setStartDate(new \DateTime('today'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Task[]
|
||||
*/
|
||||
private function createSingleTasks(TaskSchema $schema): array
|
||||
{
|
||||
$days = $schema->getDays()['year'] ?? [];
|
||||
$tasks = [];
|
||||
|
||||
foreach ($days as $yd) {
|
||||
$month = $yd['month'] ?? 1;
|
||||
$day = $yd['day'] ?? 1;
|
||||
$date = new \DateTime(sprintf('%d-%02d-%02d', (int) date('Y'), $month, $day));
|
||||
|
||||
$task = new Task();
|
||||
$task->setName($schema->getName());
|
||||
$task->setCategory($schema->getCategory());
|
||||
$task->setDate($date);
|
||||
|
||||
$this->em->persist($task);
|
||||
$tasks[] = $task;
|
||||
}
|
||||
|
||||
$this->em->flush();
|
||||
|
||||
return $tasks;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user