Untitled

mail@pastecode.io avatar
unknown
javascript
a year ago
4.1 kB
1
Indexable
const fs = require("fs")
const { json } = require("node:stream/consumers") //acá deberías usar los imports de ESModules como acordamos al inicio del curso. Para ello falta el package.json

class ProductManager {
    constructor(path) {
        this.path = path,

            this.products = [

            ]
    }

    getProduct = async () => {
        const listOfProducts = await fs.promises.readFile(this.path, "utf-8")
        const listOfProductsParse = JSON.parse(listOfProducts)
        return listOfProductsParse
    }

    generateId = async () => {
        const counter = this.products.length
        if (counter === 0) {
            return 1
        } else {
            return (this.products[counter - 1].id) + 1
        }
    }


    addProduct = async (title, description, price, image, code, stock) => {
        if (!title || !description || !price || !image || !code || !stock) {
            console.error("Ingresa todos los datos del producto")
            return
        } else {
            const coderepet = this.products.find(element => element.code === code)
            if (!coderepet) { //este condicional no es correcto, está haciendo que si el código no está repetido (find devuelve undefined) entonces entrá acá
                console.error("El codigo del producto es repetido")
                return
            } else {
                const generatedIds = await this.generateId()
                const productNew = {
                    id: generatedIds, title, description, price, image, code, stock
                }
                this.products.push(productNew)
                await fs.promises.writeFile(this.path, JSON.stringify(this.products, null, 2))
            }
        }
    }

    updateProduct = async (id, title, description, price, image, code, stock) => {
        if (!id || !title || !description || !price || !image || !code || !stock) {
            console.error("Ingresa todos los datos del producto para su correcta actualizacion")
            return
        } else {
            const allproducts = await this.getProduct()
            const coderepet = allproducts.find(element => element.code === code)
            if (coderepet) {
                console.error("El codigo del producto que desea actualizar se encuentra repetido")
                return
            } else {
                const currentProductsList = await this.getProduct()
                const newProductsList = currentProductsList.map(element => {
                    if (element.id === id) {
                        const updatedProduct = {
                            ...element, title, description, price, image, code, stock
                        }
                        return updatedProduct
                    } else {
                        return element
                    }
                })
                await fs.promises.writeFile(this.path, JSON.stringify(newProductsList, null, 2))
            }
        }

    }
    delateProduct = async (id) => {
        const allproducts = await this.getProduct()
        const productsNotFound = allproducts.filter (element => element.id === id)
        //acá hay dos temas: primero el nombre de la variable no corresponde a lo que representa.
        //podría ser filteredProducts
        //segundo: la confición no es correcta para lo que se busca, debería ser !== porque justamente buscas filtrar los productos que querés conservar.
        await fs.promises.writeFile(this.path, JSON.stringify(productsNotFound, null, 2)) 
        //esto no es correcto, se está escribiendo en el archivo el producto que supuestamente hay que eliminar
    }

    getProductById = async(id) => {
        const allproducts = await this.getProduct()
        const found = allproducts.find(element => element.id === id)
        return found
    }

}


async function generator() {
    const productManager = new ProductManager("./path/products.json");

    //const list = await productManager.getProduct()

    const only = await productManager.getProductById(1)

    console.log(only)
}

generator()