Media Asset Management & Digital Asset Pipeline
This document details the media storage architecture, file upload security, digital asset library, and brand crest pipelines of Eniceberny Bakery and Culinary Hub.
1. Storage Architecture & Driver Abstraction
Eniceberny supports a dual-driver storage architecture configured via the MEDIA_DISK environment variable:
graph TD
A[Staff File Upload /admin/media] --> B[Validation Gate: MIME & Max Size]
B --> C{MEDIA_DISK Driver?}
C -->|local / public| D[Local Filesystem storage/app/public/]
C -->|s3| E[Cloudflare R2 / AWS S3 Bucket]
D --> F[Public Symlink public/storage/]
E --> G[Global CDN Edge Cache]
F --> H[Browser Request via site_logo_url / asset]
G --> H
Storage Drivers Supported:
- Local Persistent Storage (
public):- Files stored under
storage/app/public/. - Exposed to the web via
php artisan storage:linktargetingpublic/storage.
- Files stored under
- Cloud Object Storage (
s3— Cloudflare R2 / AWS S3):- Zero-egress fee storage via Cloudflare R2.
- S3-compatible endpoints configured with
AWS_ENDPOINT,AWS_BUCKET, andAWS_ACCESS_KEY_ID.
2. Centralized Media Library (/admin/media)
The Media Library provides a centralized console for all images used across the catalog, marketing banners, and catering galleries:
Key Media Attributes:
title: Descriptive human-readable asset title.file_path: Relative path within the configured storage disk.disk: Driver used (publicors3).mime_type: Verified MIME type (e.g.image/jpeg,image/png,image/webp).file_size: Byte size of the asset.dimensions: Width and height in pixels (1200x800).folder: Logical organization (branding,products,gallery,cms).
3. Brand Identity & Logo Management Engine
The platform features a dedicated dynamic branding engine governed by SettingController:
3.1 Upload & Replacement Protocol (POST /admin/settings/logo)
- MIME & Extension Security: Strictly requires
image|mimes:jpeg,png,jpg,webp,svg|max:2048. - Unique Name Generation: Files are assigned a random cryptographic hash filename, preventing path traversal attacks and browser cache conflicts.
- Target Folder:
branding/directory on the active storage disk. - Cache Invalidation: Automatically clears the
all_site_settingscache key so all storefront templates reflect the new logo instantly.
3.2 Global Helper Functions:
Developers and template designers interact with the logo via clean helper functions:
// Returns the public web URL with fallback to default system asset
$logoUrl = site_logo_url();
// Returns absolute server path for embedding in DomPDF invoices
$logoPath = site_logo_path();
// Returns business title with fallback to "Eniceberny Bakery"
$siteName = site_name();
4. Deletion Guards & Asset Referential Integrity
To prevent broken images on live storefront pages:
- Before any media item can be deleted in
/admin/media, the system checks whether it is currently bound as a primary image to anyProduct,Category, orHomepageSection. - If active dependencies exist, the deletion is rejected with an explanatory message: "Cannot delete this media asset because it is currently used by [Product Name]".
- Destructive actions require explicit confirmation dialogues in the browser.