dockerfiles/anylink/server/dbdata/db_orm.go

85 lines
1.6 KiB
Go
Raw Normal View History

2021-06-08 20:45:26 +08:00
package dbdata
2021-08-02 20:41:35 +08:00
import (
"errors"
"reflect"
)
2021-06-08 20:45:26 +08:00
const PageSize = 10
2021-08-02 20:41:35 +08:00
var ErrNotFound = errors.New("ErrNotFound")
2021-06-08 20:45:26 +08:00
2021-08-02 20:41:35 +08:00
func Add(data interface{}) error {
_, err := xdb.InsertOne(data)
return err
2021-06-08 20:45:26 +08:00
}
2021-08-02 20:41:35 +08:00
func Update(fieldName string, value interface{}, data interface{}) error {
_, err := xdb.Where(fieldName+"=?", value).Update(data)
return err
2021-06-08 20:45:26 +08:00
}
func Del(data interface{}) error {
2021-08-02 20:41:35 +08:00
_, err := xdb.Delete(data)
return err
2021-06-08 20:45:26 +08:00
}
2021-08-02 20:41:35 +08:00
func extract(data interface{}, fieldName string) interface{} {
ref := reflect.ValueOf(data)
r := &ref
if r.Kind() == reflect.Ptr {
e := r.Elem()
r = &e
}
field := r.FieldByName(fieldName).Interface()
return field
2021-06-08 20:45:26 +08:00
}
2021-08-02 20:41:35 +08:00
// 更新全部字段
func Set(data interface{}) error {
id := extract(data, "Id")
_, err := xdb.ID(id).AllCols().Update(data)
return err
2021-06-08 20:45:26 +08:00
}
2021-08-02 20:41:35 +08:00
func One(fieldName string, value interface{}, data interface{}) error {
has, err := xdb.Where(fieldName+"=?", value).Get(data)
if err != nil {
return err
}
if !has {
return ErrNotFound
}
2021-06-08 20:45:26 +08:00
2021-08-02 20:41:35 +08:00
return nil
2021-06-08 20:45:26 +08:00
}
2021-08-02 20:41:35 +08:00
func CountAll(data interface{}) int {
n, _ := xdb.Count(data)
return int(n)
2021-06-08 20:45:26 +08:00
}
2021-08-02 20:41:35 +08:00
func Find(data interface{}, limit, page int) error {
if limit == 0 {
return xdb.Find(data)
}
start := (page - 1) * limit
return xdb.Limit(limit, start).Find(data)
2021-06-08 20:45:26 +08:00
}
2021-08-02 20:41:35 +08:00
func CountPrefix(fieldName string, prefix string, data interface{}) int {
n, _ := xdb.Where(fieldName+" like ?", prefix+"%").Count(data)
return int(n)
2021-06-08 20:45:26 +08:00
}
2021-08-02 20:41:35 +08:00
func Prefix(fieldName string, prefix string, data interface{}, limit, page int) error {
where := xdb.Where(fieldName+" like ?", prefix+"%")
if limit == 0 {
return where.Find(data)
2021-06-08 20:45:26 +08:00
}
2021-08-02 20:41:35 +08:00
start := (page - 1) * limit
return where.Limit(limit, start).Find(data)
2021-06-08 20:45:26 +08:00
}