1
0
mirror of https://github.com/muety/wakapi.git synced 2023-08-10 21:12:56 +03:00
wakapi/services/heartbeat.go

39 lines
973 B
Go
Raw Normal View History

2019-05-05 23:36:49 +03:00
package services
import (
"database/sql"
"errors"
"fmt"
"github.com/n1try/wakapi/models"
)
2019-05-06 01:40:41 +03:00
const TableHeartbeat = "heartbeat"
2019-05-05 23:36:49 +03:00
type HeartbeatService struct {
Db *sql.DB
}
2019-05-06 01:40:41 +03:00
func (srv *HeartbeatService) InsertBatch(heartbeats []models.Heartbeat, user *models.User) error {
2019-05-05 23:36:49 +03:00
qTpl := "INSERT INTO %+s (user, time, entity, type, category, is_write, project, branch, language) VALUES %+s;"
qFill := ""
vals := []interface{}{}
for _, h := range heartbeats {
qFill = "(?, ?, ?, ?, ?, ?, ?, ?, ?),"
2019-05-06 01:40:41 +03:00
vals = append(vals, user.UserId, h.Time.String(), h.Entity, h.Type, h.Category, h.IsWrite, h.Project, h.Branch, h.Language)
2019-05-05 23:36:49 +03:00
}
2019-05-06 01:40:41 +03:00
q := fmt.Sprintf(qTpl, TableHeartbeat, qFill[0:len(qFill)-1])
2019-05-05 23:36:49 +03:00
stmt, _ := srv.Db.Prepare(q)
result, err := stmt.Exec(vals...)
if err != nil {
return err
}
n, err := result.RowsAffected()
if err != nil || n != int64(len(heartbeats)) {
return errors.New(fmt.Sprintf("Failed to insert %+v rows.", len(heartbeats)))
}
return nil
}