graphicek/server/services/alerts_service.go

123 lines
2.9 KiB
Go
Raw Normal View History

2024-03-29 09:55:51 +01:00
package services
import (
2024-03-29 20:49:08 +01:00
"basic-sensor-receiver/models"
2024-03-29 09:55:51 +01:00
"time"
)
type AlertsService struct {
ctx *Context
}
func (s *AlertsService) GetList() ([]models.AlertItem, error) {
alerts := []models.AlertItem{}
2024-03-29 09:55:51 +01:00
err := s.ctx.DB.Select(&alerts, `
2024-03-31 20:47:43 +02:00
SELECT id, contact_point_id, name, custom_message, custom_resolved_message, condition, trigger_interval, last_status, last_status_at
FROM alerts
ORDER BY name ASC
`)
2024-03-29 09:55:51 +01:00
if err != nil {
return nil, err
}
return alerts, nil
}
2024-03-29 20:49:08 +01:00
func (s *AlertsService) GetById(id int64) (*models.AlertItem, error) {
alert := models.AlertItem{}
2024-03-29 09:55:51 +01:00
err := s.ctx.DB.Get(&alert,
`
2024-03-31 20:47:43 +02:00
SELECT id, contact_point_id, name, custom_message, custom_resolved_message, condition, trigger_interval, last_status, last_status_at
FROM alerts
WHERE id = $1
`,
id,
)
2024-03-29 09:55:51 +01:00
if err != nil {
return nil, err
}
return &alert, nil
}
2024-03-31 20:47:43 +02:00
func (s *AlertsService) Create(contactPointId int64, name string, condition string, triggerInterval int64, customMessage string, customResolvedMessage string) (*models.AlertItem, error) {
2024-03-29 20:49:08 +01:00
alert := models.AlertItem{
2024-03-31 20:47:43 +02:00
ContactPointId: contactPointId,
Name: name,
Condition: condition,
TriggerInterval: triggerInterval,
CustomMessage: customMessage,
CustomResolvedMessage: customResolvedMessage,
LastStatus: models.AlertStatusOk,
LastStatusAt: time.Now().Unix(),
2024-03-29 09:55:51 +01:00
}
res, err := s.ctx.DB.NamedExec(
`
INSERT INTO alerts
2024-03-31 20:47:43 +02:00
(contact_point_id, name, condition, trigger_interval, last_status, last_status_at, custom_message, custom_resolved_message) VALUES
(:contact_point_id, :name, :condition, :trigger_interval, :last_status, :last_status_at, :custom_message, :custom_resolved_message)
`,
alert,
2024-03-29 09:55:51 +01:00
)
if err != nil {
return nil, err
}
alert.Id, err = res.LastInsertId()
if err != nil {
return nil, err
}
return &alert, nil
}
2024-03-31 20:47:43 +02:00
func (s *AlertsService) Update(id int64, contactPointId int64, name string, condition string, triggerInterval int64, customMessage string, customResolvedMessage string) (*models.AlertItem, error) {
2024-03-29 20:49:08 +01:00
alert := models.AlertItem{
2024-03-31 20:47:43 +02:00
Id: id,
ContactPointId: contactPointId,
Name: name,
Condition: condition,
TriggerInterval: triggerInterval,
CustomMessage: customMessage,
CustomResolvedMessage: customResolvedMessage,
2024-03-29 09:55:51 +01:00
}
_, err := s.ctx.DB.NamedExec(
`
UPDATE alerts
SET
name = :name,
contact_point_id = :contact_point_id,
condition = :condition,
trigger_interval = :trigger_interval,
2024-03-31 20:47:43 +02:00
custom_message = :custom_message,
custom_resolved_message = :custom_resolved_message
WHERE id = :id
`,
alert,
2024-03-29 09:55:51 +01:00
)
if err != nil {
return nil, err
}
return &alert, nil
}
func (s *AlertsService) DeleteById(id int64) error {
_, err := s.ctx.DB.Exec("DELETE FROM alerts WHERE id = ?", id)
if err != nil {
return err
}
return nil
}