| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 | import { autocomplete_request } from "./autocomplete_request";import { create_request } from "./create_request";import { import_process_fail } from "./import_process_fail.js";import { product_get_request } from "./product_get_request.js";export class import_loop {    #content;    #on_autocomplete;    #on_create;    #on_single_fail;    #on_skip;    #on_single_success;    #finally;    on_autocomplete(target) {        this.#on_autocomplete = target;        return this;    }    on_create(target) {        this.#on_create = target;        return this;    }    on_single_fail(target) {        this.#on_single_fail = target;        return this;    }    on_skip(target) {        this.#on_skip = target;        return this;    }    on_single_success(target) {        this.#on_single_success = target;        return this;    }    finally(target) {        this.#finally = target;        return this;    }    constructor(dataset) {        this.#content = dataset;        this.#on_autocomplete = null;        this.#on_create = null;        this.#on_single_fail = null;        this.#on_skip = null;        this.#on_single_success = null;        this.#finally = null;    }    async #autocomplete(target) {        if (this.#on_autocomplete !== null) {            try {                this.#on_autocomplete(target);            } catch (error) {                console.log(error);            }        }        const request = new autocomplete_request(target.barcode);        const response = await request.connect();        if (!response.result) {            throw new Error(response.cause);        }        const found = response.found;        target.description = found.description;        if (found.image.length === 0) {            throw new Error("Image for " + target.barcode + " not found.");        }        return new create_request(target, found.image);    }    async process() {        for (const count of this.#content) {            try {                await this.#create(count);            } catch(error) {                if (this.#on_single_fail !== null) {                    try {                        const fail = new import_process_fail(count, error);                        this.#on_single_fail(fail);                    } catch (error) {                        console.log(error);                    }                }            }        }        if (this.#finally !== null) {            try {                this.#finally();            } catch (error) {                console.log(error);            }        }        return this;    }    async #exists(target) {        const request = new product_get_request(target.barcode);        const response = await request.connect();        return response.product !== null;    }    async #create(target) {        if (await this.#exists(target)) {            try {                const result = new import_process_fail(target, null);                this.#on_skip(result);            } catch (error) {                console.log(error);            }            return;        }        const request = await this.#autocomplete(target);        if (this.on_create !== null) {            try {                this.#on_create(target);            } catch (error) {                console.log(error);            }        }        const response = await request.connect();        if (!response.result) {            throw new Error(response.cause);        }        if (this.#on_single_success !== null) {            try {                this.#on_single_success(target);            } catch (error) {                console.log(error);            }        }    }}
 |