Skip to content

Commit bb2f9e0

Browse files
committed
fix votes when deleting a note
1 parent 82e48ac commit bb2f9e0

File tree

9 files changed

+54
-22
lines changed

9 files changed

+54
-22
lines changed

server/src/api/event_filter.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,21 @@ func parseParticipantUpdated(data interface{}) (*dto.BoardSession, error) {
9595
return ret, nil
9696
}
9797

98+
func parseVotesDeleted(data interface{}) ([]*dto.Vote, error) {
99+
var ret []*dto.Vote
100+
101+
b, err := json.Marshal(data)
102+
if err != nil {
103+
return nil, err
104+
}
105+
err = json.Unmarshal(b, &ret)
106+
if err != nil {
107+
return nil, err
108+
}
109+
return ret, nil
110+
111+
}
112+
98113
func filterColumns(eventColumns []*dto.Column) []*dto.Column {
99114
var visibleColumns = make([]*dto.Column, 0, len(eventColumns))
100115
for _, column := range eventColumns {
@@ -305,6 +320,27 @@ func (boardSubscription *BoardSubscription) eventFilter(event *realtime.BoardEve
305320
}
306321
}
307322

323+
if event.Type == realtime.BoardEventVotesDeleted {
324+
//filter deleted votes after user
325+
votes, err := parseVotesDeleted(event.Data)
326+
if err != nil {
327+
logger.Get().Errorw("unable to parse deleteVotes in event filter", "board", boardSubscription.boardSettings.ID, "session", userID, "err", err)
328+
}
329+
userVotes := make([]*dto.Vote, 0)
330+
for _, v := range votes {
331+
if v.User == userID {
332+
userVotes = append(userVotes, v)
333+
}
334+
}
335+
336+
ret := realtime.BoardEvent{
337+
Type: event.Type,
338+
Data: userVotes,
339+
}
340+
341+
return &ret
342+
}
343+
308344
// returns, if no filter match occured
309345
return event
310346
}

server/src/realtime/boards.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ const (
2222
BoardEventReactionAdded BoardEventType = "REACTION_ADDED"
2323
BoardEventReactionDeleted BoardEventType = "REACTION_DELETED"
2424
BoardEventReactionUpdated BoardEventType = "REACTION_UPDATED"
25-
BoardEventVotesUpdated BoardEventType = "VOTES_UPDATED"
25+
BoardEventVotesDeleted BoardEventType = "VOTES_DELETED"
2626
BoardEventSessionRequestCreated BoardEventType = "REQUEST_CREATED"
2727
BoardEventSessionRequestUpdated BoardEventType = "REQUEST_UPDATED"
2828
BoardEventParticipantCreated BoardEventType = "PARTICIPANT_CREATED"

server/src/services/boards/columns.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ func (s *BoardService) DeletedColumn(user, board, column uuid.UUID) {
150150
}
151151
}
152152
_ = s.realtime.BroadcastToBoard(board, realtime.BoardEvent{
153-
Type: realtime.BoardEventVotesUpdated,
153+
Type: realtime.BoardEventVotesDeleted,
154154
Data: personalVotes,
155155
})
156156
}

server/src/services/notes/notes.go

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -128,12 +128,11 @@ func (s *NoteService) Delete(ctx context.Context, body dto.NoteDeleteRequest, id
128128
board := ctx.Value(identifiers.BoardIdentifier).(uuid.UUID)
129129
note := ctx.Value(identifiers.NoteIdentifier).(uuid.UUID)
130130
voteFilter := filter.VoteFilter{
131-
User: &user,
132131
Board: board,
133132
Note: &note,
134133
}
135134

136-
votes, err := s.database.GetVotes(voteFilter)
135+
deletedVotes, err := s.database.GetVotes(voteFilter)
137136
if err != nil {
138137
log.Errorw("unable to retrieve votes for a note delete", "err", err)
139138
}
@@ -144,7 +143,7 @@ func (s *NoteService) Delete(ctx context.Context, body dto.NoteDeleteRequest, id
144143
return err
145144
}
146145

147-
s.DeletedNote(user, board, note, votes, body.DeleteStack)
146+
s.DeletedNote(user, board, note, deletedVotes, body.DeleteStack)
148147
return err
149148
}
150149

@@ -165,7 +164,7 @@ func (s *NoteService) UpdatedNotes(board uuid.UUID) {
165164
})
166165
}
167166

168-
func (s *NoteService) DeletedNote(user, board, note uuid.UUID, votes []database.Vote, deleteStack bool) {
167+
func (s *NoteService) DeletedNote(user, board, note uuid.UUID, deletedVotes []database.Vote, deleteStack bool) {
169168
noteData := map[string]interface{}{
170169
"note": note,
171170
"deleteStack": deleteStack,
@@ -175,14 +174,8 @@ func (s *NoteService) DeletedNote(user, board, note uuid.UUID, votes []database.
175174
Data: noteData,
176175
})
177176

178-
personalVotes := []*dto.Vote{}
179-
for _, vote := range votes {
180-
if vote.User == user {
181-
personalVotes = append(personalVotes, new(dto.Vote).From(vote))
182-
}
183-
}
184177
_ = s.realtime.BroadcastToBoard(board, realtime.BoardEvent{
185-
Type: realtime.BoardEventVotesUpdated,
186-
Data: personalVotes,
178+
Type: realtime.BoardEventVotesDeleted,
179+
Data: deletedVotes,
187180
})
188181
}

server/src/services/notes/notes_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ func (suite *NoteServiceTestSuite) TestDeleteNote() {
254254
Data: deletedNoteRealTimeUpdate,
255255
}
256256
publishEventVotesUpdated := realtime.BoardEvent{
257-
Type: realtime.BoardEventVotesUpdated,
257+
Type: realtime.BoardEventVotesDeleted,
258258
Data: []*dto.Vote{},
259259
}
260260
clientMock.On("Publish", publishSubject, publishEventNoteDeleted).Return(nil)

src/store/features/board/thunks.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {deletedNote, syncNotes, updatedNotes} from "../notes";
1111
import {addedReaction, deletedReaction, updatedReaction} from "../reactions";
1212
import {createdParticipant, setParticipants, updatedParticipant} from "../participants";
1313
import {createdVoting, updatedVoting} from "../votings";
14-
import {updatedVotes} from "../votes";
14+
import {deletedVotes} from "../votes";
1515
import {createJoinRequest, updateJoinRequest} from "../requests";
1616
import {addedBoardReaction, removeBoardReaction} from "../boardReactions";
1717
import {EditBoardRequest} from "./types";
@@ -126,9 +126,9 @@ export const permittedBoardAccess = createAsyncThunk<
126126
dispatch(updatedVoting({voting: message.data.voting, notes: message.data.notes}));
127127
}
128128

129-
if (message.type === "VOTES_UPDATED") {
129+
if (message.type === "VOTES_DELETED") {
130130
const votes = message.data;
131-
dispatch(updatedVotes(votes));
131+
dispatch(deletedVotes(votes));
132132
}
133133

134134
if (message.type === "REQUEST_CREATED") {

src/store/features/votes/actions.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,5 @@ export const createdVote = createAction<Vote>("votes/createdVote");
66
export const updatedVotes = createAction<Vote[]>("votes/updatedVotes");
77

88
export const deletedVote = createAction<Vote>("votes/deletedVote");
9+
10+
export const deletedVotes = createAction<Vote[]>("votes/deletedVotes");

src/store/features/votes/reducer.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {createReducer} from "@reduxjs/toolkit";
22
import {VotesState} from "./types";
33
import {initializeBoard} from "../board";
4-
import {createdVote, deletedVote, updatedVotes} from "./actions";
4+
import {createdVote, deletedVote, deletedVotes, updatedVotes} from "./actions";
55
import {createdVoting} from "../votings";
66

77
const initialState: VotesState = [];
@@ -13,6 +13,7 @@ export const votesReducer = createReducer(initialState, (builder) =>
1313
state.push(action.payload);
1414
})
1515
.addCase(updatedVotes, (_state, action) => action.payload)
16+
.addCase(deletedVotes, (_state, action) => _state.filter((vote) => !action.payload.some((deleteVote) => deleteVote.note === vote.note)))
1617
.addCase(deletedVote, (state, action) => {
1718
const newVotes = state.slice();
1819
const index = newVotes.findIndex((v) => v.voting === action.payload.voting && v.note === action.payload.note);

src/types/websocket.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,8 @@ export interface VotingUpdatedEvent {
117117
};
118118
}
119119

120-
export interface UpdatedVotesEvent {
121-
type: "VOTES_UPDATED";
120+
export interface DeleteVotesEvent {
121+
type: "VOTES_DELETED";
122122
data: Vote[];
123123
}
124124

@@ -147,5 +147,5 @@ export type ServerEvent =
147147
| ParticipantsUpdatedEvent
148148
| VotingCreatedEvent
149149
| VotingUpdatedEvent
150-
| UpdatedVotesEvent
150+
| DeleteVotesEvent
151151
| AddedBoardReactionEvent;

0 commit comments

Comments
 (0)