Unverified Commit 630da26f authored by Fernando Takagi's avatar Fernando Takagi Committed by GitHub
Browse files

Ensure group count does not update when failing to add a member. (#935)

parent 04a31944
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ The format is based on [keep a changelog](http://keepachangelog.com) and this pr
- Correct handling of `httpRequest` calls in the Lua runtime Nakama module.
- Fix handling of users attempting to leave groups they're banned from.
- Fix handling of optional parameters in JS runtime token generate function.
- Ensure group count does not update when failing to add a member.

## [3.14.0] - 2022-10-14
### Added
+10 −1
Original line number Diff line number Diff line
@@ -428,11 +428,20 @@ WHERE (id = $1) AND (disable_time = '1970-01-01 00:00:00 UTC')`
		}

		query = "UPDATE groups SET edge_count = edge_count + 1, update_time = now() WHERE id = $1::UUID AND edge_count+1 <= max_count"
		if _, err = tx.ExecContext(ctx, query, groupID); err != nil {
		res, err := tx.ExecContext(ctx, query, groupID)
		if err != nil {
			logger.Debug("Could not update group edge_count.", zap.String("group_id", groupID.String()), zap.String("user_id", userID.String()))
			return err
		}

		if rowsAffected, err := res.RowsAffected(); err != nil {
			logger.Debug("Could not update group edge_count.", zap.Error(err), zap.String("group_id", groupID.String()), zap.String("user_id", userID.String()))
			return err
		} else if rowsAffected == 0 {
			logger.Info("Could not add users as group maximum count was reached.", zap.String("group_id", groupID.String()), zap.String("user_id", userID.String()))
			return runtime.ErrGroupFull
		}

		query = `INSERT INTO message (id, code, sender_id, username, stream_mode, stream_subject, stream_descriptor, stream_label, content, create_time, update_time)
VALUES ($1, $2, $3, $4, $5, $6::UUID, $7::UUID, $8, $9, $10, $10)`
		if _, err = tx.ExecContext(ctx, query, message.MessageId, message.Code.Value, message.SenderId, message.Username, stream.Mode, stream.Subject, stream.Subcontext, stream.Label, message.Content, time.Unix(message.CreateTime.Seconds, 0).UTC()); err != nil {