this does not work, it needs massive changes.
continuous-integration/drone/push Build is passing

This commit is contained in:
2021-09-26 16:20:02 +02:00
parent b4fd6df454
commit f87c69efc7
15 changed files with 777 additions and 157 deletions
+59 -3
View File
@@ -3,11 +3,14 @@ package api
import (
"context"
"git.aiterp.net/lucifer/new-server/app/config"
"git.aiterp.net/lucifer/new-server/app/services/scene"
"git.aiterp.net/lucifer/new-server/models"
"github.com/gin-gonic/gin"
"golang.org/x/sync/errgroup"
"log"
"strconv"
"strings"
"time"
)
func fetchDevices(ctx context.Context, fetchStr string) ([]models.Device, error) {
@@ -71,12 +74,15 @@ func Devices(r gin.IRoutes) {
return nil, err
}
_ = scene.GlobalManager().UpdateDevice(ctxOf(c), &devices[i], nil)
set[devices[i].ID] = true
changed = append(changed, devices[i])
}
}
config.PublishChannel <- changed
config.PublishChannel <- scene.GlobalManager().FilterUnassigned(changed)
go func() {
for _, device := range changed {
@@ -139,9 +145,11 @@ func Devices(r gin.IRoutes) {
if err != nil {
return nil, err
}
_ = scene.GlobalManager().UpdateDevice(ctxOf(c), &devices[i], nil)
}
config.PublishChannel <- devices
config.PublishChannel <- scene.GlobalManager().FilterUnassigned(devices)
go func() {
for _, device := range devices {
@@ -212,4 +220,52 @@ func Devices(r gin.IRoutes) {
return devices, nil
}))
}
r.PUT("/:fetch/scene", handler(func(c *gin.Context) (interface{}, error) {
var body models.DeviceSceneAssignment
err := parseBody(c, &body)
if err != nil {
return nil, err
}
devices, err := fetchDevices(ctxOf(c), c.Param("fetch"))
if err != nil {
return nil, err
}
if len(devices) == 0 {
return []models.Device{}, nil
}
assignedScene, err := config.SceneRepository().Find(ctxOf(c), body.SceneID)
if err != nil {
return nil, err
}
if body.DurationMS < 0 {
body.DurationMS = 0
}
body.StartTime = time.Now()
for i := range devices {
devices[i].SceneAssignments = []models.DeviceSceneAssignment{body}
err := scene.GlobalManager().UpdateDevice(ctxOf(c), &devices[i], assignedScene)
if err != nil {
return nil, err
}
}
eg := errgroup.Group{}
for i := range devices {
eg.Go(func() error {
return config.DeviceRepository().Save(ctxOf(c), &devices[i], 0)
})
}
err = eg.Wait()
if err != nil {
return nil, err
}
return devices, nil
}))
}
+37
View File
@@ -0,0 +1,37 @@
package api
import (
"git.aiterp.net/lucifer/new-server/app/config"
"git.aiterp.net/lucifer/new-server/models"
"github.com/gin-gonic/gin"
)
func Scenes(r gin.IRoutes) {
r.GET("", handler(func(c *gin.Context) (interface{}, error) {
return config.SceneRepository().FetchAll(ctxOf(c))
}))
r.GET("/:id", handler(func(c *gin.Context) (interface{}, error) {
return config.SceneRepository().Find(ctxOf(c), intParam(c, "id"))
}))
r.POST("", handler(func(c *gin.Context) (interface{}, error) {
var body models.Scene
err := parseBody(c, &body)
if err != nil {
return nil, err
}
err = body.Validate()
if err != nil {
return nil, err
}
err = config.SceneRepository().Save(ctxOf(c), &body)
if err != nil {
return nil, err
}
return body, nil
}))
}