ProductImage.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <?php
  2. namespace Webkul\BagistoApi\Models;
  3. use ApiPlatform\Metadata\ApiProperty;
  4. use ApiPlatform\Metadata\ApiResource;
  5. use ApiPlatform\Metadata\Delete;
  6. use ApiPlatform\Metadata\Get;
  7. use ApiPlatform\Metadata\GetCollection;
  8. use ApiPlatform\Metadata\GraphQl\DeleteMutation;
  9. use ApiPlatform\Metadata\GraphQl\Mutation;
  10. use ApiPlatform\Metadata\GraphQl\Query;
  11. use ApiPlatform\Metadata\GraphQl\QueryCollection;
  12. use ApiPlatform\Metadata\Link;
  13. use ApiPlatform\Metadata\Patch;
  14. use ApiPlatform\Metadata\Post;
  15. use Webkul\BagistoApi\State\ProductImageProcessor;
  16. use Webkul\BagistoApi\State\ProductImageProvider;
  17. use Webkul\Product\Models\ProductImage as BaseProductImage;
  18. use Webkul\BagistoApi\Resolver\BaseQueryItemResolver;
  19. use Webkul\BagistoApi\State\CursorAwareCollectionProvider;
  20. #[ApiResource(
  21. routePrefix: '/api/admin',
  22. uriTemplate: '/products/{productId}/image',
  23. uriVariables: [
  24. 'productId' => new Link(
  25. fromClass: Product::class,
  26. fromProperty: 'image',
  27. identifiers: ['id']
  28. ),
  29. ],
  30. operations: [
  31. new GetCollection(provider: ProductImageProvider::class),
  32. new Post(processor: ProductImageProcessor::class),
  33. ],
  34. graphQlOperations: []
  35. )]
  36. #[ApiResource(
  37. routePrefix: '/api/admin',
  38. uriTemplate: '/products/{productId}/images/{id}',
  39. uriVariables: [
  40. 'productId' => new Link(
  41. fromClass: Product::class,
  42. fromProperty: 'images',
  43. identifiers: ['id']
  44. ),
  45. 'id' => new Link(fromClass: ProductImage::class),
  46. ],
  47. operations: [
  48. new Get(provider: ProductImageProvider::class),
  49. new Patch(
  50. provider: ProductImageProvider::class,
  51. processor: ProductImageProcessor::class
  52. ),
  53. new Delete,
  54. ],
  55. graphQlOperations: []
  56. )]
  57. #[ApiResource(
  58. routePrefix: '/api/shop',
  59. shortName: 'ProductImages',
  60. uriTemplate: '/images',
  61. operations: [
  62. new GetCollection(provider: ProductImageProvider::class),
  63. ],
  64. graphQlOperations: [
  65. new QueryCollection(
  66. provider: CursorAwareCollectionProvider::class,
  67. args: [
  68. 'product_id' => ['type' => 'Int', 'description' => 'Filter by product ID'],
  69. ]
  70. ),
  71. ]
  72. )]
  73. #[ApiResource(
  74. routePrefix: '/api/admin',
  75. shortName: 'ProductImages',
  76. uriTemplate: '/images/{id}',
  77. operations: [
  78. new Get(provider: ProductImageProvider::class),
  79. ],
  80. graphQlOperations: [
  81. new Query(resolver: BaseQueryItemResolver::class),
  82. new Mutation(name: 'create'),
  83. new Mutation(name: 'update'),
  84. new DeleteMutation(name: 'delete'),
  85. ]
  86. )]
  87. class ProductImage extends BaseProductImage
  88. {
  89. protected $visible = [
  90. 'id',
  91. 'type',
  92. 'path',
  93. 'product_id',
  94. 'position',
  95. 'public_path',
  96. ];
  97. #[ApiProperty(readable: true, writable: false)]
  98. public function getPublicPathAttribute(): ?string
  99. {
  100. return env('API_URL').$this->getUrlAttribute();
  101. }
  102. #[ApiProperty(identifier: true, writable: false)]
  103. public function getId(): ?int
  104. {
  105. return $this->id;
  106. }
  107. }