59 lines
1.4 KiB
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)
|
|
}
|
|
}
|