Fix: Convert 03PovertyMapping from submodule to regular folder
This commit is contained in:
@@ -0,0 +1,162 @@
|
||||
/* ============================================================
|
||||
api.js — Centralized fetch wrapper
|
||||
============================================================ */
|
||||
'use strict';
|
||||
|
||||
const Http = {
|
||||
async request(url, options = {}) {
|
||||
const headers = {
|
||||
'Content-Type': 'application/json',
|
||||
...options.headers,
|
||||
};
|
||||
try {
|
||||
const res = await fetch(url, { ...options, headers });
|
||||
const data = await res.json();
|
||||
return { ok: res.ok, status: res.status, data };
|
||||
} catch (err) {
|
||||
console.error('[API] Network error:', err);
|
||||
return { ok: false, status: 0, data: { success: false, message: 'Koneksi gagal.' } };
|
||||
}
|
||||
},
|
||||
async post(endpoint, body = {}) {
|
||||
return this.request(endpoint, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify(body),
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
const ApiHouses = {
|
||||
async list(params = {}) {
|
||||
const qs = new URLSearchParams(params).toString();
|
||||
return Http.request(API.houses + (qs ? '?' + qs : ''), { method: 'GET' });
|
||||
},
|
||||
async show(id) {
|
||||
return Http.request(API.houses + '?action=show&id=' + id, { method: 'GET' });
|
||||
},
|
||||
async create(body) {
|
||||
return Http.post(API.houses + '?action=create', body);
|
||||
},
|
||||
async update(id, body) {
|
||||
return Http.post(API.houses + '?action=update&id=' + id, body);
|
||||
},
|
||||
async patch(id, body) {
|
||||
return Http.post(API.houses + '?action=patch&id=' + id, body);
|
||||
},
|
||||
async delete(id) {
|
||||
return Http.post(API.houses + '?action=delete&id=' + id);
|
||||
},
|
||||
async verify(id) {
|
||||
return Http.post(API.houses + '?action=verify&id=' + id);
|
||||
},
|
||||
};
|
||||
|
||||
const ApiCenters = {
|
||||
async list(params = {}) {
|
||||
const qs = new URLSearchParams(params).toString();
|
||||
return Http.request(API.centers + (qs ? '?' + qs : ''), { method: 'GET' });
|
||||
},
|
||||
async show(id) {
|
||||
return Http.request(API.centers + '?action=show&id=' + id, { method: 'GET' });
|
||||
},
|
||||
async create(body) {
|
||||
return Http.post(API.centers + '?action=create', body);
|
||||
},
|
||||
async update(id, body) {
|
||||
return Http.post(API.centers + '?action=update&id=' + id, body);
|
||||
},
|
||||
async patch(id, body) {
|
||||
return Http.post(API.centers + '?action=patch&id=' + id, body);
|
||||
},
|
||||
async delete(id) {
|
||||
return Http.post(API.centers + '?action=delete&id=' + id);
|
||||
},
|
||||
async coverage(id) {
|
||||
return Http.request(API.centers + '?action=coverage&id=' + id, { method: 'GET' });
|
||||
},
|
||||
async nearby(lat, lng, km = 5) {
|
||||
return Http.request(API.centers + `?action=nearby&lat=${lat}&lng=${lng}&km=${km}`, { method: 'GET' });
|
||||
},
|
||||
};
|
||||
|
||||
const ApiAid = {
|
||||
async list(params = {}) {
|
||||
const qs = new URLSearchParams(params).toString();
|
||||
return Http.request(API.aid + (qs ? '?' + qs : ''), { method: 'GET' });
|
||||
},
|
||||
async show(id) {
|
||||
return Http.request(API.aid + '?action=show&id=' + id, { method: 'GET' });
|
||||
},
|
||||
async create(body) {
|
||||
return Http.post(API.aid + '?action=create', body);
|
||||
},
|
||||
async update(id, body) {
|
||||
return Http.post(API.aid + '?action=update&id=' + id, body);
|
||||
},
|
||||
async delete(id) {
|
||||
return Http.post(API.aid + '?action=delete&id=' + id);
|
||||
},
|
||||
async stats() {
|
||||
return Http.request(API.aid + '?action=stats', { method: 'GET' });
|
||||
},
|
||||
};
|
||||
|
||||
const ApiReports = {
|
||||
async list(params = {}) {
|
||||
const qs = new URLSearchParams(params).toString();
|
||||
return Http.request(API.reports + (qs ? '?' + qs : ''), { method: 'GET' });
|
||||
},
|
||||
async show(id) {
|
||||
return Http.request(API.reports + '?action=show&id=' + id, { method: 'GET' });
|
||||
},
|
||||
async create(body) {
|
||||
return Http.post(API.reports + '?action=create', body);
|
||||
},
|
||||
async update(id, body) {
|
||||
return Http.post(API.reports + '?action=update&id=' + id, body);
|
||||
},
|
||||
async resolve(id) {
|
||||
return Http.post(API.reports + '?action=resolve&id=' + id);
|
||||
},
|
||||
async delete(id) {
|
||||
return Http.post(API.reports + '?action=delete&id=' + id);
|
||||
},
|
||||
};
|
||||
|
||||
const ApiStats = {
|
||||
async overview() {
|
||||
return Http.request(API.stats + '?action=overview', { method: 'GET' });
|
||||
},
|
||||
async trend() {
|
||||
return Http.request(API.stats + '?action=trend', { method: 'GET' });
|
||||
},
|
||||
async povertyChart() {
|
||||
return Http.request(API.stats + '?action=poverty_chart', { method: 'GET' });
|
||||
},
|
||||
async aidChart() {
|
||||
return Http.request(API.stats + '?action=aid_chart', { method: 'GET' });
|
||||
},
|
||||
async centerStats() {
|
||||
return Http.request(API.stats + '?action=center_stats', { method: 'GET' });
|
||||
},
|
||||
async ageDistribution() {
|
||||
return Http.request(API.stats + '?action=age_distribution', { method: 'GET' });
|
||||
},
|
||||
async education() {
|
||||
return Http.request(API.stats + '?action=education', { method: 'GET' });
|
||||
},
|
||||
};
|
||||
|
||||
const ApiUsers = {
|
||||
async list(params = {}) {
|
||||
const qs = new URLSearchParams(params).toString();
|
||||
return Http.request(API.users + (qs ? '?' + qs : ''), { method: 'GET' });
|
||||
},
|
||||
};
|
||||
|
||||
const ApiLogs = {
|
||||
async list(params = {}) {
|
||||
const qs = new URLSearchParams(params).toString();
|
||||
return Http.request(API.logs + (qs ? '?' + qs : ''), { method: 'GET' });
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user