diff --git a/app/migrations/Version20240427114630.php b/app/migrations/Version20240427114630.php new file mode 100644 index 0000000000000000000000000000000000000000..84378b72ef805ae806b666f1171a2a2956f7d2f8 --- /dev/null +++ b/app/migrations/Version20240427114630.php @@ -0,0 +1,96 @@ +addSql('CREATE TABLE kitchens (id UUID NOT NULL, name VARCHAR(255) NOT NULL, code VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE TABLE news (id UUID NOT NULL, type_id UUID DEFAULT NULL, name VARCHAR(255) NOT NULL, code VARCHAR(255) NOT NULL, sort INT NOT NULL, active BOOLEAN NOT NULL, created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, update_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, preview_image VARCHAR(255) DEFAULT NULL, preview_text VARCHAR(1000) DEFAULT NULL, detail_image VARCHAR(255) DEFAULT NULL, detail_text VARCHAR(255) DEFAULT NULL, main_page_render BOOLEAN NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX IDX_1DD39950C54C8C93 ON news (type_id)'); + $this->addSql('COMMENT ON COLUMN news.created_at IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('COMMENT ON COLUMN news.update_at IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('CREATE TABLE news_news_categories (news_id UUID NOT NULL, news_categories_id UUID NOT NULL, PRIMARY KEY(news_id, news_categories_id))'); + $this->addSql('CREATE INDEX IDX_34AB0102B5A459A0 ON news_news_categories (news_id)'); + $this->addSql('CREATE INDEX IDX_34AB0102F7F178F1 ON news_news_categories (news_categories_id)'); + $this->addSql('CREATE TABLE news_categories (id UUID NOT NULL, name VARCHAR(255) NOT NULL, code VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE TABLE news_type (id UUID NOT NULL, name VARCHAR(255) NOT NULL, code VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE TABLE restaurant_types (id UUID NOT NULL, name VARCHAR(255) NOT NULL, code VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE TABLE restaurants (id UUID NOT NULL, type_id UUID DEFAULT NULL, settlement_id UUID DEFAULT NULL, active BOOLEAN NOT NULL, sort INT NOT NULL, created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, update_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, name VARCHAR(255) NOT NULL, code VARCHAR(255) NOT NULL, description VARCHAR(255) NOT NULL, receipt VARCHAR(255) NOT NULL, receipt_info VARCHAR(255) NOT NULL, phone VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, address VARCHAR(255) NOT NULL, tags VARCHAR(255) NOT NULL, site VARCHAR(255) NOT NULL, coordinates TEXT NOT NULL, preview_image VARCHAR(255) NOT NULL, detail_image VARCHAR(255) NOT NULL, gallery VARCHAR(255) NOT NULL, how_to_find VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX IDX_AD837724C54C8C93 ON restaurants (type_id)'); + $this->addSql('CREATE INDEX IDX_AD837724C2B9C425 ON restaurants (settlement_id)'); + $this->addSql('COMMENT ON COLUMN restaurants.created_at IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('COMMENT ON COLUMN restaurants.update_at IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('COMMENT ON COLUMN restaurants.coordinates IS \'(DC2Type:array)\''); + $this->addSql('CREATE TABLE restaurants_kitchens (restaurants_id UUID NOT NULL, kitchens_id UUID NOT NULL, PRIMARY KEY(restaurants_id, kitchens_id))'); + $this->addSql('CREATE INDEX IDX_716464694DCA160A ON restaurants_kitchens (restaurants_id)'); + $this->addSql('CREATE INDEX IDX_71646469E043FCBC ON restaurants_kitchens (kitchens_id)'); + $this->addSql('CREATE TABLE settlements (id UUID NOT NULL, active BOOLEAN NOT NULL, created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, update_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, name VARCHAR(255) NOT NULL, code VARCHAR(255) NOT NULL, coordinates TEXT NOT NULL, PRIMARY KEY(id))'); + $this->addSql('COMMENT ON COLUMN settlements.created_at IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('COMMENT ON COLUMN settlements.update_at IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('COMMENT ON COLUMN settlements.coordinates IS \'(DC2Type:array)\''); + $this->addSql('CREATE TABLE users (id UUID NOT NULL, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, phone VARCHAR(255) NOT NULL, is_male BOOLEAN NOT NULL, address VARCHAR(255) NOT NULL, birthday DATE NOT NULL, PRIMARY KEY(id))'); + $this->addSql('COMMENT ON COLUMN users.birthday IS \'(DC2Type:date_immutable)\''); + $this->addSql('CREATE TABLE messenger_messages (id BIGSERIAL NOT NULL, body TEXT NOT NULL, headers TEXT NOT NULL, queue_name VARCHAR(190) NOT NULL, created_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, available_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, delivered_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX IDX_75EA56E0FB7336F0 ON messenger_messages (queue_name)'); + $this->addSql('CREATE INDEX IDX_75EA56E0E3BD61CE ON messenger_messages (available_at)'); + $this->addSql('CREATE INDEX IDX_75EA56E016BA31DB ON messenger_messages (delivered_at)'); + $this->addSql('COMMENT ON COLUMN messenger_messages.created_at IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('COMMENT ON COLUMN messenger_messages.available_at IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('COMMENT ON COLUMN messenger_messages.delivered_at IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('CREATE OR REPLACE FUNCTION notify_messenger_messages() RETURNS TRIGGER AS $$ + BEGIN + PERFORM pg_notify(\'messenger_messages\', NEW.queue_name::text); + RETURN NEW; + END; + $$ LANGUAGE plpgsql;'); + $this->addSql('DROP TRIGGER IF EXISTS notify_trigger ON messenger_messages;'); + $this->addSql('CREATE TRIGGER notify_trigger AFTER INSERT OR UPDATE ON messenger_messages FOR EACH ROW EXECUTE PROCEDURE notify_messenger_messages();'); + $this->addSql('ALTER TABLE news ADD CONSTRAINT FK_1DD39950C54C8C93 FOREIGN KEY (type_id) REFERENCES news_type (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE news_news_categories ADD CONSTRAINT FK_34AB0102B5A459A0 FOREIGN KEY (news_id) REFERENCES news (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE news_news_categories ADD CONSTRAINT FK_34AB0102F7F178F1 FOREIGN KEY (news_categories_id) REFERENCES news_categories (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE restaurants ADD CONSTRAINT FK_AD837724C54C8C93 FOREIGN KEY (type_id) REFERENCES restaurant_types (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE restaurants ADD CONSTRAINT FK_AD837724C2B9C425 FOREIGN KEY (settlement_id) REFERENCES settlements (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE restaurants_kitchens ADD CONSTRAINT FK_716464694DCA160A FOREIGN KEY (restaurants_id) REFERENCES restaurants (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE restaurants_kitchens ADD CONSTRAINT FK_71646469E043FCBC FOREIGN KEY (kitchens_id) REFERENCES kitchens (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('CREATE SCHEMA public'); + $this->addSql('ALTER TABLE news DROP CONSTRAINT FK_1DD39950C54C8C93'); + $this->addSql('ALTER TABLE news_news_categories DROP CONSTRAINT FK_34AB0102B5A459A0'); + $this->addSql('ALTER TABLE news_news_categories DROP CONSTRAINT FK_34AB0102F7F178F1'); + $this->addSql('ALTER TABLE restaurants DROP CONSTRAINT FK_AD837724C54C8C93'); + $this->addSql('ALTER TABLE restaurants DROP CONSTRAINT FK_AD837724C2B9C425'); + $this->addSql('ALTER TABLE restaurants_kitchens DROP CONSTRAINT FK_716464694DCA160A'); + $this->addSql('ALTER TABLE restaurants_kitchens DROP CONSTRAINT FK_71646469E043FCBC'); + $this->addSql('DROP TABLE kitchens'); + $this->addSql('DROP TABLE news'); + $this->addSql('DROP TABLE news_news_categories'); + $this->addSql('DROP TABLE news_categories'); + $this->addSql('DROP TABLE news_type'); + $this->addSql('DROP TABLE restaurant_types'); + $this->addSql('DROP TABLE restaurants'); + $this->addSql('DROP TABLE restaurants_kitchens'); + $this->addSql('DROP TABLE settlements'); + $this->addSql('DROP TABLE users'); + $this->addSql('DROP TABLE messenger_messages'); + } +} diff --git a/app/src/Controller/RestaurantsController.php b/app/src/Controller/RestaurantsController.php new file mode 100644 index 0000000000000000000000000000000000000000..52248bbeb49e825d880faebb1bdfd64b41dac976 --- /dev/null +++ b/app/src/Controller/RestaurantsController.php @@ -0,0 +1,20 @@ + + */ + #[ORM\OneToMany(targetEntity: Restaurants::class, mappedBy: 'previewImage')] + private Collection $restaurantsPreview; + + /** + * @var Collection + */ + #[ORM\OneToMany(targetEntity: Restaurants::class, mappedBy: 'detailImage')] + private Collection $restaurantsDetail; + + /** + * @var Collection + */ + #[ORM\ManyToMany(targetEntity: Restaurants::class, mappedBy: 'gallery')] + private Collection $restaurantsGallery; + + /** + * @var Collection + */ + #[ORM\OneToMany(targetEntity: News::class, mappedBy: 'detailImage')] + + private Collection $newsDetail; + + /** + * @var Collection + */ + #[ORM\OneToMany(targetEntity: News::class, mappedBy: 'previewImage')] + private Collection $newsPreview; + + public function __construct() + { + $this->restaurantsPreview = new ArrayCollection(); + $this->restaurantsDetail = new ArrayCollection(); + $this->restaurantsGallery = new ArrayCollection(); + $this->newsDetail = new ArrayCollection(); + $this->newsPreview = new ArrayCollection(); + } + + public function getId(): ?string + { + return $this->id; + } + + public function setId(string $id): static + { + $this->id = $id; + + return $this; + } + + public function getName(): ?string + { + return $this->name; + } + + public function setName(string $name): static + { + $this->name = $name; + + return $this; + } + + public function getDescription(): ?string + { + return $this->description; + } + + public function setDescription(string $description): static + { + $this->description = $description; + + return $this; + } + + public function getSize(): ?int + { + return $this->size; + } + + public function setSize(int $size): static + { + $this->size = $size; + + return $this; + } + + public function getType(): ?string + { + return $this->type; + } + + public function setType(string $type): static + { + $this->type = $type; + + return $this; + } + + public function getUrl(): ?string + { + return $this->url; + } + + public function setUrl(string $url): static + { + $this->url = $url; + + return $this; + } + + /** + * @return Collection + */ + public function getRestaurantsPreview(): Collection + { + return $this->restaurantsPreview; + } + + public function addRestaurantsPreview(Restaurants $restaurantsPreview): static + { + if (!$this->restaurantsPreview->contains($restaurantsPreview)) { + $this->restaurantsPreview->add($restaurantsPreview); + $restaurantsPreview->setPreviewImage($this); + } + + return $this; + } + + public function removeRestaurantsPreview(Restaurants $restaurantsPreview): static + { + if ($this->restaurantsPreview->removeElement($restaurantsPreview)) { + // set the owning side to null (unless already changed) + if ($restaurantsPreview->getPreviewImage() === $this) { + $restaurantsPreview->setPreviewImage(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getRestaurantsDetail(): Collection + { + return $this->restaurantsDetail; + } + + public function addRestaurantsDetail(Restaurants $restaurantsDetail): static + { + if (!$this->restaurantsDetail->contains($restaurantsDetail)) { + $this->restaurantsDetail->add($restaurantsDetail); + $restaurantsDetail->setDetailImage($this); + } + + return $this; + } + + public function removeRestaurantsDetail(Restaurants $restaurantsDetail): static + { + if ($this->restaurantsDetail->removeElement($restaurantsDetail)) { + // set the owning side to null (unless already changed) + if ($restaurantsDetail->getDetailImage() === $this) { + $restaurantsDetail->setDetailImage(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getRestaurantsGallery(): Collection + { + return $this->restaurantsGallery; + } + + public function addRestaurantsGallery(Restaurants $restaurantsGallery): static + { + if (!$this->restaurantsGallery->contains($restaurantsGallery)) { + $this->restaurantsGallery->add($restaurantsGallery); + $restaurantsGallery->addGallery($this); + } + + return $this; + } + + public function removeRestaurantsGallery(Restaurants $restaurantsGallery): static + { + if ($this->restaurantsGallery->removeElement($restaurantsGallery)) { + $restaurantsGallery->removeGallery($this); + } + + return $this; + } + + /** + * @return Collection + */ + public function getNewsDetail(): Collection + { + return $this->newsDetail; + } + + public function addNewsDetail(News $newsDetail): static + { + if (!$this->newsDetail->contains($newsDetail)) { + $this->newsDetail->add($newsDetail); + $newsDetail->setDetailImage($this); + } + + return $this; + } + + public function removeNewsDetail(News $newsDetail): static + { + if ($this->newsDetail->removeElement($newsDetail)) { + // set the owning side to null (unless already changed) + if ($newsDetail->getDetailImage() === $this) { + $newsDetail->setDetailImage(null); + } + } + + return $this; + } + + /** + * @return Collection + */ + public function getNewsPreview(): Collection + { + return $this->newsPreview; + } + + public function addNewsPreview(News $newsPreview): static + { + if (!$this->newsPreview->contains($newsPreview)) { + $this->newsPreview->add($newsPreview); + $newsPreview->setPreviewImage($this); + } + + return $this; + } + + public function removeNewsPreview(News $newsPreview): static + { + if ($this->newsPreview->removeElement($newsPreview)) { + // set the owning side to null (unless already changed) + if ($newsPreview->getPreviewImage() === $this) { + $newsPreview->setPreviewImage(null); + } + } + + return $this; + } +} diff --git a/app/src/Entity/Kitchens.php b/app/src/Entity/Kitchens.php index 29ac79059c1792e977930b0b44ae1cea82bff9b0..c5dc4aa9cf3b829d9634470596ca3e33064f51ef 100644 --- a/app/src/Entity/Kitchens.php +++ b/app/src/Entity/Kitchens.php @@ -32,7 +32,7 @@ class Kitchens $this->restaurants = new ArrayCollection(); } - public function getId(): ?int + public function getId(): ?string { return $this->id; } diff --git a/app/src/Entity/News.php b/app/src/Entity/News.php index cd6d609dfaeec5a9ee187daf9684fe3c7bc1bb24..5011c6dfd2a9e2fe32f2bd4e0bf8a1791a490257 100644 --- a/app/src/Entity/News.php +++ b/app/src/Entity/News.php @@ -33,15 +33,9 @@ class News #[ORM\Column] private ?\DateTimeImmutable $updateAt = null; - #[ORM\Column(length: 255, nullable: true)] - private ?string $previewImage = null; - #[ORM\Column(length: 1000, nullable: true)] private ?string $previewText = null; - #[ORM\Column(length: 255, nullable: true)] - private ?string $detailImage = null; - #[ORM\Column(length: 255, nullable: true)] private ?string $detailText = null; @@ -57,6 +51,11 @@ class News #[ORM\Column] private ?bool $mainPageRender = null; + #[ORM\ManyToOne(inversedBy: 'newsDetail')] + private ?File $detailImage = null; + + #[ORM\ManyToOne(inversedBy: 'newsPreview')] + private ?File $previewImage = null; public function __construct() @@ -64,7 +63,7 @@ class News $this->categories = new ArrayCollection(); } - public function getId(): ?int + public function getId(): ?string { return $this->id; } @@ -148,12 +147,12 @@ class News return $this; } - public function getPreviewImage(): ?string + public function getPreviewImage(): ?File { return $this->previewImage; } - public function setPreviewImage(?string $previewImage): static + public function setPreviewImage(?File $previewImage): static { $this->previewImage = $previewImage; @@ -172,12 +171,12 @@ class News return $this; } - public function getDetailImage(): ?string + public function getDetailImage(): ?File { return $this->detailImage; } - public function setDetailImage(?string $detailImage): static + public function setDetailImage(?File $detailImage): static { $this->detailImage = $detailImage; diff --git a/app/src/Entity/NewsCategories.php b/app/src/Entity/NewsCategories.php index aa5bf02acb016cd97b99dae560b01b1abbdb5ac5..fb41930d7d14886d07bc11af57b94457d2892307 100644 --- a/app/src/Entity/NewsCategories.php +++ b/app/src/Entity/NewsCategories.php @@ -32,7 +32,7 @@ class NewsCategories $this->news = new ArrayCollection(); } - public function getId(): ?int + public function getId(): ?string { return $this->id; } diff --git a/app/src/Entity/NewsType.php b/app/src/Entity/NewsType.php index f5764f28073991d615d358775bd5cc3b9e3e9536..493fff06d1e3ca16ce55cced003555084084d8d7 100644 --- a/app/src/Entity/NewsType.php +++ b/app/src/Entity/NewsType.php @@ -32,7 +32,7 @@ class NewsType $this->news = new ArrayCollection(); } - public function getId(): ?int + public function getId(): ?string { return $this->id; } diff --git a/app/src/Entity/RestaurantTypes.php b/app/src/Entity/RestaurantTypes.php index fc3c1b0f143a85c74a8bf31d42a516f79796b6e7..12d132e252f67bf2c37f1da5beb34842e556d3c4 100644 --- a/app/src/Entity/RestaurantTypes.php +++ b/app/src/Entity/RestaurantTypes.php @@ -33,7 +33,7 @@ class RestaurantTypes $this->restaurants = new ArrayCollection(); } - public function getId(): ?int + public function getId(): ?string { return $this->id; } diff --git a/app/src/Entity/Restaurants.php b/app/src/Entity/Restaurants.php index 4419b8171b44c73350bdea6b5e9ad96d2cc7d3bb..8f3380d12c8a4a2a3e3b447886bb80a41993f278 100644 --- a/app/src/Entity/Restaurants.php +++ b/app/src/Entity/Restaurants.php @@ -27,10 +27,10 @@ class Restaurants #[ORM\Column] private ?\DateTimeImmutable $updateAt = null; - #[ORM\ManyToOne(inversedBy: 'restaurants')] + #[ORM\ManyToOne(inversedBy: 'restaurantsTypes')] private ?RestaurantTypes $type = null; - #[ORM\ManyToOne(inversedBy: 'restaurants')] + #[ORM\ManyToOne(inversedBy: 'restaurantsSettlements')] private ?Settlements $settlement = null; #[ORM\Column(length: 255)] @@ -63,17 +63,8 @@ class Restaurants #[ORM\Column(length: 255)] private ?string $site = null; - #[ORM\Column(type: Types::ARRAY)] - private array $coordinates = []; - - #[ORM\Column(length: 255)] - private ?string $previewImage = null; - - #[ORM\Column(length: 255)] - private ?string $detailImage = null; - - #[ORM\Column(length: 255)] - private ?string $gallery = null; + #[ORM\Column(length: 1000)] + private ?string $coordinates = null; #[ORM\Column(length: 255)] private ?string $howToFind = null; @@ -84,12 +75,25 @@ class Restaurants #[ORM\ManyToMany(targetEntity: Kitchens::class, inversedBy: 'restaurants')] private Collection $kitchens; + #[ORM\ManyToOne(inversedBy: 'restaurantsPreview')] + private ?File $previewImage = null; + + #[ORM\ManyToOne(inversedBy: 'restaurantsDetail')] + private ?File $detailImage = null; + + /** + * @var Collection + */ + #[ORM\ManyToMany(targetEntity: File::class, inversedBy: 'restaurantsGallery')] + private Collection $gallery; + public function __construct() { $this->kitchens = new ArrayCollection(); + $this->gallery = new ArrayCollection(); } - public function getId(): ?int + public function getId(): ?string { return $this->id; } @@ -293,86 +297,98 @@ class Restaurants return $this; } - public function getCoordinates(): array + public function getCoordinates(): string { return $this->coordinates; } - public function setCoordinates(array $coordinates): static + public function setCoordinates(string $coordinates): static { $this->coordinates = $coordinates; return $this; } - public function getPreviewImage(): ?string + public function getHowToFind(): ?string { - return $this->previewImage; + return $this->howToFind; } - public function setPreviewImage(string $previewImage): static + public function setHowToFind(string $howToFind): static { - $this->previewImage = $previewImage; + $this->howToFind = $howToFind; return $this; } - public function getDetailImage(): ?string + /** + * @return Collection + */ + public function getKitchens(): Collection { - return $this->detailImage; + return $this->kitchens; } - public function setDetailImage(string $detailImage): static + public function addKitchen(Kitchens $kitchen): static { - $this->detailImage = $detailImage; + if (!$this->kitchens->contains($kitchen)) { + $this->kitchens->add($kitchen); + } return $this; } - public function getGallery(): ?string + public function removeKitchen(Kitchens $kitchen): static { - return $this->gallery; + $this->kitchens->removeElement($kitchen); + + return $this; } - public function setGallery(string $gallery): static + public function getPreviewImage(): ?File { - $this->gallery = $gallery; + return $this->previewImage; + } + + public function setPreviewImage(?File $previewImage): static + { + $this->previewImage = $previewImage; return $this; } - public function getHowToFind(): ?string + public function getDetailImage(): ?File { - return $this->howToFind; + return $this->detailImage; } - public function setHowToFind(string $howToFind): static + public function setDetailImage(?File $detailImage): static { - $this->howToFind = $howToFind; + $this->detailImage = $detailImage; return $this; } /** - * @return Collection + * @return Collection */ - public function getKitchens(): Collection + public function getGallery(): Collection { - return $this->kitchens; + return $this->gallery; } - public function addKitchen(Kitchens $kitchen): static + public function addGallery(File $gallery): static { - if (!$this->kitchens->contains($kitchen)) { - $this->kitchens->add($kitchen); + if (!$this->gallery->contains($gallery)) { + $this->gallery->add($gallery); } return $this; } - public function removeKitchen(Kitchens $kitchen): static + public function removeGallery(File $gallery): static { - $this->kitchens->removeElement($kitchen); + $this->gallery->removeElement($gallery); return $this; } diff --git a/app/src/Entity/Settlements.php b/app/src/Entity/Settlements.php index 304a26ca2f29851adbef4d81650e49ae65032173..6f6dc92f55fbef456e1ac65a99350795f2e1df61 100644 --- a/app/src/Entity/Settlements.php +++ b/app/src/Entity/Settlements.php @@ -44,7 +44,7 @@ class Settlements $this->restaurants = new ArrayCollection(); } - public function getId(): ?int + public function getId(): ?string { return $this->id; } diff --git a/app/src/Repository/FileRepository.php b/app/src/Repository/FileRepository.php new file mode 100644 index 0000000000000000000000000000000000000000..567fb5955a0436d95febf91b2c778bd304385387 --- /dev/null +++ b/app/src/Repository/FileRepository.php @@ -0,0 +1,23 @@ + + * + * @method File|null find($id, $lockMode = null, $lockVersion = null) + * @method File|null findOneBy(array $criteria, array $orderBy = null) + * @method File[] findAll() + * @method File[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class FileRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, File::class); + } +} diff --git a/app/src/Repository/KitchensRepository.php b/app/src/Repository/KitchensRepository.php index b65972f426471d1569a2e884e83c55a6d4c77f12..cd53ebdd0772377fb1be40717913afd837267f8b 100644 --- a/app/src/Repository/KitchensRepository.php +++ b/app/src/Repository/KitchensRepository.php @@ -5,6 +5,7 @@ namespace App\Repository; use App\Entity\Kitchens; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; +use Ramsey\Collection\Collection; /** * @extends ServiceEntityRepository @@ -21,28 +22,9 @@ class KitchensRepository extends ServiceEntityRepository parent::__construct($registry, Kitchens::class); } - // /** - // * @return Kitchens[] Returns an array of Kitchens objects - // */ - // public function findByExampleField($value): array - // { - // return $this->createQueryBuilder('k') - // ->andWhere('k.exampleField = :val') - // ->setParameter('val', $value) - // ->orderBy('k.id', 'ASC') - // ->setMaxResults(10) - // ->getQuery() - // ->getResult() - // ; - // } - - // public function findOneBySomeField($value): ?Kitchens - // { - // return $this->createQueryBuilder('k') - // ->andWhere('k.exampleField = :val') - // ->setParameter('val', $value) - // ->getQuery() - // ->getOneOrNullResult() - // ; - // } + /** @return Collection */ + public function getAll(): Collection + { + return new Collection(Kitchens::class, $this->findAll()); + } } diff --git a/app/src/Repository/NewsCategoriesRepository.php b/app/src/Repository/NewsCategoriesRepository.php index cb2bf88ccea70122feaa335005456ecac54a0c0a..215cbe31b3d944f06031360fc9f739a2ba299b6d 100644 --- a/app/src/Repository/NewsCategoriesRepository.php +++ b/app/src/Repository/NewsCategoriesRepository.php @@ -5,6 +5,7 @@ namespace App\Repository; use App\Entity\NewsCategories; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; +use Ramsey\Collection\Collection; /** * @extends ServiceEntityRepository @@ -21,28 +22,12 @@ class NewsCategoriesRepository extends ServiceEntityRepository parent::__construct($registry, NewsCategories::class); } - // /** - // * @return NewsCategories[] Returns an array of NewsCategories objects - // */ - // public function findByExampleField($value): array - // { - // return $this->createQueryBuilder('n') - // ->andWhere('n.exampleField = :val') - // ->setParameter('val', $value) - // ->orderBy('n.id', 'ASC') - // ->setMaxResults(10) - // ->getQuery() - // ->getResult() - // ; - // } - - // public function findOneBySomeField($value): ?NewsCategories - // { - // return $this->createQueryBuilder('n') - // ->andWhere('n.exampleField = :val') - // ->setParameter('val', $value) - // ->getQuery() - // ->getOneOrNullResult() - // ; - // } + /** + * Возвращает все сущности + * @return Collection + */ + public function getAll(): Collection + { + return new Collection(NewsCategories::class, $this->findAll()); + } } diff --git a/app/src/Repository/NewsRepository.php b/app/src/Repository/NewsRepository.php index c74af620cac5a7513b64aadd7b91e4d738102600..b5031deddcfce301221041d3a8e11aa9be1f3f67 100644 --- a/app/src/Repository/NewsRepository.php +++ b/app/src/Repository/NewsRepository.php @@ -3,8 +3,12 @@ namespace App\Repository; use App\Entity\News; +use App\Entity\Restaurants; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; +use Doctrine\ORM\Query\Expr\Join; +use Doctrine\ORM\QueryBuilder; use Doctrine\Persistence\ManagerRegistry; +use Ramsey\Collection\Collection; /** * @extends ServiceEntityRepository @@ -21,28 +25,59 @@ class NewsRepository extends ServiceEntityRepository parent::__construct($registry, News::class); } - // /** - // * @return News[] Returns an array of News objects - // */ - // public function findByExampleField($value): array - // { - // return $this->createQueryBuilder('n') - // ->andWhere('n.exampleField = :val') - // ->setParameter('val', $value) - // ->orderBy('n.id', 'ASC') - // ->setMaxResults(10) - // ->getQuery() - // ->getResult() - // ; - // } - - // public function findOneBySomeField($value): ?News - // { - // return $this->createQueryBuilder('n') - // ->andWhere('n.exampleField = :val') - // ->setParameter('val', $value) - // ->getQuery() - // ->getOneOrNullResult() - // ; - // } + /** + * @param QueryBuilder $query + * @return Collection + */ + protected function toCollection(QueryBuilder $query): Collection + { + return new Collection( + News::class, + $query + ->orderBy('n.sort', 'ASC') + ->getQuery() + ->getResult() + ); + } + + protected function getByFilters(?string $categoryId, QueryBuilder $query): QueryBuilder + { + if ($categoryId !== null) { + $query = $query + ->innerJoin('n.categories', 'c', Join::WITH, 'c.id = :typeId') + ->setParameter('typeId', $categoryId); + } + return $query; + } + + public function getCountWithFilters(?string $categoryId): int + { + $query = $this->createQueryBuilder('n'); + $query = $this->getByFilters($categoryId, $query); + return $query->select('COUNT(n.id)')->getQuery()->getSingleScalarResult(); + } + + /** @return Collection */ + public function findByFilters(?string $categoryId, int $limit): Collection + { + $query = $this->createQueryBuilder('n'); + $query = $this->getByFilters($categoryId, $query); + $query = $query->setMaxResults($limit); + return $this->toCollection($query); + } + + /** @return Collection */ + public function getAll(): Collection + { + return $this->toCollection($this->createQueryBuilder('n')); + } + + public function getMain(): News + { + return $this->createQueryBuilder('n') + ->andWhere('n.mainPageRender = true') + ->setMaxResults(1) + ->getQuery() + ->getResult()[0]; + } } diff --git a/app/src/Repository/NewsTypeRepository.php b/app/src/Repository/NewsTypeRepository.php index dabf301c391be2c46d86cf26cc184faa0b2ff502..e2acd172d1c529658256c69ca9fb1300ca9d2047 100644 --- a/app/src/Repository/NewsTypeRepository.php +++ b/app/src/Repository/NewsTypeRepository.php @@ -5,6 +5,7 @@ namespace App\Repository; use App\Entity\NewsType; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; +use Ramsey\Collection\Collection; /** * @extends ServiceEntityRepository @@ -21,28 +22,9 @@ class NewsTypeRepository extends ServiceEntityRepository parent::__construct($registry, NewsType::class); } - // /** - // * @return NewsType[] Returns an array of NewsType objects - // */ - // public function findByExampleField($value): array - // { - // return $this->createQueryBuilder('n') - // ->andWhere('n.exampleField = :val') - // ->setParameter('val', $value) - // ->orderBy('n.id', 'ASC') - // ->setMaxResults(10) - // ->getQuery() - // ->getResult() - // ; - // } - - // public function findOneBySomeField($value): ?NewsType - // { - // return $this->createQueryBuilder('n') - // ->andWhere('n.exampleField = :val') - // ->setParameter('val', $value) - // ->getQuery() - // ->getOneOrNullResult() - // ; - // } + /** @return Collection */ + public function getAll(): Collection + { + return new Collection(NewsType::class, $this->findAll()); + } } diff --git a/app/src/Repository/RestaurantTypesRepository.php b/app/src/Repository/RestaurantTypesRepository.php index 8a2f3c345922d1a9dc3bc24b88e2816f6e3f0060..3f5eb7d651f666b96cd43b84b97221f6d825519f 100644 --- a/app/src/Repository/RestaurantTypesRepository.php +++ b/app/src/Repository/RestaurantTypesRepository.php @@ -2,9 +2,12 @@ namespace App\Repository; +use App\Entity\Restaurants; use App\Entity\RestaurantTypes; +use Cassandra\FutureSession; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; +use Ramsey\Collection\Collection; /** * @extends ServiceEntityRepository @@ -21,28 +24,9 @@ class RestaurantTypesRepository extends ServiceEntityRepository parent::__construct($registry, RestaurantTypes::class); } - // /** - // * @return RestaurantTypes[] Returns an array of RestaurantTypes objects - // */ - // public function findByExampleField($value): array - // { - // return $this->createQueryBuilder('r') - // ->andWhere('r.exampleField = :val') - // ->setParameter('val', $value) - // ->orderBy('r.id', 'ASC') - // ->setMaxResults(10) - // ->getQuery() - // ->getResult() - // ; - // } - - // public function findOneBySomeField($value): ?RestaurantTypes - // { - // return $this->createQueryBuilder('r') - // ->andWhere('r.exampleField = :val') - // ->setParameter('val', $value) - // ->getQuery() - // ->getOneOrNullResult() - // ; - // } + /** @return Collection */ + public function getAll(): Collection + { + return new Collection(RestaurantTypes::class, $this->findAll()); + } } diff --git a/app/src/Repository/RestaurantsRepository.php b/app/src/Repository/RestaurantsRepository.php index f540695ade01a46901b408f4fceebfcd4fd52908..b80d4af41e62868385bafc9c8e3e9c2d3f6d94c1 100644 --- a/app/src/Repository/RestaurantsRepository.php +++ b/app/src/Repository/RestaurantsRepository.php @@ -2,9 +2,13 @@ namespace App\Repository; +use App\DTO\CollectionDTO; use App\Entity\Restaurants; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; +use Doctrine\ORM\Query\Expr\Join; +use Doctrine\ORM\QueryBuilder; use Doctrine\Persistence\ManagerRegistry; +use Ramsey\Collection\Collection; /** * @extends ServiceEntityRepository @@ -21,28 +25,59 @@ class RestaurantsRepository extends ServiceEntityRepository parent::__construct($registry, Restaurants::class); } -// /** -// * @return Restaurants[] Returns an array of Restaurants objects -// */ -// public function findByExampleField($value): array -// { -// return $this->createQueryBuilder('r') -// ->andWhere('r.exampleField = :val') -// ->setParameter('val', $value) -// ->orderBy('r.id', 'ASC') -// ->setMaxResults(10) -// ->getQuery() -// ->getResult() -// ; -// } - -// public function findOneBySomeField($value): ?Restaurants -// { -// return $this->createQueryBuilder('r') -// ->andWhere('r.exampleField = :val') -// ->setParameter('val', $value) -// ->getQuery() -// ->getOneOrNullResult() -// ; -// } + /** @return Collection */ + protected function toCollection(QueryBuilder $query): Collection + { + return new Collection( + Restaurants::class, + $query + ->orderBy('n.sort', 'ASC') + ->getQuery() + ->getResult() + ); + } + + protected function filterByKitchen(?string $kitchenId, QueryBuilder $query): QueryBuilder + { + if ($kitchenId === null) { + $query = $query + ->innerJoin('r.categories', 'k', Join::WITH, 'k.id = :kitchenId') + ->setParameter('kitchenId', $kitchenId); + } + return $query; + } + + protected function filterByType(?string $typeId, QueryBuilder $query): QueryBuilder + { + if ($typeId === null) { + $query = $query + ->where('r.type.id = :typeId') + ->setParameter('typeId', $typeId); + } + return $query; + } + + public function getCountWithFilters(?string $categoryId, ?string $typeId): int + { + $query = $this->createQueryBuilder('r'); + $query = $this->filterByKitchen($categoryId, $query); + $query = $this->filterByType($typeId, $query); + return $query->select('COUNT(n.id)')->getQuery()->getSingleScalarResult(); + } + + /** @return Collection */ + public function findByFilters(?string $categoryId, ?string $typeId, int $limit): Collection + { + $query = $this->createQueryBuilder('r'); + $query = $this->filterByKitchen($categoryId, $query); + $query = $this->filterByType($typeId, $query); + $query = $query->setMaxResults($limit); + return $this->toCollection($query); + } + + /** @return Collection */ + public function getAll(): Collection + { + return $this->toCollection($this->createQueryBuilder('r')); + } } diff --git a/app/src/Repository/SettlementsRepository.php b/app/src/Repository/SettlementsRepository.php index 4e84a187b8e9c4715b121045721c12dd994d7b68..66a2f2d486efdd05e31003f0f73f8e24424b9344 100644 --- a/app/src/Repository/SettlementsRepository.php +++ b/app/src/Repository/SettlementsRepository.php @@ -20,29 +20,4 @@ class SettlementsRepository extends ServiceEntityRepository { parent::__construct($registry, Settlements::class); } - - // /** - // * @return Settlements[] Returns an array of Settlements objects - // */ - // public function findByExampleField($value): array - // { - // return $this->createQueryBuilder('s') - // ->andWhere('s.exampleField = :val') - // ->setParameter('val', $value) - // ->orderBy('s.id', 'ASC') - // ->setMaxResults(10) - // ->getQuery() - // ->getResult() - // ; - // } - - // public function findOneBySomeField($value): ?Settlements - // { - // return $this->createQueryBuilder('s') - // ->andWhere('s.exampleField = :val') - // ->setParameter('val', $value) - // ->getQuery() - // ->getOneOrNullResult() - // ; - // } } diff --git a/app/src/Repository/UsersRepository.php b/app/src/Repository/UsersRepository.php index a151d1bf09840a4a040356bc419e97fefa9532bf..dfbe45b0fac3174aced79d55a69c595d7d95254e 100644 --- a/app/src/Repository/UsersRepository.php +++ b/app/src/Repository/UsersRepository.php @@ -20,29 +20,4 @@ class UsersRepository extends ServiceEntityRepository { parent::__construct($registry, Users::class); } - - // /** - // * @return Users[] Returns an array of Users objects - // */ - // public function findByExampleField($value): array - // { - // return $this->createQueryBuilder('u') - // ->andWhere('u.exampleField = :val') - // ->setParameter('val', $value) - // ->orderBy('u.id', 'ASC') - // ->setMaxResults(10) - // ->getQuery() - // ->getResult() - // ; - // } - - // public function findOneBySomeField($value): ?Users - // { - // return $this->createQueryBuilder('u') - // ->andWhere('u.exampleField = :val') - // ->setParameter('val', $value) - // ->getQuery() - // ->getOneOrNullResult() - // ; - // } } diff --git a/docker-compose.yml b/docker-compose.yml index dcc482eeababe568a506e18c71700413addbbb42..caddeb2596e0711a442abcfdc30ca41916f12f4b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,3 @@ -version: '3.1' - services: db: image: postgres:16.2 @@ -44,4 +42,4 @@ services: networks: app: - driver: bridge \ No newline at end of file + driver: bridge