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_bptidak mendefinisikanurl_prefixdi 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
| Kolom | Tipe | Default | Keterangan |
|---|---|---|---|
| id | INT UNSIGNED (PK) | AUTO_INCREMENT | Primary key |
| title | VARCHAR(255) | — | Wajib pada API |
| description | TEXT | NULL | Deskripsi kegiatan (opsional) |
| image_url | VARCHAR(255) | — | URL gambar (DB NOT NULL; disarankan wajib pada API) |
| image_alt | VARCHAR(255) | NULL | Alt text untuk aksesibilitas (opsional) |
| category | VARCHAR(100) | NULL | Kategori/campaign (opsional) |
| activity_date | DATE | NULL | Tanggal kegiatan (YYYY-MM-DD disarankan) |
| location | VARCHAR(255) | NULL | Lokasi kegiatan (opsional) |
| is_featured | TINYINT(1) | 0 | 1=ditandai unggulan |
| order_index | INT | 0 | Urutan tampil (semakin kecil tampil duluan) |
| is_active | TINYINT(1) | 1 | 1=aktif, 0=nonaktif |
| created_at | DATETIME | now() | Otomatis oleh DB |
| updated_at | DATETIME | now() | Otomatis oleh DB (on update) |
| detail_url | VARCHAR(255) | NULL | Tautan detail artikel (opsional) |
Perhatian format tanggal: Kode route mem-parsing
activity_datedengan fungsiparse_datetime. Meskipun kolom di DB bertipeDATE, kami sarankan mengirimYYYY-MM-DDagar 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 tanggalYYYY-MM-DDdisarankan)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_indexuntuk kontrol urutan di frontend (ascending). Backendfind_all()saat ini tidak mendefinisikan sort—sesuaikan di layer model bila perlu. - Aksesibilitas: selalu isi
image_altyang deskriptif. - Kualitas Gambar: gunakan URL CDN yang stabil, resolusi sesuai tampilan (mis. 1200×800).
- Tanggal: kirim
activity_datesebagaiYYYY-MM-DDuntuk kompatibilitas tipe kolomDATE. - Aktivasi: gunakan
is_active=0untuk arsip tanpa menghapus data.
Error Umum
- 400 Title is required: field
titletidak dikirim. - 404 Not found:
idtidak ada saatGET/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.