Guest User

Untitled

a guest
Jun 13th, 2023
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.56 KB | None | 0 0
  1. <?php
  2.  
  3. namespace Modules\Languages;
  4.  
  5. enum Locale: string
  6. {
  7.     case FRENCH = 'fr';
  8.     case ENGLISH = 'en';
  9. }
  10. ?>
  11.  
  12. <?php
  13.  
  14. namespace Modules\Languages\ValueObjects;
  15.  
  16. use Modules\Languages\Locale;
  17. use Spatie\LaravelData\Attributes\WithCast;
  18. use Spatie\LaravelData\Casts\EnumCast;
  19. use Spatie\LaravelData\Data;
  20.  
  21. final class TranslatableData extends Data
  22. {
  23.     public function __construct(
  24.         #[WithCast(EnumCast::class)]
  25.        public readonly Locale $locale,
  26.         public readonly string $translation,
  27.     ) {
  28.     }
  29. }
  30. ?>
  31.  
  32. <?php
  33.  
  34. namespace Modules\Languages\ValueObjects;
  35.  
  36. use DateTimeImmutable;
  37. use Modules\Languages\Transformers\TranslatableTransformer;
  38. use Shared\Transformers\TimestampTransformer;
  39. use Spatie\LaravelData\Attributes\DataCollectionOf;
  40. use Spatie\LaravelData\Attributes\Validation\Rule;
  41. use Spatie\LaravelData\Attributes\Validation\StringType;
  42. use Spatie\LaravelData\Attributes\WithCast;
  43. use Spatie\LaravelData\Attributes\WithTransformer;
  44. use Spatie\LaravelData\Casts\DateTimeInterfaceCast;
  45. use Spatie\LaravelData\Data;
  46. use Spatie\LaravelData\DataCollection;
  47. use Spatie\LaravelData\Optional;
  48.  
  49. final class LanguageData extends Data
  50. {
  51.     public function __construct(
  52.         #[DataCollectionOf(TranslatableData::class)]
  53.        #[WithTransformer(TranslatableTransformer::class)]
  54.        public readonly DataCollection $name,
  55.         #[DataCollectionOf(TranslatableData::class)]
  56.        public readonly DataCollection|Optional $description,
  57.         #[WithCast(DateTimeInterfaceCast::class)]
  58.        #[WithTransformer(TimestampTransformer::class)]
  59.        public readonly ?DateTimeImmutable $created_at = new DateTimeImmutable,
  60.         #[WithCast(DateTimeInterfaceCast::class)]
  61.        #[WithTransformer(TimestampTransformer::class)]
  62.        public readonly ?DateTimeImmutable $updated_at = new DateTimeImmutable,
  63.     ) {
  64.     }
  65.  
  66.     public static function rules(): array
  67.     {
  68.         return [
  69.             'name.*' => ['unique_translation:languages']
  70.         ];
  71.     }
  72. }
  73.  
  74.  
  75. <?php
  76.  
  77. namespace Modules\Languages\Transformers;
  78.  
  79. use Illuminate\Support\Arr;
  80. use Spatie\LaravelData\DataCollection;
  81. use Spatie\LaravelData\Support\DataProperty;
  82. use Spatie\LaravelData\Transformers\Transformer;
  83.  
  84. final class TranslatableTransformer implements Transformer
  85. {
  86.     public function transform(DataProperty $property, mixed $value): mixed
  87.     {
  88.         if ($value instanceof DataCollection) {
  89.             return Arr::pluck($value->toArray(), 'translation', 'locale');
  90.         }
  91.  
  92.         return $value;
  93.     }
  94. }
  95. ?>
Advertisement
Add Comment
Please, Sign In to add comment