Syncing data service Last updated: 31. Aug 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 };
};