OLDTiendaManagerImpl - Dsoledispa/DSA-PROJECTE GitHub Wiki

package edu.upc.dsa.manager;

import edu.upc.dsa.models.*;
import org.apache.log4j.Logger;

import java.util.ArrayList;
import java.util.List;

public class TiendaManagerImpl implements TiendaManager {

    private static TiendaManager instance;
    private List<Seccion> secciones;
    final static Logger logger = Logger.getLogger(TiendaManagerImpl.class);

    private TiendaManagerImpl() {
        this.secciones = new ArrayList<>();
    }

    // Patron singleton
    public static TiendaManager getInstance() {
        if (instance == null) instance = new TiendaManagerImpl();
        return instance;
    }

    @Override
    public void addProductoASeccion(String nombreSeccion, Producto producto) {
        for (Seccion s : this.secciones) {
            if (s.getNombre().equalsIgnoreCase(nombreSeccion)) {
                s.agregarProducto(producto);
                logger.info("Producto añadido a la sección " + nombreSeccion + ": " + producto);
                return;
            }
        }
        // Si no existe, crear la sección
        Seccion nueva = new Seccion(nombreSeccion);
        nueva.agregarProducto(producto);
        this.secciones.add(nueva);
        logger.info("Sección no encontrada. Se ha creado la sección " + nombreSeccion + " y se ha añadido el producto: " + producto);
    }

    @Override
    public Producto buscarProductoPorId(String idProducto) {
        for (Seccion seccion : secciones) {
            for (Producto p : seccion.getProductos()) {
                if (p.getId().equals(idProducto)) return p;
            }
        }
        return null;
    }

    @Override
    public List<Producto> buscarProductosPorNombre(String nombre) {
        List<Producto> resultados = new ArrayList<>();
        for (Seccion seccion : secciones) {
            for (Producto p : seccion.getProductos()) {
                if (p.getNombre().toLowerCase().contains(nombre.toLowerCase())) {
                    resultados.add(p);
                }
            }
        }
        return resultados;
    }

    @Override
    public boolean comprarProducto(String idProducto, String nombreUsuario) {
        //No deberia ser necesario con jwt
        //Usuario usuario = comprobarUsuario(nombreUsuario);
        //if (usuario == null) return false;
        Producto producto = buscarProductoPorId(idProducto);
        if (producto == null) return false;

        logger.info(nombreUsuario + " ha comprado el producto " + producto.getNombre());
        return true;
    }

    @Override
    public List<Producto> listarProductosPorSeccion(String nombreSeccion) {
        for (Seccion s : secciones) {
            if (s.getNombre().equalsIgnoreCase(nombreSeccion)) {
                return s.getProductos();
            }
        }
        return new ArrayList<>();
    }

    @Override
    public List<Producto> listarProductos() {
        List<Producto> productos = new ArrayList<>();
        for (Seccion seccion : secciones) {
            productos.addAll(seccion.getProductos());
        }
        return productos;
    }

    @Override
    public List<Seccion> getSecciones() {
        return this.secciones;
    }

    @Override
    public void eliminarProducto(String idProducto) {
        for (Seccion seccion : this.secciones) {
            List<Producto> productos = seccion.getProductos();
            for (int i = 0; i < productos.size(); i++) {
                if (productos.get(i).getId().equals(idProducto)) {
                    productos.remove(i);
                    logger.info("Producto con ID " + idProducto + " eliminado correctamente.");
                    return;
                }
            }
        }
        logger.warn("Producto con ID " + idProducto + " no encontrado.");
    }

    @Override
    public void clear() {
        this.secciones.clear();
    }

}
⚠️ **GitHub.com Fallback** ⚠️