57 lines
1.0 KiB
Go
57 lines
1.0 KiB
Go
package handle
|
|
|
|
import (
|
|
"allapp-go/internal/httpx"
|
|
"allapp-go/internal/types"
|
|
"allapp-go/pkg/db"
|
|
|
|
"github.com/gofiber/fiber/v3"
|
|
)
|
|
|
|
func SaveData(c fiber.Ctx) error {
|
|
var req []types.SaveDataReq
|
|
|
|
if err := httpx.BindAndValidate(c, &req); err != nil {
|
|
return err
|
|
}
|
|
|
|
if len(req) == 0 {
|
|
return httpx.OK(c, nil)
|
|
}
|
|
|
|
ctx := c.Context()
|
|
dbClient := db.New()
|
|
|
|
err := dbClient.WithTx(ctx, func(tx *db.Client) error {
|
|
for _, dataReq := range req {
|
|
tableName := dataReq.TableName
|
|
keyField := dataReq.KeyField
|
|
|
|
for _, insert := range dataReq.Inserts {
|
|
if err := tx.Insert(ctx, tableName, keyField, insert); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
for _, update := range dataReq.Updates {
|
|
if err := tx.Update(ctx, tableName, keyField, update); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
for _, del := range dataReq.Deletes {
|
|
if err := tx.Delete(ctx, tableName, keyField, del); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
})
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return httpx.OK(c, nil)
|
|
}
|