Преглед на файлове

products and user images

master
Daniel преди 2 години
родител
ревизия
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;
}
}

Някои файлове не бяха показани, защото твърде много файлове са промени

Зареждане…
Отказ
Запис