$data * @return Tenant */ public function create(array $data): Tenant { return DB::transaction(function () use ($data): Tenant { $headerLogo = $data['header_logo'] ?? null; $footerLogo = $data['footer_logo'] ?? null; $heroBgImage = $data['hero_bg_image'] ?? null; unset($data['header_logo'], $data['footer_logo'], $data['hero_bg_image']); $headerAttachmentId = null; if ($headerLogo) { $attachment = Str::isUuid($headerLogo) ? \App\Domains\Attachable\Models\Attachment::query()->where('key', $headerLogo)->first() : $this->attachmentService->store($headerLogo, 'tenants'); if ($attachment) { $headerAttachmentId = $attachment->id; } } $footerAttachmentId = null; if ($footerLogo) { $attachment = Str::isUuid($footerLogo) ? \App\Domains\Attachable\Models\Attachment::query()->where('key', $footerLogo)->first() : $this->attachmentService->store($footerLogo, 'tenants'); if ($attachment) { $footerAttachmentId = $attachment->id; } } $data['header_logo_id'] = $headerAttachmentId; $data['footer_logo_id'] = $footerAttachmentId; if ($heroBgImage) { $attachment = Str::isUuid($heroBgImage) ? \App\Domains\Attachable\Models\Attachment::query()->where('key', $heroBgImage)->first() : $this->attachmentService->store($heroBgImage, 'tenants'); if ($attachment) { $heroConfig = $data['hero_config'] ?? []; $heroConfig['background_image_id'] = $attachment->id; $data['hero_config'] = $heroConfig; } } /** @var Tenant $tenant */ $tenant = Tenant::query()->create($data); return $tenant; }); } /** * Update an existing tenant and store new logos if uploaded. * * @param Tenant $tenant * @param array $data * @return Tenant */ public function update(Tenant $tenant, array $data): Tenant { return DB::transaction(function () use ($tenant, $data): Tenant { $hasHeaderLogoKey = array_key_exists('header_logo', $data); $hasFooterLogoKey = array_key_exists('footer_logo', $data); $hasHeroBgImageKey = array_key_exists('hero_bg_image', $data); $headerLogo = $data['header_logo'] ?? null; $footerLogo = $data['footer_logo'] ?? null; $heroBgImage = $data['hero_bg_image'] ?? null; unset($data['header_logo'], $data['footer_logo'], $data['hero_bg_image']); $oldHeroBgId = $tenant->hero_bg_image_id; $tenant->fill($data); if ($hasHeaderLogoKey) { if ($headerLogo) { $attachment = Str::isUuid($headerLogo) ? \App\Domains\Attachable\Models\Attachment::query()->where('key', $headerLogo)->first() : $this->attachmentService->store($headerLogo, 'tenants'); if ($attachment) { $tenant->header_logo_id = $attachment->id; } else { $tenant->header_logo_id = null; } } else { $tenant->header_logo_id = null; } } if ($hasFooterLogoKey) { if ($footerLogo) { $attachment = Str::isUuid($footerLogo) ? \App\Domains\Attachable\Models\Attachment::query()->where('key', $footerLogo)->first() : $this->attachmentService->store($footerLogo, 'tenants'); if ($attachment) { $tenant->footer_logo_id = $attachment->id; } else { $tenant->footer_logo_id = null; } } else { $tenant->footer_logo_id = null; } } $currentHeroConfig = $tenant->hero_config ?? []; if ($hasHeroBgImageKey) { if ($heroBgImage) { $attachment = Str::isUuid($heroBgImage) ? \App\Domains\Attachable\Models\Attachment::query()->where('key', $heroBgImage)->first() : $this->attachmentService->store($heroBgImage, 'tenants'); if ($attachment) { $currentHeroConfig['background_image_id'] = $attachment->id; } else { unset($currentHeroConfig['background_image_id']); } } else { unset($currentHeroConfig['background_image_id']); } } else { if ($oldHeroBgId) { $currentHeroConfig['background_image_id'] = $oldHeroBgId; } } $tenant->hero_config = empty($currentHeroConfig) ? null : $currentHeroConfig; $tenant->save(); return $tenant; }); } }