This repository has been archived on 2024-04-07. You can view files and clone it, but cannot push or open issues or pull requests.
summer-utils/api/crud/database.go
2023-04-16 11:56:17 +01:00

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
}