package repositories import ( "github.com/muety/wakapi/models" "gorm.io/gorm" "gorm.io/gorm/clause" "time" ) type HeartbeatRepository struct { db *gorm.DB } func NewHeartbeatRepository(db *gorm.DB) *HeartbeatRepository { return &HeartbeatRepository{db: db} } func (r *HeartbeatRepository) InsertBatch(heartbeats []*models.Heartbeat) error { if err := r.db. Clauses(clause.OnConflict{ DoNothing: true, }). Create(&heartbeats).Error; err != nil { return err } return nil } func (r *HeartbeatRepository) GetAllWithin(from, to time.Time, user *models.User) ([]*models.Heartbeat, error) { var heartbeats []*models.Heartbeat if err := r.db. Where(&models.Heartbeat{UserID: user.ID}). Where("time >= ?", from). Where("time < ?", to). Order("time asc"). Find(&heartbeats).Error; err != nil { return nil, err } return heartbeats, nil } func (r *HeartbeatRepository) GetFirstByUsers() ([]*models.TimeByUser, error) { var result []*models.TimeByUser r.db.Model(&models.User{}). Select("users.id as user, min(time) as time"). Joins("left join heartbeats on users.id = heartbeats.user_id"). Group("user"). Scan(&result) return result, nil } func (r *HeartbeatRepository) DeleteBefore(t time.Time) error { if err := r.db. Where("time <= ?", t). Delete(models.Heartbeat{}).Error; err != nil { return err } return nil }