diff --git a/routes/heartbeat.go b/routes/heartbeat.go index d1acd9f..02c3f57 100644 --- a/routes/heartbeat.go +++ b/routes/heartbeat.go @@ -21,7 +21,7 @@ func (h *HeartbeatHandler) Post(w http.ResponseWriter, r *http.Request) { return } - var heartbeats []models.Heartbeat + var heartbeats []*models.Heartbeat user := r.Context().Value(models.UserKey).(*models.User) opSys, editor, _ := utils.ParseUserAgent(r.Header.Get("User-Agent")) @@ -32,8 +32,7 @@ func (h *HeartbeatHandler) Post(w http.ResponseWriter, r *http.Request) { return } - for i := 0; i < len(heartbeats); i++ { - h := &heartbeats[i] + for _, h := range heartbeats { h.OperatingSystem = opSys h.Editor = editor h.User = user @@ -46,7 +45,7 @@ func (h *HeartbeatHandler) Post(w http.ResponseWriter, r *http.Request) { } } - if err := h.HeartbeatSrvc.InsertBatch(&heartbeats); err != nil { + if err := h.HeartbeatSrvc.InsertBatch(heartbeats); err != nil { w.WriteHeader(500) os.Stderr.WriteString(err.Error()) return diff --git a/services/aggregation.go b/services/aggregation.go index c62bd2f..2ff12e3 100644 --- a/services/aggregation.go +++ b/services/aggregation.go @@ -84,13 +84,10 @@ func (srv *AggregationService) aggregate(from, to time.Time, user *models.User) return aggregations } -func (srv *AggregationService) aggregateBy(heartbeats *[]models.Heartbeat, aggregationType uint8) []models.AggregationItem { - beats := *heartbeats +func (srv *AggregationService) aggregateBy(heartbeats []*models.Heartbeat, aggregationType uint8) []models.AggregationItem { durations := make(map[string]time.Duration) - for i := 0; i < len(beats); i++ { - h := &beats[i] - + for i, h := range heartbeats { var key string switch aggregationType { case models.AggregationProject: @@ -111,7 +108,7 @@ func (srv *AggregationService) aggregateBy(heartbeats *[]models.Heartbeat, aggre continue } - timePassed := h.Time.Time().Sub((&beats[i-1]).Time.Time()) + timePassed := h.Time.Time().Sub(heartbeats[i-1].Time.Time()) timeThresholded := math.Min(float64(timePassed), float64(time.Duration(2)*time.Minute)) durations[key] += time.Duration(int64(timeThresholded)) } diff --git a/services/heartbeat.go b/services/heartbeat.go index 901b67d..5f947df 100644 --- a/services/heartbeat.go +++ b/services/heartbeat.go @@ -15,9 +15,9 @@ type HeartbeatService struct { Db *gorm.DB } -func (srv *HeartbeatService) InsertBatch(heartbeats *[]models.Heartbeat) error { +func (srv *HeartbeatService) InsertBatch(heartbeats []*models.Heartbeat) error { var batch []interface{} - for _, h := range *heartbeats { + for _, h := range heartbeats { batch = append(batch, h) } @@ -27,13 +27,13 @@ func (srv *HeartbeatService) InsertBatch(heartbeats *[]models.Heartbeat) error { return nil } -func (srv *HeartbeatService) GetAllFrom(date time.Time, user *models.User) (*[]models.Heartbeat, error) { - var heartbeats []models.Heartbeat +func (srv *HeartbeatService) GetAllFrom(date time.Time, user *models.User) ([]*models.Heartbeat, error) { + var heartbeats []*models.Heartbeat if err := srv.Db. Where(&models.Heartbeat{UserID: user.ID}). Where("time > ?", date). - Find(&heartbeats).Error; err != nil { + Find(heartbeats).Error; err != nil { return nil, err } - return &heartbeats, nil + return heartbeats, nil }