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