base controller and base model
This commit is contained in:
parent
66e9a60bf4
commit
5e02216d65
2
main.go
2
main.go
|
|
@ -80,6 +80,8 @@ func main() {
|
|||
r.DELETE("/image", controller.DeleteImage)
|
||||
r.GET("/images", controller.GetImages)
|
||||
|
||||
//r.POST("/data", controller.Add[model.DataModel])
|
||||
|
||||
err := r.Run(":8000")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,82 @@
|
|||
package controller
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"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 {
|
||||
}
|
||||
|
||||
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]) 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
|
||||
}
|
||||
data := PT(new(T))
|
||||
data.SetID(uint(idi))
|
||||
data.Fill()
|
||||
if data.GetUserName() != username {
|
||||
utils.GinError(c, http.StatusUnauthorized, "username error")
|
||||
return
|
||||
}
|
||||
data.Delete()
|
||||
}
|
||||
|
||||
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)
|
||||
oldData := PT(new(T))
|
||||
oldData.SetID(data.GetID())
|
||||
oldData.Fill()
|
||||
if oldData.GetUserName() != username {
|
||||
utils.GinError(c, http.StatusUnauthorized, "username error")
|
||||
return
|
||||
}
|
||||
data.Save()
|
||||
}
|
||||
|
||||
func (BaseController[T, PT]) Gets(c *gin.Context) {
|
||||
username := c.MustGet("username").(string)
|
||||
var ans []T
|
||||
query := map[string]interface{}{}
|
||||
if c.Query("UserName") != "" {
|
||||
if username != c.Query("UserName") {
|
||||
utils.GinError(c, http.StatusUnauthorized, "username error")
|
||||
return
|
||||
}
|
||||
query["UserName"] = username
|
||||
} else if c.Query("IsPublic") != "" {
|
||||
query["IsPublic"] = true
|
||||
} else {
|
||||
utils.GinError(c, http.StatusBadRequest, "param error.")
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, gin.H{"data": ans})
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
package controller
|
||||
|
||||
import "github.com/gin-gonic/gin"
|
||||
|
||||
func AddData(c *gin.Context) {
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
package model
|
||||
|
||||
import (
|
||||
"gorm.io/gorm"
|
||||
k8s_manager "k8s-manager/src"
|
||||
"reflect"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
type ModalType interface {
|
||||
DataModel | ImageModel
|
||||
}
|
||||
|
||||
type ModalInterface[T ModalType] interface {
|
||||
*T
|
||||
Create()
|
||||
Fill()
|
||||
Delete()
|
||||
Save()
|
||||
Gets(map[string]interface{}) []T
|
||||
//Gets() []T
|
||||
|
||||
GetUserName() string
|
||||
SetUserName(string)
|
||||
SetID(uint)
|
||||
GetID() uint
|
||||
}
|
||||
|
||||
type BaseModel[T any] struct {
|
||||
gorm.Model
|
||||
}
|
||||
|
||||
func (b *BaseModel[T]) Fill() {
|
||||
db := k8s_manager.DB()
|
||||
p := (*T)(unsafe.Pointer(b))
|
||||
db.First(p, b.ID)
|
||||
}
|
||||
|
||||
func (b *BaseModel[T]) Create() {
|
||||
db := k8s_manager.DB()
|
||||
p := (*T)(unsafe.Pointer(b))
|
||||
db.Create(p)
|
||||
}
|
||||
|
||||
func (b *BaseModel[T]) Save() {
|
||||
db := k8s_manager.DB()
|
||||
p := (*T)(unsafe.Pointer(b))
|
||||
db.Save(p)
|
||||
}
|
||||
|
||||
func (b *BaseModel[T]) Delete() {
|
||||
db := k8s_manager.DB()
|
||||
p := (*T)(unsafe.Pointer(b))
|
||||
db.Delete(p)
|
||||
}
|
||||
|
||||
func (b *BaseModel[T]) Gets(query map[string]interface{}) []T {
|
||||
db := k8s_manager.DB()
|
||||
ans := make([]T, 0)
|
||||
db.Where(query).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]) SetUserName(name string) {
|
||||
p := (*T)(unsafe.Pointer(b))
|
||||
a := reflect.ValueOf(p)
|
||||
reflect.Indirect(a).FieldByName("UserName").SetString(name)
|
||||
}
|
||||
|
||||
func (b *BaseModel[T]) SetID(ID uint) {
|
||||
p := (*T)(unsafe.Pointer(b))
|
||||
a := reflect.ValueOf(p)
|
||||
reflect.Indirect(a).FieldByName("ID").SetUint(uint64(ID))
|
||||
}
|
||||
|
||||
func (b *BaseModel[T]) GetUserName() string {
|
||||
p := (*T)(unsafe.Pointer(b))
|
||||
a := reflect.ValueOf(p)
|
||||
return reflect.Indirect(a).FieldByName("UserName").String()
|
||||
}
|
||||
|
||||
func (b *BaseModel[T]) GetID() uint {
|
||||
p := (*T)(unsafe.Pointer(b))
|
||||
a := reflect.ValueOf(p)
|
||||
return uint(reflect.Indirect(a).FieldByName("ID").Uint())
|
||||
}
|
||||
|
|
@ -1,12 +1,7 @@
|
|||
package model
|
||||
|
||||
import (
|
||||
"gorm.io/gorm"
|
||||
k8s_manager "k8s-manager/src"
|
||||
)
|
||||
|
||||
type DataModel struct {
|
||||
gorm.Model
|
||||
BaseModel[DataModel]
|
||||
Type string
|
||||
Name string
|
||||
Comment string
|
||||
|
|
@ -20,8 +15,3 @@ type DataModel struct {
|
|||
func (*DataModel) TableName() string {
|
||||
return "data"
|
||||
}
|
||||
|
||||
func (d *DataModel) Fill() {
|
||||
db := k8s_manager.DB()
|
||||
db.First(d, d.ID)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"k8s-manager/src/controller"
|
||||
"k8s-manager/src/model"
|
||||
)
|
||||
|
||||
func main() {
|
||||
controller.BaseController[model.DataModel, *model.DataModel]{}.Add(nil)
|
||||
}
|
||||
Loading…
Reference in New Issue