D
Modul

Toko Digital

Storefront produk digital dengan page builder, preview/publish, dan pengiriman link otomatis pasca-bayar.

Storefront untuk produk digital. Merchant membangun halaman dengan page builder, publish, dan customer membeli langsung. Setelah pembayaran, link produk dikirim otomatis via WhatsApp.

File kunci

FileBarisPeran
app/Services/DigitalStoreService.php2.012Logic utama: setting, page builder, publish, CNAME/nginx
app/Services/DigitalProductService.php313Kirim link produk digital via WA setelah order dibayar
app/Http/Controllers/DigitalStoreController.php824Thin controller — delegasi ke service
app/Models/DigitalStore.php27Model dokumen toko (draft/publish)
app/Models/DigitalStorePage.php25Model halaman toko
app/Models/PreviewDigitalStore.php32Token preview terbatas (SHA-256, 30 menit)
app/Models/DraftStoresDigital.php26Orphan — tidak dipakai, warisan refactor

Model

DigitalStore

Field: user_id, store_id, type ('draft' | 'publish'), sections (array), setting (embed: transaction{logo}, site{fav_icon,domain}, payment_method[], shipping[]), published_at.

DigitalStorePage

Field: user_id, store_id, type ('draft'|'publish'), pagesType ('Halaman Utama'|'Sub Halaman'), parent_page_id, pageIndex, sections[] (tiap section: section_type 'product'/'content', product_type, status, index).

PreviewDigitalStore

Token SHA-256 per (storeId, userEmail, IP). Default expired 30 menit. Untuk preview draft sebelum publish.

Alur publish

DigitalStoreService::publishStore — validasi minimal 1 payment_method aktif → validasi produk digital wajib non-COD → DB transaction copy draft ke record type='publish' (store + pages), dedup shipping by code, handle S3 image.

DigitalProductService::sendProductLink(Order) — dipicu dari OrderObserver saat payment_status → paid. Validasi: semua item digital + payment_method='instant_payment' + payment_status='paid'. Ambil attachment_link dari produk, susun pesan, kirim via POST {url_api}send_message (backend Go).

Route

Web (routes/web.php:210)

MethodPathFungsi
GET/digital-storeHalaman utama
GET/digital-store/settingsPengaturan
GET/digital-store/settings/pages/{id}Editor halaman

API (routes/api.php:250)

Prefix /digital-store:

MethodPathFungsi
POST/digital-storeStore/update draft
POST/digital-store/publishPublish
POST/digital-store/pagesCRUD halaman
POST/digital-store/pages-contentUpdate section
DELETE/digital-store/pages-content/{id}Hapus section
POST/digital-store/pages-content-moveSortir section
PATCH/digital-store/checkoutUpdate config checkout
PATCH/digital-storeUpdate setting

Integrasi

ServiceEndpointUntuk
Backend Go (url_api)POST /v1/send_messageKirim link produk digital
AWS S3Storage::disk('s3')Upload logo/fav_icon/file
DNS/Nginxdns_get_record, generateConfigVerifikasi CNAME + nginx config untuk custom domain

Temuan

  • DraftStoresDigital orphan — model tidak dipakai, pola draft→publish via field type di DigitalStore
  • ensurePaymentMethods hardcode 4 method — tambah metode baru wajib edit kode, bukan config
  • Typo di nama methodcpyyImageIfExist, formatePublishedDate. Sudah dipakai internal, jangan rename tanpa audit