diff --git a/migrations/Version20240815151510.php b/migrations/Version20240815151510.php new file mode 100644 index 0000000..4c83c05 --- /dev/null +++ b/migrations/Version20240815151510.php @@ -0,0 +1,36 @@ +addSql('ALTER TABLE menu_item ADD COLUMN deleted_at DATETIME DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('CREATE TEMPORARY TABLE __temp__menu_item AS SELECT id, name, food_vendor_id FROM menu_item'); + $this->addSql('DROP TABLE menu_item'); + $this->addSql('CREATE TABLE menu_item (id BLOB NOT NULL, name VARCHAR(255) NOT NULL, food_vendor_id BLOB NOT NULL, PRIMARY KEY(id), CONSTRAINT FK_D754D5506EF983E8 FOREIGN KEY (food_vendor_id) REFERENCES food_vendor (id) NOT DEFERRABLE INITIALLY IMMEDIATE)'); + $this->addSql('INSERT INTO menu_item (id, name, food_vendor_id) SELECT id, name, food_vendor_id FROM __temp__menu_item'); + $this->addSql('DROP TABLE __temp__menu_item'); + $this->addSql('CREATE INDEX IDX_D754D5506EF983E8 ON menu_item (food_vendor_id)'); + } +} diff --git a/src/Controller/MenuItemController.php b/src/Controller/MenuItemController.php new file mode 100644 index 0000000..c7d9aaf --- /dev/null +++ b/src/Controller/MenuItemController.php @@ -0,0 +1,53 @@ +render('menu_item/show.html.twig', [ + 'menu_item' => $menuItem, + ]); + } + + #[Route('/{id}/edit', name: 'app_menu_item_edit', methods: ['GET', 'POST'])] + public function edit(Request $request, MenuItem $menuItem, EntityManagerInterface $entityManager): Response + { + $form = $this->createForm(MenuItemType::class, $menuItem); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $entityManager->flush(); + + return $this->redirectToRoute('app_menu_item_index', [], Response::HTTP_SEE_OTHER); + } + + return $this->render('menu_item/edit.html.twig', [ + 'menu_item' => $menuItem, + 'form' => $form, + ]); + } + + #[Route('/{id}', name: 'app_menu_item_delete', methods: ['POST'])] + public function delete(Request $request, MenuItem $menuItem, EntityManagerInterface $entityManager): Response + { + if ($this->isCsrfTokenValid('delete' . $menuItem->getId(), $request->getPayload()->getString('_token'))) { + $menuItem->delete(); + $entityManager->persist($menuItem); + $entityManager->flush(); + } + + return $this->redirectToRoute('app_menu_item_index', [], Response::HTTP_SEE_OTHER); + } +} diff --git a/src/Entity/FoodVendor.php b/src/Entity/FoodVendor.php index 5c4a610..c867c9c 100644 --- a/src/Entity/FoodVendor.php +++ b/src/Entity/FoodVendor.php @@ -88,9 +88,14 @@ class FoodVendor /** * @return Collection */ - public function getMenuItems(): Collection + public function getMenuItems(bool $withDeleted = false): Collection { - return $this->menuItems; + if ($withDeleted) { + return $this->menuItems; + } + return $this->menuItems->filter( + static fn(MenuItem $item): bool => $item->isDeleted() === false + ); } public function addMenuItem(MenuItem $menuItem): static diff --git a/src/Entity/MenuItem.php b/src/Entity/MenuItem.php index 0f13ec9..6e54dc3 100644 --- a/src/Entity/MenuItem.php +++ b/src/Entity/MenuItem.php @@ -3,6 +3,7 @@ namespace App\Entity; use App\Repository\MenuItemRepository; +use DateTimeImmutable; use Doctrine\ORM\Mapping as ORM; use Symfony\Bridge\Doctrine\IdGenerator\UlidGenerator; use Symfony\Bridge\Doctrine\Types\UlidType; @@ -24,6 +25,9 @@ class MenuItem #[ORM\JoinColumn(nullable: false)] private FoodVendor|null $foodVendor = null; + #[ORM\Column(nullable: true)] + private DateTimeImmutable|null $deletedAt = null; + public function getId(): Ulid|null { return $this->id; @@ -52,4 +56,27 @@ class MenuItem return $this; } + + public function isDeleted(): bool + { + return $this->getDeletedAt() instanceof DateTimeImmutable; + } + + public function delete(): static + { + $this->setDeletedAt(); + return $this; + } + + public function getDeletedAt(): DateTimeImmutable|null + { + return $this->deletedAt; + } + + public function setDeletedAt(DateTimeImmutable|null $deletedAt = new DateTimeImmutable): static + { + $this->deletedAt = $deletedAt; + + return $this; + } } diff --git a/src/Form/MenuItemType.php b/src/Form/MenuItemType.php new file mode 100644 index 0000000..4e17044 --- /dev/null +++ b/src/Form/MenuItemType.php @@ -0,0 +1,28 @@ +add('name') + ; + } + + #[Override] + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => MenuItem::class, + ]); + } +} diff --git a/templates/base.html.twig b/templates/base.html.twig index 07950af..d783e77 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -5,7 +5,14 @@ {% block title %}Welcome!{% endblock %} - + {% set currentDate = "now"|date("d") %} + {% if currentDate % 3 == 0 %} + + {% elseif currentDate % 3 == 1 %} + + {% else %} + + {% endif %}