wmj-test/src/model/base_model.go

94 lines
1.7 KiB
Go

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())
}