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 = ?
|
2025-01-23 16:22:50 +00:00
|
|
|
`, source, name)
|
2025-01-21 03:53:22 +00:00
|
|
|
return err
|
|
|
|
}
|