From 47999346b7e360756a9186f7c9f1ab5bdf2c8b7d Mon Sep 17 00:00:00 2001 From: irreverentsimplicity Date: Wed, 9 Oct 2024 06:55:27 -0400 Subject: [PATCH] make fmt --- examples/gno.land/p/demo/zteams/errors.gno | 14 +- examples/gno.land/p/demo/zteams/teams.gno | 385 +++++++++--------- .../gno.land/p/demo/zteams/teams_test.gno | 4 +- 3 files changed, 201 insertions(+), 202 deletions(-) diff --git a/examples/gno.land/p/demo/zteams/errors.gno b/examples/gno.land/p/demo/zteams/errors.gno index a6da9746303..e915e93cf95 100644 --- a/examples/gno.land/p/demo/zteams/errors.gno +++ b/examples/gno.land/p/demo/zteams/errors.gno @@ -3,11 +3,11 @@ package zteams import "errors" var ( - errNotOwner = errors.New("not the owner") - errNotAuthorized = errors.New("not authorized") - errUserNotDisburser = errors.New("cannot disburse") - errTeamNotFound = errors.New("team not found") - errUserNotMember = errors.New("user not a member") - errUserAlreadyMember = errors.New("user is already a member") + errNotOwner = errors.New("not the owner") + errNotAuthorized = errors.New("not authorized") + errUserNotDisburser = errors.New("cannot disburse") + errTeamNotFound = errors.New("team not found") + errUserNotMember = errors.New("user not a member") + errUserAlreadyMember = errors.New("user is already a member") errTeamAddressAlreadyExists = errors.New("team address already exists") -) \ No newline at end of file +) diff --git a/examples/gno.land/p/demo/zteams/teams.gno b/examples/gno.land/p/demo/zteams/teams.gno index c19a2776b04..b0d544cbf7e 100644 --- a/examples/gno.land/p/demo/zteams/teams.gno +++ b/examples/gno.land/p/demo/zteams/teams.gno @@ -1,262 +1,263 @@ package zteams import ( - "std" - "gno.land/p/demo/avl" - "gno.land/p/demo/users" + "std" + + "gno.land/p/demo/avl" + "gno.land/p/demo/users" ) // Team represents a team with its details and roles. type Team struct { - Address std.Address - TeamName string - TeamProfile string - Owner std.Address - Admins map[string]bool // Changed to string keys - Disbursers map[string]bool // Changed to string keys + Address std.Address + TeamName string + TeamProfile string + Owner std.Address + Admins map[string]bool // Changed to string keys + Disbursers map[string]bool // Changed to string keys } // TeamManager manages teams and their members. type TeamManager struct { - Teams *avl.Tree // Maps team address to Team details - Members *avl.Tree // Maps team address to a slice of user pointers + Teams *avl.Tree // Maps team address to Team details + Members *avl.Tree // Maps team address to a slice of user pointers } // NewTeamManager initializes a new TeamManager. func NewTeamManager() *TeamManager { - return &TeamManager{ - Teams: avl.NewTree(), - Members: avl.NewTree(), - } + return &TeamManager{ + Teams: avl.NewTree(), + Members: avl.NewTree(), + } } // Helper function to retrieve a team and check for errors. func (tm *TeamManager) GetTeam(teamAddress std.Address) (*Team, error) { - team, found := tm.Teams.Get(teamAddress.String()) - if !found { - return nil, errTeamNotFound - } - return team.(*Team), nil + team, found := tm.Teams.Get(teamAddress.String()) + if !found { + return nil, errTeamNotFound + } + return team.(*Team), nil } // Helper function to check if a user is the Owner of a team. func (team *Team) isOwner(userAddress std.Address) bool { - return team.Owner == userAddress + return team.Owner == userAddress } // Helper function to check if a user is an Admin of a team. func (team *Team) isAdmin(userAddress std.Address) bool { - return team.Admins[userAddress.String()] + return team.Admins[userAddress.String()] } // Designates a user as an Admin; only the Owner can do this. func (tm *TeamManager) DesignateAdmin(teamAddress std.Address, userAddress std.Address, requester std.Address) error { - team, err := tm.GetTeam(teamAddress) - if err != nil { - return err - } - - if !team.isOwner(requester) { - return errNotOwner - } - - team.Admins[userAddress.String()] = true - tm.Teams.Set(teamAddress.String(), team) - return nil + team, err := tm.GetTeam(teamAddress) + if err != nil { + return err + } + + if !team.isOwner(requester) { + return errNotOwner + } + + team.Admins[userAddress.String()] = true + tm.Teams.Set(teamAddress.String(), team) + return nil } // Removes an Admin; only the Owner can do this. func (tm *TeamManager) RemoveAdmin(teamAddress std.Address, userAddress std.Address, requester std.Address) error { - team, err := tm.GetTeam(teamAddress) - if err != nil { - return err - } - - if !team.isOwner(requester) { - return errNotOwner - } - - delete(team.Admins, userAddress.String()) - tm.Teams.Set(teamAddress.String(), team) - return nil + team, err := tm.GetTeam(teamAddress) + if err != nil { + return err + } + + if !team.isOwner(requester) { + return errNotOwner + } + + delete(team.Admins, userAddress.String()) + tm.Teams.Set(teamAddress.String(), team) + return nil } // Assigns disburse permission to a user; only the Owner or Admin can do this. func (tm *TeamManager) AssignDisbursePermission(teamAddress std.Address, userAddress std.Address, requester std.Address) error { - team, err := tm.GetTeam(teamAddress) - if err != nil { - return err - } - - // Only Owner or Admin can assign disburse permissions. - if !team.isOwner(requester) && !team.isAdmin(requester) { - return errNotAuthorized - } - - // Assign disburse permission. - team.Disbursers[userAddress.String()] = true - tm.Teams.Set(teamAddress.String(), team) - return nil + team, err := tm.GetTeam(teamAddress) + if err != nil { + return err + } + + // Only Owner or Admin can assign disburse permissions. + if !team.isOwner(requester) && !team.isAdmin(requester) { + return errNotAuthorized + } + + // Assign disburse permission. + team.Disbursers[userAddress.String()] = true + tm.Teams.Set(teamAddress.String(), team) + return nil } // Removes disburse permission from a user; only the Owner or Admin can do this. func (tm *TeamManager) RemoveDisbursePermission(teamAddress std.Address, userAddress std.Address, requester std.Address) error { - team, err := tm.GetTeam(teamAddress) - if err != nil { - return err - } - - // Only Owner or Admin can remove disburse permissions. - if !team.isOwner(requester) && !team.isAdmin(requester) { - return errNotAuthorized - } - - // Check if the user has disburse permission. - if !team.Disbursers[userAddress.String()] { - return errUserNotDisburser // Use a specific error message. - } - - // Remove disburse permission. - delete(team.Disbursers, userAddress.String()) - tm.Teams.Set(teamAddress.String(), team) - return nil + team, err := tm.GetTeam(teamAddress) + if err != nil { + return err + } + + // Only Owner or Admin can remove disburse permissions. + if !team.isOwner(requester) && !team.isAdmin(requester) { + return errNotAuthorized + } + + // Check if the user has disburse permission. + if !team.Disbursers[userAddress.String()] { + return errUserNotDisburser // Use a specific error message. + } + + // Remove disburse permission. + delete(team.Disbursers, userAddress.String()) + tm.Teams.Set(teamAddress.String(), team) + return nil } // Checks if a user can disburse (either Owner, Admin, or a designated Disburser). func (tm *TeamManager) CanDisburse(teamAddress std.Address, userAddress std.Address) bool { - team, err := tm.GetTeam(teamAddress) - if err != nil { - return false - } - return team.isOwner(userAddress) || team.isAdmin(userAddress) || team.Disbursers[userAddress.String()] + team, err := tm.GetTeam(teamAddress) + if err != nil { + return false + } + return team.isOwner(userAddress) || team.isAdmin(userAddress) || team.Disbursers[userAddress.String()] } // Adds a team to the TeamManager. func (tm *TeamManager) AddTeam(t *Team) error { - _, found := tm.Teams.Get(t.Address.String()) - if found { - return errTeamAddressAlreadyExists - } + _, found := tm.Teams.Get(t.Address.String()) + if found { + return errTeamAddressAlreadyExists + } - // Initialize Admins and Disbursers maps. - t.Admins = make(map[string]bool) - t.Disbursers = make(map[string]bool) + // Initialize Admins and Disbursers maps. + t.Admins = make(map[string]bool) + t.Disbursers = make(map[string]bool) - tm.Teams.Set(t.Address.String(), t) - return nil + tm.Teams.Set(t.Address.String(), t) + return nil } // Adds a user to a team; only the Owner or Admin can do this. func (tm *TeamManager) AddUserToTeam(teamAddress std.Address, user users.User, requester std.Address) error { - team, err := tm.GetTeam(teamAddress) - if err != nil { - return err - } - - if !team.isOwner(requester) && !team.isAdmin(requester) { - return errNotAuthorized - } - - // Retrieve current members or initialize an empty slice if nil. - members, _ := tm.Members.Get(teamAddress.String()) - memberList, ok := members.([]*users.User) - if !ok || memberList == nil { - memberList = []*users.User{} - } - - // Check if the user is already a member. - for _, member := range memberList { - if member.Address == user.Address { - return errUserAlreadyMember - } - } - - // Add user to team. - memberList = append(memberList, &user) - tm.Members.Set(teamAddress.String(), memberList) - return nil + team, err := tm.GetTeam(teamAddress) + if err != nil { + return err + } + + if !team.isOwner(requester) && !team.isAdmin(requester) { + return errNotAuthorized + } + + // Retrieve current members or initialize an empty slice if nil. + members, _ := tm.Members.Get(teamAddress.String()) + memberList, ok := members.([]*users.User) + if !ok || memberList == nil { + memberList = []*users.User{} + } + + // Check if the user is already a member. + for _, member := range memberList { + if member.Address == user.Address { + return errUserAlreadyMember + } + } + + // Add user to team. + memberList = append(memberList, &user) + tm.Members.Set(teamAddress.String(), memberList) + return nil } // Removes a user from a team; only the Owner or Admin can do this. func (tm *TeamManager) RemoveUserFromTeam(teamAddress std.Address, userAddress std.Address, requester std.Address) error { - team, err := tm.GetTeam(teamAddress) - if err != nil { - return err - } - - if !team.isOwner(requester) && !team.isAdmin(requester) { - return errNotAuthorized - } - - // Retrieve current members or initialize an empty slice if nil. - members, _ := tm.Members.Get(teamAddress.String()) - memberList, ok := members.([]*users.User) - if !ok || memberList == nil { - return errUserNotMember - } - - // Remove the user from the member list. - userFound := false - for i, member := range memberList { - if member.Address == userAddress { - memberList = append(memberList[:i], memberList[i+1:]...) - userFound = true - break - } - } - - if !userFound { - return errUserNotMember - } - - // Remove user roles and permissions. - delete(team.Admins, userAddress.String()) - delete(team.Disbursers, userAddress.String()) - tm.Teams.Set(teamAddress.String(), team) - tm.Members.Set(teamAddress.String(), memberList) - return nil + team, err := tm.GetTeam(teamAddress) + if err != nil { + return err + } + + if !team.isOwner(requester) && !team.isAdmin(requester) { + return errNotAuthorized + } + + // Retrieve current members or initialize an empty slice if nil. + members, _ := tm.Members.Get(teamAddress.String()) + memberList, ok := members.([]*users.User) + if !ok || memberList == nil { + return errUserNotMember + } + + // Remove the user from the member list. + userFound := false + for i, member := range memberList { + if member.Address == userAddress { + memberList = append(memberList[:i], memberList[i+1:]...) + userFound = true + break + } + } + + if !userFound { + return errUserNotMember + } + + // Remove user roles and permissions. + delete(team.Admins, userAddress.String()) + delete(team.Disbursers, userAddress.String()) + tm.Teams.Set(teamAddress.String(), team) + tm.Members.Set(teamAddress.String(), memberList) + return nil } // Gets all users in a team. func (tm *TeamManager) GetAllUsersInTeam(teamAddress std.Address) ([]users.User, error) { - _, err := tm.GetTeam(teamAddress) - if err != nil { - return nil, err - } - - // Retrieve current members or return an empty slice if nil. - members, _ := tm.Members.Get(teamAddress.String()) - var memberList []*users.User - if members != nil { - memberList = members.([]*users.User) - } else { - return []users.User{}, nil - } - - userList := make([]users.User, len(memberList)) - for i, member := range memberList { - userList[i] = *member - } - - return userList, nil + _, err := tm.GetTeam(teamAddress) + if err != nil { + return nil, err + } + + // Retrieve current members or return an empty slice if nil. + members, _ := tm.Members.Get(teamAddress.String()) + var memberList []*users.User + if members != nil { + memberList = members.([]*users.User) + } else { + return []users.User{}, nil + } + + userList := make([]users.User, len(memberList)) + for i, member := range memberList { + userList[i] = *member + } + + return userList, nil } // Renders team information in a structured format. func (t *Team) Render(tm *TeamManager) string { - result := "## team " + t.TeamName + "\n\n" - result += " * address = " + t.Address.String() + "\n" - result += " * owner = " + t.Owner.String() + "\n\n" - result += t.TeamProfile + "\n\n### Members\n" - - // Get the members of the team. - members, err := tm.GetAllUsersInTeam(t.Address) - if err != nil { - result += "No members found.\n" - } else { - for _, member := range members { - result += " * " + member.Name + " (" + member.Address.String() + "): " + member.Profile + "\n" - } - } - - return result + result := "## team " + t.TeamName + "\n\n" + result += " * address = " + t.Address.String() + "\n" + result += " * owner = " + t.Owner.String() + "\n\n" + result += t.TeamProfile + "\n\n### Members\n" + + // Get the members of the team. + members, err := tm.GetAllUsersInTeam(t.Address) + if err != nil { + result += "No members found.\n" + } else { + for _, member := range members { + result += " * " + member.Name + " (" + member.Address.String() + "): " + member.Profile + "\n" + } + } + + return result } diff --git a/examples/gno.land/p/demo/zteams/teams_test.gno b/examples/gno.land/p/demo/zteams/teams_test.gno index a84b6fba69c..d5bf88a6405 100644 --- a/examples/gno.land/p/demo/zteams/teams_test.gno +++ b/examples/gno.land/p/demo/zteams/teams_test.gno @@ -1,12 +1,10 @@ package zteams import ( - "std" "testing" - + "gno.land/p/demo/testutils" "gno.land/p/demo/users" - ) // Helper function to create a sample user.