From c7313d4dab5c8d2962f27699af5646c3c326ea27 Mon Sep 17 00:00:00 2001 From: MikaelVallenet Date: Mon, 13 Jan 2025 10:33:32 +0100 Subject: [PATCH] fix(gno/dao): remove json parsing for roles & members --- gno/p/dao_roles_based/dao_roles_based.gno | 62 +++++------------------ gno/r/dao_realm/dao_realm.gno | 12 +++-- 2 files changed, 21 insertions(+), 53 deletions(-) diff --git a/gno/p/dao_roles_based/dao_roles_based.gno b/gno/p/dao_roles_based/dao_roles_based.gno index dff70f6bd..c6833cd38 100644 --- a/gno/p/dao_roles_based/dao_roles_based.gno +++ b/gno/p/dao_roles_based/dao_roles_based.gno @@ -23,7 +23,7 @@ type DaoRolesBased struct { realmName string } -func NewDaoRolesBasedJSON(name, description, rolesJSON, membersJSON, resourcesJSON string, handlers []MessageHandler) *DaoRolesBased { +func NewDaoRolesBasedJSON(name, description, resourcesJSON string, roles []string, members [][]string, handlers []MessageHandler) *DaoRolesBased { if len(name) < 5 { panic("dao name should be at least 5 characters long") } @@ -44,10 +44,7 @@ func NewDaoRolesBasedJSON(name, description, rolesJSON, membersJSON, resourcesJS } dao.initRenderingRouter() - roles := dao.parseRolesJSON(rolesJSON) dao.MemberModule.setRoles(roles) - - members := dao.parseMembersJSON(membersJSON) dao.MemberModule.setMembers(members) resources := dao.parseResourcesJSON(resourcesJSON) @@ -124,6 +121,18 @@ func (d *DaoRolesBased) ProposeJSON(proposalJSON string) { d.propose(req.title, req.description, msg.Type(), msg) } +func (d *DaoRolesBased) HasRole(memberId string, role string) bool { + return d.MemberModule.HasRole(memberId, role) +} + +func (d *DaoRolesBased) IsMember(memberId string) bool { + return d.MemberModule.IsMember(memberId) +} + +func (d *DaoRolesBased) MembersCount() uint64 { + return d.MemberModule.MembersCount() +} + func (d *DaoRolesBased) propose(title, description, resource string, message ExecutableMessage) { proposer := std.PrevRealm().Addr() if !d.MemberModule.IsMember(proposer.String()) { @@ -146,51 +155,6 @@ func (d *DaoRolesBased) propose(title, description, resource string, message Exe d.ProposalModule.newProposal(title, description, proposer, message, condition.NewState()) } -func (d *DaoRolesBased) HasRole(memberId string, role string) bool { - return d.MemberModule.HasRole(memberId, role) -} - -func (d *DaoRolesBased) IsMember(memberId string) bool { - return d.MemberModule.IsMember(memberId) -} - -func (d *DaoRolesBased) MembersCount() uint64 { - return d.MemberModule.MembersCount() -} - -func (d *DaoRolesBased) parseRolesJSON(rolesJSON string) []string { - nodes, err := json.Unmarshal([]byte(rolesJSON)) - if err != nil { - panic("invalid roles json format") - } - roles := nodes.MustArray() - rolesStr := make([]string, len(roles)) - for i, role := range roles { - rolesStr[i] = role.MustString() - } - return rolesStr -} - -func (d *DaoRolesBased) parseMembersJSON(membersJSON string) [][]string { - nodes, err := json.Unmarshal([]byte(membersJSON)) - if err != nil { - panic("invalid members json format") - } - membersNodesArray := nodes.MustArray() - members := make([][]string, len(membersNodesArray)) - for i, memberNode := range membersNodesArray { - memberObj := memberNode.MustObject() - memberRolesObj := memberObj["roles"].MustArray() - member := make([]string, len(memberRolesObj)+1) - member[0] = memberObj["address"].MustString() - for j, role := range memberRolesObj { - member[j+1] = role.MustString() - } - members[i] = member - } - return members -} - func (d *DaoRolesBased) parseResourcesJSON(resourcesJSON string) *avl.Tree { nodes, err := json.Unmarshal([]byte(resourcesJSON)) if err != nil { diff --git a/gno/r/dao_realm/dao_realm.gno b/gno/r/dao_realm/dao_realm.gno index 12bad4376..e9489536a 100644 --- a/gno/r/dao_realm/dao_realm.gno +++ b/gno/r/dao_realm/dao_realm.gno @@ -12,8 +12,13 @@ func init() { name := "Demo DAO" description := "This is a demo DAO" - var rolesJSON = `["admin","public-relationships","finance-officer"]` - var membersJSON = `[{"address":"g126gx6p6d3da4ymef35ury6874j6kys044r7zlg","roles":["admin","public-relationships"]},{"address":"g1ld6uaykyugld4rnm63rcy7vju4zx23lufml3jv","roles":["public-relationships"]},{"address":"g1r69l0vhp7tqle3a0rk8m8fulr8sjvj4h7n0tth","roles":["finance-officer"]},{"address":"g16jv3rpz7mkt0gqulxas56se2js7v5vmc6n6e0r","roles":[]}]` + roles := []string{"admin", "public-relationships", "finance-officer"} + members := [][]string{ + {"g126gx6p6d3da4ymef35ury6874j6kys044r7zlg", "admin", "public-relationships"}, + {"g1ld6uaykyugld4rnm63rcy7vju4zx23lufml3jv", "public-relationships"}, + {"g1r69l0vhp7tqle3a0rk8m8fulr8sjvj4h7n0tth", "finance-officer"}, + {"g16jv3rpz7mkt0gqulxas56se2js7v5vmc6n6e0r", ""}, + } messagesHandlers := []dao_roles_based.MessageHandler{ social_feeds.NewCreatePostHandler(), @@ -31,9 +36,8 @@ func init() { } resourcesJSON += `]` - dao = dao_roles_based.NewDaoRolesBasedJSON(name, description, rolesJSON, membersJSON, resourcesJSON, messagesHandlers) + dao = dao_roles_based.NewDaoRolesBasedJSON(name, description, resourcesJSON, roles, members, messagesHandlers) - // Register the DAO profile profile.SetStringField(profile.DisplayName, name) profile.SetStringField(profile.Bio, description) profile.SetStringField(profile.Avatar, "")