Skip to content

Commit b6841ed

Browse files
committed
Add code to remove contacts from sendgrid list
1 parent 785ceca commit b6841ed

File tree

2 files changed

+38
-7
lines changed

2 files changed

+38
-7
lines changed

api/cmd/experiments/main.go

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@ import (
55
"fmt"
66
"log"
77
"os"
8+
"strings"
89
"sync"
910
"time"
1011

12+
"github.com/palantir/stacktrace"
13+
1114
"github.com/NdoleStudio/httpsms/pkg/di"
1215
"github.com/NdoleStudio/httpsms/pkg/entities"
1316
"github.com/google/uuid"
@@ -27,11 +30,36 @@ func main() {
2730
logger := container.Logger()
2831

2932
logger.Info("Starting experiments")
33+
}
34+
35+
func chunkBy[T any](items []T, chunkSize int) (chunks [][]T) {
36+
for chunkSize < len(items) {
37+
items, chunks = items[chunkSize:], append(chunks, items[0:chunkSize:chunkSize])
38+
}
39+
return append(chunks, items)
40+
}
3041

42+
func deleteContacts(container *di.Container) {
3143
sendgrid := container.MarketingService()
32-
err = sendgrid.ClearList(context.Background())
44+
logger := container.Logger()
45+
46+
b, err := os.ReadFile("28462979_cf6f5478-3e15-4666-95d7-59149df6f0fd.csv") // just pass the file name
3347
if err != nil {
34-
logger.Fatal(err)
48+
logger.Fatal(stacktrace.Propagate(err, "cannot read file"))
49+
}
50+
51+
lines := strings.Split(string(b), "\n")[1:]
52+
var contacts []string
53+
for _, line := range lines {
54+
contacts = append(contacts, strings.ReplaceAll(strings.Split(line, ",")[17], "\"", ""))
55+
}
56+
57+
chunks := chunkBy(contacts, 100)
58+
for _, chunk := range chunks {
59+
err = sendgrid.DeleteContacts(context.Background(), chunk)
60+
if err != nil {
61+
logger.Fatal(err)
62+
}
3563
}
3664
}
3765

api/pkg/services/marketting_service.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,17 +78,20 @@ func (service *MarketingService) AddToList(ctx context.Context, user *entities.U
7878
ctxLogger.Info(fmt.Sprintf("user [%s] added to list [%s] with job [%s]", user.ID, service.sendgridListID, id))
7979
}
8080

81-
// ClearList removes all new contacts from the sendgrid list.
82-
func (service *MarketingService) ClearList(ctx context.Context) error {
81+
// DeleteContacts deletes contacts from sendgrid
82+
func (service *MarketingService) DeleteContacts(ctx context.Context, contactIDs []string) error {
8383
ctx, span, ctxLogger := service.tracer.StartWithLogger(ctx, service.logger)
8484
defer span.End()
8585

86-
request := sendgrid.GetRequest(service.sendgridAPIKey, fmt.Sprintf("/v3/contactdb/lists/%s/recipients", service.sendgridListID), "https://api.sendgrid.com")
87-
request.Method = "GET"
86+
request := sendgrid.GetRequest(service.sendgridAPIKey, "/v3/marketing/contacts", "https://api.sendgrid.com")
87+
request.Method = "DELETE"
88+
request.QueryParams = map[string]string{
89+
"ids": strings.Join(contactIDs, ","),
90+
}
8891

8992
response, err := sendgrid.API(request)
9093
if err != nil {
91-
return stacktrace.Propagate(err, fmt.Sprintf("cannot get all contacts in a sendgrid list [%s]", service.sendgridListID))
94+
return stacktrace.Propagate(err, fmt.Sprintf("cannot delete contacts in a sendgrid list [%s]", service.sendgridListID))
9295
}
9396

9497
ctxLogger.Info(spew.Sdump(response.Body))

0 commit comments

Comments
 (0)