Edit.
This commit is contained in:
+16
-5
@@ -35,17 +35,28 @@ func EventHandlers(r gin.IRoutes) {
|
|||||||
}))
|
}))
|
||||||
|
|
||||||
r.PUT("/:id", handler(func(c *gin.Context) (interface{}, error) {
|
r.PUT("/:id", handler(func(c *gin.Context) (interface{}, error) {
|
||||||
var body models.EventHandlerUpdate
|
|
||||||
err := parseBody(c, &body)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
handler, err := config.EventHandlerRepository().FindByID(ctxOf(c), intParam(c, "id"))
|
handler, err := config.EventHandlerRepository().FindByID(ctxOf(c), intParam(c, "id"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if c.Query("hard") == "true" {
|
||||||
|
var body models.EventHandler
|
||||||
|
err := parseBody(c, &body)
|
||||||
|
if err != nil || body.ID != intParam(c, "id") {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
handler = &body
|
||||||
|
} else {
|
||||||
|
var body models.EventHandlerUpdate
|
||||||
|
err := parseBody(c, &body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
handler.ApplyUpdate(body)
|
handler.ApplyUpdate(body)
|
||||||
|
}
|
||||||
|
|
||||||
err = config.EventHandlerRepository().Save(ctxOf(c), handler)
|
err = config.EventHandlerRepository().Save(ctxOf(c), handler)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -16,6 +16,26 @@ func (client *Client) GetHandlers(ctx context.Context) ([]models.EventHandler, e
|
|||||||
return handlers, nil
|
return handlers, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (client *Client) GetHandler(ctx context.Context, id int) (*models.EventHandler, error) {
|
||||||
|
var handler models.EventHandler
|
||||||
|
err := client.Fetch(ctx, "GET", fmt.Sprintf("/api/event-handlers/%d", id), &handler, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &handler, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (client *Client) PutHandler(ctx context.Context, handler *models.EventHandler) (*models.EventHandler, error) {
|
||||||
|
var response models.EventHandler
|
||||||
|
err := client.Fetch(ctx, "PUT", fmt.Sprintf("/api/event-handlers/%d", handler.ID), &response, handler)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &response, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (client *Client) AddHandler(ctx context.Context, handler models.EventHandler) (*models.EventHandler, error) {
|
func (client *Client) AddHandler(ctx context.Context, handler models.EventHandler) (*models.EventHandler, error) {
|
||||||
var result models.EventHandler
|
var result models.EventHandler
|
||||||
err := client.Fetch(ctx, "POST", "/api/event-handlers", &result, handler)
|
err := client.Fetch(ctx, "POST", "/api/event-handlers", &result, handler)
|
||||||
|
|||||||
+94
-25
@@ -7,6 +7,7 @@ import (
|
|||||||
"git.aiterp.net/lucifer/new-server/models"
|
"git.aiterp.net/lucifer/new-server/models"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func handlerCmd(
|
func handlerCmd(
|
||||||
@@ -38,6 +39,98 @@ func handlerCmd(
|
|||||||
log.Fatalln("Search filter needed!")
|
log.Fatalln("Search filter needed!")
|
||||||
}
|
}
|
||||||
model.TargetKind, model.TargetValue = models.ParseFetchString(*fetchStr)
|
model.TargetKind, model.TargetValue = models.ParseFetchString(*fetchStr)
|
||||||
|
model = applyCmdToHandler(model, cmd)
|
||||||
|
|
||||||
|
newHandler, err := c.AddHandler(ctx, model)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
WriteHandlerInfoTable(os.Stdout, []models.EventHandler{*newHandler})
|
||||||
|
case "edit":
|
||||||
|
id := cmd.Params.Get(0).IntOr(0)
|
||||||
|
if id == 0 {
|
||||||
|
log.Fatalln("ID missing")
|
||||||
|
}
|
||||||
|
|
||||||
|
model, err := c.GetHandler(ctx, id)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
eventStr := cmd.Params.Get("event").String()
|
||||||
|
if eventStr != nil {
|
||||||
|
model.EventName = *eventStr
|
||||||
|
}
|
||||||
|
|
||||||
|
fetchStr := cmd.Params.Get("search").String()
|
||||||
|
if fetchStr != nil {
|
||||||
|
model.TargetKind, model.TargetValue = models.ParseFetchString(*fetchStr)
|
||||||
|
}
|
||||||
|
|
||||||
|
modified := applyCmdToHandler(*model, cmd)
|
||||||
|
returned, err := c.PutHandler(ctx, &modified)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
WriteHandlerInfoTable(os.Stdout, []models.EventHandler{*returned})
|
||||||
|
case "delete":
|
||||||
|
id := cmd.Params.Get(0).Int()
|
||||||
|
if id == nil {
|
||||||
|
log.Fatalln("ID missing")
|
||||||
|
}
|
||||||
|
|
||||||
|
handler, err := c.DeleteHandler(ctx, *id)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
WriteHandlerInfoTable(os.Stdout, []models.EventHandler{*handler})
|
||||||
|
default:
|
||||||
|
if cmd.Name != "help" {
|
||||||
|
log.Println("Unknown command:", cmd.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, _ = fmt.Fprintln(os.Stderr, helpString[1:])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func applyCmdToHandler(model models.EventHandler, cmd Command) models.EventHandler {
|
||||||
|
// Remove keys
|
||||||
|
for _, elem := range cmd.Params.Strings(1) {
|
||||||
|
if elem[0] != '-' {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
keyToRemove := elem[1:]
|
||||||
|
|
||||||
|
if strings.HasPrefix(keyToRemove, "conditions.") {
|
||||||
|
condKeyToRemove := keyToRemove[11:]
|
||||||
|
delete(model.Conditions, condKeyToRemove)
|
||||||
|
} else if strings.HasPrefix(keyToRemove, "fire.payload.") && model.Actions.FireEvent != nil {
|
||||||
|
firePayloadKeyToRemove := keyToRemove[13:]
|
||||||
|
delete(model.Actions.FireEvent.Payload, firePayloadKeyToRemove)
|
||||||
|
} else {
|
||||||
|
switch keyToRemove {
|
||||||
|
case "set-power":
|
||||||
|
model.Actions.SetPower = nil
|
||||||
|
case "set-color":
|
||||||
|
model.Actions.SetColor = nil
|
||||||
|
case "set-intensity":
|
||||||
|
model.Actions.SetIntensity = nil
|
||||||
|
case "add-intensity":
|
||||||
|
model.Actions.AddIntensity = nil
|
||||||
|
case "fire":
|
||||||
|
fallthrough
|
||||||
|
case "fire.name":
|
||||||
|
model.Actions.FireEvent = nil
|
||||||
|
case "from":
|
||||||
|
model.From = models.Never
|
||||||
|
case "to":
|
||||||
|
model.To = models.Never
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// From / To
|
// From / To
|
||||||
model.From = cmd.Params.Get("from").TimeOfDayOr(models.Never)
|
model.From = cmd.Params.Get("from").TimeOfDayOr(models.Never)
|
||||||
@@ -80,29 +173,5 @@ func handlerCmd(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
newHandler, err := c.AddHandler(ctx, model)
|
return model
|
||||||
if err != nil {
|
|
||||||
log.Fatalln(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
WriteHandlerInfoTable(os.Stdout, []models.EventHandler{*newHandler})
|
|
||||||
case "delete":
|
|
||||||
id := cmd.Params.Get(0).Int()
|
|
||||||
if id == nil {
|
|
||||||
log.Fatalln("ID missing")
|
|
||||||
}
|
|
||||||
|
|
||||||
handler, err := c.DeleteHandler(ctx, *id)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalln(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
WriteHandlerInfoTable(os.Stdout, []models.EventHandler{*handler})
|
|
||||||
default:
|
|
||||||
if cmd.Name != "help" {
|
|
||||||
log.Println("Unknown command:", cmd.Name)
|
|
||||||
}
|
|
||||||
|
|
||||||
_, _ = fmt.Fprintln(os.Stderr, helpString[1:])
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,13 @@ EVENT HANDLER COMMANDS
|
|||||||
<set-power=B> <set-color=C> <set-intensity=F> <set-temperature=N> \
|
<set-power=B> <set-color=C> <set-intensity=F> <set-temperature=N> \
|
||||||
<add-intensity=F> \
|
<add-intensity=F> \
|
||||||
<fire.name=S> <fire.payload.*=S>
|
<fire.name=S> <fire.payload.*=S>
|
||||||
|
handler edit <id> \
|
||||||
|
(...all arguments from 'add', appending conditions and fire payload matchers...) \
|
||||||
|
<event=S> <search=S>
|
||||||
|
<-from> <-to> \
|
||||||
|
<-set-power> <-set-color> <-set-intensity> <-set-temperature> \
|
||||||
|
<-conditions.*> \
|
||||||
|
<-fire> <-fire.payload.*>
|
||||||
handler delete <id>
|
handler delete <id>
|
||||||
|
|
||||||
EVENT COMMANDS
|
EVENT COMMANDS
|
||||||
|
|||||||
Reference in New Issue
Block a user