intake/core/action.go

78 lines
1.5 KiB
Go
Raw Normal View History

2025-01-17 21:49:23 +00:00
package core
import (
2025-01-21 03:53:22 +00:00
"database/sql/driver"
2025-01-17 21:49:23 +00:00
"encoding/json"
)
2025-01-21 03:53:22 +00:00
// Type alias for storing string array as jsonb
type argList []string
func (a argList) Value() (driver.Value, error) {
return json.Marshal(a)
}
func (a *argList) Scan(value interface{}) error {
return json.Unmarshal([]byte(value.(string)), a)
}
2025-01-31 16:44:09 +00:00
func AddAction(db DB, source string, name string, argv []string) error {
2025-01-21 03:53:22 +00:00
_, err := db.Exec(`
insert into actions (source, name, argv)
values (?, ?, jsonb(?))
`, source, name, argList(argv))
return err
}
2025-01-31 16:44:09 +00:00
func UpdateAction(db DB, source string, name string, argv []string) error {
2025-01-21 03:53:22 +00:00
_, err := db.Exec(`
update actions
set argv = jsonb(?)
where source = ? and name = ?
`, argList(argv), source, name)
return err
}
2025-01-31 16:44:09 +00:00
func GetActionsForSource(db DB, source string) ([]string, error) {
2025-01-21 03:53:22 +00:00
rows, err := db.Query(`
select name
from actions
where source = ?
`, source)
if err != nil {
return nil, err
}
var names []string
for rows.Next() {
var name string
err = rows.Scan(&name)
if err != nil {
return nil, err
}
names = append(names, name)
}
return names, nil
}
2025-01-31 16:44:09 +00:00
func GetArgvForAction(db DB, source string, name string) ([]string, error) {
2025-01-21 03:53:22 +00:00
rows := db.QueryRow(`
select json(argv)
from actions
where source = ? and name = ?
`, source, name)
var argv argList
err := rows.Scan(&argv)
if err != nil {
return nil, err
}
return argv, nil
}
2025-01-31 16:44:09 +00:00
func DeleteAction(db DB, source string, name string) error {
2025-01-21 03:53:22 +00:00
_, err := db.Exec(`
delete from actions
where source = ? and name = ?
`, source, name)
2025-01-21 03:53:22 +00:00
return err
}