init push
This commit is contained in:
221
internal/shared/pkg/apperrorsx/translator.go
Normal file
221
internal/shared/pkg/apperrorsx/translator.go
Normal file
@@ -0,0 +1,221 @@
|
||||
package apperrorsx
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"gorm.io/gorm"
|
||||
|
||||
afterflightinspection "wucher/internal/domain/after_flight_inspection"
|
||||
"wucher/internal/service"
|
||||
"wucher/internal/shared/pkg/apperrors"
|
||||
)
|
||||
|
||||
// Translate is the single entrypoint for mapping domain/service errors to AppError.
|
||||
func Translate(module string, err error) *AppError {
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
switch module {
|
||||
case ModuleAuth, ModulePIN:
|
||||
if mapped := mapAuthPIN(err); mapped != nil {
|
||||
return mapped
|
||||
}
|
||||
case ModuleHelicopter:
|
||||
if mapped := mapHelicopter(err); mapped != nil {
|
||||
return mapped
|
||||
}
|
||||
case ModuleHospital:
|
||||
if mapped := mapHospital(err); mapped != nil {
|
||||
return mapped
|
||||
}
|
||||
case ModuleTakeover:
|
||||
if mapped := mapTakeover(err); mapped != nil {
|
||||
return mapped
|
||||
}
|
||||
case ModuleFleetStatus:
|
||||
if mapped := mapFleetStatus(err); mapped != nil {
|
||||
return mapped
|
||||
}
|
||||
case ModuleComplaint:
|
||||
if mapped := mapComplaint(err); mapped != nil {
|
||||
return mapped
|
||||
}
|
||||
case ModuleAfterFlightInspection:
|
||||
if mapped := mapAfterFlightInspection(err); mapped != nil {
|
||||
return mapped
|
||||
}
|
||||
}
|
||||
|
||||
return mapGeneral(err)
|
||||
}
|
||||
|
||||
func mapAfterFlightInspection(err error) *AppError {
|
||||
switch {
|
||||
case errors.Is(err, afterflightinspection.ErrInvalidFlightInspectionID):
|
||||
return New(ErrAfterFlightInvalidID).WithCause(err)
|
||||
case errors.Is(err, afterflightinspection.ErrFlightInspectionNotFound):
|
||||
return New(ErrAfterFlightFlightInspectionNotFound).WithCause(err)
|
||||
case errors.Is(err, afterflightinspection.ErrCapabilitiesUnavailable):
|
||||
return New(ErrAfterFlightCapabilitiesUnavailable).WithCause(err)
|
||||
case errors.Is(err, afterflightinspection.ErrNR1Required):
|
||||
return New(ErrAfterFlightNR1Required).WithCause(err)
|
||||
case errors.Is(err, afterflightinspection.ErrNR1NotAvailable):
|
||||
return New(ErrAfterFlightNR1NotAvailable).WithCause(err)
|
||||
case errors.Is(err, afterflightinspection.ErrNR2Required):
|
||||
return New(ErrAfterFlightNR2Required).WithCause(err)
|
||||
case errors.Is(err, afterflightinspection.ErrNR2NotAvailable):
|
||||
return New(ErrAfterFlightNR2NotAvailable).WithCause(err)
|
||||
case errors.Is(err, afterflightinspection.ErrLHRequired):
|
||||
return New(ErrAfterFlightLHRequired).WithCause(err)
|
||||
case errors.Is(err, afterflightinspection.ErrLHNotAvailable):
|
||||
return New(ErrAfterFlightLHNotAvailable).WithCause(err)
|
||||
case errors.Is(err, afterflightinspection.ErrRHRequired):
|
||||
return New(ErrAfterFlightRHRequired).WithCause(err)
|
||||
case errors.Is(err, afterflightinspection.ErrRHNotAvailable):
|
||||
return New(ErrAfterFlightRHNotAvailable).WithCause(err)
|
||||
case errors.Is(err, afterflightinspection.ErrMGBRequired):
|
||||
return New(ErrAfterFlightMGBRequired).WithCause(err)
|
||||
case errors.Is(err, afterflightinspection.ErrMGBNotAvailable):
|
||||
return New(ErrAfterFlightMGBNotAvailable).WithCause(err)
|
||||
case errors.Is(err, afterflightinspection.ErrIGBRequired):
|
||||
return New(ErrAfterFlightIGBRequired).WithCause(err)
|
||||
case errors.Is(err, afterflightinspection.ErrIGBNotAvailable):
|
||||
return New(ErrAfterFlightIGBNotAvailable).WithCause(err)
|
||||
case errors.Is(err, afterflightinspection.ErrTGBRequired):
|
||||
return New(ErrAfterFlightTGBRequired).WithCause(err)
|
||||
case errors.Is(err, afterflightinspection.ErrTGBNotAvailable):
|
||||
return New(ErrAfterFlightTGBNotAvailable).WithCause(err)
|
||||
}
|
||||
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return New(ErrAfterFlightInspectionNotFound).WithCause(err)
|
||||
}
|
||||
|
||||
if mapped := mapMySQLError(ModuleAfterFlightInspection, err); mapped != nil {
|
||||
return mapped
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func mapFleetStatus(err error) *AppError {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return New(ErrFleetStatusNotFound).WithCause(err)
|
||||
}
|
||||
|
||||
if _, ok := apperrors.AsDeleteConflict(err); ok {
|
||||
return New(ErrFleetStatusRelationDelete).WithCause(err)
|
||||
}
|
||||
|
||||
if mapped := mapMySQLError(ModuleFleetStatus, err); mapped != nil {
|
||||
return mapped
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func mapComplaint(err error) *AppError {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return New(ErrComplaintNotFound).WithCause(err)
|
||||
}
|
||||
|
||||
if mapped := mapMySQLError(ModuleComplaint, err); mapped != nil {
|
||||
return mapped
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func mapGeneral(err error) *AppError {
|
||||
switch {
|
||||
case errors.Is(err, gorm.ErrRecordNotFound):
|
||||
return New(ErrDataNotFound).WithCause(err)
|
||||
case errors.Is(err, context.Canceled), errors.Is(err, context.DeadlineExceeded):
|
||||
return New(ErrInvalidRequest).WithCause(err)
|
||||
}
|
||||
|
||||
if mapped := mapMySQLError(ModuleGeneral, err); mapped != nil {
|
||||
return mapped
|
||||
}
|
||||
|
||||
switch {
|
||||
case errors.Is(err, service.ErrInvalidReauthMethod):
|
||||
return New(ErrValidation).WithCause(err)
|
||||
default:
|
||||
return New(ErrInternal).WithCause(err)
|
||||
}
|
||||
}
|
||||
|
||||
func mapAuthPIN(err error) *AppError {
|
||||
switch {
|
||||
case errors.Is(err, service.ErrInvalidToken):
|
||||
return New(ErrTokenInvalid).WithCause(err)
|
||||
case errors.Is(err, service.ErrInvalidCredentials):
|
||||
return New(ErrUserUnauthorized).WithCause(err)
|
||||
case errors.Is(err, service.ErrSecurityPINNotSet):
|
||||
return New(ErrPINNotSet).WithCause(err)
|
||||
case errors.Is(err, service.ErrSecurityPINLocked), errors.Is(err, service.ErrSecurityPINResetRequired):
|
||||
return New(ErrPINBlocked).WithCause(err)
|
||||
case errors.Is(err, service.ErrSecurityPINAttemptLimit):
|
||||
return New(ErrPINBlocked).WithCause(err)
|
||||
case errors.Is(err, service.ErrInvalidSecurityPIN):
|
||||
return New(ErrPINIncorrect).WithCause(err)
|
||||
case errors.Is(err, service.ErrInvalidPINAction):
|
||||
return New(ErrPINVerificationRequired202).WithCause(err)
|
||||
case errors.Is(err, service.ErrInvalidReauthMethod):
|
||||
return New(ErrValidation).WithCause(err)
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func mapHelicopter(err error) *AppError {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return New(ErrHelicopterNotFound).WithCause(err)
|
||||
}
|
||||
|
||||
if _, ok := apperrors.AsDeleteConflict(err); ok {
|
||||
return New(ErrHelicopterRelationDelete).WithCause(err)
|
||||
}
|
||||
|
||||
if mapped := mapMySQLError(ModuleHelicopter, err); mapped != nil {
|
||||
return mapped
|
||||
}
|
||||
|
||||
switch {
|
||||
case errors.Is(err, service.ErrInvalidReauthMethod):
|
||||
return New(ErrHelicopterInvalidPayload).WithCause(err)
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func mapHospital(err error) *AppError {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return New(ErrHospitalNotFound).WithCause(err)
|
||||
}
|
||||
|
||||
if _, ok := apperrors.AsDeleteConflict(err); ok {
|
||||
return New(ErrHospitalRelationDelete).WithCause(err)
|
||||
}
|
||||
|
||||
if mapped := mapMySQLError(ModuleHospital, err); mapped != nil {
|
||||
return mapped
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func mapTakeover(err error) *AppError {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return New(ErrTakeoverNotFound).WithCause(err)
|
||||
}
|
||||
|
||||
if mapped := mapMySQLError(ModuleTakeover, err); mapped != nil {
|
||||
return mapped
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user