142 lines
4.4 KiB
Go
142 lines
4.4 KiB
Go
package apperrorsx
|
|
|
|
import (
|
|
"errors"
|
|
|
|
mysqldriver "github.com/go-sql-driver/mysql"
|
|
)
|
|
|
|
const (
|
|
mysqlErrAccessDenied uint16 = 1045
|
|
mysqlErrDuplicateEntry uint16 = 1062
|
|
mysqlErrCommandDenied uint16 = 1142
|
|
mysqlErrLockWaitTimeout uint16 = 1205
|
|
mysqlErrDeadlockFound uint16 = 1213
|
|
mysqlErrSpecificAccessDenied uint16 = 1227
|
|
mysqlErrColumnCannotBeNull uint16 = 1048
|
|
mysqlErrTruncatedWrongValue uint16 = 1292
|
|
mysqlErrIncorrectValue uint16 = 1366
|
|
mysqlErrServerGone uint16 = 2006
|
|
mysqlErrFkParentStillReferenced uint16 = 1451
|
|
mysqlErrFkChildNotFound uint16 = 1452
|
|
mysqlErrCheckConstraintViolated uint16 = 3819
|
|
mysqlErrConstraintFailed uint16 = 4025
|
|
)
|
|
|
|
func mapMySQLError(module string, err error) *AppError {
|
|
var mysqlErr *mysqldriver.MySQLError
|
|
if !errors.As(err, &mysqlErr) {
|
|
return nil
|
|
}
|
|
|
|
switch module {
|
|
case ModuleHelicopter:
|
|
return mapMySQLErrorHelicopter(mysqlErr, err)
|
|
case ModuleHospital:
|
|
return mapMySQLErrorHospital(mysqlErr, err)
|
|
case ModuleFleetStatus:
|
|
return mapMySQLErrorFleetStatus(mysqlErr, err)
|
|
case ModuleComplaint:
|
|
return mapMySQLErrorComplaint(mysqlErr, err)
|
|
default:
|
|
return mapMySQLErrorGeneral(mysqlErr, err)
|
|
}
|
|
}
|
|
|
|
func mapMySQLErrorFleetStatus(mysqlErr *mysqldriver.MySQLError, cause error) *AppError {
|
|
switch mysqlErr.Number {
|
|
case mysqlErrDuplicateEntry:
|
|
return New(ErrFleetStatusDuplicate).WithCause(cause)
|
|
case mysqlErrFkParentStillReferenced:
|
|
return New(ErrFleetStatusRelationDelete).WithCause(cause)
|
|
case mysqlErrFkChildNotFound:
|
|
// fleet_status.helicopter_id references a non-existent helicopter.
|
|
return New(ErrFleetStatusHelicopterInvalid).WithCause(cause)
|
|
case mysqlErrColumnCannotBeNull,
|
|
mysqlErrTruncatedWrongValue,
|
|
mysqlErrIncorrectValue,
|
|
mysqlErrCheckConstraintViolated,
|
|
mysqlErrConstraintFailed:
|
|
return New(ErrFleetStatusInvalidPayload).WithCause(cause)
|
|
default:
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func mapMySQLErrorGeneral(mysqlErr *mysqldriver.MySQLError, cause error) *AppError {
|
|
switch mysqlErr.Number {
|
|
case mysqlErrAccessDenied:
|
|
return New(ErrUserUnauthorized).WithCause(cause)
|
|
case mysqlErrCommandDenied, mysqlErrSpecificAccessDenied:
|
|
return New(ErrForbiddenAccess).WithCause(cause)
|
|
case mysqlErrLockWaitTimeout, mysqlErrDeadlockFound:
|
|
return New(ErrBusinessRuleFailed).WithCause(cause)
|
|
case mysqlErrServerGone:
|
|
return New(ErrInternal).WithCause(cause)
|
|
case mysqlErrDuplicateEntry, mysqlErrFkParentStillReferenced:
|
|
return New(ErrBusinessRuleFailed).WithCause(cause)
|
|
case mysqlErrColumnCannotBeNull,
|
|
mysqlErrTruncatedWrongValue,
|
|
mysqlErrIncorrectValue,
|
|
mysqlErrFkChildNotFound,
|
|
mysqlErrCheckConstraintViolated,
|
|
mysqlErrConstraintFailed:
|
|
return New(ErrValidation).WithCause(cause)
|
|
default:
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func mapMySQLErrorHelicopter(mysqlErr *mysqldriver.MySQLError, cause error) *AppError {
|
|
switch mysqlErr.Number {
|
|
case mysqlErrDuplicateEntry:
|
|
return New(ErrHelicopterDuplicate).WithCause(cause)
|
|
case mysqlErrFkParentStillReferenced:
|
|
return New(ErrHelicopterRelationDelete).WithCause(cause)
|
|
case mysqlErrColumnCannotBeNull,
|
|
mysqlErrTruncatedWrongValue,
|
|
mysqlErrIncorrectValue,
|
|
mysqlErrFkChildNotFound,
|
|
mysqlErrCheckConstraintViolated,
|
|
mysqlErrConstraintFailed:
|
|
return New(ErrHelicopterInvalidPayload).WithCause(cause)
|
|
default:
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func mapMySQLErrorHospital(mysqlErr *mysqldriver.MySQLError, cause error) *AppError {
|
|
switch mysqlErr.Number {
|
|
case mysqlErrFkParentStillReferenced:
|
|
return New(ErrHospitalRelationDelete).WithCause(cause)
|
|
case mysqlErrColumnCannotBeNull,
|
|
mysqlErrTruncatedWrongValue,
|
|
mysqlErrIncorrectValue,
|
|
mysqlErrFkChildNotFound,
|
|
mysqlErrCheckConstraintViolated,
|
|
mysqlErrConstraintFailed:
|
|
return New(ErrHospitalInvalidPayload).WithCause(cause)
|
|
default:
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func mapMySQLErrorComplaint(mysqlErr *mysqldriver.MySQLError, cause error) *AppError {
|
|
switch mysqlErr.Number {
|
|
case mysqlErrDuplicateEntry:
|
|
return New(ErrComplaintInvalidPayload).WithCause(cause)
|
|
case mysqlErrFkParentStillReferenced:
|
|
return New(ErrComplaintRelationDelete).WithCause(cause)
|
|
case mysqlErrFkChildNotFound:
|
|
return New(ErrComplaintInvalidHelicopterID).WithCause(cause)
|
|
case mysqlErrColumnCannotBeNull,
|
|
mysqlErrTruncatedWrongValue,
|
|
mysqlErrIncorrectValue,
|
|
mysqlErrCheckConstraintViolated,
|
|
mysqlErrConstraintFailed:
|
|
return New(ErrComplaintInvalidPayload).WithCause(cause)
|
|
default:
|
|
return nil
|
|
}
|
|
}
|