// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; contract CoopChain { address private owner; struct Minute { uint timestamp; string coop; string title; string sign; address[] signatures; } // mapping(uint => uint[]) public coopMinutes2; // [coop_id][minute_id]; mapping(uint => mapping(uint => Minute)) public coopMinutes; //Map 1 coop with many minutes. //To get all the coop's minutes mapping(uint => address[]) public coopMembers; // Map 1 coop with many members, who can sign. mapping(address => uint[]) public memberSigns; // Map one member with many signs. Kinda "Reversed by". //Events event MinuteAdded(bool success); //Modifiers modifier isOwner() { require(msg.sender == owner, "Sender no autorizado."); _; } modifier isMember() { _; } constructor() { owner = msg.sender; } function subscribeMinute(uint _coop_id, uint _minute_id, string memory _coop, string memory _title, string memory _hash) public isOwner { address[] memory sender = new address[](1); sender[0] = msg.sender; coopMinutes[_coop_id][_minute_id].push(Minute( block.timestamp, _coop, _title, _hash, sender )); emit MinuteAdded(true); } function getMinutes(uint _coop_id) view public returns (Minute[] memory) { // coopMinutes[_coop_id] = _minutes; return coopMinutes[_coop_id]; } function changeOwner(address newOwner) public isOwner { owner = newOwner; } function signMinute(uint _minute_id, uint _coop_id) public isMember { memberSigns[msg.sender].push(_minute_id); if (coopMinutes[_coop_id][_minute_id].length > 1) { coopMinutes[_coop_id][_minute_id].signatures.push(msg.sender); } } //Helpers // function append(string memory a, string memory b) internal pure returns (string memory) { // return string(abi.encodePacked(a, ", ", b)); // } }
0.7.1