48 lines
1014 B
Go
48 lines
1014 B
Go
package crud
|
|
|
|
import (
|
|
"fmt"
|
|
"xorm.io/xorm"
|
|
)
|
|
|
|
type databaseProvider[T any] struct {
|
|
db *xorm.Engine
|
|
idWhere string
|
|
}
|
|
|
|
func NewDatabaseProvider[T any](db *xorm.Engine, idColumn string) CheckedProvider[T] {
|
|
return &databaseProvider[T]{db, fmt.Sprintf("%s = ?", idColumn)}
|
|
}
|
|
|
|
func (d databaseProvider[T]) Find() ([]T, error) {
|
|
a := make([]T, 0)
|
|
err := d.db.Find(&a)
|
|
return a, err
|
|
}
|
|
|
|
func (d databaseProvider[T]) Add(item T) (T, error) {
|
|
_, err := d.db.Insert(&item)
|
|
return item, err
|
|
}
|
|
|
|
func (d databaseProvider[T]) Get(id string) (T, bool, error) {
|
|
var t T
|
|
ok, err := d.db.Where(d.idWhere, id).Get(&t)
|
|
return t, ok, err
|
|
}
|
|
|
|
func (d databaseProvider[T]) Put(id string, item T) error {
|
|
_, err := d.db.Where(d.idWhere, id).Update(&item)
|
|
return err
|
|
}
|
|
|
|
func (d databaseProvider[T]) Patch(id string, item T) error {
|
|
_, err := d.db.Where(d.idWhere, id).Update(&item)
|
|
return err
|
|
}
|
|
|
|
func (d databaseProvider[T]) Delete(id string) error {
|
|
_, err := d.db.Where(d.idWhere, id).Delete(new(T))
|
|
return err
|
|
}
|