Просмотр исходного кода

products and user images

master
Daniel 2 лет назад
Родитель
Сommit
ce1c08d0a3
100 измененных файлов: 476 добавлений и 21 удалений
  1. +69
    -0
      src/ApiResource/ProductApi.php
  2. +8
    -2
      src/DataFixtures/AppFixtures.php
  3. +17
    -0
      src/DataFixtures/FakeValues.php
  4. Двоичные данные
      src/DataFixtures/images/products/06e2aeec-08dc-4bb5-92d9-3cda1a83f7c9.jpg
  5. Двоичные данные
      src/DataFixtures/images/products/089-Ask-Bild1.jpg
  6. Двоичные данные
      src/DataFixtures/images/products/145454_pIhFN2Ugm.webp
  7. Двоичные данные
      src/DataFixtures/images/products/171651_1XE80u3Zy.webp
  8. Двоичные данные
      src/DataFixtures/images/products/179210247-chemikalien-in-reagenzgläsern-und-symbolen-die-im-labor-oder-in-der-industrie-verwendet-werden.jpg
  9. Двоичные данные
      src/DataFixtures/images/products/20230222_Fluorchemikalien-_adpic.jpg
  10. Двоичные данные
      src/DataFixtures/images/products/20368327-vektorsymbol-fur-chemikalien-vektor.jpg
  11. Двоичные данные
      src/DataFixtures/images/products/297744-reagenzglaser-mit-chemikalien-kostenlos-vektor.jpg
  12. Двоичные данные
      src/DataFixtures/images/products/36461009_Chemikalien_Schlierner_Header1-1220x610-1.jpg
  13. Двоичные данные
      src/DataFixtures/images/products/4954227.png
  14. Двоичные данные
      src/DataFixtures/images/products/615hboYBEVL._AC_UF894,1000_QL80_.jpg
  15. Двоичные данные
      src/DataFixtures/images/products/6364c360d3bb5_c-KGNqzCL.webp
  16. Двоичные данные
      src/DataFixtures/images/products/6581938872383176.webp
  17. Двоичные данные
      src/DataFixtures/images/products/71I8kTNrSsL._AC_UF1000,1000_QL80_.jpg
  18. Двоичные данные
      src/DataFixtures/images/products/94e44c75-cccb-474c-bd9c-1d821e6f368a.jpeg
  19. Двоичные данные
      src/DataFixtures/images/products/Akemi-Chemikaliensilicon.jpg
  20. Двоичные данные
      emikalien.png
  21. Двоичные данные
      src/DataFixtures/images/products/Bismuttrioxid.jpg
  22. Двоичные данные
      src/DataFixtures/images/products/Chamikalien_1g-2.webp
  23. Двоичные данные
      src/DataFixtures/images/products/Chemicals.png
  24. Двоичные данные
      src/DataFixtures/images/products/Chemikalien-freist__ScaleWidthWzgwMF0.png
  25. Двоичные данные
      src/DataFixtures/images/products/Chemikalien.jpg
  26. Двоичные данные
      src/DataFixtures/images/products/Chemikalien_Antoine2K.jpg
  27. Двоичные данные
      tzmittel
  28. Двоичные данные
      src/DataFixtures/images/products/IGB_6860.jpg
  29. Двоичные данные
      src/DataFixtures/images/products/Leitthema_Chemikalienrecycling_935674692_Fotograf-BlackJack3D_iStock.jpg
  30. Двоичные данные
      src/DataFixtures/images/products/Reagenzglas.jpg
  31. Двоичные данные
      sch_Reinigungsmittel_Polymerprodukte.jpg
  32. Двоичные данные
      src/DataFixtures/images/products/Wasser_Umwelt_AdobeStock_285345543_Natali-3000x1687-637x358.jpeg
  33. Двоичные данные
      src/DataFixtures/images/products/a34880.jpg
  34. Двоичные данные
      src/DataFixtures/images/products/a34885.jpg
  35. Двоичные данные
      src/DataFixtures/images/products/abfall_chemikalien.jpg
  36. Двоичные данные
      src/DataFixtures/images/products/adea669d-9924-4909-9d79-9143cb010eef_w960_r1.778_fpx63_fpy52.jpg
  37. Двоичные данные
      src/DataFixtures/images/products/adobestock_611392391_chemikalien.jpeg
  38. Двоичные данные
      src/DataFixtures/images/products/angetrieben-von-chemikalien.jpg
  39. Двоичные данные
      src/DataFixtures/images/products/becher-mit-den-reagenzgläsern-gefüllt-mit-chemikalien-58624587.webp
  40. Двоичные данные
      src/DataFixtures/images/products/bi2o3_chda_-2.jpg
  41. Двоичные данные
      src/DataFixtures/images/products/bunte-chemikalien-12777275.webp
  42. Двоичные данные
      src/DataFixtures/images/products/cg_chemikalien_group_rexx_systems-1024x538.jpg
  43. Двоичные данные
      src/DataFixtures/images/products/chemikalien-1.jpg
  44. Двоичные данные
      src/DataFixtures/images/products/chemikalien-artikel2.jpeg
  45. Двоичные данные
      src/DataFixtures/images/products/chemikalien-im-labor-700-119730440.jpg
  46. Двоичные данные
      src/DataFixtures/images/products/chemikalien-im-wasser.jpg
  47. Двоичные данные
      src/DataFixtures/images/products/chemikalien.webp
  48. Двоичные данные
      src/DataFixtures/images/products/chemikalien_AdobeStock_116776874.webp
  49. Двоичные данные
      src/DataFixtures/images/products/csm_Fotolia_21280019_M_Gefahrstoffe_d82c07547d.jpg
  50. Двоичные данные
      src/DataFixtures/images/products/csm_KI_Becherglas_bunt_84e57f1426.jpg
  51. Двоичные данные
      src/DataFixtures/images/products/enghals-chemikalien-flaschen_00018802.webp
  52. Двоичные данные
      src/DataFixtures/images/products/enghals-chemikalien-flaschen_00026892.webp
  53. Двоичные данные
      src/DataFixtures/images/products/gefahrstoffe_a_bruno_fotolia_24886834_m.jpg
  54. Двоичные данные
      src/DataFixtures/images/products/greenpeace.avif
  55. Двоичные данные
      src/DataFixtures/images/products/images.jpg
  56. Двоичные данные
      src/DataFixtures/images/products/impact-story-Chemicals-cover.webp
  57. Двоичные данные
      src/DataFixtures/images/products/istock-1355779437.jpg
  58. Двоичные данные
      src/DataFixtures/images/products/justrite-notfall-set-chemikalien--1032976--470x470--p.jpg
  59. Двоичные данные
      src/DataFixtures/images/products/labor-120~_v-varm_88873b.jpg
  60. Двоичные данные
      src/DataFixtures/images/products/leadImage.jpg
  61. Двоичные данные
      src/DataFixtures/images/products/pipettieren-einer-oelprobe-zur-erforschung-von-medizin-und-chemikalien-CAVF95337.jpg
  62. Двоичные данные
      src/DataFixtures/images/products/pngtree-chemicals-icon-in-trendy-style-isolated-background-png-image_1554545.jpg
  63. Двоичные данные
      src/DataFixtures/images/products/shutterstock_1561135202-800x450.jpg
  64. Двоичные данные
      src/DataFixtures/images/products/spicytruffel-AdobeStock_316542333-Konvertiert.jpg
  65. Двоичные данные
      src/DataFixtures/images/products/streitfall-chemikalien-wer.webp
  66. Двоичные данные
      src/DataFixtures/images/products/symbol-fuer-die-linie-der-flasche-mit-chemikalien_116137-5518.avif
  67. Двоичные данные
      src/DataFixtures/images/products/teaserbox_2419937771.jpg
  68. Двоичные данные
      src/DataFixtures/images/products/teaserbox_2446472365.jpg
  69. Двоичные данные
      src/DataFixtures/images/products/teaserbox_2449303018.jpg
  70. Двоичные данные
      src/DataFixtures/images/products/teaserbox_2450499236.jpg
  71. Двоичные данные
      src/DataFixtures/images/products/teaserbox_2462792495.jpg
  72. Двоичные данные
      src/DataFixtures/images/products/teaserbox_2462830751.JPG
  73. Двоичные данные
      src/DataFixtures/images/products/teaserbox_2473428103.JPG
  74. Двоичные данные
      src/DataFixtures/images/products/urinprobe_bildquelle_joergbeuge_fotolia_27589149_m.jpg
  75. Двоичные данные
      src/DataFixtures/images/products/weithals-chemikalien-flaschen_00018762.webp
  76. Двоичные данные
      src/DataFixtures/images/users/4798951-smurfs_color_pictures_poet_smurf.jpg
  77. Двоичные данные
      src/DataFixtures/images/users/4798991-schtroumpf-paresseux.jpg
  78. Двоичные данные
      src/DataFixtures/images/users/5e354e4c73be4d0ef14e6b761b27e25e.png
  79. Двоичные данные
      src/DataFixtures/images/users/819027-brainy.jpg
  80. Двоичные данные
      src/DataFixtures/images/users/Gizmo_Smurf_Vic_George.webp
  81. Двоичные данные
      src/DataFixtures/images/users/Handy_Comic_Book.webp
  82. Двоичные данные
      src/DataFixtures/images/users/SmurfCovidCartoonCharacter.SMjpg.webp
  83. Двоичные данные
      src/DataFixtures/images/users/c2c97f0614837c506b5d25820988f6dc.jpg
  84. Двоичные данные
      src/DataFixtures/images/users/e5f648d978973e3db259226929789f1d.jpg
  85. Двоичные данные
      src/DataFixtures/images/users/images.jpg
  86. Двоичные данные
      src/DataFixtures/images/users/images.png
  87. Двоичные данные
      src/DataFixtures/images/users/slouchy-smurfling-tv-characters-photo-u1.jpg
  88. Двоичные данные
      src/DataFixtures/images/users/tailor-smurf-tv-characters-photo-u1.jpg
  89. Двоичные данные
      src/DataFixtures/images/users/the-king-tv-characters-photo-u1.jpg
  90. Двоичные данные
      src/DataFixtures/images/users/the-smurfette-brainy-smurf-papa-smurf-the-smurfs-blonde-hair-cartoon-characters.jpg
  91. +2
    -1
      src/Entity/MediaObject.php
  92. +79
    -0
      src/Entity/Product.php
  93. +13
    -0
      src/Entity/User.php
  94. +1
    -1
      src/Factory/ContactFactory.php
  95. +1
    -1
      src/Factory/MediaObjectContactFactory.php
  96. +83
    -0
      src/Factory/MediaObjectProductFactory.php
  97. +83
    -0
      src/Factory/MediaObjectUserFactory.php
  98. +72
    -0
      src/Factory/ProductFactory.php
  99. +1
    -16
      src/Factory/UserFactory.php
  100. +47
    -0
      src/Mapper/ProductApiToEntityMapper.php

+ 69
- 0
src/ApiResource/ProductApi.php Просмотреть файл

@@ -0,0 +1,69 @@
<?php
/**
* @author Daniel Knudsen <d.knudsen@spawntree.de>
* @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;

}

+ 8
- 2
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);
}
}

+ 17
- 0
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',
];
}

Двоичные данные
src/DataFixtures/images/products/06e2aeec-08dc-4bb5-92d9-3cda1a83f7c9.jpg Просмотреть файл

До После
Ширина: 750  |  Высота: 500  |  Размер: 40 KiB

Двоичные данные
src/DataFixtures/images/products/089-Ask-Bild1.jpg Просмотреть файл

До После
Ширина: 646  |  Высота: 441  |  Размер: 72 KiB

Двоичные данные
src/DataFixtures/images/products/145454_pIhFN2Ugm.webp Просмотреть файл

До После

Двоичные данные
src/DataFixtures/images/products/171651_1XE80u3Zy.webp Просмотреть файл

До После

Двоичные данные
src/DataFixtures/images/products/179210247-chemikalien-in-reagenzgläsern-und-symbolen-die-im-labor-oder-in-der-industrie-verwendet-werden.jpg Просмотреть файл

До После
Ширина: 450  |  Высота: 300  |  Размер: 24 KiB

Двоичные данные
src/DataFixtures/images/products/20230222_Fluorchemikalien-_adpic.jpg Просмотреть файл

До После
Ширина: 1080  |  Высота: 721  |  Размер: 93 KiB

Двоичные данные
src/DataFixtures/images/products/20368327-vektorsymbol-fur-chemikalien-vektor.jpg Просмотреть файл

До После
Ширина: 661  |  Высота: 980  |  Размер: 50 KiB

Двоичные данные
src/DataFixtures/images/products/297744-reagenzglaser-mit-chemikalien-kostenlos-vektor.jpg Просмотреть файл

До После
Ширина: 556  |  Высота: 490  |  Размер: 30 KiB

Двоичные данные
src/DataFixtures/images/products/36461009_Chemikalien_Schlierner_Header1-1220x610-1.jpg Просмотреть файл

До После
Ширина: 1220  |  Высота: 610  |  Размер: 115 KiB

Двоичные данные
src/DataFixtures/images/products/4954227.png Просмотреть файл

До После
Ширина: 512  |  Высота: 512  |  Размер: 24 KiB

Двоичные данные
src/DataFixtures/images/products/615hboYBEVL._AC_UF894,1000_QL80_.jpg Просмотреть файл

До После
Ширина: 894  |  Высота: 877  |  Размер: 43 KiB

Двоичные данные
src/DataFixtures/images/products/6364c360d3bb5_c-KGNqzCL.webp Просмотреть файл

До После

Двоичные данные
src/DataFixtures/images/products/6581938872383176.webp Просмотреть файл

До После

Двоичные данные
src/DataFixtures/images/products/71I8kTNrSsL._AC_UF1000,1000_QL80_.jpg Просмотреть файл

До После
Ширина: 761  |  Высота: 1000  |  Размер: 57 KiB

Двоичные данные
src/DataFixtures/images/products/94e44c75-cccb-474c-bd9c-1d821e6f368a.jpeg Просмотреть файл

До После
Ширина: 525  |  Высота: 525  |  Размер: 60 KiB

Двоичные данные
src/DataFixtures/images/products/Akemi-Chemikaliensilicon.jpg Просмотреть файл

До После
Ширина: 660  |  Высота: 660  |  Размер: 78 KiB

Двоичные данные
src/DataFixtures/images/products/Bild → emikalien.png Просмотреть файл


Двоичные данные
src/DataFixtures/images/products/Bismuttrioxid.jpg Просмотреть файл

До После
Ширина: 650  |  Высота: 500  |  Размер: 98 KiB

Двоичные данные
src/DataFixtures/images/products/Chamikalien_1g-2.webp Просмотреть файл

До После

Двоичные данные
src/DataFixtures/images/products/Chemicals.png Просмотреть файл

До После
Ширина: 610  |  Высота: 350  |  Размер: 26 KiB

Двоичные данные
src/DataFixtures/images/products/Chemikalien-freist__ScaleWidthWzgwMF0.png Просмотреть файл

До После
Ширина: 800  |  Высота: 800  |  Размер: 240 KiB

Двоичные данные
src/DataFixtures/images/products/Chemikalien.jpg Просмотреть файл

До После
Ширина: 360  |  Высота: 477  |  Размер: 8.0 KiB

Двоичные данные
src/DataFixtures/images/products/Chemikalien_Antoine2K.jpg Просмотреть файл

До После
Ширина: 770  |  Высота: 420  |  Размер: 32 KiB

Двоичные данные
src/DataFixtures/images/products/Haushaltsreiniger → tzmittel Просмотреть файл


Двоичные данные
src/DataFixtures/images/products/IGB_6860.jpg Просмотреть файл

До После
Ширина: 1000  |  Высота: 563  |  Размер: 65 KiB

Двоичные данные
src/DataFixtures/images/products/Leitthema_Chemikalienrecycling_935674692_Fotograf-BlackJack3D_iStock.jpg Просмотреть файл

До После
Ширина: 1200  |  Высота: 600  |  Размер: 88 KiB

Двоичные данные
src/DataFixtures/images/products/Reagenzglas.jpg Просмотреть файл

До После
Ширина: 895  |  Высота: 502  |  Размер: 130 KiB

Двоичные данные
src/DataFixtures/images/products/Unternehmen_Umweltauflagen_Bezug_Metallvearbeitungflüssigkeiten, → sch_Reinigungsmittel_Polymerprodukte.jpg Просмотреть файл


Двоичные данные
src/DataFixtures/images/products/Wasser_Umwelt_AdobeStock_285345543_Natali-3000x1687-637x358.jpeg Просмотреть файл

До После
Ширина: 637  |  Высота: 358  |  Размер: 179 KiB

Двоичные данные
src/DataFixtures/images/products/a34880.jpg Просмотреть файл

До После
Ширина: 800  |  Высота: 800  |  Размер: 33 KiB

Двоичные данные
src/DataFixtures/images/products/a34885.jpg Просмотреть файл

До После
Ширина: 800  |  Высота: 800  |  Размер: 41 KiB

Двоичные данные
src/DataFixtures/images/products/abfall_chemikalien.jpg Просмотреть файл

До После
Ширина: 900  |  Высота: 300  |  Размер: 121 KiB

Двоичные данные
src/DataFixtures/images/products/adea669d-9924-4909-9d79-9143cb010eef_w960_r1.778_fpx63_fpy52.jpg Просмотреть файл

До После
Ширина: 960  |  Высота: 540  |  Размер: 61 KiB

Двоичные данные
src/DataFixtures/images/products/adobestock_611392391_chemikalien.jpeg Просмотреть файл

До После
Ширина: 960  |  Высота: 540  |  Размер: 50 KiB

Двоичные данные
src/DataFixtures/images/products/angetrieben-von-chemikalien.jpg Просмотреть файл

До После
Ширина: 378  |  Высота: 378  |  Размер: 11 KiB

Двоичные данные
src/DataFixtures/images/products/becher-mit-den-reagenzgläsern-gefüllt-mit-chemikalien-58624587.webp Просмотреть файл

До После

Двоичные данные
src/DataFixtures/images/products/bi2o3_chda_-2.jpg Просмотреть файл

До После
Ширина: 1920  |  Высота: 1280  |  Размер: 1.7 MiB

Двоичные данные
src/DataFixtures/images/products/bunte-chemikalien-12777275.webp Просмотреть файл

До После

Двоичные данные
src/DataFixtures/images/products/cg_chemikalien_group_rexx_systems-1024x538.jpg Просмотреть файл

До После
Ширина: 1024  |  Высота: 538  |  Размер: 56 KiB

Двоичные данные
src/DataFixtures/images/products/chemikalien-1.jpg Просмотреть файл

До После
Ширина: 533  |  Высота: 400  |  Размер: 17 KiB

Двоичные данные
src/DataFixtures/images/products/chemikalien-artikel2.jpeg Просмотреть файл

До После
Ширина: 987  |  Высота: 392  |  Размер: 43 KiB

Двоичные данные
src/DataFixtures/images/products/chemikalien-im-labor-700-119730440.jpg Просмотреть файл

До После
Ширина: 700  |  Высота: 467  |  Размер: 66 KiB

Двоичные данные
src/DataFixtures/images/products/chemikalien-im-wasser.jpg Просмотреть файл

До После
Ширина: 640  |  Высота: 360  |  Размер: 46 KiB

Двоичные данные
src/DataFixtures/images/products/chemikalien.webp Просмотреть файл

До После

Двоичные данные
src/DataFixtures/images/products/chemikalien_AdobeStock_116776874.webp Просмотреть файл

До После

Двоичные данные
src/DataFixtures/images/products/csm_Fotolia_21280019_M_Gefahrstoffe_d82c07547d.jpg Просмотреть файл

До После
Ширина: 727  |  Высота: 545  |  Размер: 53 KiB

Двоичные данные
src/DataFixtures/images/products/csm_KI_Becherglas_bunt_84e57f1426.jpg Просмотреть файл

До После
Ширина: 828  |  Высота: 621  |  Размер: 65 KiB

Двоичные данные
src/DataFixtures/images/products/enghals-chemikalien-flaschen_00018802.webp Просмотреть файл

До После

Двоичные данные
src/DataFixtures/images/products/enghals-chemikalien-flaschen_00026892.webp Просмотреть файл

До После

Двоичные данные
src/DataFixtures/images/products/gefahrstoffe_a_bruno_fotolia_24886834_m.jpg Просмотреть файл

До После
Ширина: 800  |  Высота: 400  |  Размер: 86 KiB

Двоичные данные
src/DataFixtures/images/products/greenpeace.avif Просмотреть файл


Двоичные данные
src/DataFixtures/images/products/images.jpg Просмотреть файл

До После
Ширина: 299  |  Высота: 168  |  Размер: 5.4 KiB

Двоичные данные
src/DataFixtures/images/products/impact-story-Chemicals-cover.webp Просмотреть файл

До После

Двоичные данные
src/DataFixtures/images/products/istock-1355779437.jpg Просмотреть файл

До После
Ширина: 730  |  Высота: 460  |  Размер: 56 KiB

Двоичные данные
src/DataFixtures/images/products/justrite-notfall-set-chemikalien--1032976--470x470--p.jpg Просмотреть файл

До После
Ширина: 470  |  Высота: 470  |  Размер: 30 KiB

Двоичные данные
src/DataFixtures/images/products/labor-120~_v-varm_88873b.jpg Просмотреть файл

До После
Ширина: 512  |  Высота: 288  |  Размер: 21 KiB

Двоичные данные
src/DataFixtures/images/products/leadImage.jpg Просмотреть файл

До После
Ширина: 800  |  Высота: 450  |  Размер: 50 KiB

Двоичные данные
src/DataFixtures/images/products/pipettieren-einer-oelprobe-zur-erforschung-von-medizin-und-chemikalien-CAVF95337.jpg Просмотреть файл

До После
Ширина: 480  |  Высота: 360  |  Размер: 28 KiB

Двоичные данные
src/DataFixtures/images/products/pngtree-chemicals-icon-in-trendy-style-isolated-background-png-image_1554545.jpg Просмотреть файл

До После
Ширина: 360  |  Высота: 360  |  Размер: 6.8 KiB

Двоичные данные
src/DataFixtures/images/products/shutterstock_1561135202-800x450.jpg Просмотреть файл

До После
Ширина: 800  |  Высота: 450  |  Размер: 34 KiB

Двоичные данные
src/DataFixtures/images/products/spicytruffel-AdobeStock_316542333-Konvertiert.jpg Просмотреть файл

До После
Ширина: 960  |  Высота: 600  |  Размер: 206 KiB

Двоичные данные
src/DataFixtures/images/products/streitfall-chemikalien-wer.webp Просмотреть файл

До После

Двоичные данные
src/DataFixtures/images/products/symbol-fuer-die-linie-der-flasche-mit-chemikalien_116137-5518.avif Просмотреть файл


Двоичные данные
src/DataFixtures/images/products/teaserbox_2419937771.jpg Просмотреть файл

До После
Ширина: 900  |  Высота: 617  |  Размер: 123 KiB

Двоичные данные
src/DataFixtures/images/products/teaserbox_2446472365.jpg Просмотреть файл

До После
Ширина: 781  |  Высота: 554  |  Размер: 189 KiB

Двоичные данные
src/DataFixtures/images/products/teaserbox_2449303018.jpg Просмотреть файл

До После
Ширина: 900  |  Высота: 563  |  Размер: 260 KiB

Двоичные данные
src/DataFixtures/images/products/teaserbox_2450499236.jpg Просмотреть файл

До После
Ширина: 800  |  Высота: 585  |  Размер: 181 KiB

Двоичные данные
src/DataFixtures/images/products/teaserbox_2462792495.jpg Просмотреть файл

До После
Ширина: 900  |  Высота: 675  |  Размер: 178 KiB

Двоичные данные
src/DataFixtures/images/products/teaserbox_2462830751.JPG Просмотреть файл

До После
Ширина: 900  |  Высота: 620  |  Размер: 273 KiB

Двоичные данные
src/DataFixtures/images/products/teaserbox_2473428103.JPG Просмотреть файл

До После
Ширина: 900  |  Высота: 672  |  Размер: 86 KiB

Двоичные данные
src/DataFixtures/images/products/urinprobe_bildquelle_joergbeuge_fotolia_27589149_m.jpg Просмотреть файл

До После
Ширина: 800  |  Высота: 550  |  Размер: 81 KiB

Двоичные данные
src/DataFixtures/images/products/weithals-chemikalien-flaschen_00018762.webp Просмотреть файл

До После

Двоичные данные
src/DataFixtures/images/users/4798951-smurfs_color_pictures_poet_smurf.jpg Просмотреть файл

До После
Ширина: 320  |  Высота: 320  |  Размер: 25 KiB

Двоичные данные
src/DataFixtures/images/users/4798991-schtroumpf-paresseux.jpg Просмотреть файл

До После
Ширина: 320  |  Высота: 320  |  Размер: 24 KiB

Двоичные данные
src/DataFixtures/images/users/5e354e4c73be4d0ef14e6b761b27e25e.png Просмотреть файл

До После
Ширина: 792  |  Высота: 752  |  Размер: 22 KiB

Двоичные данные
src/DataFixtures/images/users/819027-brainy.jpg Просмотреть файл

До После
Ширина: 320  |  Высота: 320  |  Размер: 8.9 KiB

Двоичные данные
src/DataFixtures/images/users/Gizmo_Smurf_Vic_George.webp Просмотреть файл

До После

Двоичные данные
src/DataFixtures/images/users/Handy_Comic_Book.webp Просмотреть файл

До После

Двоичные данные
src/DataFixtures/images/users/SmurfCovidCartoonCharacter.SMjpg.webp Просмотреть файл

До После

Двоичные данные
src/DataFixtures/images/users/c2c97f0614837c506b5d25820988f6dc.jpg Просмотреть файл

До После
Ширина: 564  |  Высота: 800  |  Размер: 50 KiB

Двоичные данные
src/DataFixtures/images/users/e5f648d978973e3db259226929789f1d.jpg Просмотреть файл

До После
Ширина: 340  |  Высота: 406  |  Размер: 21 KiB

Двоичные данные
src/DataFixtures/images/users/images.jpg Просмотреть файл

До После
Ширина: 246  |  Высота: 205  |  Размер: 11 KiB

Двоичные данные
src/DataFixtures/images/users/images.png Просмотреть файл

До После
Ширина: 221  |  Высота: 228  |  Размер: 9.6 KiB

Двоичные данные
src/DataFixtures/images/users/slouchy-smurfling-tv-characters-photo-u1.jpg Просмотреть файл

До После
Ширина: 250  |  Высота: 250  |  Размер: 5.5 KiB

Двоичные данные
src/DataFixtures/images/users/tailor-smurf-tv-characters-photo-u1.jpg Просмотреть файл

До После
Ширина: 250  |  Высота: 250  |  Размер: 5.6 KiB

Двоичные данные
src/DataFixtures/images/users/the-king-tv-characters-photo-u1.jpg Просмотреть файл

До После
Ширина: 250  |  Высота: 250  |  Размер: 7.5 KiB

Двоичные данные
src/DataFixtures/images/users/the-smurfette-brainy-smurf-papa-smurf-the-smurfs-blonde-hair-cartoon-characters.jpg Просмотреть файл

До После
Ширина: 621  |  Высота: 849  |  Размер: 47 KiB

+ 2
- 1
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
{


+ 79
- 0
src/Entity/Product.php Просмотреть файл

@@ -0,0 +1,79 @@
<?php

namespace App\Entity;

use App\Repository\ProductRepository;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity(repositoryClass: ProductRepository::class)]
class Product
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;

#[ORM\Column(length: 255)]
private ?string $name = null;

#[ORM\Column(type: Types::TEXT, nullable: true)]
private ?string $description = null;

#[ORM\ManyToOne]
private ?MediaObject $image = null;

#[ORM\Column]
private ?\DateTimeImmutable $createdAt = null;

public function __construct()
{
$this->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;
}
}

+ 13
- 0
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;


+ 1
- 1
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()
];
}



src/Factory/MediaObjectProfileFactory.php → 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

+ 83
- 0
src/Factory/MediaObjectProductFactory.php Просмотреть файл

@@ -0,0 +1,83 @@
<?php

namespace App\Factory;

use App\Entity\MediaObject;
use Doctrine\ORM\EntityRepository;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpKernel\KernelInterface;
use Vich\UploaderBundle\FileAbstraction\ReplacingFile;
use Zenstruck\Foundry\ModelFactory;
use Zenstruck\Foundry\Proxy;
use Zenstruck\Foundry\RepositoryProxy;

/**
* @extends ModelFactory<MediaObject>
*
* @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;
}
}

+ 83
- 0
src/Factory/MediaObjectUserFactory.php Просмотреть файл

@@ -0,0 +1,83 @@
<?php

namespace App\Factory;

use App\Entity\MediaObject;
use Doctrine\ORM\EntityRepository;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpKernel\KernelInterface;
use Vich\UploaderBundle\FileAbstraction\ReplacingFile;
use Zenstruck\Foundry\ModelFactory;
use Zenstruck\Foundry\Proxy;
use Zenstruck\Foundry\RepositoryProxy;

/**
* @extends ModelFactory<MediaObject>
*
* @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;
}
}

+ 72
- 0
src/Factory/ProductFactory.php Просмотреть файл

@@ -0,0 +1,72 @@
<?php

namespace App\Factory;

use App\DataFixtures\FakeValues;
use App\Entity\Product;
use App\Repository\ProductRepository;
use Zenstruck\Foundry\ModelFactory;
use Zenstruck\Foundry\Proxy;
use Zenstruck\Foundry\RepositoryProxy;

/**
* @extends ModelFactory<Product>
*
* @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::random(),
'createdAt' => \DateTimeImmutable::createFromMutable(self::faker()->dateTime()),
];
}

/**
* @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;
}
}

+ 1
- 16
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::random(),
'password' => "test",
'roles' => [],
];


+ 47
- 0
src/Mapper/ProductApiToEntityMapper.php Просмотреть файл

@@ -0,0 +1,47 @@
<?php

namespace App\Mapper;

use App\ApiResource\ProductApi;
use App\Entity\Product;
use App\Repository\ProductRepository;
use Symfonycasts\MicroMapper\AsMapper;
use Symfonycasts\MicroMapper\MapperInterface;

#[AsMapper(from: ProductApi::class, to: Product::class)]
class ProductApiToEntityMapper implements MapperInterface
{
public function __construct(
private ProductRepository $repository
)
{

}

public function load(object $from, string $toClass, array $context): object
{
$dto = $from;
assert($dto instanceof ProductApi);

$entity = $dto->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;
}
}

Некоторые файлы не были показаны из-за большого количества измененных файлов

Загрузка…
Отмена
Сохранить