94 lines
1.7 KiB
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())
|
|
}
|