diff --git a/migrations/Version20240304164555.php b/migrations/Version20240304164555.php deleted file mode 100644 index 98b4bf2..0000000 --- a/migrations/Version20240304164555.php +++ /dev/null @@ -1,57 +0,0 @@ -addSql('CREATE TABLE comment (id INT AUTO_INCREMENT NOT NULL, owner_id INT NOT NULL, posting_id INT NOT NULL, message LONGTEXT NOT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_9474526C7E3C61F9 (owner_id), INDEX IDX_9474526C9AE985F6 (posting_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); - $this->addSql('CREATE TABLE contact (id INT AUTO_INCREMENT NOT NULL, partner_id INT NOT NULL, image_id INT DEFAULT NULL, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, birthday DATE DEFAULT NULL, position VARCHAR(255) DEFAULT NULL, phone VARCHAR(255) DEFAULT NULL, email VARCHAR(255) DEFAULT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_4C62E6389393F8FE (partner_id), INDEX IDX_4C62E6383DA5256D (image_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); - $this->addSql('CREATE TABLE media_object (id INT AUTO_INCREMENT NOT NULL, file_path VARCHAR(255) DEFAULT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); - $this->addSql('CREATE TABLE partner (id INT AUTO_INCREMENT NOT NULL, logo_id INT DEFAULT NULL, name VARCHAR(255) NOT NULL, type VARCHAR(255) NOT NULL, street VARCHAR(255) DEFAULT NULL, street_no VARCHAR(255) DEFAULT NULL, zip VARCHAR(255) DEFAULT NULL, city VARCHAR(255) DEFAULT NULL, country VARCHAR(255) DEFAULT NULL, website VARCHAR(255) DEFAULT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_312B3E16F98F144A (logo_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); - $this->addSql('CREATE TABLE posting (id INT AUTO_INCREMENT NOT NULL, owner_id INT NOT NULL, partner_id INT NOT NULL, contact_id INT DEFAULT NULL, headline VARCHAR(255) NOT NULL, message LONGTEXT NOT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_BD275D737E3C61F9 (owner_id), INDEX IDX_BD275D739393F8FE (partner_id), INDEX IDX_BD275D73E7A1254A (contact_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); - $this->addSql('CREATE TABLE `user` (id INT AUTO_INCREMENT NOT NULL, email VARCHAR(180) NOT NULL, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, roles JSON NOT NULL COMMENT \'(DC2Type:json)\', password VARCHAR(255) NOT NULL, active TINYINT(1) NOT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', UNIQUE INDEX UNIQ_8D93D649E7927C74 (email), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); - $this->addSql('ALTER TABLE comment ADD CONSTRAINT FK_9474526C7E3C61F9 FOREIGN KEY (owner_id) REFERENCES `user` (id)'); - $this->addSql('ALTER TABLE comment ADD CONSTRAINT FK_9474526C9AE985F6 FOREIGN KEY (posting_id) REFERENCES posting (id)'); - $this->addSql('ALTER TABLE contact ADD CONSTRAINT FK_4C62E6389393F8FE FOREIGN KEY (partner_id) REFERENCES partner (id)'); - $this->addSql('ALTER TABLE contact ADD CONSTRAINT FK_4C62E6383DA5256D FOREIGN KEY (image_id) REFERENCES media_object (id) ON DELETE SET NULL'); - $this->addSql('ALTER TABLE partner ADD CONSTRAINT FK_312B3E16F98F144A FOREIGN KEY (logo_id) REFERENCES media_object (id) ON DELETE SET NULL'); - $this->addSql('ALTER TABLE posting ADD CONSTRAINT FK_BD275D737E3C61F9 FOREIGN KEY (owner_id) REFERENCES `user` (id)'); - $this->addSql('ALTER TABLE posting ADD CONSTRAINT FK_BD275D739393F8FE FOREIGN KEY (partner_id) REFERENCES partner (id)'); - $this->addSql('ALTER TABLE posting ADD CONSTRAINT FK_BD275D73E7A1254A FOREIGN KEY (contact_id) REFERENCES contact (id)'); - } - - public function down(Schema $schema): void - { - // this down() migration is auto-generated, please modify it to your needs - $this->addSql('ALTER TABLE comment DROP FOREIGN KEY FK_9474526C7E3C61F9'); - $this->addSql('ALTER TABLE comment DROP FOREIGN KEY FK_9474526C9AE985F6'); - $this->addSql('ALTER TABLE contact DROP FOREIGN KEY FK_4C62E6389393F8FE'); - $this->addSql('ALTER TABLE contact DROP FOREIGN KEY FK_4C62E6383DA5256D'); - $this->addSql('ALTER TABLE partner DROP FOREIGN KEY FK_312B3E16F98F144A'); - $this->addSql('ALTER TABLE posting DROP FOREIGN KEY FK_BD275D737E3C61F9'); - $this->addSql('ALTER TABLE posting DROP FOREIGN KEY FK_BD275D739393F8FE'); - $this->addSql('ALTER TABLE posting DROP FOREIGN KEY FK_BD275D73E7A1254A'); - $this->addSql('DROP TABLE comment'); - $this->addSql('DROP TABLE contact'); - $this->addSql('DROP TABLE media_object'); - $this->addSql('DROP TABLE partner'); - $this->addSql('DROP TABLE posting'); - $this->addSql('DROP TABLE `user`'); - } -} diff --git a/migrations/Version20240305152901.php b/migrations/Version20240305152901.php new file mode 100644 index 0000000..ff1fa0b --- /dev/null +++ b/migrations/Version20240305152901.php @@ -0,0 +1,39 @@ +addSql('CREATE TABLE product (id INT AUTO_INCREMENT NOT NULL, image_id INT DEFAULT NULL, name VARCHAR(255) NOT NULL, description LONGTEXT DEFAULT NULL, created_at DATETIME NOT NULL COMMENT \'(DC2Type:datetime_immutable)\', INDEX IDX_D34A04AD3DA5256D (image_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('ALTER TABLE product ADD CONSTRAINT FK_D34A04AD3DA5256D FOREIGN KEY (image_id) REFERENCES media_object (id)'); + $this->addSql('ALTER TABLE user ADD image_id INT DEFAULT NULL'); + $this->addSql('ALTER TABLE user ADD CONSTRAINT FK_8D93D6493DA5256D FOREIGN KEY (image_id) REFERENCES media_object (id)'); + $this->addSql('CREATE INDEX IDX_8D93D6493DA5256D ON user (image_id)'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE product DROP FOREIGN KEY FK_D34A04AD3DA5256D'); + $this->addSql('DROP TABLE product'); + $this->addSql('ALTER TABLE `user` DROP FOREIGN KEY FK_8D93D6493DA5256D'); + $this->addSql('DROP INDEX IDX_8D93D6493DA5256D ON `user`'); + $this->addSql('ALTER TABLE `user` DROP image_id'); + } +} diff --git a/src/ApiResource/ProductApi.php b/src/ApiResource/ProductApi.php new file mode 100644 index 0000000..fff5681 --- /dev/null +++ b/src/ApiResource/ProductApi.php @@ -0,0 +1,69 @@ + + * @date 12.12.23 + */ + + +namespace App\ApiResource; + + +use ApiPlatform\Doctrine\Orm\Filter\OrderFilter; +use ApiPlatform\Doctrine\Orm\State\Options; +use ApiPlatform\Metadata\ApiFilter; +use ApiPlatform\Metadata\ApiProperty; +use ApiPlatform\Metadata\ApiResource; +use App\Entity\MediaObject; +use App\Entity\Product; +use App\State\EntityClassDtoStateProcessor; +use App\State\EntityToDtoStateProvider; +use ApiPlatform\Metadata\Delete; +use ApiPlatform\Metadata\Get; +use ApiPlatform\Metadata\GetCollection; +use ApiPlatform\Metadata\Patch; +use ApiPlatform\Metadata\Post; +use Symfony\Component\Validator\Constraints\NotBlank; + +#[ApiResource( + shortName: 'Product', + operations: [ + new Get( + security: 'is_granted("ROLE_USER")' + ), + new GetCollection(), + new Post( + security: 'is_granted("ROLE_USER")', + ), + new Patch( + security: 'is_granted("ROLE_USER")', + ), + new Delete( + security: 'is_granted("ROLE_ADMIN")', + ) + ], + order: ['name' => 'ASC'], + security: 'is_granted("ROLE_USER")', + provider: EntityToDtoStateProvider::class, + processor: EntityClassDtoStateProcessor::class, + stateOptions: new Options(entityClass: Product::class) +)] + +#[ApiFilter(OrderFilter::class, properties: ['name'], arguments: ['orderParameterName' => 'order'])] +class ProductApi +{ + #[ApiProperty(readable: false, writable: false, identifier: true)] + public ?int $id = null; + + #[NotBlank] + public string $name; + + public ?string $description = null; + + public ?MediaObject $image = null; + + #[ApiProperty(writable: false)] + public ?string $imageUrl = null; + + public ?\DateTimeImmutable $createdAt = null; + +} \ No newline at end of file diff --git a/src/DataFixtures/AppFixtures.php b/src/DataFixtures/AppFixtures.php index 035b4f1..6616fe3 100644 --- a/src/DataFixtures/AppFixtures.php +++ b/src/DataFixtures/AppFixtures.php @@ -5,9 +5,12 @@ namespace App\DataFixtures; use App\Factory\CommentFactory; use App\Factory\ContactFactory; use App\Factory\MediaObjectLogoFactory; -use App\Factory\MediaObjectProfileFactory; +use App\Factory\MediaObjectProductFactory; +use App\Factory\MediaObjectContactFactory; +use App\Factory\MediaObjectUserFactory; use App\Factory\PartnerFactory; use App\Factory\PostingFactory; +use App\Factory\ProductFactory; use App\Factory\UserFactory; use Doctrine\Bundle\FixturesBundle\Fixture; use Doctrine\Persistence\ObjectManager; @@ -34,6 +37,7 @@ class AppFixtures extends Fixture } } + MediaObjectUserFactory::createMany(20); $adminD = UserFactory::createOne( [ 'email' => 'd.knudsen@spawntree.de', @@ -57,9 +61,11 @@ class AppFixtures extends Fixture UserFactory::createMany(10); MediaObjectLogoFactory::createMany(50); PartnerFactory::createMany(100); - MediaObjectProfileFactory::createMany(50); + MediaObjectContactFactory::createMany(50); ContactFactory::createMany(200); PostingFactory::createMany(200); CommentFactory::createMany(300); + MediaObjectProductFactory::createMany(50); + ProductFactory::createMany(100); } } diff --git a/src/DataFixtures/FakeValues.php b/src/DataFixtures/FakeValues.php index d70385b..359e712 100644 --- a/src/DataFixtures/FakeValues.php +++ b/src/DataFixtures/FakeValues.php @@ -187,4 +187,21 @@ class FakeValues "Systemadministrator", "Vertriebsingenieur", "Produktionsplaner", "Personalbeschaffer", "Content Creator", "Bürokoordinator" ]; + + const PRODUCTS = [ + 'Oxidanol-X', 'Quantum Acidite', 'NeuroSolvent', 'HydroMystique', 'Luminaflux', 'Nanoglow Serum', 'Etherium Catalyst', 'BioSol ExoBlend', + 'CryoSynth Elixir', 'NebulaVapour', 'Magnaflux Solvent', 'SynthoQuanta', 'QuantumSolve-X', 'PlasmaFusion Serum', 'ElectroLyte-X', 'SynthoBlast Acid', + 'MegaMelt Radiant', 'Ionic Infusion X', 'QuantumBond Solvent', 'Molecular Surge', 'Etherium Enhancer', 'BioCryo Synthase', 'MagmaMyst Serum', + 'HydroMyst Elixir', 'NeuroQuell Acid', 'PlasmaGlow Catalyst', 'NanoSizzle Blend', 'QuantumVortex X', 'VitaSynth Serum', 'CryoFusion Acid', + 'RadiantQuanta Elixir', 'QuantumSurge Acid', 'NebulaRadiance Blend', 'Luminex Catalyst', 'ElectroPulse-X', 'CryoWave Serum', 'SynthoFlare Acid', + 'Nanoglow Elixir', 'QuantumSpark Blend', 'MagnaFusion Catalyst', 'ElectroQuanta Acid', 'LuminarX Serum', 'NeuroWave-X', 'CryoSpark Acid', + 'PlasmaQuanta Elixir', 'MegaCryo Catalyst', 'IonicQuell Blend', 'QuantumSizzle-X', 'NeuroRadiance Acid', 'NebulaFusion Serum', 'HydroQuanta X', + 'RadiantFlare Blend', 'BioMyst Acid', 'SynthoVortex Serum', 'QuantumSurge-X', 'PlasmaQuell Blend', 'MolecularGlow Catalyst', 'Luminex Serum', + 'ElectroWave Acid', 'CryoMyst Elixir', 'NeuroFusion Blend', 'NanoSizzle Acid', 'QuantumPulse Serum', 'MegaFlare-X', 'PlasmaRadiance Acid', + 'SynthoQuanta Elixir', 'NebulaCryo Blend', 'HydroQuell Acid', 'RadiantFusion Serum', 'ElectroCryo-X', 'MolecularQuanta Acid', 'BioSpark Elixir', + 'QuantumRadiance Blend', 'NanoFlare Acid', 'MagnaQuanta Serum', 'Luminex Catalyst-X', 'CryoFusion Elixir', 'NeuroQuell Blend', 'PlasmaMyst Acid', + 'SynthoRadiance Serum', 'QuantumVortex-X', 'NebulaSpark Blend', 'HydroGlow Catalyst', 'RadiantQuanta Acid', 'ElectroMyst Elixir', 'MegaQuell Serum', + 'CryoVortex Acid', 'NanoRadiance Blend', 'QuantumFusion Serum', 'SynthoFlare-X', 'PlasmaQuell Acid', 'MolecularGlow Blend', 'Luminex Catalyst-X', + 'ElectroWave Serum', 'CryoMyst Acid', 'NeuroFusion Elixir', 'NanoSizzle Blend-X', 'QuantumPulse Acid', 'RadiantFlare Serum', 'BioQuanta Catalyst', + ]; } \ No newline at end of file diff --git a/src/DataFixtures/images/products/06e2aeec-08dc-4bb5-92d9-3cda1a83f7c9.jpg b/src/DataFixtures/images/products/06e2aeec-08dc-4bb5-92d9-3cda1a83f7c9.jpg new file mode 100644 index 0000000..6dd2b0c Binary files /dev/null and b/src/DataFixtures/images/products/06e2aeec-08dc-4bb5-92d9-3cda1a83f7c9.jpg differ diff --git a/src/DataFixtures/images/products/089-Ask-Bild1.jpg b/src/DataFixtures/images/products/089-Ask-Bild1.jpg new file mode 100644 index 0000000..10380e4 Binary files /dev/null and b/src/DataFixtures/images/products/089-Ask-Bild1.jpg differ diff --git a/src/DataFixtures/images/products/145454_pIhFN2Ugm.webp b/src/DataFixtures/images/products/145454_pIhFN2Ugm.webp new file mode 100644 index 0000000..54b9bdc Binary files /dev/null and b/src/DataFixtures/images/products/145454_pIhFN2Ugm.webp differ diff --git a/src/DataFixtures/images/products/171651_1XE80u3Zy.webp b/src/DataFixtures/images/products/171651_1XE80u3Zy.webp new file mode 100644 index 0000000..4e029be Binary files /dev/null and b/src/DataFixtures/images/products/171651_1XE80u3Zy.webp differ diff --git a/src/DataFixtures/images/products/179210247-chemikalien-in-reagenzgläsern-und-symbolen-die-im-labor-oder-in-der-industrie-verwendet-werden.jpg b/src/DataFixtures/images/products/179210247-chemikalien-in-reagenzgläsern-und-symbolen-die-im-labor-oder-in-der-industrie-verwendet-werden.jpg new file mode 100644 index 0000000..75ce9bb Binary files /dev/null and b/src/DataFixtures/images/products/179210247-chemikalien-in-reagenzgläsern-und-symbolen-die-im-labor-oder-in-der-industrie-verwendet-werden.jpg differ diff --git a/src/DataFixtures/images/products/20230222_Fluorchemikalien-_adpic.jpg b/src/DataFixtures/images/products/20230222_Fluorchemikalien-_adpic.jpg new file mode 100644 index 0000000..c2aeadd Binary files /dev/null and b/src/DataFixtures/images/products/20230222_Fluorchemikalien-_adpic.jpg differ diff --git a/src/DataFixtures/images/products/20368327-vektorsymbol-fur-chemikalien-vektor.jpg b/src/DataFixtures/images/products/20368327-vektorsymbol-fur-chemikalien-vektor.jpg new file mode 100644 index 0000000..99d3e60 Binary files /dev/null and b/src/DataFixtures/images/products/20368327-vektorsymbol-fur-chemikalien-vektor.jpg differ diff --git a/src/DataFixtures/images/products/297744-reagenzglaser-mit-chemikalien-kostenlos-vektor.jpg b/src/DataFixtures/images/products/297744-reagenzglaser-mit-chemikalien-kostenlos-vektor.jpg new file mode 100644 index 0000000..6761e15 Binary files /dev/null and b/src/DataFixtures/images/products/297744-reagenzglaser-mit-chemikalien-kostenlos-vektor.jpg differ diff --git a/src/DataFixtures/images/products/36461009_Chemikalien_Schlierner_Header1-1220x610-1.jpg b/src/DataFixtures/images/products/36461009_Chemikalien_Schlierner_Header1-1220x610-1.jpg new file mode 100644 index 0000000..952d119 Binary files /dev/null and b/src/DataFixtures/images/products/36461009_Chemikalien_Schlierner_Header1-1220x610-1.jpg differ diff --git a/src/DataFixtures/images/products/4954227.png b/src/DataFixtures/images/products/4954227.png new file mode 100644 index 0000000..7efa926 Binary files /dev/null and b/src/DataFixtures/images/products/4954227.png differ diff --git a/src/DataFixtures/images/products/615hboYBEVL._AC_UF894,1000_QL80_.jpg b/src/DataFixtures/images/products/615hboYBEVL._AC_UF894,1000_QL80_.jpg new file mode 100644 index 0000000..450d8a0 Binary files /dev/null and b/src/DataFixtures/images/products/615hboYBEVL._AC_UF894,1000_QL80_.jpg differ diff --git a/src/DataFixtures/images/products/6364c360d3bb5_c-KGNqzCL.webp b/src/DataFixtures/images/products/6364c360d3bb5_c-KGNqzCL.webp new file mode 100644 index 0000000..9732eb3 Binary files /dev/null and b/src/DataFixtures/images/products/6364c360d3bb5_c-KGNqzCL.webp differ diff --git a/src/DataFixtures/images/products/6581938872383176.webp b/src/DataFixtures/images/products/6581938872383176.webp new file mode 100644 index 0000000..4335e10 Binary files /dev/null and b/src/DataFixtures/images/products/6581938872383176.webp differ diff --git a/src/DataFixtures/images/products/71I8kTNrSsL._AC_UF1000,1000_QL80_.jpg b/src/DataFixtures/images/products/71I8kTNrSsL._AC_UF1000,1000_QL80_.jpg new file mode 100644 index 0000000..3f20d32 Binary files /dev/null and b/src/DataFixtures/images/products/71I8kTNrSsL._AC_UF1000,1000_QL80_.jpg differ diff --git a/src/DataFixtures/images/products/94e44c75-cccb-474c-bd9c-1d821e6f368a.jpeg b/src/DataFixtures/images/products/94e44c75-cccb-474c-bd9c-1d821e6f368a.jpeg new file mode 100644 index 0000000..d55ab0c Binary files /dev/null and b/src/DataFixtures/images/products/94e44c75-cccb-474c-bd9c-1d821e6f368a.jpeg differ diff --git a/src/DataFixtures/images/products/Akemi-Chemikaliensilicon.jpg b/src/DataFixtures/images/products/Akemi-Chemikaliensilicon.jpg new file mode 100644 index 0000000..443ef76 Binary files /dev/null and b/src/DataFixtures/images/products/Akemi-Chemikaliensilicon.jpg differ diff --git a/src/DataFixtures/images/products/Bild Chemikalien.png b/src/DataFixtures/images/products/Bild Chemikalien.png new file mode 100644 index 0000000..b0dd6ec Binary files /dev/null and b/src/DataFixtures/images/products/Bild Chemikalien.png differ diff --git a/src/DataFixtures/images/products/Bismuttrioxid.jpg b/src/DataFixtures/images/products/Bismuttrioxid.jpg new file mode 100644 index 0000000..78c9339 Binary files /dev/null and b/src/DataFixtures/images/products/Bismuttrioxid.jpg differ diff --git a/src/DataFixtures/images/products/Chamikalien_1g-2.webp b/src/DataFixtures/images/products/Chamikalien_1g-2.webp new file mode 100644 index 0000000..d521f4f Binary files /dev/null and b/src/DataFixtures/images/products/Chamikalien_1g-2.webp differ diff --git a/src/DataFixtures/images/products/Chemicals.png b/src/DataFixtures/images/products/Chemicals.png new file mode 100644 index 0000000..078d3f1 Binary files /dev/null and b/src/DataFixtures/images/products/Chemicals.png differ diff --git a/src/DataFixtures/images/products/Chemikalien-freist__ScaleWidthWzgwMF0.png b/src/DataFixtures/images/products/Chemikalien-freist__ScaleWidthWzgwMF0.png new file mode 100644 index 0000000..0c9b814 Binary files /dev/null and b/src/DataFixtures/images/products/Chemikalien-freist__ScaleWidthWzgwMF0.png differ diff --git a/src/DataFixtures/images/products/Chemikalien.jpg b/src/DataFixtures/images/products/Chemikalien.jpg new file mode 100644 index 0000000..7156feb Binary files /dev/null and b/src/DataFixtures/images/products/Chemikalien.jpg differ diff --git a/src/DataFixtures/images/products/Chemikalien_Antoine2K.jpg b/src/DataFixtures/images/products/Chemikalien_Antoine2K.jpg new file mode 100644 index 0000000..7bcdd7f Binary files /dev/null and b/src/DataFixtures/images/products/Chemikalien_Antoine2K.jpg differ diff --git a/src/DataFixtures/images/products/Haushaltsreiniger Putzmittel Bürsten, PhotoSG Fotolia 91287005.jpg b/src/DataFixtures/images/products/Haushaltsreiniger Putzmittel Bürsten, PhotoSG Fotolia 91287005.jpg new file mode 100644 index 0000000..a8823a9 Binary files /dev/null and b/src/DataFixtures/images/products/Haushaltsreiniger Putzmittel Bürsten, PhotoSG Fotolia 91287005.jpg differ diff --git a/src/DataFixtures/images/products/IGB_6860.jpg b/src/DataFixtures/images/products/IGB_6860.jpg new file mode 100644 index 0000000..e84df55 Binary files /dev/null and b/src/DataFixtures/images/products/IGB_6860.jpg differ diff --git a/src/DataFixtures/images/products/Leitthema_Chemikalienrecycling_935674692_Fotograf-BlackJack3D_iStock.jpg b/src/DataFixtures/images/products/Leitthema_Chemikalienrecycling_935674692_Fotograf-BlackJack3D_iStock.jpg new file mode 100644 index 0000000..a5283ab Binary files /dev/null and b/src/DataFixtures/images/products/Leitthema_Chemikalienrecycling_935674692_Fotograf-BlackJack3D_iStock.jpg differ diff --git a/src/DataFixtures/images/products/Reagenzglas.jpg b/src/DataFixtures/images/products/Reagenzglas.jpg new file mode 100644 index 0000000..203854f Binary files /dev/null and b/src/DataFixtures/images/products/Reagenzglas.jpg differ diff --git a/src/DataFixtures/images/products/Unternehmen_Umweltauflagen_Bezug_Metallvearbeitungflüssigkeiten, Wasch_Reinigungsmittel_Polymerprodukte.jpg b/src/DataFixtures/images/products/Unternehmen_Umweltauflagen_Bezug_Metallvearbeitungflüssigkeiten, Wasch_Reinigungsmittel_Polymerprodukte.jpg new file mode 100644 index 0000000..1eca849 Binary files /dev/null and b/src/DataFixtures/images/products/Unternehmen_Umweltauflagen_Bezug_Metallvearbeitungflüssigkeiten, Wasch_Reinigungsmittel_Polymerprodukte.jpg differ diff --git a/src/DataFixtures/images/products/Wasser_Umwelt_AdobeStock_285345543_Natali-3000x1687-637x358.jpeg b/src/DataFixtures/images/products/Wasser_Umwelt_AdobeStock_285345543_Natali-3000x1687-637x358.jpeg new file mode 100644 index 0000000..43a6ebf Binary files /dev/null and b/src/DataFixtures/images/products/Wasser_Umwelt_AdobeStock_285345543_Natali-3000x1687-637x358.jpeg differ diff --git a/src/DataFixtures/images/products/a34880.jpg b/src/DataFixtures/images/products/a34880.jpg new file mode 100644 index 0000000..699e486 Binary files /dev/null and b/src/DataFixtures/images/products/a34880.jpg differ diff --git a/src/DataFixtures/images/products/a34885.jpg b/src/DataFixtures/images/products/a34885.jpg new file mode 100644 index 0000000..14669f8 Binary files /dev/null and b/src/DataFixtures/images/products/a34885.jpg differ diff --git a/src/DataFixtures/images/products/abfall_chemikalien.jpg b/src/DataFixtures/images/products/abfall_chemikalien.jpg new file mode 100644 index 0000000..119eeeb Binary files /dev/null and b/src/DataFixtures/images/products/abfall_chemikalien.jpg differ diff --git a/src/DataFixtures/images/products/adea669d-9924-4909-9d79-9143cb010eef_w960_r1.778_fpx63_fpy52.jpg b/src/DataFixtures/images/products/adea669d-9924-4909-9d79-9143cb010eef_w960_r1.778_fpx63_fpy52.jpg new file mode 100644 index 0000000..0cb1691 Binary files /dev/null and b/src/DataFixtures/images/products/adea669d-9924-4909-9d79-9143cb010eef_w960_r1.778_fpx63_fpy52.jpg differ diff --git a/src/DataFixtures/images/products/adobestock_611392391_chemikalien.jpeg b/src/DataFixtures/images/products/adobestock_611392391_chemikalien.jpeg new file mode 100644 index 0000000..5169e50 Binary files /dev/null and b/src/DataFixtures/images/products/adobestock_611392391_chemikalien.jpeg differ diff --git a/src/DataFixtures/images/products/angetrieben-von-chemikalien.jpg b/src/DataFixtures/images/products/angetrieben-von-chemikalien.jpg new file mode 100644 index 0000000..97ef295 Binary files /dev/null and b/src/DataFixtures/images/products/angetrieben-von-chemikalien.jpg differ diff --git a/src/DataFixtures/images/products/becher-mit-den-reagenzgläsern-gefüllt-mit-chemikalien-58624587.webp b/src/DataFixtures/images/products/becher-mit-den-reagenzgläsern-gefüllt-mit-chemikalien-58624587.webp new file mode 100644 index 0000000..64fd788 Binary files /dev/null and b/src/DataFixtures/images/products/becher-mit-den-reagenzgläsern-gefüllt-mit-chemikalien-58624587.webp differ diff --git a/src/DataFixtures/images/products/bi2o3_chda_-2.jpg b/src/DataFixtures/images/products/bi2o3_chda_-2.jpg new file mode 100644 index 0000000..d1820a3 Binary files /dev/null and b/src/DataFixtures/images/products/bi2o3_chda_-2.jpg differ diff --git a/src/DataFixtures/images/products/bunte-chemikalien-12777275.webp b/src/DataFixtures/images/products/bunte-chemikalien-12777275.webp new file mode 100644 index 0000000..1b0c0d2 Binary files /dev/null and b/src/DataFixtures/images/products/bunte-chemikalien-12777275.webp differ diff --git a/src/DataFixtures/images/products/cg_chemikalien_group_rexx_systems-1024x538.jpg b/src/DataFixtures/images/products/cg_chemikalien_group_rexx_systems-1024x538.jpg new file mode 100644 index 0000000..4983069 Binary files /dev/null and b/src/DataFixtures/images/products/cg_chemikalien_group_rexx_systems-1024x538.jpg differ diff --git a/src/DataFixtures/images/products/chemikalien-1.jpg b/src/DataFixtures/images/products/chemikalien-1.jpg new file mode 100644 index 0000000..9b6ec51 Binary files /dev/null and b/src/DataFixtures/images/products/chemikalien-1.jpg differ diff --git a/src/DataFixtures/images/products/chemikalien-artikel2.jpeg b/src/DataFixtures/images/products/chemikalien-artikel2.jpeg new file mode 100644 index 0000000..8ba20b8 Binary files /dev/null and b/src/DataFixtures/images/products/chemikalien-artikel2.jpeg differ diff --git a/src/DataFixtures/images/products/chemikalien-im-labor-700-119730440.jpg b/src/DataFixtures/images/products/chemikalien-im-labor-700-119730440.jpg new file mode 100644 index 0000000..af8b673 Binary files /dev/null and b/src/DataFixtures/images/products/chemikalien-im-labor-700-119730440.jpg differ diff --git a/src/DataFixtures/images/products/chemikalien-im-wasser.jpg b/src/DataFixtures/images/products/chemikalien-im-wasser.jpg new file mode 100644 index 0000000..b30a139 Binary files /dev/null and b/src/DataFixtures/images/products/chemikalien-im-wasser.jpg differ diff --git a/src/DataFixtures/images/products/chemikalien.webp b/src/DataFixtures/images/products/chemikalien.webp new file mode 100644 index 0000000..cc9b236 Binary files /dev/null and b/src/DataFixtures/images/products/chemikalien.webp differ diff --git a/src/DataFixtures/images/products/chemikalien_AdobeStock_116776874.webp b/src/DataFixtures/images/products/chemikalien_AdobeStock_116776874.webp new file mode 100644 index 0000000..fcae693 Binary files /dev/null and b/src/DataFixtures/images/products/chemikalien_AdobeStock_116776874.webp differ diff --git a/src/DataFixtures/images/products/csm_Fotolia_21280019_M_Gefahrstoffe_d82c07547d.jpg b/src/DataFixtures/images/products/csm_Fotolia_21280019_M_Gefahrstoffe_d82c07547d.jpg new file mode 100644 index 0000000..b6b4e49 Binary files /dev/null and b/src/DataFixtures/images/products/csm_Fotolia_21280019_M_Gefahrstoffe_d82c07547d.jpg differ diff --git a/src/DataFixtures/images/products/csm_KI_Becherglas_bunt_84e57f1426.jpg b/src/DataFixtures/images/products/csm_KI_Becherglas_bunt_84e57f1426.jpg new file mode 100644 index 0000000..1d8fe57 Binary files /dev/null and b/src/DataFixtures/images/products/csm_KI_Becherglas_bunt_84e57f1426.jpg differ diff --git a/src/DataFixtures/images/products/enghals-chemikalien-flaschen_00018802.webp b/src/DataFixtures/images/products/enghals-chemikalien-flaschen_00018802.webp new file mode 100644 index 0000000..d8edcd2 Binary files /dev/null and b/src/DataFixtures/images/products/enghals-chemikalien-flaschen_00018802.webp differ diff --git a/src/DataFixtures/images/products/enghals-chemikalien-flaschen_00026892.webp b/src/DataFixtures/images/products/enghals-chemikalien-flaschen_00026892.webp new file mode 100644 index 0000000..1d12487 Binary files /dev/null and b/src/DataFixtures/images/products/enghals-chemikalien-flaschen_00026892.webp differ diff --git a/src/DataFixtures/images/products/gefahrstoffe_a_bruno_fotolia_24886834_m.jpg b/src/DataFixtures/images/products/gefahrstoffe_a_bruno_fotolia_24886834_m.jpg new file mode 100644 index 0000000..a0eca98 Binary files /dev/null and b/src/DataFixtures/images/products/gefahrstoffe_a_bruno_fotolia_24886834_m.jpg differ diff --git a/src/DataFixtures/images/products/greenpeace.avif b/src/DataFixtures/images/products/greenpeace.avif new file mode 100644 index 0000000..d44620c Binary files /dev/null and b/src/DataFixtures/images/products/greenpeace.avif differ diff --git a/src/DataFixtures/images/products/images.jpg b/src/DataFixtures/images/products/images.jpg new file mode 100644 index 0000000..420dc5f Binary files /dev/null and b/src/DataFixtures/images/products/images.jpg differ diff --git a/src/DataFixtures/images/products/impact-story-Chemicals-cover.webp b/src/DataFixtures/images/products/impact-story-Chemicals-cover.webp new file mode 100644 index 0000000..d105a99 Binary files /dev/null and b/src/DataFixtures/images/products/impact-story-Chemicals-cover.webp differ diff --git a/src/DataFixtures/images/products/istock-1355779437.jpg b/src/DataFixtures/images/products/istock-1355779437.jpg new file mode 100644 index 0000000..b9860c4 Binary files /dev/null and b/src/DataFixtures/images/products/istock-1355779437.jpg differ diff --git a/src/DataFixtures/images/products/justrite-notfall-set-chemikalien--1032976--470x470--p.jpg b/src/DataFixtures/images/products/justrite-notfall-set-chemikalien--1032976--470x470--p.jpg new file mode 100644 index 0000000..6570fdc Binary files /dev/null and b/src/DataFixtures/images/products/justrite-notfall-set-chemikalien--1032976--470x470--p.jpg differ diff --git a/src/DataFixtures/images/products/labor-120~_v-varm_88873b.jpg b/src/DataFixtures/images/products/labor-120~_v-varm_88873b.jpg new file mode 100644 index 0000000..8ed187d Binary files /dev/null and b/src/DataFixtures/images/products/labor-120~_v-varm_88873b.jpg differ diff --git a/src/DataFixtures/images/products/leadImage.jpg b/src/DataFixtures/images/products/leadImage.jpg new file mode 100644 index 0000000..ec3021c Binary files /dev/null and b/src/DataFixtures/images/products/leadImage.jpg differ diff --git a/src/DataFixtures/images/products/pipettieren-einer-oelprobe-zur-erforschung-von-medizin-und-chemikalien-CAVF95337.jpg b/src/DataFixtures/images/products/pipettieren-einer-oelprobe-zur-erforschung-von-medizin-und-chemikalien-CAVF95337.jpg new file mode 100644 index 0000000..cc386ec Binary files /dev/null and b/src/DataFixtures/images/products/pipettieren-einer-oelprobe-zur-erforschung-von-medizin-und-chemikalien-CAVF95337.jpg differ diff --git a/src/DataFixtures/images/products/pngtree-chemicals-icon-in-trendy-style-isolated-background-png-image_1554545.jpg b/src/DataFixtures/images/products/pngtree-chemicals-icon-in-trendy-style-isolated-background-png-image_1554545.jpg new file mode 100644 index 0000000..560722c Binary files /dev/null and b/src/DataFixtures/images/products/pngtree-chemicals-icon-in-trendy-style-isolated-background-png-image_1554545.jpg differ diff --git a/src/DataFixtures/images/products/shutterstock_1561135202-800x450.jpg b/src/DataFixtures/images/products/shutterstock_1561135202-800x450.jpg new file mode 100644 index 0000000..d701bd1 Binary files /dev/null and b/src/DataFixtures/images/products/shutterstock_1561135202-800x450.jpg differ diff --git a/src/DataFixtures/images/products/spicytruffel-AdobeStock_316542333-Konvertiert.jpg b/src/DataFixtures/images/products/spicytruffel-AdobeStock_316542333-Konvertiert.jpg new file mode 100644 index 0000000..a75dfc7 Binary files /dev/null and b/src/DataFixtures/images/products/spicytruffel-AdobeStock_316542333-Konvertiert.jpg differ diff --git a/src/DataFixtures/images/products/streitfall-chemikalien-wer.webp b/src/DataFixtures/images/products/streitfall-chemikalien-wer.webp new file mode 100644 index 0000000..e751d56 Binary files /dev/null and b/src/DataFixtures/images/products/streitfall-chemikalien-wer.webp differ diff --git a/src/DataFixtures/images/products/symbol-fuer-die-linie-der-flasche-mit-chemikalien_116137-5518.avif b/src/DataFixtures/images/products/symbol-fuer-die-linie-der-flasche-mit-chemikalien_116137-5518.avif new file mode 100644 index 0000000..bac6022 Binary files /dev/null and b/src/DataFixtures/images/products/symbol-fuer-die-linie-der-flasche-mit-chemikalien_116137-5518.avif differ diff --git a/src/DataFixtures/images/products/teaserbox_2419937771.jpg b/src/DataFixtures/images/products/teaserbox_2419937771.jpg new file mode 100644 index 0000000..0e08eb5 Binary files /dev/null and b/src/DataFixtures/images/products/teaserbox_2419937771.jpg differ diff --git a/src/DataFixtures/images/products/teaserbox_2446472365.jpg b/src/DataFixtures/images/products/teaserbox_2446472365.jpg new file mode 100644 index 0000000..2abd4be Binary files /dev/null and b/src/DataFixtures/images/products/teaserbox_2446472365.jpg differ diff --git a/src/DataFixtures/images/products/teaserbox_2449303018.jpg b/src/DataFixtures/images/products/teaserbox_2449303018.jpg new file mode 100644 index 0000000..e6e659f Binary files /dev/null and b/src/DataFixtures/images/products/teaserbox_2449303018.jpg differ diff --git a/src/DataFixtures/images/products/teaserbox_2450499236.jpg b/src/DataFixtures/images/products/teaserbox_2450499236.jpg new file mode 100644 index 0000000..1c4691c Binary files /dev/null and b/src/DataFixtures/images/products/teaserbox_2450499236.jpg differ diff --git a/src/DataFixtures/images/products/teaserbox_2462792495.jpg b/src/DataFixtures/images/products/teaserbox_2462792495.jpg new file mode 100644 index 0000000..af2ec62 Binary files /dev/null and b/src/DataFixtures/images/products/teaserbox_2462792495.jpg differ diff --git a/src/DataFixtures/images/products/teaserbox_2462830751.JPG b/src/DataFixtures/images/products/teaserbox_2462830751.JPG new file mode 100644 index 0000000..fe19c52 Binary files /dev/null and b/src/DataFixtures/images/products/teaserbox_2462830751.JPG differ diff --git a/src/DataFixtures/images/products/teaserbox_2473428103.JPG b/src/DataFixtures/images/products/teaserbox_2473428103.JPG new file mode 100644 index 0000000..634c942 Binary files /dev/null and b/src/DataFixtures/images/products/teaserbox_2473428103.JPG differ diff --git a/src/DataFixtures/images/products/urinprobe_bildquelle_joergbeuge_fotolia_27589149_m.jpg b/src/DataFixtures/images/products/urinprobe_bildquelle_joergbeuge_fotolia_27589149_m.jpg new file mode 100644 index 0000000..3814fb2 Binary files /dev/null and b/src/DataFixtures/images/products/urinprobe_bildquelle_joergbeuge_fotolia_27589149_m.jpg differ diff --git a/src/DataFixtures/images/products/weithals-chemikalien-flaschen_00018762.webp b/src/DataFixtures/images/products/weithals-chemikalien-flaschen_00018762.webp new file mode 100644 index 0000000..7515744 Binary files /dev/null and b/src/DataFixtures/images/products/weithals-chemikalien-flaschen_00018762.webp differ diff --git a/src/DataFixtures/images/users/4798951-smurfs_color_pictures_poet_smurf.jpg b/src/DataFixtures/images/users/4798951-smurfs_color_pictures_poet_smurf.jpg new file mode 100644 index 0000000..a989020 Binary files /dev/null and b/src/DataFixtures/images/users/4798951-smurfs_color_pictures_poet_smurf.jpg differ diff --git a/src/DataFixtures/images/users/4798991-schtroumpf-paresseux.jpg b/src/DataFixtures/images/users/4798991-schtroumpf-paresseux.jpg new file mode 100644 index 0000000..04176be Binary files /dev/null and b/src/DataFixtures/images/users/4798991-schtroumpf-paresseux.jpg differ diff --git a/src/DataFixtures/images/users/5e354e4c73be4d0ef14e6b761b27e25e.png b/src/DataFixtures/images/users/5e354e4c73be4d0ef14e6b761b27e25e.png new file mode 100644 index 0000000..894273d Binary files /dev/null and b/src/DataFixtures/images/users/5e354e4c73be4d0ef14e6b761b27e25e.png differ diff --git a/src/DataFixtures/images/users/819027-brainy.jpg b/src/DataFixtures/images/users/819027-brainy.jpg new file mode 100644 index 0000000..9fec5df Binary files /dev/null and b/src/DataFixtures/images/users/819027-brainy.jpg differ diff --git a/src/DataFixtures/images/users/Gizmo_Smurf_Vic_George.webp b/src/DataFixtures/images/users/Gizmo_Smurf_Vic_George.webp new file mode 100644 index 0000000..8b9c6ec Binary files /dev/null and b/src/DataFixtures/images/users/Gizmo_Smurf_Vic_George.webp differ diff --git a/src/DataFixtures/images/users/Handy_Comic_Book.webp b/src/DataFixtures/images/users/Handy_Comic_Book.webp new file mode 100644 index 0000000..a2b80f4 Binary files /dev/null and b/src/DataFixtures/images/users/Handy_Comic_Book.webp differ diff --git a/src/DataFixtures/images/users/SmurfCovidCartoonCharacter.SMjpg.webp b/src/DataFixtures/images/users/SmurfCovidCartoonCharacter.SMjpg.webp new file mode 100644 index 0000000..6236d1d Binary files /dev/null and b/src/DataFixtures/images/users/SmurfCovidCartoonCharacter.SMjpg.webp differ diff --git a/src/DataFixtures/images/users/c2c97f0614837c506b5d25820988f6dc.jpg b/src/DataFixtures/images/users/c2c97f0614837c506b5d25820988f6dc.jpg new file mode 100644 index 0000000..2449fcb Binary files /dev/null and b/src/DataFixtures/images/users/c2c97f0614837c506b5d25820988f6dc.jpg differ diff --git a/src/DataFixtures/images/users/e5f648d978973e3db259226929789f1d.jpg b/src/DataFixtures/images/users/e5f648d978973e3db259226929789f1d.jpg new file mode 100644 index 0000000..61166cf Binary files /dev/null and b/src/DataFixtures/images/users/e5f648d978973e3db259226929789f1d.jpg differ diff --git a/src/DataFixtures/images/users/images.jpg b/src/DataFixtures/images/users/images.jpg new file mode 100644 index 0000000..2cd74a9 Binary files /dev/null and b/src/DataFixtures/images/users/images.jpg differ diff --git a/src/DataFixtures/images/users/images.png b/src/DataFixtures/images/users/images.png new file mode 100644 index 0000000..f08553e Binary files /dev/null and b/src/DataFixtures/images/users/images.png differ diff --git a/src/DataFixtures/images/users/slouchy-smurfling-tv-characters-photo-u1.jpg b/src/DataFixtures/images/users/slouchy-smurfling-tv-characters-photo-u1.jpg new file mode 100644 index 0000000..7d24073 Binary files /dev/null and b/src/DataFixtures/images/users/slouchy-smurfling-tv-characters-photo-u1.jpg differ diff --git a/src/DataFixtures/images/users/tailor-smurf-tv-characters-photo-u1.jpg b/src/DataFixtures/images/users/tailor-smurf-tv-characters-photo-u1.jpg new file mode 100644 index 0000000..c3ba0c3 Binary files /dev/null and b/src/DataFixtures/images/users/tailor-smurf-tv-characters-photo-u1.jpg differ diff --git a/src/DataFixtures/images/users/the-king-tv-characters-photo-u1.jpg b/src/DataFixtures/images/users/the-king-tv-characters-photo-u1.jpg new file mode 100644 index 0000000..395d928 Binary files /dev/null and b/src/DataFixtures/images/users/the-king-tv-characters-photo-u1.jpg differ diff --git a/src/DataFixtures/images/users/the-smurfette-brainy-smurf-papa-smurf-the-smurfs-blonde-hair-cartoon-characters.jpg b/src/DataFixtures/images/users/the-smurfette-brainy-smurf-papa-smurf-the-smurfs-blonde-hair-cartoon-characters.jpg new file mode 100644 index 0000000..3831745 Binary files /dev/null and b/src/DataFixtures/images/users/the-smurfette-brainy-smurf-papa-smurf-the-smurfs-blonde-hair-cartoon-characters.jpg differ diff --git a/src/Entity/MediaObject.php b/src/Entity/MediaObject.php index ab750dc..d2658a4 100644 --- a/src/Entity/MediaObject.php +++ b/src/Entity/MediaObject.php @@ -55,7 +55,8 @@ use Vich\UploaderBundle\Mapping\Annotation as Vich; // controller: DeleteMediaObjectAction::class ), ], - normalizationContext: ['groups' => ['media_object:read']] + normalizationContext: ['groups' => ['media_object:read']], + security: 'is_granted("ROLE_USER")', )] class MediaObject { diff --git a/src/Entity/Product.php b/src/Entity/Product.php new file mode 100644 index 0000000..6504592 --- /dev/null +++ b/src/Entity/Product.php @@ -0,0 +1,79 @@ +createdAt = new \DateTimeImmutable(); + } + + public function getId(): ?int + { + return $this->id; + } + + 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 getImage(): ?MediaObject + { + return $this->image; + } + + public function setImage(?MediaObject $image): static + { + $this->image = $image; + + return $this; + } + + public function getCreatedAt(): ?\DateTimeImmutable + { + return $this->createdAt; + } +} diff --git a/src/Entity/User.php b/src/Entity/User.php index d2539e0..1641bbe 100644 --- a/src/Entity/User.php +++ b/src/Entity/User.php @@ -27,6 +27,9 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface #[ORM\Column(length: 255)] private ?string $lastName = null; + #[ORM\ManyToOne] + private ?MediaObject $image = null; + #[ORM\Column] private array $roles = []; @@ -151,6 +154,16 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface return $this; } + public function getImage(): ?MediaObject + { + return $this->image; + } + + public function setImage(?MediaObject $image): void + { + $this->image = $image; + } + public function getCreatedAt(): ?\DateTimeImmutable { return $this->createdAt; diff --git a/src/Factory/ContactFactory.php b/src/Factory/ContactFactory.php index 66f531f..46fa2e7 100644 --- a/src/Factory/ContactFactory.php +++ b/src/Factory/ContactFactory.php @@ -55,7 +55,7 @@ final class ContactFactory extends ModelFactory 'phone' => self::faker()->phoneNumber(), 'email' => self::faker()->email(), 'partner' => PartnerFactory::random(), - 'image' => MediaObjectProfileFactory::random() + 'image' => MediaObjectContactFactory::random() ]; } diff --git a/src/Factory/MediaObjectProfileFactory.php b/src/Factory/MediaObjectContactFactory.php similarity index 98% rename from src/Factory/MediaObjectProfileFactory.php rename to src/Factory/MediaObjectContactFactory.php index 549ed11..2ea0cb7 100644 --- a/src/Factory/MediaObjectProfileFactory.php +++ b/src/Factory/MediaObjectContactFactory.php @@ -31,7 +31,7 @@ use Zenstruck\Foundry\RepositoryProxy; * @method static MediaObject[]|Proxy[] randomRange(int $min, int $max, array $attributes = []) * @method static MediaObject[]|Proxy[] randomSet(int $number, array $attributes = []) */ -final class MediaObjectProfileFactory extends ModelFactory +final class MediaObjectContactFactory extends ModelFactory { /** * @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#factories-as-services diff --git a/src/Factory/MediaObjectProductFactory.php b/src/Factory/MediaObjectProductFactory.php new file mode 100644 index 0000000..9ebf8fc --- /dev/null +++ b/src/Factory/MediaObjectProductFactory.php @@ -0,0 +1,83 @@ + + * + * @method MediaObject|Proxy create(array|callable $attributes = []) + * @method static MediaObject|Proxy createOne(array $attributes = []) + * @method static MediaObject|Proxy find(object|array|mixed $criteria) + * @method static MediaObject|Proxy findOrCreate(array $attributes) + * @method static MediaObject|Proxy first(string $sortedField = 'id') + * @method static MediaObject|Proxy last(string $sortedField = 'id') + * @method static MediaObject|Proxy random(array $attributes = []) + * @method static MediaObject|Proxy randomOrCreate(array $attributes = []) + * @method static EntityRepository|RepositoryProxy repository() + * @method static MediaObject[]|Proxy[] all() + * @method static MediaObject[]|Proxy[] createMany(int $number, array|callable $attributes = []) + * @method static MediaObject[]|Proxy[] createSequence(iterable|callable $sequence) + * @method static MediaObject[]|Proxy[] findBy(array $attributes) + * @method static MediaObject[]|Proxy[] randomRange(int $min, int $max, array $attributes = []) + * @method static MediaObject[]|Proxy[] randomSet(int $number, array $attributes = []) + */ +final class MediaObjectProductFactory extends ModelFactory +{ + /** + * @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#factories-as-services + * + * @todo inject services if required + */ + public function __construct( + private KernelInterface $appKernel + ) + { + parent::__construct(); + } + + /** + * @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#model-factories + * + * @todo add your default values here + */ + protected function getDefaults(): array + { + $projectRoot = $this->appKernel->getProjectDir(); + + $folderPath = $projectRoot . '/src/DataFixtures/images/products/'; + $files = glob($folderPath . '*.*'); + $randomFile = null; + if ($files !== false && count($files) > 0) { + $randomFile = $files[array_rand($files)]; + } + + return [ + 'file' => new ReplacingFile($randomFile) + ]; + } + + /** + * @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#initialization + */ + protected function initialize(): self + { + return $this + // ->afterInstantiate(function(MediaObject $mediaObject): void {}) + ; + } + + protected static function getClass(): string + { + return MediaObject::class; + } +} diff --git a/src/Factory/MediaObjectUserFactory.php b/src/Factory/MediaObjectUserFactory.php new file mode 100644 index 0000000..1b3bbff --- /dev/null +++ b/src/Factory/MediaObjectUserFactory.php @@ -0,0 +1,83 @@ + + * + * @method MediaObject|Proxy create(array|callable $attributes = []) + * @method static MediaObject|Proxy createOne(array $attributes = []) + * @method static MediaObject|Proxy find(object|array|mixed $criteria) + * @method static MediaObject|Proxy findOrCreate(array $attributes) + * @method static MediaObject|Proxy first(string $sortedField = 'id') + * @method static MediaObject|Proxy last(string $sortedField = 'id') + * @method static MediaObject|Proxy random(array $attributes = []) + * @method static MediaObject|Proxy randomOrCreate(array $attributes = []) + * @method static EntityRepository|RepositoryProxy repository() + * @method static MediaObject[]|Proxy[] all() + * @method static MediaObject[]|Proxy[] createMany(int $number, array|callable $attributes = []) + * @method static MediaObject[]|Proxy[] createSequence(iterable|callable $sequence) + * @method static MediaObject[]|Proxy[] findBy(array $attributes) + * @method static MediaObject[]|Proxy[] randomRange(int $min, int $max, array $attributes = []) + * @method static MediaObject[]|Proxy[] randomSet(int $number, array $attributes = []) + */ +final class MediaObjectUserFactory extends ModelFactory +{ + /** + * @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#factories-as-services + * + * @todo inject services if required + */ + public function __construct( + private KernelInterface $appKernel + ) + { + parent::__construct(); + } + + /** + * @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#model-factories + * + * @todo add your default values here + */ + protected function getDefaults(): array + { + $projectRoot = $this->appKernel->getProjectDir(); + + $folderPath = $projectRoot . '/src/DataFixtures/images/users/'; + $files = glob($folderPath . '*.*'); + $randomFile = null; + if ($files !== false && count($files) > 0) { + $randomFile = $files[array_rand($files)]; + } + + return [ + 'file' => new ReplacingFile($randomFile) + ]; + } + + /** + * @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#initialization + */ + protected function initialize(): self + { + return $this + // ->afterInstantiate(function(MediaObject $mediaObject): void {}) + ; + } + + protected static function getClass(): string + { + return MediaObject::class; + } +} diff --git a/src/Factory/ProductFactory.php b/src/Factory/ProductFactory.php new file mode 100644 index 0000000..f52fe58 --- /dev/null +++ b/src/Factory/ProductFactory.php @@ -0,0 +1,71 @@ + + * + * @method Product|Proxy create(array|callable $attributes = []) + * @method static Product|Proxy createOne(array $attributes = []) + * @method static Product|Proxy find(object|array|mixed $criteria) + * @method static Product|Proxy findOrCreate(array $attributes) + * @method static Product|Proxy first(string $sortedField = 'id') + * @method static Product|Proxy last(string $sortedField = 'id') + * @method static Product|Proxy random(array $attributes = []) + * @method static Product|Proxy randomOrCreate(array $attributes = []) + * @method static ProductRepository|RepositoryProxy repository() + * @method static Product[]|Proxy[] all() + * @method static Product[]|Proxy[] createMany(int $number, array|callable $attributes = []) + * @method static Product[]|Proxy[] createSequence(iterable|callable $sequence) + * @method static Product[]|Proxy[] findBy(array $attributes) + * @method static Product[]|Proxy[] randomRange(int $min, int $max, array $attributes = []) + * @method static Product[]|Proxy[] randomSet(int $number, array $attributes = []) + */ +final class ProductFactory extends ModelFactory +{ + /** + * @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#factories-as-services + * + * @todo inject services if required + */ + public function __construct() + { + parent::__construct(); + } + + /** + * @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#model-factories + * + * @todo add your default values here + */ + protected function getDefaults(): array + { + return [ + 'name' => self::faker()->randomElement(FakeValues::PRODUCTS), + 'description' => self::faker()->text(), + 'image' => MediaObjectProductFactory::createOne(), + ]; + } + + /** + * @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#initialization + */ + protected function initialize(): self + { + return $this + // ->afterInstantiate(function(Product $product): void {}) + ; + } + + protected static function getClass(): string + { + return Product::class; + } +} diff --git a/src/Factory/UserFactory.php b/src/Factory/UserFactory.php index 31bae4e..cc85b0f 100644 --- a/src/Factory/UserFactory.php +++ b/src/Factory/UserFactory.php @@ -31,22 +31,6 @@ use Zenstruck\Foundry\RepositoryProxy; */ final class UserFactory extends ModelFactory { - const FIRST_NAMES = [ - 'Alice', 'Bob', 'Charlie', 'David', 'Emma', - 'Frank', 'Grace', 'Henry', 'Ivy', 'Jack', - 'Kate', 'Liam', 'Mia', 'Noah', 'Olivia', - 'Paul', 'Quinn', 'Ryan', 'Sophia', 'Thomas', - 'Ursula', 'Victor', 'Wendy', 'Xander', 'Yvonne' - ]; - - const LAST_NAMES = [ - 'Smith', 'Johnson', 'Williams', 'Jones', 'Brown', - 'Davis', 'Miller', 'Wilson', 'Moore', 'Taylor', - 'Anderson', 'Thomas', 'Jackson', 'White', 'Harris', - 'Martin', 'Thompson', 'Garcia', 'Martinez', 'Robinson', - 'Clark', 'Lewis', 'Lee', 'Walker', 'Hall' - ]; - /** * @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#factories-as-services * @@ -68,6 +52,7 @@ final class UserFactory extends ModelFactory 'email' => self::faker()->email(), 'firstName' => self::faker()->firstName(), 'lastName' => self::faker()->lastName(), + 'image' => MediaObjectUserFactory::createOne(), 'password' => "test", 'roles' => [], ]; diff --git a/src/Mapper/ProductApiToEntityMapper.php b/src/Mapper/ProductApiToEntityMapper.php new file mode 100644 index 0000000..f09fdf9 --- /dev/null +++ b/src/Mapper/ProductApiToEntityMapper.php @@ -0,0 +1,47 @@ +id ? $this->repository->find($dto->id) : new Product(); + if (!$entity) { + throw new \Exception('Product not found'); + } + + return $entity; + } + + public function populate(object $from, object $to, array $context): object + { + $dto = $from; + assert($dto instanceof ProductApi); + $entity = $to; + assert($entity instanceof Product); + + $entity->setName($dto->name); + $entity->setDescription($dto->description); + $entity->setImage($dto->image); + + return $entity; + } +} diff --git a/src/Mapper/ProductEntityToApiMapper.php b/src/Mapper/ProductEntityToApiMapper.php new file mode 100644 index 0000000..356521c --- /dev/null +++ b/src/Mapper/ProductEntityToApiMapper.php @@ -0,0 +1,43 @@ +id = $entity->getId(); + + return $dto; + } + + public function populate(object $from, object $to, array $context): object + { + $entity = $from; + $dto = $to; + assert($entity instanceof Product); + assert($dto instanceof ProductApi); + + $dto->name = $entity->getName(); + $dto->description = $entity->getDescription(); + $dto->image = $entity->getImage(); + $dto->imageUrl = $this->fileUrlService->getFileUrl($entity->getImage()); + return $dto; + } +} diff --git a/src/Repository/ProductRepository.php b/src/Repository/ProductRepository.php new file mode 100644 index 0000000..862b684 --- /dev/null +++ b/src/Repository/ProductRepository.php @@ -0,0 +1,48 @@ + + * + * @method Product|null find($id, $lockMode = null, $lockVersion = null) + * @method Product|null findOneBy(array $criteria, array $orderBy = null) + * @method Product[] findAll() + * @method Product[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) + */ +class ProductRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Product::class); + } + + // /** + // * @return Product[] Returns an array of Product 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): ?Product + // { + // return $this->createQueryBuilder('p') + // ->andWhere('p.exampleField = :val') + // ->setParameter('val', $value) + // ->getQuery() + // ->getOneOrNullResult() + // ; + // } +} diff --git a/tests/Functional/CommentResourceTest.php b/tests/Functional/CommentResourceTest.php index b0fc8cf..c9a3004 100644 --- a/tests/Functional/CommentResourceTest.php +++ b/tests/Functional/CommentResourceTest.php @@ -10,7 +10,7 @@ namespace App\Tests\Functional; use App\Enum\PartnerType; use App\Factory\CommentFactory; use App\Factory\MediaObjectLogoFactory; -use App\Factory\MediaObjectProfileFactory; +use App\Factory\MediaObjectContactFactory; use App\Factory\PartnerFactory; use App\Factory\PostingFactory; use App\Factory\UserFactory; diff --git a/tests/Functional/ContactResourceTest.php b/tests/Functional/ContactResourceTest.php index a71b35b..fabae5e 100644 --- a/tests/Functional/ContactResourceTest.php +++ b/tests/Functional/ContactResourceTest.php @@ -9,7 +9,7 @@ namespace App\Tests\Functional; use App\Enum\PartnerType; use App\Factory\MediaObjectLogoFactory; -use App\Factory\MediaObjectProfileFactory; +use App\Factory\MediaObjectContactFactory; use App\Factory\PartnerFactory; use App\Factory\UserFactory; use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTTokenManagerInterface; @@ -45,7 +45,7 @@ class ContactResourceTest extends KernelTestCase ] ); - $mediaObject = MediaObjectProfileFactory::createOne(); + $mediaObject = MediaObjectContactFactory::createOne(); $token = $this->JWTManager->create($user->object()); @@ -56,7 +56,7 @@ class ContactResourceTest extends KernelTestCase 'lastName' => 'Test', 'partner' => '/api/partners/' . $partner->getId(), 'birthday' => '1984-02-10', - 'image' => '/api/medias/' . $mediaObject->getId(), + 'image' => '/api/media/' . $mediaObject->getId(), 'position' => 'CEO', 'phone' => '123456789', 'email' => 'peter@test2.de', @@ -80,7 +80,7 @@ class ContactResourceTest extends KernelTestCase ; $this->browser() - ->delete('/api/medias/' . $mediaObject->getId(), [ + ->delete('/api/media/' . $mediaObject->getId(), [ 'headers' => [ 'Authorization' => 'Bearer ' . $token, ], diff --git a/tests/Functional/MediaObjectResourceTest.php b/tests/Functional/MediaObjectResourceTest.php index 23ac1c3..ab81ccc 100644 --- a/tests/Functional/MediaObjectResourceTest.php +++ b/tests/Functional/MediaObjectResourceTest.php @@ -53,7 +53,7 @@ class MediaObjectResourceTest extends KernelTestCase $token = $this->JWTManager->create($user->object()); $this->browser() - ->post('/api/medias', [ + ->post('/api/media', [ 'headers' => [ 'Authorization' => 'Bearer ' . $token, 'Content-Type' => 'multipart/form-data' @@ -72,14 +72,14 @@ class MediaObjectResourceTest extends KernelTestCase 'Authorization' => 'Bearer ' . $token, ], 'json' => [ - 'logo' => '/api/medias/1' + 'logo' => '/api/media/1' ] ]) ->assertSuccessful() ; $this->browser() - ->delete('/api/medias/1', [ + ->delete('/api/media/1', [ 'headers' => [ 'Authorization' => 'Bearer ' . $token, 'Content-Type' => 'multipart/form-data' @@ -102,7 +102,7 @@ class MediaObjectResourceTest extends KernelTestCase ); $token = $this->JWTManager->create($user->object()); $this->browser() - ->delete('/api/medias/' . $mediaObject->getId(), [ + ->delete('/api/media/' . $mediaObject->getId(), [ 'headers' => [ 'Authorization' => 'Bearer ' . $token, 'Content-Type' => 'multipart/form-data' diff --git a/tests/Functional/PartnerResourceTest.php b/tests/Functional/PartnerResourceTest.php index 7abfea0..f728b5d 100644 --- a/tests/Functional/PartnerResourceTest.php +++ b/tests/Functional/PartnerResourceTest.php @@ -55,7 +55,7 @@ class PartnerResourceTest extends KernelTestCase 'city' => 'test city', 'country' => 'test country', 'website' => 'wwe.test.de', - 'logo' => '/api/medias/' . $mediaObject->getId(), + 'logo' => '/api/media/' . $mediaObject->getId(), ], 'headers' => [ 'Authorization' => 'Bearer ' . $token, @@ -79,7 +79,7 @@ class PartnerResourceTest extends KernelTestCase ; $this->browser() - ->delete('/api/medias/' . $mediaObject->getId(), [ + ->delete('/api/media/' . $mediaObject->getId(), [ 'headers' => [ 'Authorization' => 'Bearer ' . $token, ], diff --git a/tests/Functional/PostingResourceTest.php b/tests/Functional/PostingResourceTest.php index 7326001..62d98f9 100644 --- a/tests/Functional/PostingResourceTest.php +++ b/tests/Functional/PostingResourceTest.php @@ -9,7 +9,7 @@ namespace App\Tests\Functional; use App\Factory\ContactFactory; use App\Factory\MediaObjectLogoFactory; -use App\Factory\MediaObjectProfileFactory; +use App\Factory\MediaObjectContactFactory; use App\Factory\PartnerFactory; use App\Factory\PostingFactory; use App\Factory\UserFactory; @@ -44,7 +44,7 @@ class PostingResourceTest extends KernelTestCase ] ); - MediaObjectProfileFactory::createOne(); + MediaObjectContactFactory::createOne(); MediaObjectLogoFactory::createOne(); $partner = PartnerFactory::createOne(); $contact = ContactFactory::createOne(); diff --git a/tests/Functional/ProductResourceTest.php b/tests/Functional/ProductResourceTest.php new file mode 100644 index 0000000..bf988c1 --- /dev/null +++ b/tests/Functional/ProductResourceTest.php @@ -0,0 +1,76 @@ + + * @date 12.12.23 + */ + + +namespace App\Tests\Functional; + +use App\Factory\ContactFactory; +use App\Factory\MediaObjectLogoFactory; +use App\Factory\MediaObjectContactFactory; +use App\Factory\MediaObjectProductFactory; +use App\Factory\MediaObjectUserFactory; +use App\Factory\PartnerFactory; +use App\Factory\PostingFactory; +use App\Factory\UserFactory; +use Lexik\Bundle\JWTAuthenticationBundle\Services\JWTTokenManagerInterface; +use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase; +use Zenstruck\Browser\Test\HasBrowser; +use Zenstruck\Foundry\Test\Factories; +use Zenstruck\Foundry\Test\ResetDatabase; + +class ProductResourceTest extends KernelTestCase +{ + use HasBrowser; + use ResetDatabase; + use Factories; + + private JWTTokenManagerInterface $JWTManager; + + protected function setUp(): void + { + parent::setUp(); + $this->JWTManager = self::getContainer()->get('lexik_jwt_authentication.jwt_manager'); + } + + public function testPostProduct(): void + { + $user = UserFactory::createOne( + [ + 'email' => 'peter@test.de', + 'firstName' => 'Peter', + 'lastName' => 'Test', + 'password' => 'test', + ] + ); + + $mediaObject = MediaObjectProductFactory::createOne(); + $token = $this->JWTManager->create($user->object()); + + $this->browser() + ->post('/api/products' , [ + 'json' => [ + 'name' => 'Test', + 'description' => 'more test', + 'image' => '/api/media/' . $mediaObject->getId(), + ], + 'headers' => [ + 'Authorization' => 'Bearer ' . $token, + ] + ]) + ->assertSuccessful() + ; + + $this->browser() + ->get('/api/products', [ + 'headers' => [ + 'Authorization' => 'Bearer ' . $token, + ], + ]) + ->assertSuccessful() + ->assertJsonMatches('"hydra:totalItems"', 1) + ; + } +} \ No newline at end of file diff --git a/tests/fixtures/1176_upload.png b/tests/fixtures/1176_upload.png new file mode 100644 index 0000000..54a8ef6 Binary files /dev/null and b/tests/fixtures/1176_upload.png differ