code.vegaprotocol.io/vega@v0.79.0/core/events/team.go (about)

     1  // Copyright (C) 2023 Gobalsky Labs Limited
     2  //
     3  // This program is free software: you can redistribute it and/or modify
     4  // it under the terms of the GNU Affero General Public License as
     5  // published by the Free Software Foundation, either version 3 of the
     6  // License, or (at your option) any later version.
     7  //
     8  // This program is distributed in the hope that it will be useful,
     9  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    10  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    11  // GNU Affero General Public License for more details.
    12  //
    13  // You should have received a copy of the GNU Affero General Public License
    14  // along with this program.  If not, see <http://www.gnu.org/licenses/>.
    15  
    16  package events
    17  
    18  import (
    19  	"context"
    20  	"slices"
    21  	"strings"
    22  
    23  	"code.vegaprotocol.io/vega/core/types"
    24  	"code.vegaprotocol.io/vega/libs/num"
    25  	"code.vegaprotocol.io/vega/libs/ptr"
    26  	eventspb "code.vegaprotocol.io/vega/protos/vega/events/v1"
    27  )
    28  
    29  type TeamCreated struct {
    30  	*Base
    31  	e eventspb.TeamCreated
    32  }
    33  
    34  func (t TeamCreated) StreamMessage() *eventspb.BusEvent {
    35  	busEvent := newBusEventFromBase(t.Base)
    36  	busEvent.Event = &eventspb.BusEvent_TeamCreated{
    37  		TeamCreated: &t.e,
    38  	}
    39  
    40  	return busEvent
    41  }
    42  
    43  func (t TeamCreated) TeamCreated() *eventspb.TeamCreated {
    44  	return &t.e
    45  }
    46  
    47  func NewTeamCreatedEvent(ctx context.Context, epoch uint64, t *types.Team) *TeamCreated {
    48  	e := eventspb.TeamCreated{
    49  		TeamId:    string(t.ID),
    50  		Referrer:  string(t.Referrer.PartyID),
    51  		Name:      t.Name,
    52  		TeamUrl:   ptr.From(t.TeamURL),
    53  		AvatarUrl: ptr.From(t.AvatarURL),
    54  		CreatedAt: t.CreatedAt.UnixNano(),
    55  		AtEpoch:   epoch,
    56  		Closed:    t.Closed,
    57  	}
    58  
    59  	e.AllowList = make([]string, 0, len(t.AllowList))
    60  	for _, id := range t.AllowList {
    61  		e.AllowList = append(e.AllowList, id.String())
    62  	}
    63  
    64  	return &TeamCreated{
    65  		Base: newBase(ctx, TeamCreatedEvent),
    66  		e:    e,
    67  	}
    68  }
    69  
    70  func TeamCreatedEventFromStream(ctx context.Context, be *eventspb.BusEvent) *TeamCreated {
    71  	return &TeamCreated{
    72  		Base: newBaseFromBusEvent(ctx, TeamCreatedEvent, be),
    73  		e:    *be.GetTeamCreated(),
    74  	}
    75  }
    76  
    77  type TeamUpdated struct {
    78  	*Base
    79  	e eventspb.TeamUpdated
    80  }
    81  
    82  func (t TeamUpdated) StreamMessage() *eventspb.BusEvent {
    83  	busEvent := newBusEventFromBase(t.Base)
    84  	busEvent.Event = &eventspb.BusEvent_TeamUpdated{
    85  		TeamUpdated: &t.e,
    86  	}
    87  
    88  	return busEvent
    89  }
    90  
    91  func (t TeamUpdated) TeamUpdated() *eventspb.TeamUpdated {
    92  	return &t.e
    93  }
    94  
    95  func NewTeamUpdatedEvent(ctx context.Context, t *types.Team) *TeamUpdated {
    96  	e := eventspb.TeamUpdated{
    97  		TeamId:    string(t.ID),
    98  		Name:      t.Name,
    99  		TeamUrl:   ptr.From(t.TeamURL),
   100  		AvatarUrl: ptr.From(t.AvatarURL),
   101  		Closed:    t.Closed,
   102  	}
   103  
   104  	e.AllowList = make([]string, 0, len(t.AllowList))
   105  	for _, id := range t.AllowList {
   106  		e.AllowList = append(e.AllowList, id.String())
   107  	}
   108  
   109  	return &TeamUpdated{
   110  		Base: newBase(ctx, TeamUpdatedEvent),
   111  		e:    e,
   112  	}
   113  }
   114  
   115  func TeamUpdatedEventFromStream(ctx context.Context, be *eventspb.BusEvent) *TeamUpdated {
   116  	return &TeamUpdated{
   117  		Base: newBaseFromBusEvent(ctx, TeamUpdatedEvent, be),
   118  		e:    *be.GetTeamUpdated(),
   119  	}
   120  }
   121  
   122  type RefereeSwitchedTeam struct {
   123  	*Base
   124  	e eventspb.RefereeSwitchedTeam
   125  }
   126  
   127  func (t RefereeSwitchedTeam) StreamMessage() *eventspb.BusEvent {
   128  	busEvent := newBusEventFromBase(t.Base)
   129  	busEvent.Event = &eventspb.BusEvent_RefereeSwitchedTeam{
   130  		RefereeSwitchedTeam: &t.e,
   131  	}
   132  
   133  	return busEvent
   134  }
   135  
   136  func (t RefereeSwitchedTeam) RefereeSwitchedTeam() *eventspb.RefereeSwitchedTeam {
   137  	return &t.e
   138  }
   139  
   140  func NewRefereeSwitchedTeamEvent(ctx context.Context, from, to types.TeamID, membership *types.Membership) *RefereeSwitchedTeam {
   141  	return &RefereeSwitchedTeam{
   142  		Base: newBase(ctx, RefereeSwitchedTeamEvent),
   143  		e: eventspb.RefereeSwitchedTeam{
   144  			FromTeamId: string(from),
   145  			ToTeamId:   string(to),
   146  			Referee:    string(membership.PartyID),
   147  			SwitchedAt: membership.JoinedAt.UnixNano(),
   148  			AtEpoch:    membership.StartedAtEpoch,
   149  		},
   150  	}
   151  }
   152  
   153  func RefereeSwitchedTeamEventFromStream(ctx context.Context, be *eventspb.BusEvent) *RefereeSwitchedTeam {
   154  	return &RefereeSwitchedTeam{
   155  		Base: newBaseFromBusEvent(ctx, RefereeSwitchedTeamEvent, be),
   156  		e:    *be.GetRefereeSwitchedTeam(),
   157  	}
   158  }
   159  
   160  type RefereeJoinedTeam struct {
   161  	*Base
   162  	e eventspb.RefereeJoinedTeam
   163  }
   164  
   165  func (t RefereeJoinedTeam) StreamMessage() *eventspb.BusEvent {
   166  	busEvent := newBusEventFromBase(t.Base)
   167  	busEvent.Event = &eventspb.BusEvent_RefereeJoinedTeam{
   168  		RefereeJoinedTeam: &t.e,
   169  	}
   170  
   171  	return busEvent
   172  }
   173  
   174  func (t RefereeJoinedTeam) RefereeJoinedTeam() *eventspb.RefereeJoinedTeam {
   175  	return &t.e
   176  }
   177  
   178  func NewRefereeJoinedTeamEvent(ctx context.Context, teamID types.TeamID, membership *types.Membership) *RefereeJoinedTeam {
   179  	return &RefereeJoinedTeam{
   180  		Base: newBase(ctx, RefereeJoinedTeamEvent),
   181  		e: eventspb.RefereeJoinedTeam{
   182  			TeamId:   string(teamID),
   183  			Referee:  string(membership.PartyID),
   184  			JoinedAt: membership.JoinedAt.UnixNano(),
   185  			AtEpoch:  membership.StartedAtEpoch,
   186  		},
   187  	}
   188  }
   189  
   190  func RefereeJoinedTeamEventFromStream(ctx context.Context, be *eventspb.BusEvent) *RefereeJoinedTeam {
   191  	return &RefereeJoinedTeam{
   192  		Base: newBaseFromBusEvent(ctx, RefereeJoinedTeamEvent, be),
   193  		e:    *be.GetRefereeJoinedTeam(),
   194  	}
   195  }
   196  
   197  type TeamsStatsUpdated struct {
   198  	*Base
   199  	e eventspb.TeamsStatsUpdated
   200  }
   201  
   202  func (t TeamsStatsUpdated) StreamMessage() *eventspb.BusEvent {
   203  	busEvent := newBusEventFromBase(t.Base)
   204  	busEvent.Event = &eventspb.BusEvent_TeamsStatsUpdated{
   205  		TeamsStatsUpdated: &t.e,
   206  	}
   207  
   208  	return busEvent
   209  }
   210  
   211  func (t TeamsStatsUpdated) TeamsStatsUpdated() *eventspb.TeamsStatsUpdated {
   212  	return &t.e
   213  }
   214  
   215  func NewTeamsStatsUpdatedEvent(ctx context.Context, seq uint64, rawTeamsStats map[string]map[string]*num.Uint) *TeamsStatsUpdated {
   216  	teamsStats := make([]*eventspb.TeamStats, 0, len(rawTeamsStats))
   217  	for teamID, rawTeamStats := range rawTeamsStats {
   218  		ts := make([]*eventspb.TeamMemberStats, 0, len(rawTeamStats))
   219  		for partyID, notionalVolume := range rawTeamStats {
   220  			ts = append(ts, &eventspb.TeamMemberStats{
   221  				PartyId:        partyID,
   222  				NotionalVolume: notionalVolume.String(),
   223  			})
   224  		}
   225  
   226  		slices.SortStableFunc(ts, func(a, b *eventspb.TeamMemberStats) int {
   227  			return strings.Compare(a.PartyId, b.PartyId)
   228  		})
   229  
   230  		teamsStats = append(teamsStats, &eventspb.TeamStats{
   231  			TeamId:       teamID,
   232  			MembersStats: ts,
   233  		})
   234  	}
   235  
   236  	slices.SortStableFunc(teamsStats, func(a, b *eventspb.TeamStats) int {
   237  		return strings.Compare(a.TeamId, b.TeamId)
   238  	})
   239  
   240  	return &TeamsStatsUpdated{
   241  		Base: newBase(ctx, TeamsStatsUpdatedEvent),
   242  		e: eventspb.TeamsStatsUpdated{
   243  			Stats:   teamsStats,
   244  			AtEpoch: seq,
   245  		},
   246  	}
   247  }
   248  
   249  func TeamsStatsUpdatedEventFromStream(ctx context.Context, be *eventspb.BusEvent) *TeamsStatsUpdated {
   250  	return &TeamsStatsUpdated{
   251  		Base: newBaseFromBusEvent(ctx, TeamsStatsUpdatedEvent, be),
   252  		e:    *be.GetTeamsStatsUpdated(),
   253  	}
   254  }