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.
 
 
 

108 lines
2.8 KiB

// here the data from the local and web server become one for users table
/**
* our get and insert users function, don't touch it
*/
const { getAllUsers, insertUser } = require('../Models/Users')
/**
* URL fro the server web, you can modify it like your Domain name
*/
const { URL } = require('./Config')
/**
* function to get the all users
*
* @returns promise
*/
async function getAllUsersFetch() {
const users = await getAllUsers()
return users
}
/**
* function to syncronise data from local to web server,
* it will be an async function to get the result of promise in getAllUsersFetch() function
*/
async function verifyUserTableWeb() {
/**
* class AJAX, don't touch it
*/
const XHR = new XMLHttpRequest()
let users = await getAllUsersFetch()
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(users))
XHR.open('POST', `${URL}/verifyweb`, true)
XHR.setRequestHeader('x-requested-with', 'xmlhttprequest')
XHR.send(data)
}
async function verifyUserTableLocal() {
/**
* class AJAX, don't touch it
*/
const XHR = new XMLHttpRequest()
let users = await getAllUsersFetch()
XHR.onreadystatechange = () => {
if (XHR.readyState === 4) {
if (XHR.status === 200) {
const usersFromWeb = JSON.parse(XHR.responseText)
// set all email from base local in Array emailArray
let emailArray = []
for (let index = 0; index < users.length; index++) {
emailArray.push(users[index]['email'])
}
// search if the email from user from server is in local or not
// if not, then insert it
for (let index = 0; index < usersFromWeb.length; index++) {
if (emailArray.includes(usersFromWeb[index]['email']) === false) {
insertUser(
usersFromWeb[index]['username'],
usersFromWeb[index]['email'],
usersFromWeb[index]['password'],
usersFromWeb[index]['photos'],
usersFromWeb[index]['roles']
)
}
}
} else {
console.log('impossible de contacter le server pour la syncronisation')
}
}
}
XHR.open('GET', `${URL}/verifylocal`, true)
XHR.setRequestHeader('x-requested-with', 'xmlhttprequest')
XHR.send()
}
// Call both functions sequentially or in parallel as needed
async function synchronizeData() {
try {
setTimeout(await verifyUserTableWeb(), 2000)
setTimeout(await verifyUserTableLocal(), 1000)
} catch (error) {
console.error('Error during synchronization:', error)
}
}
module.exports = {
synchronizeData
}