Lewati ke konten utama

Blog Activities Gallery API — Dokumentasi

Versi: 1.0 • Terakhir diperbarui: 2025-11-04 04:47:32 (Asia/Jakarta)
Host API: https://api-sjs.bizpro.my.id
Resource Base Path (diasumsikan): /blog_activities_gallery

Catatan: Blueprint blog_activities_gallery_bp tidak mendefinisikan url_prefix di file route. Dokumentasi ini mengasumsikan blueprint dipasang pada path dasar /blog_activities_gallery. Jika berbeda di aplikasi Anda, sesuaikan contoh URL di bawah.


Ringkasan

API ini mengelola galeri aktivitas/blog (gambar, judul, deskripsi, kategori, tanggal, lokasi). Mendukung operasi CRUD sederhana.

Fitur utama

  • Membuat, membaca, memperbarui, dan menghapus entri galeri.
  • Dukungan penandaan unggulan (is_featured) dan aktivasi (is_active).
  • Pengurutan presentasi melalui order_index (disarankan untuk konsumsi frontend).

Skema Tabel

Nama tabel: blog_activities_gallery

KolomTipeDefaultKeterangan
idINT UNSIGNED (PK)AUTO_INCREMENTPrimary key
titleVARCHAR(255)Wajib pada API
descriptionTEXTNULLDeskripsi kegiatan (opsional)
image_urlVARCHAR(255)URL gambar (DB NOT NULL; disarankan wajib pada API)
image_altVARCHAR(255)NULLAlt text untuk aksesibilitas (opsional)
categoryVARCHAR(100)NULLKategori/campaign (opsional)
activity_dateDATENULLTanggal kegiatan (YYYY-MM-DD disarankan)
locationVARCHAR(255)NULLLokasi kegiatan (opsional)
is_featuredTINYINT(1)01=ditandai unggulan
order_indexINT0Urutan tampil (semakin kecil tampil duluan)
is_activeTINYINT(1)11=aktif, 0=nonaktif
created_atDATETIMEnow()Otomatis oleh DB
updated_atDATETIMEnow()Otomatis oleh DB (on update)
detail_urlVARCHAR(255)NULLTautan detail artikel (opsional)

Perhatian format tanggal: Kode route mem-parsing activity_date dengan fungsi parse_datetime. Meskipun kolom di DB bertipe DATE, kami sarankan mengirim YYYY-MM-DD agar sesuai dengan tipe kolom. Jika Anda mengirim ISO datetime, pastikan layer model mengkonversinya ke tanggal.


Konvensi Respons

  • Sukses: { "success": true, ... }
  • Gagal: { "success": false, "message": "..." }

Endpoints

1) Daftar semua item

GET https://api-sjs.bizpro.my.id/blog_activities_gallery/

Respons 200

{
"success": true,
"data": [
{
"id": 5,
"title": "Family Gathering 2025",
"description": "Kegiatan internal di Taman Safari",
"image_url": "https://cdn.example.com/img/fg2025.jpg",
"image_alt": "Foto Family Gathering",
"category": "Internal Event",
"activity_date": "2025-10-12",
"location": "Bogor",
"is_featured": 1,
"order_index": 10,
"is_active": 1,
"created_at": "2025-10-13 09:00:00",
"updated_at": "2025-10-13 09:00:00",
"detail_url": "https://sjs.co.id/blog/family-gathering-2025"
}
]
}

Respons 500

{ "success": false, "message": "penjelasan kesalahan" }

2) Ambil satu item berdasarkan ID

GET https://api-sjs.bizpro.my.id/blog_activities_gallery/{id}

Respons 200

{ "success": true, "data": { /* objek item */ } }

Respons 404

{ "success": false, "message": "Not found" }

Respons 500

{ "success": false, "message": "penjelasan kesalahan" }

3) Buat item baru

POST https://api-sjs.bizpro.my.id/blog_activities_gallery/

Body (JSON)

  • title (string, wajib)
  • description (string, opsional)
  • image_url (string, disarankan wajib sesuai DB NOT NULL)
  • image_alt (string, opsional)
  • category (string, opsional)
  • activity_date (string tanggal YYYY-MM-DD disarankan)
  • location (string, opsional)
  • is_featured (0/1, default 0)
  • order_index (integer, default 0)
  • is_active (0/1, default 1)

Contoh Request

curl -s -X POST "https://api-sjs.bizpro.my.id/blog_activities_gallery/"   -H "Content-Type: application/json"   -d '{
"title": "SJS x Pegadaian",
"description": "Sesi investasi emas karyawan",
"image_url": "https://cdn.example.com/img/pegadaian.jpg",
"image_alt": "Sosialisasi emas",
"category": "Financial Wellness",
"activity_date": "2025-10-20",
"location": "Jakarta",
"is_featured": 1,
"order_index": 5,
"is_active": 1
}'

Respons 201

{ "success": true, "id": 6, "message": "Created successfully" }

Respons 400

{ "success": false, "message": "Title is required" }

Respons 500

{ "success": false, "message": "penjelasan kesalahan" }

4) Perbarui item (by ID)

PUT https://api-sjs.bizpro.my.id/blog_activities_gallery/{id}

Body (JSON) — kolom sama seperti POST. title tetap wajib.

curl -s -X PUT "https://api-sjs.bizpro.my.id/blog_activities_gallery/6"   -H "Content-Type: application/json"   -d '{
"title": "SJS x Pegadaian (Update)",
"order_index": 3,
"is_featured": 1
}'

Respons 200

{ "success": true, "affected": 1, "message": "Updated successfully" }

Respons 404

{ "success": false, "message": "Not found" }

Respons 400

{ "success": false, "message": "Title is required" }

Respons 500

{ "success": false, "message": "penjelasan kesalahan" }

5) Hapus item (by ID)

DELETE https://api-sjs.bizpro.my.id/blog_activities_gallery/{id}

curl -s -X DELETE "https://api-sjs.bizpro.my.id/blog_activities_gallery/6"

Respons 200

{ "success": true, "affected": 1, "message": "Deleted successfully" }

Respons 404

{ "success": false, "message": "Not found" }

Respons 500

{ "success": false, "message": "penjelasan kesalahan" }

Praktik Terbaik

  • Ordering: isi order_index untuk kontrol urutan di frontend (ascending). Backend find_all() saat ini tidak mendefinisikan sort—sesuaikan di layer model bila perlu.
  • Aksesibilitas: selalu isi image_alt yang deskriptif.
  • Kualitas Gambar: gunakan URL CDN yang stabil, resolusi sesuai tampilan (mis. 1200×800).
  • Tanggal: kirim activity_date sebagai YYYY-MM-DD untuk kompatibilitas tipe kolom DATE.
  • Aktivasi: gunakan is_active=0 untuk arsip tanpa menghapus data.

Error Umum

  • 400 Title is required: field title tidak dikirim.
  • 404 Not found: id tidak ada saat GET/PUT/DELETE.
  • 500: kesalahan internal DB atau validasi lainnya (lihat log server).

Changelog

  • v1.0 — Dokumentasi awal berdasarkan blog_activities_gallery_routes.py & skema tabel.