specs / 040-Changes-Admin-Firebase-Image-Upload

040 - Admin Firebase image upload (Court & Product multi)

  • Tanggal: 2026-08-20
  • Chat/topik: Semua image admin ke Firebase Storage; Court & Product multi-foto

Ringkasan perubahan

  • Generalize Firebase upload helper (uploadImage + folder allowlist).
  • Shared EntityPhotosPanel for Court + Product (main + gallery).
  • ImageUploadField for Promo, Space, Coach, Class, Event (single photo).
  • Schema: products.image_url, products.gallery, events.image_url (migration 027).
  • mpc-be Product exposes gallery in API; member apps unchanged (still use image_url).

Impact bisnis

Admin dapat mengelola foto katalog tanpa paste URL atau rsync ke disk BE. Product siap multi-foto di DB/API; UI member gallery ditunda.

Epic / User stories

  • Epic: Admin media management via Firebase Storage
  • US: Sebagai admin, saya ingin upload beberapa foto untuk court dan product, agar member melihat foto utama yang benar.
  • US: Sebagai admin, saya ingin upload satu foto untuk promo/space/coach/class/event tanpa menempel URL.

User terdampak

Admin (langsung). Member apps (foto muncul setelah URL diisi; tidak ada UI gallery product baru).

Aplikasi terdampak

  • mpc-admin — PERLU (v0.14)
  • mpc-be — PERLU (v1.11: Product.gallery + api_contract)
  • mpc-android / mpc-ios / mpc-web — TIDAK sekarang (tetap image_url)
  • mpc-be-pos / mpc-pos / owner / ksr-sync / crm — TIDAK

Perubahan schema

  • products.image_url text
  • products.gallery jsonb default []
  • events.image_url text (idempotent)
  • File: mpc-dev/docs/schema/migration/027-product-image-gallery.md

Perubahan kode

  • Admin: uploads.ts, firebaseAdmin.ts, EntityPhotosPanel, ImageUploadField, ProductPhotosPanel, form/actions wiring, Prisma Product/Event
  • BE: inventory/entity.go Gallery field; api_contract.md