Files
UAS_SIG_WebGIS/pertemuan_3/js/utils/store.js
T
2026-06-12 16:36:31 +07:00

58 lines
1.8 KiB
JavaScript

/* ═══════════════════════════════════════════════════════════
2. STORAGE (MySQL API Version)
═══════════════════════════════════════════════════════════ */
const Store = (() => {
const API_URL = '../api/index.php'; // Or absolute URL if hosted elsewhere
let db = {
spbu: [],
jalan: [],
parsil: [],
warga: [],
rumahIbadah: []
};
const request = async (action, payload = {}) => {
try {
const res = await fetch(`${API_URL}?action=${action}`, {
method: action === 'alldb' ? 'GET' : 'POST',
headers: { 'Content-Type': 'application/json' },
body: action === 'alldb' ? null : JSON.stringify(payload)
});
return await res.json();
} catch (err) {
console.error('API Error:', err);
throw err;
}
};
return {
load: async () => {
try {
const data = await request('alldb');
if (data) {
db = { ...db, ...data };
}
} catch (e) {
console.error("Gagal load data dari server", e);
}
},
all: ln => db[ln]||[],
find: (ln,id) => (db[ln]||[]).find(r=>r.id===id)||null,
add: async (ln,rec) => {
db[ln].push(rec);
await request('add', { layer: ln, data: rec });
},
update: async (ln,id,patch) => {
const i=db[ln].findIndex(r=>r.id===id); if(i<0)return;
db[ln][i]={...db[ln][i],...patch};
await request('update', { layer: ln, id: id, patch: patch });
},
remove: async (ln,id) => {
db[ln]=db[ln].filter(r=>r.id!==id);
await request('remove', { layer: ln, id: id });
},
allDb: () => db,
};
})();