Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
SNIPPET: Logic - sinkronisasi ECB JNA
=== Masalah ===
Bagaimana membuat sinkronisasi isian survey offline dan sistem online?
- Login?
- Perubahahan data?
=== USE CASE ===
USER OFFLINE > Pilih Survey yang akan disinkron
> Login
> Kirim data survey (baru dan update)
> Cancel pengiriman survey (kalau survey belum di konfirm admin)
> Cek status konfirmasi survey (sudah diterima atau belum)
> Logout
ADMIN > CRUD User Offline
> Konfirm data yang dikirim User Offline
> Tolak data yang dikirm User Offline
=== Kendala ===
- Survey ada banyak dan memiliki ID berbeda digenerate berbeda tiap client
- ID survey yang dibuat tiap client ada kemungkinan sama
- Tiap isian di tiap survey memiliki primary responsse_id yang dimulai dari 1 (auto_increment). Setiap client dan survey selalu sama.
- Setiap survey yang diimport harus memiliki token survey (karena untuk mengisi survey secara offline atau online surveyor harus memiliki token)
=== Solusi ===
*** Pembeda tiap user ***
- Gunakan device Mac untuk merequest activation key ke server
- activation key disimpan di setting
- tiap kali mau masuk menu sinkron, device mac dan activation key di kirim. Jika sesuai dengan yang ada di server, proses berlanjut dan client mendapat token. Jika tidak, proses berhenti.
*** Login ***
- Di server CREATE table >>> clientauth [userid, username, password, email, biodata]
- User pilih jenis survey, klik menu sinkron, keluar form login ke server pusat
- Jika login berhasil, user akan mendapat data_token (masukkin ke cookie client) yang digenerate di session pusat dan akan expired setiap 10 menit. Isi data token_user di pusat = [token, userid]
- User harus login ulang setiap 10 menit
- Setiap kali user melakukan action yang berhubungan dengan data server data_token akan ikut dikirim
- Ketika user logout di offline, variabel token di offline akan dihapus
- [selesai]
*** User - Kirim Data Survey - Baru ***
- Klik button sinkron
- Pilih survey yang akan menjadi target di server pusat
- User kirim data [token, token_survey, response[], surveytitle, surveyid_target]
> token = untuk autentikasi
> token_survey = untuk memasukkan survey (token untuk melakukan survey)
> response = data survey
> surveytitle = judul survey
> surveyid_target = target survey yang akan di kirim
- Message "Terima Kasih. Data Anda akan diproses Admin."
- Di server akan INSERT table >>> surveymerge [userid, surveyid_source, surveyid_generated, surveyid_target, survey_title]
> userid = id dari user yang mengirim, diambil dari session token_user
> surveyid_source = id survey yang dikirim dari client
> surveyid_generated = id survey baru yang dibuat di server. Ini diperlukan untuk menghindari id survey yang sama dari client. Ketika server akan membuat survey baru, juga akan mengecek id ini.
> surveyid_target = target id survey di server yang dipilih oleh client
> survey_title = title survey yang dikirim oleh client
- Di server akan CREATE table >>> temp_token_userid_surveyid. Tabel ini berisi data token yang dikirim.
Penjelasan cara membuat nama table:
> userid = userid dari table surveymerge
> surveyid = surveyid_generated dari table surveymerge
> contoh nama table : temp_token_12_345212
- Di server akan CREATE table >>> temp_responses_userid_surveyid. Berisi data response yang dikirim.
Penjelasan cara membuat nama table:
> userid = userid dari table surveymerge
> surveyid = surveyid_generated dari table surveymerge
> contoh nama table : temp_responses_12_345125
*** ADMIN - Confirm data survey ***
- Buka menu sinkron (pilihan lainnya akan muncul portlet "sinkron terbaru" di halaman utama admin dengan link untuk ke data itu)
- pilih data yang akan di sinkron
- setujui sinkron ke survey tertentu atau ubah target surveyid.
- Jika perubahan disetujui, prosesnya adalah:
* Server akan membuat table log_sync(id,userid,surveyid)
> id = id dari data
> userid = id dari user
> surveyid = id dari surveyid_generated dari table surveymerge
* Data dari temp_token_userid_surveyid akan di import ke table dengan surveyid target
* Setiap kali record
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.