Skip to content

Commit 1558ce6

Browse files
AchoArnoldCopilot
andcommitted
feat(handlers): add per-phone index for CSV bulk messages
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent af0e5d9 commit 1558ce6

2 files changed

Lines changed: 14 additions & 4 deletions

File tree

api/pkg/handlers/bulk_message_handler.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,21 +89,30 @@ func (h *BulkMessageHandler) Store(c *fiber.Ctx) error {
8989
wg := sync.WaitGroup{}
9090
count := atomic.Int64{}
9191

92-
for index, message := range messages {
92+
// Compute per-phone index for rate-based dispatch delay
93+
phoneIndexCounter := make(map[string]int)
94+
95+
for _, message := range messages {
9396
wg.Add(1)
97+
var perPhoneIndex int
98+
if message.SendTime == nil {
99+
perPhoneIndex = phoneIndexCounter[message.FromPhoneNumber]
100+
phoneIndexCounter[message.FromPhoneNumber]++
101+
}
102+
94103
go func(message *requests.BulkMessage, index int) {
95104
count.Add(1)
96105
_, err = h.messageService.SendMessage(
97106
ctx,
98-
message.ToMessageSendParams(h.userIDFomContext(c), requestID, c.OriginalURL()),
107+
message.ToMessageSendParams(h.userIDFomContext(c), requestID, c.OriginalURL(), index),
99108
)
100109
if err != nil {
101110
count.Add(-1)
102111
msg := fmt.Sprintf("cannot send message with paylod [%s] at index [%d]", spew.Sdump(message), index)
103112
ctxLogger.Error(stacktrace.Propagate(err, msg))
104113
}
105114
wg.Done()
106-
}(message, index)
115+
}(message, perPhoneIndex)
107116
}
108117

109118
wg.Wait()

api/pkg/requests/bulk_message_request.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func (input *BulkMessage) Sanitize() *BulkMessage {
3838
}
3939

4040
// ToMessageSendParams converts BulkMessage to services.MessageSendParams
41-
func (input *BulkMessage) ToMessageSendParams(userID entities.UserID, requestID uuid.UUID, source string) services.MessageSendParams {
41+
func (input *BulkMessage) ToMessageSendParams(userID entities.UserID, requestID uuid.UUID, source string, index int) services.MessageSendParams {
4242
from, _ := phonenumbers.Parse(input.FromPhoneNumber, phonenumbers.UNKNOWN_REGION)
4343

4444
return services.MessageSendParams{
@@ -51,5 +51,6 @@ func (input *BulkMessage) ToMessageSendParams(userID entities.UserID, requestID
5151
Contact: input.sanitizeAddress(input.ToPhoneNumber),
5252
Content: input.Content,
5353
Attachments: input.removeEmptyStrings(strings.Split(input.AttachmentURLs, ",")),
54+
Index: index,
5455
}
5556
}

0 commit comments

Comments
 (0)