Files
simrsx-be/pkg/lib-helper/lib-helper.go

59 lines
1.4 KiB
Go

package libhelper
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)
}
}