cacheRemember('homepage:settings', 86400, function () { $configuration = HomepageConfiguration::instance(); $configuration->load('media'); $heroImage = MediaPresenter::first($configuration, 'hero_image'); $aboutImage = MediaPresenter::first($configuration, 'about_image'); $galleryImages = MediaPresenter::collection($configuration, 'gallery'); return [ 'hero_image_url' => $heroImage['url'] ?? null, 'about_image_url' => $aboutImage['url'] ?? null, 'gallery_images' => $galleryImages, ]; }); } public function updateHomepage(array $validated): void { $this->runInTransaction( function () use ($validated): void { $configuration = HomepageConfiguration::instance(); $this->syncPhotos( $configuration, [ 'photos' => isset($validated['hero_image']) ? [$validated['hero_image']] : null, 's3_keys' => isset($validated['hero_image_s3_key']) ? [$validated['hero_image_s3_key']] : null, ], maxPhotos: 1, required: false, collection: 'hero_image', ); $this->syncPhotos( $configuration, [ 'photos' => isset($validated['about_image']) ? [$validated['about_image']] : null, 's3_keys' => isset($validated['about_image_s3_key']) ? [$validated['about_image_s3_key']] : null, ], maxPhotos: 1, required: false, collection: 'about_image', ); $this->syncPhotos( $configuration, [ 'photos' => $validated['gallery_images'] ?? null, 'remove_media_ids' => $validated['gallery_images_remove'] ?? null, 's3_keys' => $validated['gallery_s3_keys'] ?? null, ], maxPhotos: 10, required: false, collection: 'gallery', ); }, 'Gagal memperbarui pengaturan homepage', ); $this->cacheForget('homepage:settings'); $this->cacheForget('homepage:page_data'); } }