Spaces:
Configuration error
Configuration error
| package response | |
| import ( | |
| "api.qobiltu.id/models" | |
| "errors" | |
| "strings" | |
| "gorm.io/gorm" | |
| ) | |
| func HandleGormError(err error, fallbackMessage string) error { | |
| if err == nil { | |
| return nil | |
| } | |
| if errors.Is(err, gorm.ErrRecordNotFound) { | |
| return models.Exception{ | |
| Message: "Data not found", | |
| DataNotFound: true, | |
| Err: err, | |
| } | |
| } | |
| lowerErr := strings.ToLower(err.Error()) | |
| if strings.Contains(lowerErr, "duplicated key") || strings.Contains(lowerErr, "unique constraint") || strings.Contains(lowerErr, "duplicate entry") { | |
| return models.Exception{ | |
| Message: "Data already exists", | |
| DataDuplicate: true, | |
| Err: err, | |
| } | |
| } | |
| if strings.Contains(lowerErr, "password") && strings.Contains(lowerErr, "length") { | |
| return models.Exception{ | |
| Message: "Invalid password length", | |
| InvalidPasswordLength: true, | |
| Err: err, | |
| } | |
| } | |
| if strings.Contains(lowerErr, "permission denied") || strings.Contains(lowerErr, "forbidden") { | |
| return models.Exception{ | |
| Message: "Access forbidden", | |
| Forbidden: true, | |
| Err: err, | |
| } | |
| } | |
| if errors.As(err, &gorm.ErrInvalidData) { | |
| return models.Exception{ | |
| Message: "Invalid data format", | |
| BadRequest: true, | |
| Err: err, | |
| } | |
| } | |
| return models.Exception{ | |
| Message: fallbackMessage, | |
| InternalServerError: true, | |
| Err: err, | |
| } | |
| } | |