Add/edit notifications

This commit is contained in:
Magnus Åhall 2024-06-28 15:28:52 +02:00
parent 1ede36b8aa
commit c7ad2aa1b6
19 changed files with 531 additions and 11 deletions

View file

@ -6,6 +6,7 @@ import (
// Standard
"log/slog"
"net/url"
"slices"
)
@ -13,7 +14,15 @@ type Service interface {
SetLogger(*slog.Logger)
GetPrio() int
GetType() string
SetPrio(int)
SetExists(bool) // Exists in database
Exists() bool // Exists in database
String() string
Send(int, []byte) error
Update(url.Values) error
Updated() Service
Commit()
JSON() []byte
}
type Manager struct {
@ -28,6 +37,7 @@ func NewManager(logger *slog.Logger) (nm Manager) {
}
func (nm *Manager) AddService(service Service) {
service.SetExists(true)
nm.services = append(nm.services, service)
slices.SortFunc(nm.services, func(a, b Service) int {
if a.GetPrio() < b.GetPrio() {
@ -40,6 +50,16 @@ func (nm *Manager) AddService(service Service) {
})
}
func (nm *Manager) GetService(prio int) *Service {
for _, svc := range nm.services {
if svc.GetPrio() == prio {
return &svc
}
}
return nil
}
func (nm *Manager) Send(problemID int, msg []byte, fn func(*Service, error)) (err error) {
for i, service := range nm.services {
nm.logger.Info("notification", "service", service.GetType(), "prio", service.GetPrio())
@ -49,7 +69,7 @@ func (nm *Manager) Send(problemID int, msg []byte, fn func(*Service, error)) (er
} else {
data := struct {
ProblemID int
Msg []byte
Msg []byte
}{
problemID,
msg,
@ -61,3 +81,7 @@ func (nm *Manager) Send(problemID int, msg []byte, fn func(*Service, error)) (er
return
}
func (nm *Manager) Services() (services []Service) {
return nm.services
}