Skip to content

Commit f89d915

Browse files
committed
Extract bulk validator into separate method
1 parent 39e5e60 commit f89d915

1 file changed

Lines changed: 34 additions & 25 deletions

File tree

api/pkg/validators/bulk_sms_handler_validator.go

Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,35 @@ func (v *BulkMessageHandlerValidator) ValidateStore(ctx context.Context, userID
4646
ctx, span, ctxLogger := v.tracer.StartWithLogger(ctx, v.logger)
4747
defer span.End()
4848

49+
messages, result := v.parseCSV(ctxLogger, userID, header)
50+
if len(result) != 0 {
51+
return messages, result
52+
}
53+
54+
if len(messages) == 0 {
55+
result.Add("document", "The CSV file doesn't contain any valid records. Make sure you are using the official httpSMS template.")
56+
return messages, result
57+
}
58+
59+
if len(messages) > 100 {
60+
result.Add("document", "The CSV file must contain less than 100 records.")
61+
return messages, result
62+
}
63+
64+
result = v.validateMessages(messages)
65+
if len(result) != 0 {
66+
return messages, result
67+
}
68+
69+
result = v.validateOwners(ctx, userID, messages)
70+
if len(result) != 0 {
71+
return messages, result
72+
}
73+
74+
return messages, result
75+
}
76+
77+
func (v *BulkMessageHandlerValidator) parseCSV(ctxLogger telemetry.Logger, userID entities.UserID, header *multipart.FileHeader) ([]*requests.BulkMessage, url.Values) {
4978
result := url.Values{}
5079

5180
if header.Size >= 5000000 {
@@ -55,51 +84,31 @@ func (v *BulkMessageHandlerValidator) ValidateStore(ctx context.Context, userID
5584

5685
file, err := header.Open()
5786
if err != nil {
58-
ctxLogger.Error(stacktrace.Propagate(err, fmt.Sprintf("cannot open file [%s] for reading", header.Filename)))
87+
ctxLogger.Error(stacktrace.Propagate(err, fmt.Sprintf("cannot open file [%s] for reading for user [%s]", header.Filename, userID)))
5988
result.Add("document", fmt.Sprintf("Cannot open the uploaded file with name [%s].", header.Filename))
6089
return nil, result
6190
}
6291
defer func() {
6392
if e := file.Close(); e != nil {
64-
ctxLogger.Error(stacktrace.Propagate(e, fmt.Sprintf("cannot close file [%s]", header.Filename)))
93+
ctxLogger.Error(stacktrace.Propagate(e, fmt.Sprintf("cannot close file [%s] for user [%s]", header.Filename, userID)))
6594
}
6695
}()
6796

6897
b := new(bytes.Buffer)
6998
if _, err = io.Copy(b, file); err != nil {
70-
ctxLogger.Error(stacktrace.Propagate(err, fmt.Sprintf("cannot copy file [%s] to buffer", header.Filename)))
99+
ctxLogger.Error(stacktrace.Propagate(err, fmt.Sprintf("cannot copy file [%s] to buffer for user [%s]", header.Filename, userID)))
71100
result.Add("document", fmt.Sprintf("Cannot read the conents of the uploaded file [%s].", header.Filename))
72101
return nil, result
73102
}
74103

75104
var messages []*requests.BulkMessage
76105
if err := csvutil.Unmarshal(b.Bytes(), &messages); err != nil {
77-
ctxLogger.Error(stacktrace.Propagate(err, fmt.Sprintf("cannot unmarshall contents [%s] into type [%T] for file [%s]", b.Bytes(), messages, header.Filename)))
106+
ctxLogger.Error(stacktrace.Propagate(err, fmt.Sprintf("cannot unmarshall contents [%s] into type [%T] for file [%s] and user [%s]", b.Bytes(), messages, header.Filename, userID)))
78107
result.Add("document", fmt.Sprintf("Cannot read the conents of the uploaded file [%s].", header.Filename))
79108
return nil, result
80109
}
81110

82-
if len(messages) == 0 {
83-
result.Add("document", "The CSV file doesn't contain any valid records. Make sure you are using the official httpSMS template.")
84-
return messages, result
85-
}
86-
87-
if len(messages) > 100 {
88-
result.Add("document", "The CSV file must contain less than 100 records.")
89-
return messages, result
90-
}
91-
92-
result = v.validateMessages(messages)
93-
if len(result) != 0 {
94-
return messages, result
95-
}
96-
97-
result = v.validateOwners(ctx, userID, messages)
98-
if len(result) != 0 {
99-
return messages, result
100-
}
101-
102-
return messages, result
111+
return messages, nil
103112
}
104113

105114
func (v *BulkMessageHandlerValidator) validateMessages(messages []*requests.BulkMessage) url.Values {

0 commit comments

Comments
 (0)