my shit
This commit is contained in:
@@ -1 +1,89 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"git.aiterp.net/lucifer/new-server/app/config"
|
||||
"git.aiterp.net/lucifer/new-server/models"
|
||||
"github.com/gin-gonic/gin"
|
||||
"log"
|
||||
)
|
||||
|
||||
func Bridges(r gin.IRoutes) {
|
||||
r.GET("", handler(func(c *gin.Context) (interface{}, error) {
|
||||
return config.BridgeRepository().FetchAll(ctxOf(c))
|
||||
}))
|
||||
|
||||
r.POST("", handler(func(c *gin.Context) (interface{}, error) {
|
||||
var body struct {
|
||||
Driver models.DriverKind `json:"driver"`
|
||||
Address string `json:"address"`
|
||||
DryRun bool `json:"dryRun"`
|
||||
}
|
||||
err := parseBody(c, &body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
driver, err := config.DriverProvider().Provide(body.Driver)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
bridges, err := driver.SearchBridge(ctxOf(c), body.Address, body.DryRun)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if !body.DryRun {
|
||||
for _, bridge := range bridges {
|
||||
err := config.BridgeRepository().Save(ctxOf(c), &bridge)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
log.Printf("Saved new bridge: %s (%s)", bridge.Name, bridge.Address)
|
||||
}
|
||||
}
|
||||
|
||||
return bridges, nil
|
||||
}))
|
||||
|
||||
r.PUT("/:id", handler(func(c *gin.Context) (interface{}, error) {
|
||||
var body struct {
|
||||
Name *string `json:"name"`
|
||||
}
|
||||
err := parseBody(c, &body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
bridge, err := config.BridgeRepository().Find(ctxOf(c), intParam(c, "id"))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if body.Name != nil {
|
||||
bridge.Name = *body.Name
|
||||
}
|
||||
|
||||
err = config.BridgeRepository().Save(ctxOf(c), &bridge)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return bridge, nil
|
||||
}))
|
||||
|
||||
r.DELETE("/:id", handler(func(c *gin.Context) (interface{}, error) {
|
||||
bridge, err := config.BridgeRepository().Find(ctxOf(c), intParam(c, "id"))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = config.BridgeRepository().Delete(ctxOf(c), &bridge)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return bridge, nil
|
||||
}))
|
||||
}
|
||||
|
||||
+27
-3
@@ -1,13 +1,20 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"git.aiterp.net/lucifer/new-server/models"
|
||||
"github.com/gin-gonic/gin"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
var errorMap = map[error]int{
|
||||
models.ErrInvalidName: 400,
|
||||
models.ErrNotFound: 404,
|
||||
models.ErrInvalidName: 400,
|
||||
models.ErrBadInput: 400,
|
||||
models.ErrBadColor: 400,
|
||||
models.ErrInternal: 500,
|
||||
models.ErrUnknownColorFormat: 400,
|
||||
}
|
||||
|
||||
type response struct {
|
||||
@@ -26,16 +33,29 @@ func handler(fun func(c *gin.Context) (interface{}, error)) gin.HandlerFunc {
|
||||
}
|
||||
|
||||
c.JSON(errCode, response{
|
||||
Code: errCode,
|
||||
Code: errCode,
|
||||
Message: err.Error(),
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(200, val)
|
||||
c.JSON(200, response{
|
||||
Code: 200,
|
||||
Message: "success",
|
||||
Data: val,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func intParam(c *gin.Context, key string) int {
|
||||
i, err := strconv.Atoi(c.Param(key))
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
|
||||
return i
|
||||
}
|
||||
|
||||
func parseBody(c *gin.Context, target interface{}) error {
|
||||
err := json.NewDecoder(c.Request.Body).Decode(target)
|
||||
if err != nil {
|
||||
@@ -44,3 +64,7 @@ func parseBody(c *gin.Context, target interface{}) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func ctxOf(c *gin.Context) context.Context {
|
||||
return c.Request.Context()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user