Transaction implementation (#2)
Go Tests / test (push) Failing after 6s

Reviewed-on: #2
This commit was merged in pull request #2.
This commit is contained in:
2026-05-24 16:40:04 +00:00
parent e98dbe3338
commit a6ff01d694
7 changed files with 597 additions and 207 deletions
+30 -27
View File
@@ -29,15 +29,16 @@ 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{}
}
res := make([]*T, 0, len(selecRes))
for i := range selecRes {
res = append(res, &selecRes[i])
selectRes := selectExec.Results()
res := make([]*T, 0, len(selectRes))
for i := range selectRes {
res = append(res, &selectRes[i])
}
return res
@@ -73,55 +74,57 @@ func (r *Repository[T]) SelectByPk(pks ...any) *T {
return nil
}
res, err := selectExec.Execute(r.conn)
err = selectExec.Execute(r.conn)
if err != nil {
log.LogError("Failed to load entity: %s", err)
return nil
}
if len(res) != 1 {
log.LogError("Invalid result number of results: %s", len(res))
selectRes := selectExec.Results()
if len(selectRes) != 1 {
log.LogError("Invalid result number of results: %s", len(selectRes))
return nil
}
return &res[0]
return &selectRes[0]
}
func (r *Repository[T]) Save(entity T) {
func (r *Repository[T]) Save(entity *T) error {
// Insert
if entity.IsInsertable() {
insertExec, err := exec.NewInsert[T](r.orm, entity)
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 err
}
if _, err := insertExec.Execute(r.conn); err != nil {
log.LogError("Insert failed for entity: %s", entity)
err = insertExec.Execute(r.conn)
if err != nil {
return err
}
return
result := insertExec.Results()
// Point to the new inserted result
*entity = result[0]
return nil
}
updateExec, err := exec.NewUpdate[T](r.orm, entity)
updateExec, err := exec.NewUpdate[T](r.orm, *entity)
if err != nil {
log.LogError("Failed to create update execution: %s", err)
return
return err
}
_, err = updateExec.Execute(r.conn)
err = updateExec.Execute(r.conn)
if err != nil {
log.LogError("Update failed: %s", err)
return
return err
}
return nil
}
func (r *Repository[T]) Delete(entity T) {
deleteExec, err := exec.NewDelete[T](r.orm, []T{entity})
func (r *Repository[T]) Delete(entity *T) {
deleteExec, err := exec.NewDelete[T](r.orm, []T{*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