Syncing data service Last updated: 04. Jun 2025

A comprehensive data synchronization service that fetches data from external APIs and synchronizes it with local site data, including price updates and campaign management.

Example

Code #/Services/SyncService.js

let config = docly.getFile("#/Config");

if (config == null) throw new Error("#/Config - filen ble ikke funnet!");

if (!config.SyncToken) throw new Error("Sync authorization token er ikke angitt i configfilen!");
if (!config.SyncUrl) throw new Error("Sync end point er ikke angitt i configfilen!");
if (!config.SyncTo) throw new Error("Sync 'target mappe' er ikke angitt i configfilen!");

let result = docly.httpPost(config.SyncUrl, { "token" : config.SyncToken });

let info = docly.getJson("#/Logs/Scheduled task - Produktsync.json");
let produkter = docly.getFiles("/", "*", 5, "MAX");

let errors = [];
let updates = [];
let notmodified = [];
for(let p of result) {
    //let targetpath = config.SyncTo + "/" + p.Name;
    let values = p.Values;
    let sourceid = values.ROWID;

    let target = produkter.find(x => x.produktbookingid == sourceid);
    let kampanje = values.Kampanje?.length > 0;
    let kampanjepris = "";
    let kampanjeslutt = "";


    if (target == null) {
        errors.push({ id:sourceid, navn:p.Name, message: `Fant ikke produktet`, kampanje:kampanje });
    } else {
        let nypris = values.Grunnpris;

        // Sjekk evt. om det er en gjeldende kampanje på produktet
        let n = new Date();
        let now = docly.format(n, "yyyy-MM-dd") + "T" + docly.format(n, "HH:mm");
        for(let k of values.Kampanje) {
            if (k.FraDato <= now && k.TilDato >= now) {
                kampanjepris = k.KampanjeGrunnpris;
                kampanjeslutt = k.TilDato;
            }
        }

        let gammelPris = target.Pris;
        let gammelKampanjepris = target.Kampanjepris;
        let gammelKampanjeslutt = target.Kampanjeslutt;

        if (nypris != gammelPris || kampanjepris != gammelKampanjepris || gammelKampanjeslutt != kampanjeslutt) {
            updates.push({
                id:sourceid,
                navn:p.Name,
                nypris : nypris,
                gammelpris : gammelPris,
                kampanjepris : kampanjepris,
                gammelKampanjepris : gammelKampanjepris,
                kampanjeslutt : kampanjeslutt,
                gammelKampanjeslutt : gammelKampanjeslutt
            });
            //return target;
            let targetpath = target.folderpath + "/" + target.filename;
            docly.patchFile(targetpath, { "Pris" : nypris, "Kampanjepris" : kampanjepris, "Kampanjeslutt" : kampanjeslutt });
        }
        else 
        {
            notmodified.push({ id:sourceid, navn:p.Name, kampanje:kampanje });
        }
    }
}

delete info.LastResult;

return { produkter : result.length,  updates: updates, notmodified:notmodified, errors: errors, info : info };