| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- import { import_process_fail } from "./import_process_fail.js";
- import { product_base } from "./product_base";
- export class database {
- #content;
- #processed;
- #on_skip;
- constructor(content) {
- this.#content = content
- this.#processed = new Map();
- this.#on_skip = null;
- }
- #append(target) {
- if (this.#processed.has(target.barcode)) {
- this.#processed.get(target.barcode).stock_count += 1;
- return;
- }
- this.#processed.set(target.barcode, target)
- }
- #validate(target) {
- if (!("id" in target)) {
- throw new Error("One of item has no ID.");
- }
- if (!("title" in target)) {
- throw new Error("Product " + target.barcode + " has no title.")
- }
- if (!("author" in target)) {
- throw new Error("Product " + target.barcode + " has no author.")
- }
- }
- #convert(target) {
- this.#validate(target);
- const product = new product_base();
- product.name = target.title;
- product.description = "";
- product.author = target.author;
- product.stock_count = 1;
- product.barcode = target.id;
- return product;
- }
- on_skip(target) {
- this.#on_skip = target;
- return this;
- }
- process() {
- this.#processed.clear();
- if (!(this.#content instanceof Array)) {
- throw new Error("Database woud be array of objects.")
- }
- this.#content.forEach(count => {
- try {
- const product = this.#convert(count);
- this.#append(product);
- } catch (error) {
- if (this.#on_skip === null) {
- return ;
- }
- try {
- this.#on_skip(new import_process_fail(count, error));
- } catch (fail) {
- console.log(fail);
- }
- }
- });
- return this;
- }
- results() {
- return Array.from(this.#processed.values());
- }
- }
|