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.DELETE("/image", controller.DeleteImage)
|
||||||
r.GET("/images", controller.GetImages)
|
r.GET("/images", controller.GetImages)
|
||||||
|
|
||||||
|
//r.POST("/data", controller.Add[model.DataModel])
|
||||||
|
|
||||||
err := r.Run(":8000")
|
err := r.Run(":8000")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
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
|
package model
|
||||||
|
|
||||||
import (
|
|
||||||
"gorm.io/gorm"
|
|
||||||
k8s_manager "k8s-manager/src"
|
|
||||||
)
|
|
||||||
|
|
||||||
type DataModel struct {
|
type DataModel struct {
|
||||||
gorm.Model
|
BaseModel[DataModel]
|
||||||
Type string
|
Type string
|
||||||
Name string
|
Name string
|
||||||
Comment string
|
Comment string
|
||||||
|
|
@ -20,8 +15,3 @@ type DataModel struct {
|
||||||
func (*DataModel) TableName() string {
|
func (*DataModel) TableName() string {
|
||||||
return "data"
|
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