ソースを参照

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;
}
}

変更されたファイルが多すぎるため、一部のファイルは表示されません

読み込み中…
キャンセル
保存