*/ public function toArray(Request $request): array { $lifetime = $this->engagements() ->whereNotIn('booking_status', [ ArtistEngagementStatus::Cancelled->value, ArtistEngagementStatus::Rejected->value, ArtistEngagementStatus::Declined->value, ]) ->count(); $upcoming = $this->engagements() ->whereNotIn('booking_status', [ ArtistEngagementStatus::Cancelled->value, ArtistEngagementStatus::Rejected->value, ArtistEngagementStatus::Declined->value, ]) ->whereHas('event', fn ($q) => $q->where('end_at', '>=', now())) ->count(); return [ 'id' => $this->id, 'organisation_id' => $this->organisation_id, 'name' => $this->name, 'slug' => $this->slug, 'default_genre_id' => $this->default_genre_id, 'default_genre' => GenreResource::make($this->whenLoaded('defaultGenre')), 'default_draw' => $this->default_draw, 'star_rating' => $this->star_rating, 'home_base_country' => $this->home_base_country, 'agent_company_id' => $this->agent_company_id, 'agent_company' => $this->whenLoaded( 'agentCompany', fn () => [ 'id' => $this->agentCompany?->id, 'name' => $this->agentCompany?->name, 'handles_buma' => (bool) ($this->agentCompany?->handles_buma ?? false), ], ), 'notes' => $this->notes, 'contacts' => ArtistContactResource::collection($this->whenLoaded('contacts')), 'engagements_summary' => [ 'lifetime_count' => $lifetime, 'upcoming_count' => $upcoming, ], 'created_at' => optional($this->created_at)->toIso8601String(), 'updated_at' => optional($this->updated_at)->toIso8601String(), 'deleted_at' => optional($this->deleted_at)->toIso8601String(), ]; } }