28 lines
763 B
Go
28 lines
763 B
Go
package storage
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/jackc/pgx/v5/pgconn"
|
|
)
|
|
|
|
// ErrConflict — нарушена уникальность: например, адрес (slug) уже занят другой записью.
|
|
var ErrConflict = errors.New("storage: conflict")
|
|
|
|
// ErrBadReference — ссылка на несуществующую запись: удалённую услугу, файл и т. п.
|
|
var ErrBadReference = errors.New("storage: bad reference")
|
|
|
|
func wrapConflict(err error) error {
|
|
var pg *pgconn.PgError
|
|
if errors.As(err, &pg) {
|
|
switch pg.Code {
|
|
case "23505":
|
|
return fmt.Errorf("%w: %s", ErrConflict, pg.ConstraintName)
|
|
case "23503":
|
|
return fmt.Errorf("%w: %s", ErrBadReference, pg.ConstraintName)
|
|
}
|
|
}
|
|
return err
|
|
}
|