mirror of https://github.com/statping/statping
63 lines
1.0 KiB
Go
63 lines
1.0 KiB
Go
package database
|
|
|
|
import (
|
|
"github.com/hunterlong/statping/types"
|
|
"reflect"
|
|
)
|
|
|
|
type CrudObject interface {
|
|
Create()
|
|
}
|
|
|
|
type Object struct {
|
|
Id int64
|
|
model interface{}
|
|
db Database
|
|
}
|
|
|
|
type isObject interface {
|
|
object() *Object
|
|
}
|
|
|
|
func wrapObject(id int64, model interface{}, db Database) *Object {
|
|
return &Object{
|
|
Id: id,
|
|
model: model,
|
|
db: db,
|
|
}
|
|
}
|
|
|
|
func modelId(model interface{}) int64 {
|
|
switch model.(type) {
|
|
case *types.Core:
|
|
return 0
|
|
default:
|
|
iface := reflect.ValueOf(model)
|
|
field := iface.Elem().FieldByName("Id")
|
|
return field.Int()
|
|
}
|
|
}
|
|
|
|
func Create(data interface{}) (*Object, error) {
|
|
model := database.Model(&data)
|
|
if err := model.Create(data).Error(); err != nil {
|
|
return nil, err
|
|
}
|
|
obj := &Object{
|
|
Id: modelId(data),
|
|
model: data,
|
|
db: model,
|
|
}
|
|
return obj, nil
|
|
}
|
|
|
|
func Update(data interface{}) error {
|
|
model := database.Model(&data)
|
|
return model.Update(&data).Error()
|
|
}
|
|
|
|
func Delete(data interface{}) error {
|
|
model := database.Model(&data)
|
|
return model.Delete(data).Error()
|
|
}
|