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 }