chore: API for getting all non-approved requests to join for all communities (#4422)
This commit is contained in:
parent
e28eca1c54
commit
04c533b8d5
|
@ -265,7 +265,6 @@ func (o *Community) MarshalJSON() ([]byte, error) {
|
|||
PubsubTopic string `json:"pubsubTopic"`
|
||||
PubsubTopicKey string `json:"pubsubTopicKey"`
|
||||
Shard *shard.Shard `json:"shard"`
|
||||
RequestsToJoinCommunity []*RequestToJoin `json:"requestsToJoinCommunity"`
|
||||
}{
|
||||
ID: o.ID(),
|
||||
MemberRole: o.MemberRole(o.MemberIdentity()),
|
||||
|
@ -288,7 +287,6 @@ func (o *Community) MarshalJSON() ([]byte, error) {
|
|||
PubsubTopic: o.PubsubTopic(),
|
||||
PubsubTopicKey: o.PubsubTopicKey(),
|
||||
Shard: o.Shard(),
|
||||
RequestsToJoinCommunity: []*RequestToJoin{},
|
||||
}
|
||||
if o.config.CommunityDescription != nil {
|
||||
for id, c := range o.config.CommunityDescription.Categories {
|
||||
|
@ -327,7 +325,6 @@ func (o *Community) MarshalJSON() ([]byte, error) {
|
|||
communityItem.OutroMessage = o.config.CommunityDescription.OutroMessage
|
||||
communityItem.CommunityTokensMetadata = o.config.CommunityDescription.CommunityTokensMetadata
|
||||
communityItem.ActiveMembersCount = o.config.CommunityDescription.ActiveMembersCount
|
||||
communityItem.RequestsToJoinCommunity = o.config.RequestsToJoin
|
||||
|
||||
if o.config.CommunityDescription.Identity != nil {
|
||||
communityItem.Name = o.Name()
|
||||
|
|
|
@ -622,21 +622,7 @@ func (m *Manager) publish(subscription *Subscription) {
|
|||
}
|
||||
|
||||
func (m *Manager) All() ([]*Community, error) {
|
||||
communities, err := m.persistence.AllCommunities(&m.identity.PublicKey)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
nonApprovedRequestsToJoin, err := m.persistence.AllNonApprovedCommunitiesRequestsToJoin()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, community := range communities {
|
||||
community.config.RequestsToJoin = nonApprovedRequestsToJoin[community.IDString()]
|
||||
}
|
||||
|
||||
return communities, nil
|
||||
return m.persistence.AllCommunities(&m.identity.PublicKey)
|
||||
}
|
||||
|
||||
type CommunityShard struct {
|
||||
|
@ -3297,10 +3283,6 @@ func (m *Manager) PendingRequestsToJoinForUser(pk *ecdsa.PublicKey) ([]*RequestT
|
|||
return m.persistence.RequestsToJoinForUserByState(common.PubkeyToHex(pk), RequestToJoinStatePending)
|
||||
}
|
||||
|
||||
func (m *Manager) AwaitingAddressesRequestsToJoinForUser(pk *ecdsa.PublicKey) ([]*RequestToJoin, error) {
|
||||
return m.persistence.RequestsToJoinForUserByState(common.PubkeyToHex(pk), RequestToJoinStateAwaitingAddresses)
|
||||
}
|
||||
|
||||
func (m *Manager) PendingRequestsToJoinForCommunity(id types.HexBytes) ([]*RequestToJoin, error) {
|
||||
m.logger.Info("fetching pending invitations", zap.String("community-id", id.String()))
|
||||
return m.persistence.PendingRequestsToJoinForCommunity(id)
|
||||
|
@ -3327,7 +3309,11 @@ func (m *Manager) AcceptedPendingRequestsToJoinForCommunity(id types.HexBytes) (
|
|||
|
||||
func (m *Manager) DeclinedPendingRequestsToJoinForCommunity(id types.HexBytes) ([]*RequestToJoin, error) {
|
||||
return m.persistence.DeclinedPendingRequestsToJoinForCommunity(id)
|
||||
}
|
||||
|
||||
func (m *Manager) AllNonApprovedCommunitiesRequestsToJoin() ([]*RequestToJoin, error) {
|
||||
m.logger.Info("fetching all non-approved invitations for all communities")
|
||||
return m.persistence.AllNonApprovedCommunitiesRequestsToJoin()
|
||||
}
|
||||
|
||||
func (m *Manager) RequestsToJoinForCommunityAwaitingAddresses(id types.HexBytes) ([]*RequestToJoin, error) {
|
||||
|
|
|
@ -1894,64 +1894,3 @@ func (s *ManagerSuite) TestCommunityQueueMultipleDifferentSignersIgnoreIfNotRetu
|
|||
s.Require().NoError(err)
|
||||
s.Require().Equal(clock1, fetchedCommunity.config.CommunityDescription.Clock)
|
||||
}
|
||||
|
||||
func (s *ManagerSuite) TestGetAllCommunities() {
|
||||
// default community
|
||||
communities, err := s.manager.All()
|
||||
s.Require().NoError(err)
|
||||
s.Require().Len(communities, 1)
|
||||
|
||||
request := &requests.CreateCommunity{
|
||||
Name: "status",
|
||||
Description: "token membership description",
|
||||
Membership: protobuf.CommunityPermissions_AUTO_ACCEPT,
|
||||
}
|
||||
|
||||
community, err := s.manager.CreateCommunity(request, true)
|
||||
s.Require().NoError(err)
|
||||
s.Require().NotNil(community)
|
||||
|
||||
communities, err = s.manager.All()
|
||||
s.Require().NoError(err)
|
||||
s.Require().Len(communities, 2)
|
||||
|
||||
// add requests to join to the community
|
||||
allStates := []RequestToJoinState{
|
||||
RequestToJoinStatePending,
|
||||
RequestToJoinStateDeclined,
|
||||
RequestToJoinStateAccepted,
|
||||
RequestToJoinStateCanceled,
|
||||
RequestToJoinStateAcceptedPending,
|
||||
RequestToJoinStateDeclinedPending,
|
||||
RequestToJoinStateAwaitingAddresses,
|
||||
}
|
||||
|
||||
clock := uint64(time.Now().Unix())
|
||||
|
||||
for i := range allStates {
|
||||
identity, err := crypto.GenerateKey()
|
||||
s.Require().NoError(err)
|
||||
|
||||
rtj := &RequestToJoin{
|
||||
ID: types.HexBytes{1, 2, 3, 4, 5, 6, 7, byte(i)},
|
||||
PublicKey: common.PubkeyToHex(&identity.PublicKey),
|
||||
Clock: clock,
|
||||
CommunityID: community.ID(),
|
||||
State: allStates[i],
|
||||
}
|
||||
err = s.manager.SaveRequestToJoin(rtj)
|
||||
s.Require().NoError(err)
|
||||
}
|
||||
|
||||
communities, err = s.manager.All()
|
||||
s.Require().NoError(err)
|
||||
s.Require().Len(communities, 2)
|
||||
|
||||
for _, resultCommunity := range communities {
|
||||
if resultCommunity.IDString() == community.IDString() {
|
||||
s.Require().Len(resultCommunity.RequestsToJoin(), 6)
|
||||
} else {
|
||||
s.Require().Len(resultCommunity.RequestsToJoin(), 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1647,8 +1647,8 @@ func (p *Persistence) SetCuratedCommunities(communities *CuratedCommunities) err
|
|||
return nil
|
||||
}
|
||||
|
||||
func (p *Persistence) AllNonApprovedCommunitiesRequestsToJoin() (map[string][]*RequestToJoin, error) {
|
||||
nonApprovedRequestsToJoin := make(map[string][]*RequestToJoin)
|
||||
func (p *Persistence) AllNonApprovedCommunitiesRequestsToJoin() ([]*RequestToJoin, error) {
|
||||
nonApprovedRequestsToJoin := []*RequestToJoin{}
|
||||
rows, err := p.db.Query(`SELECT id,public_key,clock,ens_name,chat_id,community_id,state FROM communities_requests_to_join WHERE state != ?`, RequestToJoinStateAccepted)
|
||||
|
||||
if err == sql.ErrNoRows {
|
||||
|
@ -1665,9 +1665,7 @@ func (p *Persistence) AllNonApprovedCommunitiesRequestsToJoin() (map[string][]*R
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
communityID := types.EncodeHex(request.CommunityID)
|
||||
nonApprovedRequestsToJoin[communityID] = append(nonApprovedRequestsToJoin[communityID], request)
|
||||
nonApprovedRequestsToJoin = append(nonApprovedRequestsToJoin, request)
|
||||
}
|
||||
return nonApprovedRequestsToJoin, nil
|
||||
}
|
||||
|
|
|
@ -725,7 +725,6 @@ func (s *PersistenceSuite) TestAllNonApprovedCommunitiesRequestsToJoin() {
|
|||
|
||||
// add a new community
|
||||
community := s.makeNewCommunity(identity)
|
||||
err = s.db.SaveCommunity(community)
|
||||
s.Require().NoError(err)
|
||||
|
||||
// add requests to join to the community
|
||||
|
@ -756,6 +755,5 @@ func (s *PersistenceSuite) TestAllNonApprovedCommunitiesRequestsToJoin() {
|
|||
|
||||
result, err = s.db.AllNonApprovedCommunitiesRequestsToJoin()
|
||||
s.Require().NoError(err)
|
||||
s.Require().Len(result, 1)
|
||||
s.Require().Len(result[community.IDString()], 6) // all except RequestToJoinStateAccepted
|
||||
s.Require().Len(result, 6) // all except RequestToJoinStateAccepted
|
||||
}
|
||||
|
|
|
@ -2359,41 +2359,10 @@ func (m *Messenger) MyPendingRequestsToJoin() ([]*communities.RequestToJoin, err
|
|||
return m.communitiesManager.PendingRequestsToJoinForUser(&m.identity.PublicKey)
|
||||
}
|
||||
|
||||
func (m *Messenger) MyAwaitingAddressesRequestsToJoin() ([]*communities.RequestToJoin, error) {
|
||||
return m.communitiesManager.AwaitingAddressesRequestsToJoinForUser(&m.identity.PublicKey)
|
||||
}
|
||||
|
||||
func (m *Messenger) PendingRequestsToJoinForCommunity(id types.HexBytes) ([]*communities.RequestToJoin, error) {
|
||||
return m.communitiesManager.PendingRequestsToJoinForCommunity(id)
|
||||
}
|
||||
|
||||
func (m *Messenger) AllPendingRequestsToJoinForCommunity(id types.HexBytes) ([]*communities.RequestToJoin, error) {
|
||||
// TODO: optimize and extract via one query
|
||||
pendingRequests, err := m.communitiesManager.PendingRequestsToJoinForCommunity(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
acceptedPendingRequests, err := m.communitiesManager.AcceptedPendingRequestsToJoinForCommunity(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
declinedPendingRequests, err := m.communitiesManager.DeclinedPendingRequestsToJoinForCommunity(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
ownershipChangedRequests, err := m.communitiesManager.RequestsToJoinForCommunityAwaitingAddresses(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
pendingRequests = append(pendingRequests, acceptedPendingRequests...)
|
||||
pendingRequests = append(pendingRequests, declinedPendingRequests...)
|
||||
pendingRequests = append(pendingRequests, ownershipChangedRequests...)
|
||||
|
||||
return pendingRequests, nil
|
||||
}
|
||||
|
||||
func (m *Messenger) DeclinedRequestsToJoinForCommunity(id types.HexBytes) ([]*communities.RequestToJoin, error) {
|
||||
return m.communitiesManager.DeclinedRequestsToJoinForCommunity(id)
|
||||
}
|
||||
|
@ -2414,6 +2383,10 @@ func (m *Messenger) DeclinedPendingRequestsToJoinForCommunity(id types.HexBytes)
|
|||
return m.communitiesManager.DeclinedPendingRequestsToJoinForCommunity(id)
|
||||
}
|
||||
|
||||
func (m *Messenger) AllNonApprovedCommunitiesRequestsToJoin() ([]*communities.RequestToJoin, error) {
|
||||
return m.communitiesManager.AllNonApprovedCommunitiesRequestsToJoin()
|
||||
}
|
||||
|
||||
func (m *Messenger) RemoveUserFromCommunity(id types.HexBytes, pkString string) (*MessengerResponse, error) {
|
||||
publicKey, err := common.HexToPubkey(pkString)
|
||||
if err != nil {
|
||||
|
|
|
@ -558,11 +558,6 @@ func (api *PublicAPI) MyPendingRequestsToJoin() ([]*communities.RequestToJoin, e
|
|||
return api.service.messenger.MyPendingRequestsToJoin()
|
||||
}
|
||||
|
||||
// MyAwaitingAddressesRequestsToJoin returns requests to join, which must be auto-accepted when control node will be online
|
||||
func (api *PublicAPI) MyAwaitingAddressesRequestsToJoin() ([]*communities.RequestToJoin, error) {
|
||||
return api.service.messenger.MyAwaitingAddressesRequestsToJoin()
|
||||
}
|
||||
|
||||
// MyCanceledRequestsToJoin returns the pending requests for the logged in user
|
||||
func (api *PublicAPI) MyCanceledRequestsToJoin() ([]*communities.RequestToJoin, error) {
|
||||
return api.service.messenger.MyCanceledRequestsToJoin()
|
||||
|
@ -573,11 +568,6 @@ func (api *PublicAPI) PendingRequestsToJoinForCommunity(id types.HexBytes) ([]*c
|
|||
return api.service.messenger.PendingRequestsToJoinForCommunity(id)
|
||||
}
|
||||
|
||||
// AllPendingRequestsToJoinForCommunity returns the all the pending requests to join, including accepted and rejected ones, for a given community
|
||||
func (api *PublicAPI) AllPendingRequestsToJoinForCommunity(id types.HexBytes) ([]*communities.RequestToJoin, error) {
|
||||
return api.service.messenger.AllPendingRequestsToJoinForCommunity(id)
|
||||
}
|
||||
|
||||
// DeclinedRequestsToJoinForCommunity returns the declined requests to join for a given community
|
||||
func (api *PublicAPI) DeclinedRequestsToJoinForCommunity(id types.HexBytes) ([]*communities.RequestToJoin, error) {
|
||||
return api.service.messenger.DeclinedRequestsToJoinForCommunity(id)
|
||||
|
@ -588,6 +578,11 @@ func (api *PublicAPI) CanceledRequestsToJoinForCommunity(id types.HexBytes) ([]*
|
|||
return api.service.messenger.CanceledRequestsToJoinForCommunity(id)
|
||||
}
|
||||
|
||||
// AllNonApprovedCommunitiesRequestsToJoin returns the all non-approved requests to join for all communities
|
||||
func (api *PublicAPI) AllNonApprovedCommunitiesRequestsToJoin() ([]*communities.RequestToJoin, error) {
|
||||
return api.service.messenger.AllNonApprovedCommunitiesRequestsToJoin()
|
||||
}
|
||||
|
||||
// Generates a single hash for each address that needs to be revealed to a community.
|
||||
// Each hash needs to be signed.
|
||||
// The order of retuned hashes corresponds to the order of addresses in addressesToReveal.
|
||||
|
|
Loading…
Reference in New Issue