diff --git a/.env b/.env index 1d384c6fcb179115244633e6204fa754845c1e11..679fb184e57080a3090e2bf4fa075c8db8ad41fd 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/.env.test b/.env.test deleted file mode 100644 index 9e7162f0b01d8778e236e79f4121e0926f68c194..0000000000000000000000000000000000000000 --- a/.env.test +++ /dev/null @@ -1,6 +0,0 @@ -# define your env variables for the test env here -KERNEL_CLASS='App\Kernel' -APP_SECRET='$ecretf0rt3st' -SYMFONY_DEPRECATIONS_HELPER=999999 -PANTHER_APP_ENV=panther -PANTHER_ERROR_SCREENSHOT_DIR=./var/error-screenshots diff --git a/docker-compose.yaml b/docker-compose.yaml index b41d4867e0ae80feed98dfccda6958792a5f3223..a4e3a367852e61ae9b4f34336abbc4e71bb98bdb 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/Version20240426064235.php b/migrations/Version20240426064235.php index 91425422f152813e43d28978b9bde9a979fdca12..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 --- a/migrations/Version20240426064235.php +++ b/migrations/Version20240426064235.php @@ -1,148 +0,0 @@ -addSql('CREATE SEQUENCE address_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); - $this->addSql('CREATE SEQUENCE email_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); - $this->addSql('CREATE SEQUENCE kitchen_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); - $this->addSql('CREATE SEQUENCE news_comment_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); - $this->addSql('CREATE SEQUENCE news_type_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); - $this->addSql('CREATE SEQUENCE phone_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); - $this->addSql('CREATE SEQUENCE restaurant_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); - $this->addSql('CREATE SEQUENCE restaurant_type_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); - $this->addSql('CREATE SEQUENCE settlement_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); - $this->addSql('CREATE SEQUENCE tags_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); - $this->addSql('CREATE SEQUENCE "user_id_seq" INCREMENT BY 1 MINVALUE 1 START 1'); - $this->addSql('CREATE TABLE address (id INT NOT NULL, restaurant_id INT NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); - $this->addSql('CREATE INDEX IDX_D4E6F81B1E7706E ON address (restaurant_id)'); - $this->addSql('CREATE TABLE email (id INT NOT NULL, restaurant_id INT NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); - $this->addSql('CREATE INDEX IDX_E7927C74B1E7706E ON email (restaurant_id)'); - $this->addSql('CREATE TABLE kitchen (id INT NOT NULL, restaurant_id INT NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); - $this->addSql('CREATE INDEX IDX_EAA3CE34B1E7706E ON kitchen (restaurant_id)'); - $this->addSql('CREATE TABLE news (id UUID NOT NULL, type_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('COMMENT ON COLUMN news.id IS \'(DC2Type:uuid)\''); - $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 INT NOT NULL, news_id_id UUID NOT NULL, moderator_id_id INT NOT NULL, user_id_id INT 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.news_id_id IS \'(DC2Type:uuid)\''); - $this->addSql('CREATE TABLE news_type (id INT NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); - $this->addSql('CREATE TABLE phone (id INT NOT NULL, restaurant_id INT NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); - $this->addSql('CREATE INDEX IDX_444F97DDB1E7706E ON phone (restaurant_id)'); - $this->addSql('CREATE TABLE restaurant (id INT NOT NULL, type_id_id INT NOT NULL, settlement_id_id INT NOT NULL, uuid UUID 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, 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 UNIQUE INDEX UNIQ_EB95123FD17F50A6 ON restaurant (uuid)'); - $this->addSql('CREATE INDEX IDX_EB95123F714819A0 ON restaurant (type_id_id)'); - $this->addSql('CREATE INDEX IDX_EB95123F45EC589B ON restaurant (settlement_id_id)'); - $this->addSql('COMMENT ON COLUMN restaurant.uuid IS \'(DC2Type:uuid)\''); - $this->addSql('COMMENT ON COLUMN restaurant.coordinates IS \'(DC2Type:array)\''); - $this->addSql('CREATE TABLE restaurant_type (id INT NOT NULL, name VARCHAR(255) NOT NULL, code VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); - $this->addSql('CREATE TABLE settlement (id INT NOT NULL, uuid 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('CREATE UNIQUE INDEX UNIQ_DD9F1B51D17F50A6 ON settlement (uuid)'); - $this->addSql('COMMENT ON COLUMN settlement.uuid IS \'(DC2Type:uuid)\''); - $this->addSql('COMMENT ON COLUMN settlement.coordinates IS \'(DC2Type:array)\''); - $this->addSql('CREATE TABLE tags (id INT NOT NULL, restaurant_id INT NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id))'); - $this->addSql('CREATE INDEX IDX_6FBC9426B1E7706E ON tags (restaurant_id)'); - $this->addSql('CREATE TABLE "user" (id INT 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".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 address ADD CONSTRAINT FK_D4E6F81B1E7706E FOREIGN KEY (restaurant_id) REFERENCES restaurant (id) NOT DEFERRABLE INITIALLY IMMEDIATE'); - $this->addSql('ALTER TABLE email ADD CONSTRAINT FK_E7927C74B1E7706E FOREIGN KEY (restaurant_id) REFERENCES restaurant (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_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 phone ADD CONSTRAINT FK_444F97DDB1E7706E FOREIGN KEY (restaurant_id) REFERENCES restaurant (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 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 address_id_seq CASCADE'); - $this->addSql('DROP SEQUENCE email_id_seq CASCADE'); - $this->addSql('DROP SEQUENCE kitchen_id_seq CASCADE'); - $this->addSql('DROP SEQUENCE news_comment_id_seq CASCADE'); - $this->addSql('DROP SEQUENCE news_type_id_seq CASCADE'); - $this->addSql('DROP SEQUENCE phone_id_seq CASCADE'); - $this->addSql('DROP SEQUENCE restaurant_id_seq CASCADE'); - $this->addSql('DROP SEQUENCE restaurant_type_id_seq CASCADE'); - $this->addSql('DROP SEQUENCE settlement_id_seq CASCADE'); - $this->addSql('DROP SEQUENCE tags_id_seq CASCADE'); - $this->addSql('DROP SEQUENCE "user_id_seq" CASCADE'); - $this->addSql('ALTER TABLE address DROP CONSTRAINT FK_D4E6F81B1E7706E'); - $this->addSql('ALTER TABLE email DROP CONSTRAINT FK_E7927C74B1E7706E'); - $this->addSql('ALTER TABLE kitchen DROP CONSTRAINT FK_EAA3CE34B1E7706E'); - $this->addSql('ALTER TABLE news DROP CONSTRAINT FK_1DD39950C54C8C93'); - $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 phone DROP CONSTRAINT FK_444F97DDB1E7706E'); - $this->addSql('ALTER TABLE restaurant DROP CONSTRAINT FK_EB95123F714819A0'); - $this->addSql('ALTER TABLE restaurant DROP CONSTRAINT FK_EB95123F45EC589B'); - $this->addSql('ALTER TABLE tags DROP CONSTRAINT FK_6FBC9426B1E7706E'); - $this->addSql('DROP TABLE address'); - $this->addSql('DROP TABLE email'); - $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 phone'); - $this->addSql('DROP TABLE restaurant'); - $this->addSql('DROP TABLE restaurant_type'); - $this->addSql('DROP TABLE settlement'); - $this->addSql('DROP TABLE tags'); - $this->addSql('DROP TABLE "user"'); - $this->addSql('DROP TABLE messenger_messages'); - } -} diff --git a/migrations/Version20240502075531.php b/migrations/Version20240502075531.php new file mode 100644 index 0000000000000000000000000000000000000000..0a37630b43d11b52f8bc4bfbaaa5bc13ade9f6e3 --- /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/Email.php b/src/Entity/Email.php deleted file mode 100644 index ba955dba0d2ab5ef9c99169455d98a17d5e0c2e2..0000000000000000000000000000000000000000 --- a/src/Entity/Email.php +++ /dev/null @@ -1,51 +0,0 @@ -id; - } - - public function getName(): ?string - { - return $this->name; - } - - public function setName(string $name): static - { - $this->name = $name; - - return $this; - } - - public function getRestaurant(): ?Restaurant - { - return $this->restaurant; - } - - public function setRestaurant(?Restaurant $restaurant): static - { - $this->restaurant = $restaurant; - - return $this; - } -} diff --git a/src/Entity/File.php b/src/Entity/File.php new file mode 100644 index 0000000000000000000000000000000000000000..39432fc6e3a3380acb523ad6e57bd81390f5a946 --- /dev/null +++ b/src/Entity/File.php @@ -0,0 +1,102 @@ +id; + } + + public function setId(Uuid $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; + } +} diff --git a/src/Entity/Address.php b/src/Entity/Gallery.php similarity index 58% rename from src/Entity/Address.php rename to src/Entity/Gallery.php index 6fa2e409744c5d9c142fb66c18fbd4737c875c75..1edce964a4635a2a3c60c1e8427e2e60f6bd3131 100644 --- a/src/Entity/Address.php +++ b/src/Entity/Gallery.php @@ -2,49 +2,50 @@ namespace App\Entity; -use App\Repository\AddressRepository; +use App\Repository\GalleryRepository; use Doctrine\ORM\Mapping as ORM; -#[ORM\Entity(repositoryClass: AddressRepository::class)] -class Address +#[ORM\Entity(repositoryClass: GalleryRepository::class)] +class Gallery { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column] private ?int $id = null; - #[ORM\Column(length: 255)] - private ?string $name = null; - - #[ORM\ManyToOne(inversedBy: 'address')] + #[ORM\ManyToOne(inversedBy: 'galleries')] #[ORM\JoinColumn(nullable: false)] private ?Restaurant $restaurant = null; + #[ORM\OneToOne(cascade: ['persist', 'remove'])] + #[ORM\JoinColumn(nullable: false)] + private ?File $file = null; + public function getId(): ?int { return $this->id; } - public function getName(): ?string + public function getRestaurant(): ?Restaurant { - return $this->name; + return $this->restaurant; } - public function setName(string $name): static + public function setRestaurant(?Restaurant $restaurant): static { - $this->name = $name; + $this->restaurant = $restaurant; return $this; } - public function getRestaurant(): ?Restaurant + public function getFile(): ?File { - return $this->restaurant; + return $this->file; } - public function setRestaurant(?Restaurant $restaurant): static + public function setFile(File $file): static { - $this->restaurant = $restaurant; + $this->file = $file; return $this; } diff --git a/src/Entity/Kitchen.php b/src/Entity/Kitchen.php index 2d084758a19d9084148d994613f14b080e967e9c..0315324e71b05c67e54ec570379e42534e8fbbe7 100644 --- a/src/Entity/Kitchen.php +++ b/src/Entity/Kitchen.php @@ -4,14 +4,14 @@ namespace App\Entity; use App\Repository\KitchenRepository; use Doctrine\ORM\Mapping as ORM; +use Symfony\Component\Uid\Uuid; #[ORM\Entity(repositoryClass: KitchenRepository::class)] class Kitchen { #[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 $name = null; @@ -20,7 +20,7 @@ class Kitchen #[ORM\JoinColumn(nullable: false)] private ?Restaurant $restaurant = null; - public function getId(): ?int + public function getId(): ?Uuid { return $this->id; } diff --git a/src/Entity/News.php b/src/Entity/News.php index 3b588b21f2eafd46bbba646fc295672de8e14ad6..101e54b026457a0835336fa6c4bfb5a51cce71a7 100644 --- a/src/Entity/News.php +++ b/src/Entity/News.php @@ -22,10 +22,10 @@ class News #[ORM\Column] private ?bool $active = null; - #[ORM\Column(type: Types::DATETIME_MUTABLE)] + #[ORM\Column(type: Types::DATETIME_IMMUTABLE)] private ?\DateTimeInterface $createAt = null; - #[ORM\Column(type: Types::DATETIME_MUTABLE)] + #[ORM\Column(type: Types::DATETIME_IMMUTABLE)] private ?\DateTimeInterface $updateAt = null; #[ORM\Column] @@ -56,6 +56,10 @@ class News #[ORM\ManyToMany(targetEntity: NewsCategory::class, inversedBy: "newsCategories")] private Collection $newsCategories; + #[ORM\ManyToOne] + #[ORM\JoinColumn(nullable: false)] + private ?Seo $seo = null; + public function __construct() { $this->newsCategories = new ArrayCollection(); @@ -227,4 +231,16 @@ class News return $this; } + + public function getSeo(): ?Seo + { + return $this->seo; + } + + public function setSeo(?Seo $seo): static + { + $this->seo = $seo; + + return $this; + } } diff --git a/src/Entity/NewsCategory.php b/src/Entity/NewsCategory.php index fa3a55492700f08705b485bbb9a49668f49065ea..3ab4411b5c726193e614def120ff7c08cca69cdc 100644 --- a/src/Entity/NewsCategory.php +++ b/src/Entity/NewsCategory.php @@ -57,31 +57,4 @@ class NewsCategory return $this; } - - /** - * @return Collection - */ - public function getNews(): Collection - { - return $this->news; - } - - public function addNews(News $news): static - { - if (!$this->news->contains($news)) { - $this->news->add($news); - $news->addNewsCategory($this); - } - - return $this; - } - - public function removeNews(News $news): static - { - if ($this->news->removeElement($news)) { - $news->removeNewsCategory($this); - } - - return $this; - } } diff --git a/src/Entity/NewsComment.php b/src/Entity/NewsComment.php index 44f0e48f82f403e5642813c01fc4089e1e04ab35..683c3241f11af3c344950b74706d50e4bb9d1f42 100644 --- a/src/Entity/NewsComment.php +++ b/src/Entity/NewsComment.php @@ -5,14 +5,14 @@ namespace App\Entity; use App\Repository\NewsCommentRepository; use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; +use Symfony\Component\Uid\Uuid; #[ORM\Entity(repositoryClass: NewsCommentRepository::class)] class NewsComment { #[ORM\Id] - #[ORM\GeneratedValue] - #[ORM\Column] - private ?int $id = null; + #[ORM\Column(type: 'uuid', unique: true)] + private ?Uuid $id = null; #[ORM\OneToOne(cascade: ['persist', 'remove'])] #[ORM\JoinColumn(nullable: false)] @@ -35,13 +35,13 @@ class NewsComment #[ORM\Column(length: 255)] private ?string $text = null; - #[ORM\Column(type: Types::DATETIME_MUTABLE)] + #[ORM\Column(type: Types::DATETIME_IMMUTABLE)] private ?\DateTimeInterface $createAt = null; - #[ORM\Column(type: Types::DATETIME_MUTABLE)] + #[ORM\Column(type: Types::DATETIME_IMMUTABLE)] private ?\DateTimeImmutable $updateAt = null; - public function getId(): ?int + public function getId(): ?Uuid { return $this->id; } diff --git a/src/Entity/NewsType.php b/src/Entity/NewsType.php index 409ac097029db2d0216074692202eb5bdd639588..27b05d3c7fcd38da22844cbff2259e03ea0e2b2b 100644 --- a/src/Entity/NewsType.php +++ b/src/Entity/NewsType.php @@ -6,14 +6,14 @@ use App\Repository\NewsTypeRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; +use Symfony\Component\Uid\Uuid; #[ORM\Entity(repositoryClass: NewsTypeRepository::class)] class NewsType { #[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 $name = null; @@ -29,7 +29,7 @@ class NewsType $this->news = new ArrayCollection(); } - public function getId(): ?int + public function getId(): ?Uuid { return $this->id; } diff --git a/src/Entity/Phone.php b/src/Entity/Phone.php deleted file mode 100644 index 00c028f1ac63b1ac8a15da9d09952dc7d9eafc70..0000000000000000000000000000000000000000 --- a/src/Entity/Phone.php +++ /dev/null @@ -1,51 +0,0 @@ -id; - } - - public function getName(): ?string - { - return $this->name; - } - - public function setName(string $name): static - { - $this->name = $name; - - return $this; - } - - public function getRestaurant(): ?Restaurant - { - return $this->restaurant; - } - - public function setRestaurant(?Restaurant $restaurant): static - { - $this->restaurant = $restaurant; - - return $this; - } -} diff --git a/src/Entity/Restaurant.php b/src/Entity/Restaurant.php index a743f1b8a1cf33a9eff9e3da973757d4263c8f5e..e2aa8727741e36b41f2379552a375647e371f9f8 100644 --- a/src/Entity/Restaurant.php +++ b/src/Entity/Restaurant.php @@ -13,12 +13,8 @@ use Symfony\Component\Uid\Uuid; class Restaurant { #[ORM\Id] - #[ORM\GeneratedValue] - #[ORM\Column] - private ?int $id = null; - #[ORM\Column(type: 'uuid', unique: true)] - private ?Uuid $uuid = null; + private ?Uuid $id = null; #[ORM\Column(length: 255)] private ?string $name = null; @@ -32,13 +28,13 @@ class Restaurant #[ORM\Column] private ?int $sort = null; - #[ORM\Column(type: Types::DATETIME_MUTABLE)] + #[ORM\Column(type: Types::DATETIME_IMMUTABLE)] private ?\DateTimeInterface $createAt = null; - #[ORM\Column(type: Types::DATETIME_MUTABLE)] + #[ORM\Column(type: Types::DATETIME_IMMUTABLE)] private ?\DateTimeInterface $updateAt = null; - #[ORM\Column(type: Types::ARRAY)] + #[ORM\Column(type: 'simple_array')] private array $coordinates = []; #[ORM\ManyToOne(fetch: 'EAGER', inversedBy: 'restaurants')] @@ -64,22 +60,13 @@ class Restaurant #[ORM\OneToMany(targetEntity: Kitchen::class, mappedBy: 'restaurant')] private Collection $kitchen; - /** - * @var Collection - */ - #[ORM\OneToMany(targetEntity: Phone::class, mappedBy: 'restaurant')] + #[ORM\Column(type: Types::JSON)] private Collection $phone; - /** - * @var Collection - */ - #[ORM\OneToMany(targetEntity: Email::class, mappedBy: 'restaurant')] + #[ORM\Column(type: Types::JSON)] private Collection $email; - /** - * @var Collection - */ - #[ORM\OneToMany(targetEntity: Address::class, mappedBy: 'restaurant')] + #[ORM\Column(type: Types::JSON)] private Collection $address; /** @@ -100,6 +87,16 @@ class Restaurant #[ORM\Column(type: Types::TEXT)] private ?string $howToFind = null; + /** + * @var Collection + */ + #[ORM\OneToMany(targetEntity: Gallery::class, mappedBy: 'restaurant')] + private Collection $galleries; + + #[ORM\ManyToOne] + #[ORM\JoinColumn(nullable: false)] + private ?Seo $seo = null; + public function __construct() { $this->kitchen = new ArrayCollection(); @@ -107,25 +104,14 @@ class Restaurant $this->email = new ArrayCollection(); $this->address = new ArrayCollection(); $this->tags = new ArrayCollection(); + $this->galleries = new ArrayCollection(); } - public function getId(): ?int + public function getId(): ?Uuid { return $this->id; } - public function getUuid(): ?Uuid - { - return $this->uuid; - } - - public function setUuid(Uuid $uuid): static - { - $this->uuid = $uuid; - - return $this; - } - public function getName(): ?string { return $this->name; @@ -467,4 +453,46 @@ class Restaurant return $this; } + + /** + * @return Collection + */ + public function getGalleries(): Collection + { + return $this->galleries; + } + + public function addGallery(Gallery $gallery): static + { + if (!$this->galleries->contains($gallery)) { + $this->galleries->add($gallery); + $gallery->setRestaurant($this); + } + + return $this; + } + + public function removeGallery(Gallery $gallery): static + { + if ($this->galleries->removeElement($gallery)) { + // set the owning side to null (unless already changed) + if ($gallery->getRestaurant() === $this) { + $gallery->setRestaurant(null); + } + } + + return $this; + } + + public function getSeo(): ?Seo + { + return $this->seo; + } + + public function setSeo(?Seo $seo): static + { + $this->seo = $seo; + + return $this; + } } diff --git a/src/Entity/RestaurantType.php b/src/Entity/RestaurantType.php index 2698a85f08ef297db33b4ad68b3005aeccc100bf..eb59ef74a568cd551b54978d6d943b7e60bb72d5 100644 --- a/src/Entity/RestaurantType.php +++ b/src/Entity/RestaurantType.php @@ -6,14 +6,14 @@ use App\Repository\RestaurantTypeRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; +use Symfony\Component\Uid\Uuid; #[ORM\Entity(repositoryClass: RestaurantTypeRepository::class)] class RestaurantType { #[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 $name = null; @@ -32,7 +32,7 @@ class RestaurantType $this->restaurants = new ArrayCollection(); } - public function getId(): ?int + public function getId(): ?Uuid { return $this->id; } diff --git a/src/Entity/Seo.php b/src/Entity/Seo.php new file mode 100644 index 0000000000000000000000000000000000000000..e68bb3036f221d08634c076ac2eeda760e62192b --- /dev/null +++ b/src/Entity/Seo.php @@ -0,0 +1,65 @@ +id; + } + + public function getTitle(): ?string + { + return $this->title; + } + + public function setTitle(string $title): static + { + $this->title = $title; + + return $this; + } + + public function getDescription(): ?string + { + return $this->description; + } + + public function setDescription(string $description): static + { + $this->description = $description; + + return $this; + } + + public function getKeywords(): ?string + { + return $this->keywords; + } + + public function setKeywords(string $keywords): static + { + $this->keywords = $keywords; + + return $this; + } +} diff --git a/src/Entity/Settlement.php b/src/Entity/Settlement.php index 9f983df8312f4e9c5e43769299161367e3a1343a..94d8e4d50e88009c1e812d51e8aeeab36b07531d 100644 --- a/src/Entity/Settlement.php +++ b/src/Entity/Settlement.php @@ -13,12 +13,8 @@ use Symfony\Component\Uid\Uuid; class Settlement { #[ORM\Id] - #[ORM\GeneratedValue] - #[ORM\Column] - private ?int $id = null; - #[ORM\Column(type: 'uuid', unique: true)] - private ?Uuid $uuid = null; + private ?Uuid $id = null; #[ORM\Column(length: 255)] private ?string $name = null; @@ -29,10 +25,10 @@ class Settlement #[ORM\Column(type: Types::ARRAY)] private array $coordinates = []; - #[ORM\Column(type: Types::DATETIME_MUTABLE)] + #[ORM\Column(type: Types::DATETIME_IMMUTABLE)] private ?\DateTimeInterface $createAt = null; - #[ORM\Column(type: Types::DATETIME_MUTABLE)] + #[ORM\Column(type: Types::DATETIME_IMMUTABLE)] private ?\DateTimeInterface $updateAt = null; /** @@ -46,23 +42,11 @@ class Settlement $this->restaurants = new ArrayCollection(); } - public function getId(): ?int + public function getId(): ?Uuid { return $this->id; } - public function getUuid(): ?Uuid - { - return $this->uuid; - } - - public function setUuid(Uuid $uuid): static - { - $this->uuid = $uuid; - - return $this; - } - public function getName(): ?string { return $this->name; diff --git a/src/Entity/Tags.php b/src/Entity/Tags.php index 34514ad6ba09746c34f816259c4554608b7e169e..a52ff23c9365872ab7c38a6e2eada3b45bc6d664 100644 --- a/src/Entity/Tags.php +++ b/src/Entity/Tags.php @@ -3,15 +3,16 @@ namespace App\Entity; use App\Repository\TagsRepository; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; +use Symfony\Component\Uid\Uuid; #[ORM\Entity(repositoryClass: TagsRepository::class)] class Tags { #[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 $name = null; @@ -20,7 +21,10 @@ class Tags #[ORM\JoinColumn(nullable: false)] private ?Restaurant $restaurant = null; - public function getId(): ?int + #[ORM\Column(type: 'simple_array')] + private array $list = []; + + public function getId(): ?Uuid { return $this->id; } @@ -48,4 +52,16 @@ class Tags return $this; } + + public function getList(): array + { + return $this->list; + } + + public function setList(array $list): static + { + $this->list = $list; + + return $this; + } } diff --git a/src/Entity/User.php b/src/Entity/User.php index 7f1d85e372e6efd2889c7346133c3976dc51735a..208382fc713df48214b2631cbee86d5ac6128736 100644 --- a/src/Entity/User.php +++ b/src/Entity/User.php @@ -13,9 +13,8 @@ use Symfony\Component\Uid\Uuid; class User { #[ORM\Id] - #[ORM\GeneratedValue] - #[ORM\Column] - private ?int $id = null; + #[ORM\Column(type: 'uuid', unique: true)] + private ?Uuid $id = null; #[ORM\Column(type: 'uuid', unique: true)] private ?Uuid $uuid = null; @@ -34,23 +33,11 @@ class User $this->newsComments = new ArrayCollection(); } - public function getId(): ?int + public function getId(): ?Uuid { return $this->id; } - public function getUuid(): ?Uuid - { - return $this->uuid; - } - - public function setUuid(Uuid $uuid): static - { - $this->uuid = $uuid; - - return $this; - } - public function getName(): ?string { return $this->name; diff --git a/src/Repository/AddressRepository.php b/src/Repository/AddressRepository.php deleted file mode 100644 index e87117f70e405b7589e9163f3c41e2d26ac907ee..0000000000000000000000000000000000000000 --- a/src/Repository/AddressRepository.php +++ /dev/null @@ -1,48 +0,0 @@ - - * - * @method Address|null find($id, $lockMode = null, $lockVersion = null) - * @method Address|null findOneBy(array $criteria, array $orderBy = null) - * @method Address[] findAll() - * @method Address[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) - */ -class AddressRepository extends ServiceEntityRepository -{ - public function __construct(ManagerRegistry $registry) - { - parent::__construct($registry, Address::class); - } - -// /** -// * @return Address[] Returns an array of Address objects -// */ -// public function findByExampleField($value): array -// { -// return $this->createQueryBuilder('a') -// ->andWhere('a.exampleField = :val') -// ->setParameter('val', $value) -// ->orderBy('a.id', 'ASC') -// ->setMaxResults(10) -// ->getQuery() -// ->getResult() -// ; -// } - -// public function findOneBySomeField($value): ?Address -// { -// return $this->createQueryBuilder('a') -// ->andWhere('a.exampleField = :val') -// ->setParameter('val', $value) -// ->getQuery() -// ->getOneOrNullResult() -// ; -// } -} diff --git a/src/Repository/EmailRepository.php b/src/Repository/EmailRepository.php deleted file mode 100644 index f22b0ee0d029d5f706c6be57fde2ad6178b21efb..0000000000000000000000000000000000000000 --- a/src/Repository/EmailRepository.php +++ /dev/null @@ -1,48 +0,0 @@ - - * - * @method Email|null find($id, $lockMode = null, $lockVersion = null) - * @method Email|null findOneBy(array $criteria, array $orderBy = null) - * @method Email[] findAll() - * @method Email[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) - */ -class EmailRepository extends ServiceEntityRepository -{ - public function __construct(ManagerRegistry $registry) - { - parent::__construct($registry, Email::class); - } - -// /** -// * @return Email[] Returns an array of Email objects -// */ -// public function findByExampleField($value): array -// { -// return $this->createQueryBuilder('e') -// ->andWhere('e.exampleField = :val') -// ->setParameter('val', $value) -// ->orderBy('e.id', 'ASC') -// ->setMaxResults(10) -// ->getQuery() -// ->getResult() -// ; -// } - -// public function findOneBySomeField($value): ?Email -// { -// return $this->createQueryBuilder('e') -// ->andWhere('e.exampleField = :val') -// ->setParameter('val', $value) -// ->getQuery() -// ->getOneOrNullResult() -// ; -// } -} diff --git a/src/Repository/FileRepository.php b/src/Repository/FileRepository.php new file mode 100644 index 0000000000000000000000000000000000000000..4d5449a24e8e97d38429de3e9f3cf866990b9c81 --- /dev/null +++ b/src/Repository/FileRepository.php @@ -0,0 +1,48 @@ + + * + * @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); + } + +// /** +// * @return File[] Returns an array of File objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('f') +// ->andWhere('f.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('f.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?File +// { +// return $this->createQueryBuilder('f') +// ->andWhere('f.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/GalleryRepository.php b/src/Repository/GalleryRepository.php new file mode 100644 index 0000000000000000000000000000000000000000..d15e89a133dcaaebd53199e97f053366e3250b60 --- /dev/null +++ b/src/Repository/GalleryRepository.php @@ -0,0 +1,48 @@ + + * + * @method Gallery|null find($id, $lockMode = null, $lockVersion = null) + * @method Gallery|null findOneBy(array $criteria, array $orderBy = null) + * @method Gallery[] findAll() + * @method Gallery[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class GalleryRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Gallery::class); + } + +// /** +// * @return Gallery[] Returns an array of Gallery objects +// */ +// public function findByExampleField($value): array +// { +// return $this->createQueryBuilder('g') +// ->andWhere('g.exampleField = :val') +// ->setParameter('val', $value) +// ->orderBy('g.id', 'ASC') +// ->setMaxResults(10) +// ->getQuery() +// ->getResult() +// ; +// } + +// public function findOneBySomeField($value): ?Gallery +// { +// return $this->createQueryBuilder('g') +// ->andWhere('g.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/src/Repository/PhoneRepository.php b/src/Repository/PhoneRepository.php deleted file mode 100644 index de389d66d0b7588d5aaee5cb45780e36ba6ff5f8..0000000000000000000000000000000000000000 --- a/src/Repository/PhoneRepository.php +++ /dev/null @@ -1,48 +0,0 @@ - - * - * @method Phone|null find($id, $lockMode = null, $lockVersion = null) - * @method Phone|null findOneBy(array $criteria, array $orderBy = null) - * @method Phone[] findAll() - * @method Phone[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) - */ -class PhoneRepository extends ServiceEntityRepository -{ - public function __construct(ManagerRegistry $registry) - { - parent::__construct($registry, Phone::class); - } - -// /** -// * @return Phone[] Returns an array of Phone objects -// */ -// public function findByExampleField($value): array -// { -// return $this->createQueryBuilder('p') -// ->andWhere('p.exampleField = :val') -// ->setParameter('val', $value) -// ->orderBy('p.id', 'ASC') -// ->setMaxResults(10) -// ->getQuery() -// ->getResult() -// ; -// } - -// public function findOneBySomeField($value): ?Phone -// { -// return $this->createQueryBuilder('p') -// ->andWhere('p.exampleField = :val') -// ->setParameter('val', $value) -// ->getQuery() -// ->getOneOrNullResult() -// ; -// } -} diff --git a/src/Repository/SeoRepository.php b/src/Repository/SeoRepository.php new file mode 100644 index 0000000000000000000000000000000000000000..09b09908908fccbde126ab3a9adc4fdbf966ea01 --- /dev/null +++ b/src/Repository/SeoRepository.php @@ -0,0 +1,48 @@ + + * + * @method Seo|null find($id, $lockMode = null, $lockVersion = null) + * @method Seo|null findOneBy(array $criteria, array $orderBy = null) + * @method Seo[] findAll() + * @method Seo[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class SeoRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Seo::class); + } + +// /** +// * @return Seo[] Returns an array of Seo 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): ?Seo +// { +// return $this->createQueryBuilder('s') +// ->andWhere('s.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +} diff --git a/tests/RestaurantControllerTest.php b/tests/RestaurantControllerTest.php new file mode 100644 index 0000000000000000000000000000000000000000..c976e59bf2728d1c52634aaa9f24599fe85c90be --- /dev/null +++ b/tests/RestaurantControllerTest.php @@ -0,0 +1,63 @@ +request('GET', '/api/v1/restaurants?page=1&limit=12'); + $actual = json_decode($client->getResponse()->getContent(), true, 512, JSON_THROW_ON_ERROR); + $expect = '{ + "pagination": { + "currentPage": 1, + "pages": 1, + "pageSize": 12 + }, + "list": [ + { + "id": 1, + "name": "Ресторан «Арктика»", + "code": "restoran-arktika", + "type": { + "id": 1, + "name": "Ресторан", + "code": "restoran" + }, + "check": "bla bla", + "image": { + "id": 1, + "name": "name", + "description": "description", + "size": 10, + "type": "jpg", + "url": "/upload/preview.png" + }, + "detailLink": "https://visityamal.ru/" + } + ], + "filterVariants": { + "type": [ + { + "id": 1, + "name": "Ресторан", + "code": "restoran" + } + ], + "kitchen": [ + { + "id": 1, + "name": "Азиатская" + } + ] + } +}'; + self::assertResponseIsSuccessful(); + self::assertJsonStringEqualsJsonString($expect, $actual); + } +}