@@ -368,27 +368,8 @@ func (s *DB) GetCheckinCoverage(today, source string, days int) (*CheckinCoverag
368368 }
369369 defer rows .Close ()
370370
371- var entries []CheckinRow
372- for rows .Next () {
373- row := CheckinRow {}
374- var answer * string
375- var msgID * int64
376- var answeredAt * time.Time
377- if err := rows .Scan (& row .Date , & row .Source , & row .Status , & answer , & msgID , & row .PromptedAt , & answeredAt , & row .ExpiresAt ); err != nil {
378- return nil , err
379- }
380- if answer != nil {
381- row .Answer = * answer
382- }
383- if msgID != nil {
384- row .PromptMessageID = * msgID
385- }
386- if answeredAt != nil {
387- row .AnsweredAt = * answeredAt
388- }
389- entries = append (entries , row )
390- }
391- if err := rows .Err (); err != nil {
371+ entries , err := scanCheckinRows (rows )
372+ if err != nil {
392373 return nil , err
393374 }
394375 coverage , err := buildCheckinCoverage (today , source , days , entries )
@@ -420,7 +401,10 @@ func (s *DB) getCheckinRowsBetween(ctx context.Context, source, from, to string)
420401 return nil , err
421402 }
422403 defer rows .Close ()
404+ return scanCheckinRows (rows )
405+ }
423406
407+ func scanCheckinRows (rows pgx.Rows ) ([]CheckinRow , error ) {
424408 var entries []CheckinRow
425409 for rows .Next () {
426410 row := CheckinRow {}
@@ -476,25 +460,9 @@ func buildCheckinCoverage(today, source string, days int, entries []CheckinRow)
476460 var latencyN int64
477461 promptedDays := 0
478462 for _ , entry := range entries {
479- promptedAt := entry .PromptedAt
480- expiresAt := entry .ExpiresAt
481- row := CheckinCoverageRow {
482- Date : entry .Date ,
483- Source : entry .Source ,
484- Status : entry .Status ,
485- Answer : entry .Answer ,
486- PromptedAt : & promptedAt ,
487- ExpiresAt : & expiresAt ,
488- }
489- if ! entry .AnsweredAt .IsZero () {
490- answeredAt := entry .AnsweredAt
491- row .AnsweredAt = & answeredAt
492- latency := int64 (answeredAt .Sub (promptedAt ).Seconds ())
493- if latency < 0 {
494- latency = 0
495- }
496- row .ResponseLatencySeconds = & latency
497- latencySum += latency
463+ row := checkinCoverageRow (entry )
464+ if row .ResponseLatencySeconds != nil {
465+ latencySum += * row .ResponseLatencySeconds
498466 latencyN ++
499467 }
500468 switch entry .Status {
0 commit comments