Parse and validate AT Protocol Lexicons with DTO generation for Laravel
1<?php
2
3namespace SocialDept\AtpSchema\Generated\Tools\Ozone\Moderation\Defs;
4
5use Carbon\Carbon;
6use SocialDept\AtpSchema\Data\Data;
7use SocialDept\AtpSchema\Generated\Com\Atproto\Admin\Defs\ThreatSignature;
8use SocialDept\AtpSchema\Generated\Com\Atproto\Label\Defs\Label;
9use SocialDept\AtpSchema\Generated\Com\Atproto\Server\Defs\InviteCode;
10
11/**
12 * GENERATED CODE - DO NOT EDIT
13 *
14 * Lexicon: tools.ozone.moderation.defs.repoViewDetail
15 * Type: object
16 *
17 * @property string $did
18 * @property string $handle
19 * @property string|null $email
20 * @property array $relatedRecords
21 * @property Carbon $indexedAt
22 * @property mixed $moderation
23 * @property array<Label>|null $labels
24 * @property InviteCode|null $invitedBy
25 * @property array<InviteCode>|null $invites
26 * @property bool|null $invitesDisabled
27 * @property string|null $inviteNote
28 * @property Carbon|null $emailConfirmedAt
29 * @property Carbon|null $deactivatedAt
30 * @property array<ThreatSignature>|null $threatSignatures
31 *
32 * Constraints:
33 * - Required: did, handle, relatedRecords, indexedAt, moderation
34 * - did: Format: did
35 * - handle: Format: handle
36 * - indexedAt: Format: datetime
37 * - emailConfirmedAt: Format: datetime
38 * - deactivatedAt: Format: datetime
39 */
40class RepoViewDetail extends Data
41{
42 public function __construct(
43 public readonly string $did,
44 public readonly string $handle,
45 public readonly array $relatedRecords,
46 public readonly Carbon $indexedAt,
47 public readonly mixed $moderation,
48 public readonly ?string $email = null,
49 public readonly ?array $labels = null,
50 public readonly ?InviteCode $invitedBy = null,
51 public readonly ?array $invites = null,
52 public readonly ?bool $invitesDisabled = null,
53 public readonly ?string $inviteNote = null,
54 public readonly ?Carbon $emailConfirmedAt = null,
55 public readonly ?Carbon $deactivatedAt = null,
56 public readonly ?array $threatSignatures = null
57 ) {
58 }
59
60 /**
61 * Get the lexicon NSID for this data type.
62 *
63 * @return string
64 */
65 public static function getLexicon(): string
66 {
67 return 'tools.ozone.moderation.defs.repoViewDetail';
68 }
69
70
71 /**
72 * Create an instance from an array.
73 *
74 * @param array $data The data array
75 * @return static
76 */
77 public static function fromArray(array $data): static
78 {
79 return new static(
80 did: $data['did'],
81 handle: $data['handle'],
82 relatedRecords: $data['relatedRecords'],
83 indexedAt: Carbon::parse($data['indexedAt']),
84 moderation: $data['moderation'],
85 email: $data['email'] ?? null,
86 labels: isset($data['labels']) ? array_map(fn ($item) => Label::fromArray($item), $data['labels']) : [],
87 invitedBy: isset($data['invitedBy']) ? InviteCode::fromArray($data['invitedBy']) : null,
88 invites: isset($data['invites']) ? array_map(fn ($item) => InviteCode::fromArray($item), $data['invites']) : [],
89 invitesDisabled: $data['invitesDisabled'] ?? null,
90 inviteNote: $data['inviteNote'] ?? null,
91 emailConfirmedAt: isset($data['emailConfirmedAt']) ? Carbon::parse($data['emailConfirmedAt']) : null,
92 deactivatedAt: isset($data['deactivatedAt']) ? Carbon::parse($data['deactivatedAt']) : null,
93 threatSignatures: isset($data['threatSignatures']) ? array_map(fn ($item) => ThreatSignature::fromArray($item), $data['threatSignatures']) : []
94 );
95 }
96
97}