From 0065edd1e3d20f1e88fd0d6b4bd485bf11d2a91b Mon Sep 17 00:00:00 2001 From: Joe El hajj <joe.elhajj.etu@univ-lille.fr> Date: Sun, 17 Mar 2024 17:04:23 +0100 Subject: [PATCH] Update AssociationRegistry.jsligo --- contracts/AssociationRegistry.jsligo | 152 ++++++++++++++------------- 1 file changed, 79 insertions(+), 73 deletions(-) diff --git a/contracts/AssociationRegistry.jsligo b/contracts/AssociationRegistry.jsligo index 3977f5a..790aa9c 100644 --- a/contracts/AssociationRegistry.jsligo +++ b/contracts/AssociationRegistry.jsligo @@ -1,73 +1,79 @@ - -type coordinate = { - x: int; - y: int; - z: int; -}; - -type associationStatus = - | ["Active"] - | ["Inactive"] - | ["Pending"]; - -type association = { - name: string; - coordinate: coordinate; - status: associationStatus; - admin: option<address>; - registrationFee: tez; -}; - -type storage = big_map<string, association>; - -type return_ = [list<operation>, storage]; - - -const registrationFeeInitial: tez = 10 as tez; - - -@entry -function registerAssociation(newAssociation: association, storage: storage): return_ { - const existingAssociation = Big_map.find_opt(newAssociation.name, storage); - if (Option.is_some(existingAssociation)) { - failwith("Association already registered"); - } - const updatedStorage: storage = Big_map.add(newAssociation.name, { - ...newAssociation, - registrationFee: registrationFeeInitial - }, storage); - - const noOperations: list<operation> = []; - const result: return_ = [noOperations, updatedStorage]; - return result; -} - - -@entry -function changeAdmin(associationName: string, newAdmin: address, storage: storage): return_ { - const associationOpt = Big_map.find_opt(associationName, storage); - if (Option.is_none(associationOpt)) { - failwith("Unknown association cannot change admin"); - } - let association = Option.get(associationOpt); - - if (Option.is_none(association.admin) || Tezos.sender != Option.get(association.admin)) { - failwith("Only the current admin can change the admin"); - } - - const updatedAssociation = { - ...association, - admin: Some(newAdmin) - }; - const updatedStorage: storage = Big_map.update(associationName, Some(updatedAssociation), storage); - - const noOperations: list<operation> = []; - const result: return_ = [noOperations, updatedStorage]; - return result; -} - - -@view -function getAssociationDetails(associationName: string, storage: storage): option<association> { - return Big_map.find_opt(associationName, storage); -} + +type coordinate = { + x: int; + y: int; + z: int; +} + +type associationStatus = + | ["Active"] + | ["Inactive"] + | ["Pending"]; + +type association = { + name: string; + coordinate: coordinate; + status: associationStatus; + admin: option<address>; + registrationFee: tez; +}; + +type storage = big_map<string, association>; + +type return_ = [list<operation>, storage]; + + +const registrationFeeInitial: tez = 10 as tez; + +//Register a new DAO +@entry +function registerAssociation(newAssociation: association, storage: storage): return_ { + const existingAssociation = Big_map.find_opt(newAssociation.name, storage); + if (Option.is_some(existingAssociation)) { + failwith("Association already registered"); + } + const updatedStorage: storage = Big_map.add(newAssociation.name, { + ...newAssociation, + registrationFee: registrationFeeInitial + }, storage); + +// Within the registerAssociation function +const noOperations : list<operation> = list([]); + + + + const result: return_ = [noOperations, updatedStorage]; + return result; +} + +//Change Admin +@entry +function changeAdmin(associationName, newAdmin, storage) { + const associationOpt = Big_map.find_opt(associationName, storage); + if (Option.is_none(associationOpt)) { + failwith("Unknown association cannot change admin"); + } + + const association = Option.unopt(associationOpt, () => failwith("Failed to get association")); + //todo + if (Some(Tezos.get_sender()) != association.admin) { + failwith("Only the current admin can change the admin"); + } + + const updatedAssociation = { + ...association, + admin: Some(newAdmin) + }; + + const updatedStorage = Big_map.update(associationName, Some(updatedAssociation), storage); + + const noOperations: list<operation> = []; + const result: return_ = [noOperations, updatedStorage]; + return result; +} + +//List associations +@view +function getAssociationDetails(associationName: string, storage: storage): option<association> { + return Big_map.find_opt(associationName, storage); +} -- GitLab