WIP: Insert sets PK

WIP: Insert sets PK
This commit is contained in:
2026-05-21 22:21:09 +02:00
parent e98dbe3338
commit 890151b490
5 changed files with 164 additions and 86 deletions
+19 -11
View File
@@ -1,6 +1,7 @@
package repository
import (
"errors"
"reflect"
"strings"
@@ -11,6 +12,7 @@ import (
type HasPK interface {
IsInsertable() bool
SetPk(pks ...any)
}
type Repository[T HasPK] struct {
@@ -29,11 +31,12 @@ func (r *Repository[T]) SelectAll() []*T {
return []*T{}
}
selecRes, err := selectExec.Execute(r.conn)
err = selectExec.Execute(r.conn)
if err != nil {
log.LogError("Failed to load projects: %s", err)
return []*T{}
}
selecRes := selectExec.GetResult()
res := make([]*T, 0, len(selecRes))
for i := range selecRes {
@@ -73,7 +76,8 @@ func (r *Repository[T]) SelectByPk(pks ...any) *T {
return nil
}
res, err := selectExec.Execute(r.conn)
err = selectExec.Execute(r.conn)
res := selectExec.GetResult()
if err != nil {
log.LogError("Failed to load entity: %s", err)
return nil
@@ -87,41 +91,45 @@ func (r *Repository[T]) SelectByPk(pks ...any) *T {
return &res[0]
}
func (r *Repository[T]) Save(entity T) {
func (r *Repository[T]) Save(entity T) (*T, error) {
// Insert
if entity.IsInsertable() {
insertExec, err := exec.NewInsert[T](r.orm, entity)
if err != nil {
log.LogError("Failed to create insert execution: %s", err)
return
return nil, errors.New("")
}
if _, err := insertExec.Execute(r.conn); err != nil {
if err = insertExec.Execute(r.conn); err != nil {
log.LogError("Insert failed for entity: %s", entity)
}
return
return nil, errors.New("")
}
updateExec, err := exec.NewUpdate[T](r.orm, entity)
if err != nil {
log.LogError("Failed to create update execution: %s", err)
return
return nil, errors.New("")
}
_, err = updateExec.Execute(r.conn)
err = updateExec.Execute(r.conn)
if err != nil {
log.LogError("Update failed: %s", err)
return
return nil, errors.New("")
}
return &entity, nil
}
func (r *Repository[T]) Delete(entity T) {
deleteExec, err := exec.NewDelete[T](r.orm, []T{entity})
deleteExec, err := exec.NewDelete[T](r.orm, entity)
if err != nil {
log.LogError("Failed to create delete execution: %s", err)
return
}
_, err = deleteExec.Execute(r.conn)
err = deleteExec.Execute(r.conn)
if err != nil {
log.LogError("Delete failed: %s", err)
return