From 636fdb6e56052bea01f660b5a35e1c33e5b145d6 Mon Sep 17 00:00:00 2001 From: "a.shamavov" Date: Thu, 2 May 2024 13:00:14 +0500 Subject: [PATCH] =?UTF-8?q?STA-965=20|=20=D0=9D=D0=B5=D0=B1=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D1=88=D0=B8=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 2 +- docker-compose.yaml | 5 +- migrations/Version20240502075531.php | 156 +++++++++++++++++++++++++++ src/Entity/Seo.php | 8 +- 4 files changed, 163 insertions(+), 8 deletions(-) create mode 100644 migrations/Version20240502075531.php diff --git a/.env b/.env index 988a069..8c34a32 100644 --- a/.env +++ b/.env @@ -39,7 +39,7 @@ MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0 ###> symfony/mailer ### # MAILER_DSN=null://null ###< symfony/mailer ### -DATABASE_PORT="5432" +DATABASE_PORT="5433" NGINX_PORT="80" APP_BASE_DIR="./" POSTGRES_USER="postgres" diff --git a/docker-compose.yaml b/docker-compose.yaml index b41d486..a4e3a36 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -9,7 +9,7 @@ services: POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_HOST_AUTH_METHOD: trust ports: - - "${DATABASE_PORT}:${DATABASE_PORT}" + - "${DATABASE_PORT}:5432" networks: - internal nginx: @@ -20,9 +20,8 @@ services: APP_BASE_DIR: ${APP_BASE_DIR-.} volumes: - ".:/app" - - './docker/nginx/default.conf:/etc/nginx/conf.d/default.conf' ports: - - '${NGINX_PORT}:${NGINX_PORT}' + - '${NGINX_PORT}:80' networks: - internal app: diff --git a/migrations/Version20240502075531.php b/migrations/Version20240502075531.php new file mode 100644 index 0000000..0a37630 --- /dev/null +++ b/migrations/Version20240502075531.php @@ -0,0 +1,156 @@ +addSql('CREATE SEQUENCE gallery_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE SEQUENCE seo_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); + $this->addSql('CREATE TABLE file (id UUID NOT NULL, name VARCHAR(255) NOT NULL, description VARCHAR(255) NOT NULL, size INT NOT NULL, type VARCHAR(255) NOT NULL, url VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); + $this->addSql('COMMENT ON COLUMN file.id IS \'(DC2Type:uuid)\''); + $this->addSql('CREATE TABLE gallery (id INT NOT NULL, restaurant_id UUID NOT NULL, file_id UUID NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX IDX_472B783AB1E7706E ON gallery (restaurant_id)'); + $this->addSql('CREATE UNIQUE INDEX UNIQ_472B783A93CB796C ON gallery (file_id)'); + $this->addSql('COMMENT ON COLUMN gallery.restaurant_id IS \'(DC2Type:uuid)\''); + $this->addSql('COMMENT ON COLUMN gallery.file_id IS \'(DC2Type:uuid)\''); + $this->addSql('CREATE TABLE kitchen (id UUID NOT NULL, restaurant_id UUID NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX IDX_EAA3CE34B1E7706E ON kitchen (restaurant_id)'); + $this->addSql('COMMENT ON COLUMN kitchen.id IS \'(DC2Type:uuid)\''); + $this->addSql('COMMENT ON COLUMN kitchen.restaurant_id IS \'(DC2Type:uuid)\''); + $this->addSql('CREATE TABLE news (id UUID NOT NULL, type_id UUID NOT NULL, seo_id INT NOT NULL, code VARCHAR(255) NOT NULL, active BOOLEAN NOT NULL, create_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, update_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, sort INT NOT NULL, preview_image VARCHAR(255) NOT NULL, detail_image VARCHAR(255) NOT NULL, preview_text TEXT NOT NULL, detail_text TEXT NOT NULL, main_page_render BOOLEAN NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX IDX_1DD39950C54C8C93 ON news (type_id)'); + $this->addSql('CREATE INDEX IDX_1DD3995097E3DD86 ON news (seo_id)'); + $this->addSql('COMMENT ON COLUMN news.id IS \'(DC2Type:uuid)\''); + $this->addSql('COMMENT ON COLUMN news.type_id IS \'(DC2Type:uuid)\''); + $this->addSql('COMMENT ON COLUMN news.create_at IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('COMMENT ON COLUMN news.update_at IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('CREATE TABLE news_news_category (news_id UUID NOT NULL, news_category_id UUID NOT NULL, PRIMARY KEY(news_id, news_category_id))'); + $this->addSql('CREATE INDEX IDX_1A91D6D6B5A459A0 ON news_news_category (news_id)'); + $this->addSql('CREATE INDEX IDX_1A91D6D63B732BAD ON news_news_category (news_category_id)'); + $this->addSql('COMMENT ON COLUMN news_news_category.news_id IS \'(DC2Type:uuid)\''); + $this->addSql('COMMENT ON COLUMN news_news_category.news_category_id IS \'(DC2Type:uuid)\''); + $this->addSql('CREATE TABLE news_category (id UUID NOT NULL, name VARCHAR(255) NOT NULL, code VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); + $this->addSql('COMMENT ON COLUMN news_category.id IS \'(DC2Type:uuid)\''); + $this->addSql('CREATE TABLE news_comment (id UUID NOT NULL, news_id_id UUID NOT NULL, moderator_id_id UUID NOT NULL, user_id_id UUID NOT NULL, moderated BOOLEAN NOT NULL, user_name VARCHAR(255) NOT NULL, text VARCHAR(255) NOT NULL, create_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, update_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE UNIQUE INDEX UNIQ_C3904E8A5FB1909 ON news_comment (news_id_id)'); + $this->addSql('CREATE INDEX IDX_C3904E8ACEB712DF ON news_comment (moderator_id_id)'); + $this->addSql('CREATE INDEX IDX_C3904E8A9D86650F ON news_comment (user_id_id)'); + $this->addSql('COMMENT ON COLUMN news_comment.id IS \'(DC2Type:uuid)\''); + $this->addSql('COMMENT ON COLUMN news_comment.news_id_id IS \'(DC2Type:uuid)\''); + $this->addSql('COMMENT ON COLUMN news_comment.moderator_id_id IS \'(DC2Type:uuid)\''); + $this->addSql('COMMENT ON COLUMN news_comment.user_id_id IS \'(DC2Type:uuid)\''); + $this->addSql('COMMENT ON COLUMN news_comment.create_at IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('COMMENT ON COLUMN news_comment.update_at IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('CREATE TABLE news_type (id UUID NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); + $this->addSql('COMMENT ON COLUMN news_type.id IS \'(DC2Type:uuid)\''); + $this->addSql('CREATE TABLE restaurant (id UUID NOT NULL, type_id_id UUID NOT NULL, settlement_id_id UUID NOT NULL, seo_id INT NOT NULL, name VARCHAR(255) NOT NULL, code VARCHAR(255) NOT NULL, active BOOLEAN NOT NULL, sort INT NOT NULL, create_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, update_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, coordinates TEXT NOT NULL, description TEXT NOT NULL, check_price VARCHAR(255) NOT NULL, check_info TEXT NOT NULL, phone JSON NOT NULL, email JSON NOT NULL, address JSON NOT NULL, site VARCHAR(255) NOT NULL, preview_image VARCHAR(255) NOT NULL, detail_image VARCHAR(255) NOT NULL, how_to_find TEXT NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX IDX_EB95123F714819A0 ON restaurant (type_id_id)'); + $this->addSql('CREATE INDEX IDX_EB95123F45EC589B ON restaurant (settlement_id_id)'); + $this->addSql('CREATE INDEX IDX_EB95123F97E3DD86 ON restaurant (seo_id)'); + $this->addSql('COMMENT ON COLUMN restaurant.id IS \'(DC2Type:uuid)\''); + $this->addSql('COMMENT ON COLUMN restaurant.type_id_id IS \'(DC2Type:uuid)\''); + $this->addSql('COMMENT ON COLUMN restaurant.settlement_id_id IS \'(DC2Type:uuid)\''); + $this->addSql('COMMENT ON COLUMN restaurant.create_at IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('COMMENT ON COLUMN restaurant.update_at IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('COMMENT ON COLUMN restaurant.coordinates IS \'(DC2Type:simple_array)\''); + $this->addSql('CREATE TABLE restaurant_type (id UUID NOT NULL, name VARCHAR(255) NOT NULL, code VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); + $this->addSql('COMMENT ON COLUMN restaurant_type.id IS \'(DC2Type:uuid)\''); + $this->addSql('CREATE TABLE seo (id INT NOT NULL, title VARCHAR(255) NOT NULL, description VARCHAR(255) NOT NULL, keywords VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE TABLE settlement (id UUID NOT NULL, name VARCHAR(255) NOT NULL, code VARCHAR(255) NOT NULL, coordinates TEXT NOT NULL, create_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, update_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, PRIMARY KEY(id))'); + $this->addSql('COMMENT ON COLUMN settlement.id IS \'(DC2Type:uuid)\''); + $this->addSql('COMMENT ON COLUMN settlement.coordinates IS \'(DC2Type:array)\''); + $this->addSql('COMMENT ON COLUMN settlement.create_at IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('COMMENT ON COLUMN settlement.update_at IS \'(DC2Type:datetime_immutable)\''); + $this->addSql('CREATE TABLE tags (id UUID NOT NULL, restaurant_id UUID NOT NULL, name VARCHAR(255) NOT NULL, list TEXT NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE INDEX IDX_6FBC9426B1E7706E ON tags (restaurant_id)'); + $this->addSql('COMMENT ON COLUMN tags.id IS \'(DC2Type:uuid)\''); + $this->addSql('COMMENT ON COLUMN tags.restaurant_id IS \'(DC2Type:uuid)\''); + $this->addSql('COMMENT ON COLUMN tags.list IS \'(DC2Type:simple_array)\''); + $this->addSql('CREATE TABLE "user" (id UUID NOT NULL, uuid UUID NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); + $this->addSql('CREATE UNIQUE INDEX UNIQ_8D93D649D17F50A6 ON "user" (uuid)'); + $this->addSql('COMMENT ON COLUMN "user".id IS \'(DC2Type:uuid)\''); + $this->addSql('COMMENT ON COLUMN "user".uuid IS \'(DC2Type:uuid)\''); + $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 gallery ADD CONSTRAINT FK_472B783AB1E7706E FOREIGN KEY (restaurant_id) REFERENCES restaurant (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE gallery ADD CONSTRAINT FK_472B783A93CB796C FOREIGN KEY (file_id) REFERENCES file (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE kitchen ADD CONSTRAINT FK_EAA3CE34B1E7706E FOREIGN KEY (restaurant_id) REFERENCES restaurant (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $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 ADD CONSTRAINT FK_1DD3995097E3DD86 FOREIGN KEY (seo_id) REFERENCES seo (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE news_news_category ADD CONSTRAINT FK_1A91D6D6B5A459A0 FOREIGN KEY (news_id) REFERENCES news (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE news_news_category ADD CONSTRAINT FK_1A91D6D63B732BAD FOREIGN KEY (news_category_id) REFERENCES news_category (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE news_comment ADD CONSTRAINT FK_C3904E8A5FB1909 FOREIGN KEY (news_id_id) REFERENCES news (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE news_comment ADD CONSTRAINT FK_C3904E8ACEB712DF FOREIGN KEY (moderator_id_id) REFERENCES "user" (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE news_comment ADD CONSTRAINT FK_C3904E8A9D86650F FOREIGN KEY (user_id_id) REFERENCES "user" (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE restaurant ADD CONSTRAINT FK_EB95123F714819A0 FOREIGN KEY (type_id_id) REFERENCES restaurant_type (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE restaurant ADD CONSTRAINT FK_EB95123F45EC589B FOREIGN KEY (settlement_id_id) REFERENCES settlement (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE restaurant ADD CONSTRAINT FK_EB95123F97E3DD86 FOREIGN KEY (seo_id) REFERENCES seo (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); + $this->addSql('ALTER TABLE tags ADD CONSTRAINT FK_6FBC9426B1E7706E FOREIGN KEY (restaurant_id) REFERENCES restaurant (id) 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('DROP SEQUENCE gallery_id_seq CASCADE'); + $this->addSql('DROP SEQUENCE seo_id_seq CASCADE'); + $this->addSql('ALTER TABLE gallery DROP CONSTRAINT FK_472B783AB1E7706E'); + $this->addSql('ALTER TABLE gallery DROP CONSTRAINT FK_472B783A93CB796C'); + $this->addSql('ALTER TABLE kitchen DROP CONSTRAINT FK_EAA3CE34B1E7706E'); + $this->addSql('ALTER TABLE news DROP CONSTRAINT FK_1DD39950C54C8C93'); + $this->addSql('ALTER TABLE news DROP CONSTRAINT FK_1DD3995097E3DD86'); + $this->addSql('ALTER TABLE news_news_category DROP CONSTRAINT FK_1A91D6D6B5A459A0'); + $this->addSql('ALTER TABLE news_news_category DROP CONSTRAINT FK_1A91D6D63B732BAD'); + $this->addSql('ALTER TABLE news_comment DROP CONSTRAINT FK_C3904E8A5FB1909'); + $this->addSql('ALTER TABLE news_comment DROP CONSTRAINT FK_C3904E8ACEB712DF'); + $this->addSql('ALTER TABLE news_comment DROP CONSTRAINT FK_C3904E8A9D86650F'); + $this->addSql('ALTER TABLE restaurant DROP CONSTRAINT FK_EB95123F714819A0'); + $this->addSql('ALTER TABLE restaurant DROP CONSTRAINT FK_EB95123F45EC589B'); + $this->addSql('ALTER TABLE restaurant DROP CONSTRAINT FK_EB95123F97E3DD86'); + $this->addSql('ALTER TABLE tags DROP CONSTRAINT FK_6FBC9426B1E7706E'); + $this->addSql('DROP TABLE file'); + $this->addSql('DROP TABLE gallery'); + $this->addSql('DROP TABLE kitchen'); + $this->addSql('DROP TABLE news'); + $this->addSql('DROP TABLE news_news_category'); + $this->addSql('DROP TABLE news_category'); + $this->addSql('DROP TABLE news_comment'); + $this->addSql('DROP TABLE news_type'); + $this->addSql('DROP TABLE restaurant'); + $this->addSql('DROP TABLE restaurant_type'); + $this->addSql('DROP TABLE seo'); + $this->addSql('DROP TABLE settlement'); + $this->addSql('DROP TABLE tags'); + $this->addSql('DROP TABLE "user"'); + $this->addSql('DROP TABLE messenger_messages'); + } +} diff --git a/src/Entity/Seo.php b/src/Entity/Seo.php index 8d4328f..e68bb30 100644 --- a/src/Entity/Seo.php +++ b/src/Entity/Seo.php @@ -4,14 +4,14 @@ namespace App\Entity; use App\Repository\SeoRepository; use Doctrine\ORM\Mapping as ORM; +use Symfony\Component\Uid\Uuid; #[ORM\Entity(repositoryClass: SeoRepository::class)] class Seo { #[ORM\Id] - #[ORM\GeneratedValue] - #[ORM\Column] - private ?int $id = null; + #[ORM\Column(type: 'uuid', unique: true)] + private ?Uuid $id = null; #[ORM\Column(length: 255)] private ?string $title = null; @@ -22,7 +22,7 @@ class Seo #[ORM\Column(length: 255)] private ?string $keywords = null; - public function getId(): ?int + public function getId(): ?Uuid { return $this->id; } -- GitLab