package repository import ( "database/sql" "pc-monitor-server/model" "time" ) type AlertRepository struct { db *sql.DB } func NewAlertRepository(db *sql.DB) *AlertRepository { return &AlertRepository{db: db} } func (r *AlertRepository) CreateRule(rule *model.AlertRule) error { _, err := r.db.Exec( `INSERT INTO alert_rules (id, device_id, metric, operator, threshold, duration, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)`, rule.ID, rule.DeviceID, rule.Metric, rule.Operator, rule.Threshold, rule.Duration, rule.CreatedAt, ) return err } func (r *AlertRepository) GetRulesByDevice(deviceID string) ([]model.AlertRule, error) { rows, err := r.db.Query( `SELECT id, device_id, metric, operator, threshold, duration, created_at FROM alert_rules WHERE device_id=?`, deviceID) if err != nil { return nil, err } defer rows.Close() var rules []model.AlertRule for rows.Next() { var rule model.AlertRule if err := rows.Scan(&rule.ID, &rule.DeviceID, &rule.Metric, &rule.Operator, &rule.Threshold, &rule.Duration, &rule.CreatedAt); err != nil { return nil, err } rules = append(rules, rule) } return rules, nil } func (r *AlertRepository) DeleteRule(id string) error { _, err := r.db.Exec("DELETE FROM alert_rules WHERE id=?", id) return err } func (r *AlertRepository) CreateAlert(alert *model.Alert) error { _, err := r.db.Exec( `INSERT INTO alerts (id, device_id, rule_id, metric, value, message, status, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, alert.ID, alert.DeviceID, alert.RuleID, alert.Metric, alert.Value, alert.Message, alert.Status, alert.CreatedAt, ) return err } func (r *AlertRepository) GetActiveAlerts() ([]model.Alert, error) { rows, err := r.db.Query( `SELECT id, device_id, rule_id, metric, value, message, status, created_at, resolved_at FROM alerts WHERE status='active' ORDER BY created_at DESC`) if err != nil { return nil, err } defer rows.Close() var alerts []model.Alert for rows.Next() { var a model.Alert if err := rows.Scan(&a.ID, &a.DeviceID, &a.RuleID, &a.Metric, &a.Value, &a.Message, &a.Status, &a.CreatedAt, &a.ResolvedAt); err != nil { return nil, err } alerts = append(alerts, a) } return alerts, nil } func (r *AlertRepository) ResolveAlert(id string) error { now := time.Now() _, err := r.db.Exec( `UPDATE alerts SET status='resolved', resolved_at=? WHERE id=?`, now, id) return err }