data curd
This commit is contained in:
parent
b50bd2c776
commit
a36de499c3
1
API.md
1
API.md
|
|
@ -101,7 +101,6 @@ type DataModel struct {
|
|||
Comment string
|
||||
Doc string
|
||||
UserName string
|
||||
Password string
|
||||
AccessInfo string
|
||||
IsPublished bool
|
||||
}
|
||||
|
|
|
|||
2
main.go
2
main.go
|
|
@ -80,7 +80,7 @@ func main() {
|
|||
r.DELETE("/image", controller.DeleteImage)
|
||||
r.GET("/images", controller.GetImages)
|
||||
|
||||
//r.POST("/data", controller.Add[model.DataModel])
|
||||
controller.AddDataController(r)
|
||||
|
||||
err := r.Run(":8000")
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -1,70 +1,43 @@
|
|||
package controller
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"errors"
|
||||
"github.com/gin-gonic/gin"
|
||||
"k8s-manager/src/model"
|
||||
"k8s-manager/src/utils"
|
||||
"net/http"
|
||||
"reflect"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type BaseController[T model.DataModel, PT model.ModalInterface[T]] struct {
|
||||
type BaseController[T model.ModalType, PT model.ModalInterface[T]] struct {
|
||||
}
|
||||
|
||||
func (BaseController[T, PT]) Add(c *gin.Context) {
|
||||
data := PT(new(T))
|
||||
fmt.Println(reflect.TypeOf(data))
|
||||
if utils.GinErrorCheck(c, c.BindJSON(&data)) {
|
||||
return
|
||||
}
|
||||
username := c.MustGet("username").(string)
|
||||
data.SetUserName(username)
|
||||
data.Create()
|
||||
utils.GinOk(c, "ok")
|
||||
func (BaseController[T, PT]) Add(t *T) (utils.OKType, error) {
|
||||
PT(t).Create()
|
||||
return utils.OK, nil
|
||||
}
|
||||
|
||||
func (BaseController[T, PT]) Delete(c *gin.Context) {
|
||||
id := c.Query("ID")
|
||||
if id == "" {
|
||||
utils.GinError(c, http.StatusBadRequest, "no id")
|
||||
return
|
||||
}
|
||||
username := c.MustGet("username").(string)
|
||||
idi, err := strconv.Atoi(id)
|
||||
if utils.GinErrorCheck(c, err) {
|
||||
return
|
||||
}
|
||||
func (BaseController[T, PT]) Delete(ID int) (utils.OKType, error) {
|
||||
data := PT(new(T))
|
||||
data.SetID(uint(idi))
|
||||
data.Fill()
|
||||
if data.GetUserName() != username {
|
||||
utils.GinError(c, http.StatusUnauthorized, "username error")
|
||||
return
|
||||
}
|
||||
data.SetID(uint(ID))
|
||||
data.Delete()
|
||||
return utils.OK, nil
|
||||
}
|
||||
|
||||
func (BaseController[T, PT]) Update(c *gin.Context) {
|
||||
data := PT(new(T))
|
||||
if utils.GinErrorCheck(c, c.BindJSON(data)) {
|
||||
return
|
||||
}
|
||||
username := c.MustGet("username").(string)
|
||||
func (BaseController[T, PT]) Update(username string, t *T) (utils.OKType, error) {
|
||||
data := PT(t)
|
||||
oldData := PT(new(T))
|
||||
oldData.SetID(data.GetID())
|
||||
oldData.Fill()
|
||||
if oldData.GetUserName() != username {
|
||||
utils.GinError(c, http.StatusUnauthorized, "username error")
|
||||
return
|
||||
return nil, errors.New("wrong username")
|
||||
}
|
||||
data.Save()
|
||||
return utils.OK, nil
|
||||
}
|
||||
|
||||
func (BaseController[T, PT]) Gets(c *gin.Context) {
|
||||
username := c.MustGet("username").(string)
|
||||
var ans []T
|
||||
var ans []any
|
||||
query := map[string]interface{}{}
|
||||
if c.Query("UserName") != "" {
|
||||
if username != c.Query("UserName") {
|
||||
|
|
@ -72,11 +45,21 @@ func (BaseController[T, PT]) Gets(c *gin.Context) {
|
|||
return
|
||||
}
|
||||
query["UserName"] = username
|
||||
} else if c.Query("IsPublic") != "" {
|
||||
} else if c.Query("IsPublic") == "1" {
|
||||
query["IsPublic"] = true
|
||||
} else {
|
||||
utils.GinError(c, http.StatusBadRequest, "param error.")
|
||||
return
|
||||
}
|
||||
ans = PT(new(T)).Gets(query)
|
||||
c.JSON(http.StatusOK, gin.H{"data": ans})
|
||||
}
|
||||
|
||||
//func AddCRUDRoute[T model.ModalType](r *gin.Engine, path string) {
|
||||
// t := BaseController[T, *T]{}
|
||||
// typeName := reflect.TypeOf((*T)(nil)).Name()
|
||||
// utils.RouteWrapper(r, "POST", path, t.Add, []string{typeName})
|
||||
// utils.RouteWrapper(r, "PUT", path, t.Update, []string{"username", typeName})
|
||||
// utils.RouteWrapper(r, "DELETE", path, t.Delete, []string{"ID"})
|
||||
// r.Handle("GET", path, t.Gets)
|
||||
//}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,56 @@
|
|||
package controller
|
||||
|
||||
import "github.com/gin-gonic/gin"
|
||||
|
||||
func AddData(c *gin.Context) {
|
||||
import (
|
||||
"errors"
|
||||
"github.com/gin-gonic/gin"
|
||||
log "github.com/sirupsen/logrus"
|
||||
"k8s-manager/src/model"
|
||||
"k8s-manager/src/utils"
|
||||
)
|
||||
|
||||
func AddData(username string, data *model.DataModel) (utils.OKType, error) {
|
||||
data.UserName = username
|
||||
data.Save()
|
||||
return utils.OK, nil
|
||||
}
|
||||
|
||||
func DeleteData(username string, ID uint) (utils.OKType, error) {
|
||||
oldData := model.DataModel{}
|
||||
oldData.SetID(ID)
|
||||
oldData.Fill()
|
||||
if username != oldData.GetUserName() {
|
||||
return nil, errors.New("wrong username")
|
||||
}
|
||||
oldData.Delete()
|
||||
return utils.OK, nil
|
||||
}
|
||||
|
||||
func UpdateData(username string, data *model.DataModel) (utils.OKType, error) {
|
||||
oldData := model.DataModel{}
|
||||
oldData.SetID(data.ID)
|
||||
oldData.Fill()
|
||||
if username != oldData.GetUserName() {
|
||||
return nil, errors.New("wrong username")
|
||||
}
|
||||
data.Save()
|
||||
return utils.OK, nil
|
||||
}
|
||||
|
||||
func GetData(UserName string, IsPublish bool) (gin.H, error) {
|
||||
data := model.DataModel{}
|
||||
data.UserName = UserName
|
||||
data.IsPublished = IsPublish
|
||||
log.Info(UserName, IsPublish)
|
||||
if UserName == "" && !IsPublish {
|
||||
return gin.H{"data": []string{}}, nil
|
||||
}
|
||||
ans := data.Gets()
|
||||
return gin.H{"data": ans}, nil
|
||||
}
|
||||
|
||||
func AddDataController(r *gin.Engine) {
|
||||
utils.RouteWrapper(r, "POST", "/data", AddData, []string{"username", "1"})
|
||||
utils.RouteWrapper(r, "DELETE", "/data", DeleteData, []string{"username", "ID"})
|
||||
utils.RouteWrapper(r, "PUT", "/data", UpdateData, []string{"username", "1"})
|
||||
utils.RouteWrapper(r, "GET", "/data", GetData, []string{"UserName", "IsPublished"})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,8 +17,7 @@ type ModalInterface[T ModalType] interface {
|
|||
Fill()
|
||||
Delete()
|
||||
Save()
|
||||
Gets(map[string]interface{}) []T
|
||||
//Gets() []T
|
||||
Gets(map[string]interface{}) []any
|
||||
|
||||
GetUserName() string
|
||||
SetUserName(string)
|
||||
|
|
@ -54,19 +53,20 @@ func (b *BaseModel[T]) Delete() {
|
|||
db.Delete(p)
|
||||
}
|
||||
|
||||
func (b *BaseModel[T]) Gets(query map[string]interface{}) []T {
|
||||
func (b *BaseModel[T]) Gets() []T {
|
||||
db := k8s_manager.DB()
|
||||
ans := make([]T, 0)
|
||||
db.Where(query).Find(&ans)
|
||||
p := (*T)(unsafe.Pointer(b))
|
||||
db.Where(p).Find(&ans)
|
||||
return ans
|
||||
}
|
||||
|
||||
func (b *BaseModel[T]) Get(query map[string]interface{}) *T {
|
||||
db := k8s_manager.DB()
|
||||
p := (*T)(unsafe.Pointer(b))
|
||||
db.Where(query).First(p)
|
||||
return p
|
||||
}
|
||||
//func (b *BaseModel[T]) Get(query map[string]interface{}) *T {
|
||||
// db := k8s_manager.DB()
|
||||
// p := (*T)(unsafe.Pointer(b))
|
||||
// db.Where(query).First(p)
|
||||
// return p
|
||||
//}
|
||||
|
||||
func (b *BaseModel[T]) SetUserName(name string) {
|
||||
p := (*T)(unsafe.Pointer(b))
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ type DataModel struct {
|
|||
Comment string
|
||||
Doc string
|
||||
UserName string
|
||||
Password string
|
||||
IsPublished bool
|
||||
AccessInfo string
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,13 +38,17 @@ func GinErrorCheck(c *gin.Context, err error) bool {
|
|||
func setValue(data string, value reflect.Value) error {
|
||||
switch value.Kind() {
|
||||
case reflect.Bool:
|
||||
break
|
||||
v, err := strconv.ParseBool(data)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
value.SetBool(v)
|
||||
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
||||
v, err := strconv.ParseInt(data, 10, 64)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
value.SetInt(int64(v))
|
||||
value.SetInt(v)
|
||||
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
|
||||
v, err := strconv.ParseUint(data, 10, 64)
|
||||
if err != nil {
|
||||
|
|
@ -73,6 +77,10 @@ func setValue(data string, value reflect.Value) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
type OKType = map[string]any
|
||||
|
||||
var OK = OKType{"ok": true}
|
||||
|
||||
func routeWrapperHandler(handler any, names []string) func(ctx *gin.Context) {
|
||||
return func(c *gin.Context) {
|
||||
handlerFunc := reflect.ValueOf(handler)
|
||||
|
|
@ -92,7 +100,8 @@ func routeWrapperHandler(handler any, names []string) func(ctx *gin.Context) {
|
|||
}
|
||||
v, ok := c.Get(names[i])
|
||||
if ok {
|
||||
paraValue.Set(reflect.ValueOf(v))
|
||||
t := reflect.ValueOf(v)
|
||||
paraValue.Elem().Set(t)
|
||||
} else {
|
||||
vs := c.Param(names[i])
|
||||
if vs == "" {
|
||||
|
|
@ -132,6 +141,6 @@ func routeWrapperHandler(handler any, names []string) func(ctx *gin.Context) {
|
|||
}
|
||||
}
|
||||
|
||||
func RouteWrapper(r *gin.Engine, method string, route string, handler any, names []string) {
|
||||
r.Handle(method, route, routeWrapperHandler(handler, names))
|
||||
func RouteWrapper(r *gin.Engine, method string, path string, handler any, names []string) {
|
||||
r.Handle(method, path, routeWrapperHandler(handler, names))
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue