// SPDX-License-Identifier: MIT pragma solidity >0.7.0 <=0.9.0; import "contracts/Producto.sol"; contract RegistroProductos{ address private immutable usuario; mapping(address => mapping(string => Producto)) private producto; event ProductoAgregado(string codigo, string nombre, uint stock); event ProductoActualizado(string codigo, uint nuevoStock); event ProductoEliminado(string codigo); modifier soloPropietario() { require(msg.sender == usuario, "Solo el propietario tiene Acceso"); _; } modifier existeCodigo(string memory _codigo) { string memory codigoInterno = producto[usuario][_codigo].codigo; require(keccak256(abi.encodePacked(codigoInterno)) == keccak256(abi.encodePacked(_codigo)), "Codigo Inexistente"); _; } constructor(){ usuario = msg.sender; } function agregarProducto(string memory _codigo, string memory _nombre, uint _stock) public soloPropietario() { producto[usuario][_codigo] = Producto(_codigo, _nombre, _stock, block.timestamp); emit ProductoAgregado(_codigo, _nombre, _stock); } function consultarProducto(string memory _codigo) public existeCodigo(_codigo) view returns (Producto memory) { return producto[usuario][_codigo]; } function actualizarProducto(string memory _codigo, uint _stock) public { producto[usuario][_codigo].stock = _stock; producto[usuario][_codigo].fechaRegistro = block.timestamp; emit ProductoActualizado(_codigo, _stock); } function eliminarProducto(string memory codigo) public { delete producto[usuario][codigo]; emit ProductoEliminado(codigo); } }
0.7.1