Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: hidden columns not showing after promotion to moderator #4234

Merged
merged 4 commits into from
Jun 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 44 additions & 13 deletions server/src/api/event_filter.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,20 @@ func parseVotingUpdated(data interface{}) (*VotingUpdated, error) {
return ret, nil
}

func parseParticipantUpdated(data interface{}) (*dto.BoardSession, error) {
var ret *dto.BoardSession

b, err := json.Marshal(data)
if err != nil {
return nil, err
}
err = json.Unmarshal(b, &ret)
if err != nil {
return nil, err
}
return ret, nil
}

func filterColumns(eventColumns []*dto.Column) []*dto.Column {
var visibleColumns = make([]*dto.Column, 0, len(eventColumns))
for _, column := range eventColumns {
Expand Down Expand Up @@ -186,7 +200,7 @@ func (boardSubscription *BoardSubscription) eventFilter(event *realtime.BoardEve
if event.Type == realtime.BoardEventColumnsUpdated {
columns, err := parseColumnUpdated(event.Data)
if err != nil {
logger.Get().Errorw("unable to parse columnUpdated in event filter", "board", boardSubscription.boardSettings.ID, "session", userID, "error", err)
logger.Get().Errorw("unable to parse columnUpdated in event filter", "board", boardSubscription.boardSettings.ID, "session", userID, "err", err)
}
// Cache the incoming changes, mod only since they receive all changes
if isMod {
Expand All @@ -206,7 +220,7 @@ func (boardSubscription *BoardSubscription) eventFilter(event *realtime.BoardEve
if event.Type == realtime.BoardEventNotesUpdated {
notes, err := parseNotesUpdated(event.Data)
if err != nil {
logger.Get().Errorw("unable to parse notesUpdated in event filter", "board", boardSubscription.boardSettings.ID, "session", userID, "error", err)
logger.Get().Errorw("unable to parse notesUpdated in event filter", "board", boardSubscription.boardSettings.ID, "session", userID, "err", err)
}

if isMod {
Expand All @@ -226,7 +240,7 @@ func (boardSubscription *BoardSubscription) eventFilter(event *realtime.BoardEve
if event.Type == realtime.BoardEventBoardUpdated {
boardSettings, err := parseBoardUpdated(event.Data)
if err != nil {
logger.Get().Errorw("unable to parse boardUpdated in event filter", "board", boardSubscription.boardSettings.ID, "session", userID, "error", err)
logger.Get().Errorw("unable to parse boardUpdated in event filter", "board", boardSubscription.boardSettings.ID, "session", userID, "err", err)
}
if isMod {
boardSubscription.boardSettings = boardSettings
Expand All @@ -239,7 +253,7 @@ func (boardSubscription *BoardSubscription) eventFilter(event *realtime.BoardEve
if event.Type == realtime.BoardEventVotingUpdated {
voting, err := parseVotingUpdated(event.Data)
if err != nil {
logger.Get().Errorw("unable to parse votingUpdated in event filter", "board", boardSubscription.boardSettings.ID, "session", userID, "error", err)
logger.Get().Errorw("unable to parse votingUpdated in event filter", "board", boardSubscription.boardSettings.ID, "session", userID, "err", err)
}
if isMod {
return event
Expand All @@ -259,7 +273,7 @@ func (boardSubscription *BoardSubscription) eventFilter(event *realtime.BoardEve
if event.Type == realtime.BoardEventNotesSync {
notes, err := parseNotesUpdated(event.Data)
if err != nil {
logger.Get().Errorw("unable to parse notesUpdated in event filter", "board", boardSubscription.boardSettings.ID, "session", userID, "error", err)
logger.Get().Errorw("unable to parse notesUpdated in event filter", "board", boardSubscription.boardSettings.ID, "session", userID, "err", err)
}

if isMod {
Expand All @@ -275,6 +289,23 @@ func (boardSubscription *BoardSubscription) eventFilter(event *realtime.BoardEve

return &ret
}

if event.Type == realtime.BoardEventParticipantUpdated {
participant, err := parseParticipantUpdated(event.Data)
if err != nil {
logger.Get().Errorw("unable to parse participantUpdated in event filter", "board", boardSubscription.boardSettings.ID, "session", userID, "err", err)
}

if isMod {
// Cache the changes of when a participant got updated
for idx, user := range boardSubscription.boardParticipants {
if user.User.ID == participant.User.ID {
boardSubscription.boardParticipants[idx] = participant
}
}
}
}

// returns, if no filter match occured
return event
}
Expand All @@ -288,14 +319,14 @@ func eventInitFilter(event InitEvent, clientID uuid.UUID) InitEvent {
retEvent := InitEvent{
Type: event.Type,
Data: EventData{
Board: event.Data.Board,
Notes: nil,
Reactions: event.Data.Reactions,
Columns: nil,
Votings: event.Data.Votings,
Votes: event.Data.Votes,
Sessions: event.Data.Sessions,
Requests: event.Data.Requests,
Board: event.Data.Board,
Notes: nil,
Reactions: event.Data.Reactions,
Columns: nil,
Votings: event.Data.Votings,
Votes: event.Data.Votes,
Sessions: event.Data.Sessions,
Requests: event.Data.Requests,
},
}
// Columns
Expand Down
9 changes: 5 additions & 4 deletions server/src/common/dto/board_sessions.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,18 @@ type BoardSession struct {
// start voting sessions etc.
Role types.SessionRole `json:"role"`

//Reference for when board_session has been created
//Reference for when board_session has been created
CreatedAt time.Time `json:"createdAt"`
// Flag indicates whether the user is banned
Banned bool `json:"banned"`
}

func (b *BoardSession) From(session database.BoardSession) *BoardSession {
user := User{
ID: session.User,
Name: session.Name,
Avatar: session.Avatar,
ID: session.User,
Name: session.Name,
Avatar: session.Avatar,
AccountType: session.AccountType,
}
b.User = user
b.Connected = session.Connected
Expand Down
13 changes: 7 additions & 6 deletions server/src/database/board_sessions.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ type BoardSession struct {
RaisedHand bool
Role types.SessionRole
Banned bool
AccountType types.AccountType
CreatedAt time.Time
}

Expand Down Expand Up @@ -88,7 +89,7 @@ func (d *Database) CreateBoardSession(boardSession BoardSessionInsert) (BoardSes
With("insertQuery", insertQuery).
Model((*BoardSession)(nil)).
ModelTableExpr("\"insertQuery\" AS s").
ColumnExpr("s.board, s.user, u.avatar, u.name, s.connected, s.show_hidden_columns, s.ready, s.raised_hand, s.role, s.banned").
ColumnExpr("s.board, s.user, u.avatar, u.name, u.account_type, s.connected, s.show_hidden_columns, s.ready, s.raised_hand, s.role, s.banned").
Where("s.board = ?", boardSession.Board).
Where("s.user = ?", boardSession.User).
Join("INNER JOIN users AS u ON u.id = s.user").
Expand Down Expand Up @@ -133,7 +134,7 @@ func (d *Database) UpdateBoardSession(update BoardSessionUpdate) (BoardSession,
With("updateQuery", updateQuery).
Model((*BoardSession)(nil)).
ModelTableExpr("\"updateQuery\" AS s").
ColumnExpr("s.board, s.user, u.avatar, u.name, s.connected, s.show_hidden_columns, s.ready, s.raised_hand, s.role, s.banned").
ColumnExpr("s.board, s.user, u.avatar, u.name, u.account_type, s.connected, s.show_hidden_columns, s.ready, s.raised_hand, s.role, s.banned").
Where("s.board = ?", update.Board).
Where("s.user = ?", update.User).
Join("INNER JOIN users AS u ON u.id = s.user").
Expand Down Expand Up @@ -163,7 +164,7 @@ func (d *Database) UpdateBoardSessions(update BoardSessionUpdate) ([]BoardSessio
With("updateQuery", updateQuery).
Model((*BoardSession)(nil)).
ModelTableExpr("\"updateQuery\" AS s").
ColumnExpr("s.board, s.user, u.avatar, u.name, s.connected, s.show_hidden_columns, s.ready, s.raised_hand, s.role, s.banned").
ColumnExpr("s.board, s.user, u.avatar, u.name, u.account_type, s.connected, s.show_hidden_columns, s.ready, s.raised_hand, s.role, s.banned").
Where("s.board = ?", update.Board).
Join("INNER JOIN users AS u ON u.id = s.user").
Scan(context.Background(), &sessions)
Expand All @@ -187,7 +188,7 @@ func (d *Database) GetBoardSession(board, user uuid.UUID) (BoardSession, error)
var session BoardSession
err := d.db.NewSelect().
TableExpr("board_sessions AS s").
ColumnExpr("s.board, s.user, u.avatar, u.name, s.connected, s.show_hidden_columns, s.ready, s.raised_hand, s.role, s.banned").
ColumnExpr("s.board, s.user, u.avatar, u.name, u.account_type, s.connected, s.show_hidden_columns, s.ready, s.raised_hand, s.role, s.banned").
Where("s.board = ?", board).
Where("s.user = ?", user).
Join("INNER JOIN users AS u ON u.id = s.user").
Expand All @@ -198,7 +199,7 @@ func (d *Database) GetBoardSession(board, user uuid.UUID) (BoardSession, error)
func (d *Database) GetBoardSessions(board uuid.UUID, filter ...filter.BoardSessionFilter) ([]BoardSession, error) {
query := d.db.NewSelect().
TableExpr("board_sessions AS s").
ColumnExpr("s.user, u.avatar, u.name, s.connected, s.show_hidden_columns, s.ready, s.raised_hand, s.role, s.banned").
ColumnExpr("s.user, u.avatar, u.name, u.account_type, s.connected, s.show_hidden_columns, s.ready, s.raised_hand, s.role, s.banned").
Where("s.board = ?", board).
Join("INNER JOIN users AS u ON u.id = s.user")

Expand Down Expand Up @@ -228,7 +229,7 @@ func (d *Database) GetSingleUserConnectedBoards(user uuid.UUID) ([]BoardSession,
var sessions []BoardSession
err := d.db.NewSelect().
TableExpr("board_sessions AS s").
ColumnExpr("s.board, s.user, u.avatar, u.name, s.connected, s.show_hidden_columns, s.ready, s.raised_hand, s.role, s.banned").
ColumnExpr("s.board, s.user, u.avatar, u.name, u.account_type, s.connected, s.show_hidden_columns, s.ready, s.raised_hand, s.role, s.banned").
Where("s.user = ?", user).
Where("s.connected").
Join("INNER JOIN users AS u ON u.id = s.user").
Expand Down
26 changes: 26 additions & 0 deletions server/src/services/boards/sessions.go
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,32 @@ func (s *BoardSessionService) UpdatedSession(board uuid.UUID, session database.B
logger.Get().Errorw("unable to broadcast updated board session", "err", err)
}
}

// Sync columns
columns, err := s.database.GetColumns(board)
if err != nil {
logger.Get().Errorw("unable to get columns on a updatedsession call", "err", err)
}
err = s.realtime.BroadcastToBoard(board, realtime.BoardEvent{
Type: realtime.BoardEventColumnsUpdated,
Data: dto.Columns(columns),
})
if err != nil {
logger.Get().Errorw("unable to broadcast update columns following a updatedsession call", "err", err)
}

// Sync notes
notes, err := s.database.GetNotes(board)
if err != nil {
logger.Get().Errorw("unable to get notes on a updatedsession call", "err", err)
}
err = s.realtime.BroadcastToBoard(board, realtime.BoardEvent{
Type: realtime.BoardEventNotesSync,
Data: dto.Notes(notes),
})
if err != nil {
logger.Get().Errorw("unable to broadcast sync notes following a updatedsession call", "err", err)
}
}

func (s *BoardSessionService) UpdatedSessions(board uuid.UUID, sessions []database.BoardSession) {
Expand Down
Loading