feat: improve error handling on create and add search for objects with code and name
This commit is contained in:
@@ -1,9 +1,58 @@
|
||||
package libhelper
|
||||
|
||||
import "gorm.io/gorm"
|
||||
import (
|
||||
"fmt"
|
||||
pl "simrs-vx/pkg/logger"
|
||||
|
||||
"github.com/jackc/pgx/v5/pgconn"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func SearchCodeOrName(search string, tx *gorm.DB) {
|
||||
if search != "" {
|
||||
tx.Where("\"Code\" ILIKE ? OR \"Name\" ILIKE ?", "%"+search+"%", "%"+search+"%")
|
||||
}
|
||||
}
|
||||
|
||||
func HandleCreateError(input any, event *pl.Event, err error) error {
|
||||
e, ok := err.(*pgconn.PgError)
|
||||
if !ok {
|
||||
// fallback if it's not a pg error
|
||||
event.Status = "failed"
|
||||
event.ErrInfo = pl.ErrorInfo{
|
||||
Code: "data-create-fail",
|
||||
Detail: fmt.Sprintf("Database insert failed: %s", err.Error()),
|
||||
Raw: err,
|
||||
}
|
||||
return pl.SetLogError(event, input)
|
||||
}
|
||||
|
||||
switch e.Code {
|
||||
case "23505": // unique_violation
|
||||
event.Status = "failed"
|
||||
event.ErrInfo = pl.ErrorInfo{
|
||||
Code: "data-create-duplicate",
|
||||
Detail: fmt.Sprintf("Duplicate value violates unique constraint: %s", e.ConstraintName),
|
||||
Raw: err,
|
||||
}
|
||||
return pl.SetLogError(event, input)
|
||||
|
||||
case "23503": // foreign_key_violation
|
||||
event.Status = "failed"
|
||||
event.ErrInfo = pl.ErrorInfo{
|
||||
Code: "data-create-fkViolation",
|
||||
Detail: fmt.Sprintf("Foreign key constraint '%s' violated. Please check related record exists.", e.ConstraintName),
|
||||
Raw: err,
|
||||
}
|
||||
return pl.SetLogError(event, input)
|
||||
|
||||
default:
|
||||
event.Status = "failed"
|
||||
event.ErrInfo = pl.ErrorInfo{
|
||||
Code: "data-create-fail",
|
||||
Detail: fmt.Sprintf("Database insert failed: %s", e.Message),
|
||||
Raw: err,
|
||||
}
|
||||
return pl.SetLogError(event, input)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user