You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

151 lines
4.7 KiB

/**
* URL fro the server web, you can modify it like your Domain name
*/
const { URL } = require('./Config')
const { getNoteOnline, insertNote } = require('../Models/Notes')
async function getAllNotesFeched() {
const notes = await getNoteOnline()
return notes
}
/**
* send data to the database in the web
*/
async function verifyNoteToWeb() {
/**
* class AJAX, don't touch it
*/
const XHR = new XMLHttpRequest()
let notes = await getAllNotesFeched()
XHR.onreadystatechange = () => {
if (XHR.readyState === 4) {
if (XHR.status === 200) {
// nothing here because the statement is in the server web
} else {
console.log('impossible de contacter le server pour la syncronisation')
}
}
}
const data = new FormData()
data.append('Verification', JSON.stringify(notes))
XHR.open('POST', `${URL}/verifywebNote`, true)
XHR.setRequestHeader('x-requested-with', 'xmlhttprequest')
XHR.send(data)
}
async function verifyNoteToLocal() {
/**
* class AJAX, don't touch it
*/
const XHR = new XMLHttpRequest()
let notes = await getAllNotesFeched()
XHR.onreadystatechange = () => {
if (XHR.readyState === 4) {
if (XHR.status === 200) {
const noteOnline = JSON.parse(XHR.responseText)
let data_note = []
// let bool = false;
if (notes.length === 0) {
// Case when local data is empty, insert all online data
for (let index = 0; index < noteOnline.length; index++) {
console.log(noteOnline[index]['etudiant_id'])
insertNote(
noteOnline[index].etudiant_id,
noteOnline[index].etudiant_niveau,
noteOnline[index].Algebre,
noteOnline[index].Analyse,
noteOnline[index].Mecanique_Generale_I,
noteOnline[index].Resistance_Materiaux,
noteOnline[index].Electricite,
noteOnline[index].Chimie_Generale_1,
noteOnline[index].Algorithmique,
noteOnline[index].Thermodynamique_Physique,
noteOnline[index].Mecanique_Fluide,
noteOnline[index].Optique_Geometrique,
noteOnline[index].Calcul_Numerique,
noteOnline[index].Calcul_Vectoriel_Integral,
noteOnline[index].Francais,
noteOnline[index].Anglais,
noteOnline[index].Dessin_Technique,
noteOnline[index].Programmation
)
}
} else {
// Case when online data has more entries than local data
// Loop through the notes array
for (let index = 0; index < notes.length; index++) {
// Push an object with the desired properties
data_note.push({
etudiant_id: notes[index].etudiant_id,
etudiant_niveau: notes[index].etudiant_niveau
})
}
for (let index = 0; index < noteOnline.length; index++) {
let bool = true
for (let jindex = 0; jindex < data_note.length; jindex++) {
if (
noteOnline[index].etudiant_id === data_note[jindex].etudiant_id &&
noteOnline[index].etudiant_niveau === data_note[jindex].etudiant_niveau
) {
bool = false
break
}
}
if (bool) {
insertNote(
noteOnline[index].etudiant_id,
noteOnline[index].etudiant_niveau,
noteOnline[index].Algebre,
noteOnline[index].Analyse,
noteOnline[index].Mecanique_General_I,
noteOnline[index].Resistance_Materiaux,
noteOnline[index].Electricite,
noteOnline[index].Chimie_Generale_1,
noteOnline[index].Algorithmique,
noteOnline[index].Thermodynamique_Physique,
noteOnline[index].Mecanique_Fluide,
noteOnline[index].Optique_Geometrique,
noteOnline[index].Calcul_Numerique,
noteOnline[index].Calcul_Vectoriel_Integral,
noteOnline[index].Francais,
noteOnline[index].Anglais,
noteOnline[index].Dessin_Technique,
noteOnline[index].Programmation
)
}
}
}
}
}
}
XHR.open('GET', `${URL}/verifylocalNote`, true)
XHR.setRequestHeader('x-requested-with', 'xmlhttprequest')
XHR.send()
}
async function synchronizeDataNotes() {
try {
await verifyNoteToWeb()
await verifyNoteToLocal()
} catch (error) {
console.error('Error during synchronization:', error)
}
}
module.exports = {
synchronizeDataNotes
}