@@ -52,7 +52,7 @@ func NewBulkMessageHandlerValidator(
5252}
5353
5454// ValidateStore validates the requests.BillingUsageHistory request
55- func (v * BulkMessageHandlerValidator ) ValidateStore (ctx context.Context , userID entities.UserID , header * multipart.FileHeader ) ([]* requests.BulkMessage , string , url.Values ) {
55+ func (v * BulkMessageHandlerValidator ) ValidateStore (ctx context.Context , userID entities.UserID , header * multipart.FileHeader ) ([]* requests.BulkMessage , string , * time. Location , url.Values ) {
5656 ctx , span , ctxLogger := v .tracer .StartWithLogger (ctx , v .logger )
5757 defer span .End ()
5858
@@ -61,39 +61,39 @@ func (v *BulkMessageHandlerValidator) ValidateStore(ctx context.Context, userID
6161 result := url.Values {}
6262 result .Add ("document" , "Cannot load your account. Please try again later or contact support." )
6363 ctxLogger .Error (v .tracer .WrapErrorSpan (span , stacktrace .Propagate (err , fmt .Sprintf ("cannot load user [%s]" , userID ))))
64- return nil , "" , result
64+ return nil , "" , nil , result
6565 }
6666
6767 messages , fileType , result := v .parseFile (ctxLogger , user , header )
6868 if len (result ) != 0 {
69- return messages , fileType , result
69+ return messages , fileType , user . Location (), result
7070 }
7171
7272 if len (messages ) == 0 {
7373 result .Add ("document" , "The uploaded file doesn't contain any valid records. Make sure you are using the official httpSMS template." )
74- return messages , fileType , result
74+ return messages , fileType , user . Location (), result
7575 }
7676
7777 if len (messages ) > 1000 {
7878 result .Add ("document" , "The uploaded file must contain less than 1000 records." )
79- return messages , fileType , result
79+ return messages , fileType , user . Location (), result
8080 }
8181
8282 for index , message := range messages {
8383 messages [index ] = message .Sanitize ()
8484 }
8585
86- result = v .validateMessages (ctx , messages )
86+ result = v .validateMessages (ctx , messages , user . Location () )
8787 if len (result ) != 0 {
88- return messages , fileType , result
88+ return messages , fileType , user . Location (), result
8989 }
9090
9191 result = v .validateOwners (ctx , userID , messages )
9292 if len (result ) != 0 {
93- return messages , fileType , result
93+ return messages , fileType , user . Location (), result
9494 }
9595
96- return messages , fileType , result
96+ return messages , fileType , user . Location (), result
9797}
9898
9999func (v * BulkMessageHandlerValidator ) parseFile (ctxLogger telemetry.Logger , user * entities.User , header * multipart.FileHeader ) ([]* requests.BulkMessage , string , url.Values ) {
@@ -143,8 +143,9 @@ func (v *BulkMessageHandlerValidator) parseXlsx(ctxLogger telemetry.Logger, user
143143 var sendTimeRaw string
144144 if len (row ) > 3 && strings .TrimSpace (row [3 ]) != "" {
145145 ctxLogger .Info (fmt .Sprintf ("excel time = [%s]" , row [3 ]))
146- sendAt , err := v .convertExcelTime (user , row [3 ])
147- if err != nil {
146+ msg := & requests.BulkMessage {SendTime : strings .TrimSpace (row [3 ])}
147+ sendAt := msg .GetSendTime (user .Location ())
148+ if sendAt == nil {
148149 result .Add ("document" , fmt .Sprintf ("Row [%d]: The SendTime [%s] is not in the correct format e.g [2006-01-02T15:04:05] where 2006 is the year, 01 is January, 02 is the second day of the month and the time is 15:04:05" , index + 1 , row [3 ]))
149150 return nil , result
150151 }
@@ -168,15 +169,6 @@ func (v *BulkMessageHandlerValidator) parseXlsx(ctxLogger telemetry.Logger, user
168169 return messages , url.Values {}
169170}
170171
171- func (v * BulkMessageHandlerValidator ) convertExcelTime (user * entities.User , value string ) (* time.Time , error ) {
172- t , err := time .ParseInLocation ("2006-01-02T15:04:05" , value , user .Location ())
173- if err != nil {
174- return nil , stacktrace .Propagate (err , fmt .Sprintf ("cannot parse excel time [%s] as [%T]" , value , t ))
175- }
176-
177- return & t , nil
178- }
179-
180172func (v * BulkMessageHandlerValidator ) parseBytes (ctxLogger telemetry.Logger , userID entities.UserID , header * multipart.FileHeader ) ([]byte , url.Values ) {
181173 result := url.Values {}
182174
@@ -223,7 +215,7 @@ func (v *BulkMessageHandlerValidator) parseCSV(ctxLogger telemetry.Logger, user
223215 return messages , url.Values {}
224216}
225217
226- func (v * BulkMessageHandlerValidator ) validateMessages (_ context.Context , messages []* requests.BulkMessage ) url.Values {
218+ func (v * BulkMessageHandlerValidator ) validateMessages (_ context.Context , messages []* requests.BulkMessage , location * time. Location ) url.Values {
227219 result := url.Values {}
228220 for index , message := range messages {
229221
@@ -269,7 +261,7 @@ func (v *BulkMessageHandlerValidator) validateMessages(_ context.Context, messag
269261 }
270262
271263 if strings .TrimSpace (message .SendTime ) != "" {
272- sendTime := message .GetSendTime ()
264+ sendTime := message .GetSendTime (location )
273265 if sendTime == nil {
274266 result .Add ("document" , fmt .Sprintf ("Row [%d]: The SendTime [%s] is not a valid date format. Use RFC3339 (e.g. 2023-11-11T02:10:01Z) or YYYY-MM-DDTHH:MM:SS." , index + 2 , message .SendTime ))
275267 } else if sendTime .After (time .Now ().Add (420 * time .Hour )) {
0 commit comments