# Module: Azaion.Common.BusinessException ## Purpose Custom exception type for domain-level errors, paired with an `ExceptionEnum` catalog of all business error codes. ## Public Interface ### BusinessException | Member | Signature | Description | |--------|-----------|-------------| | Constructor | `BusinessException(ExceptionEnum exEnum)` | Creates exception with message from `ExceptionEnum`'s `[Description]` attribute | | `ExceptionEnum` | `ExceptionEnum ExceptionEnum { get; set; }` | The specific error code | | `GetMessage` | `static string GetMessage(ExceptionEnum exEnum)` | Looks up human-readable message for an error code | ### ExceptionEnum | Value | Code | Description | |-------|------|-------------| | `NoEmailFound` | 10 | No such email found | | `EmailExists` | 20 | Email already exists | | `WrongPassword` | 30 | Passwords do not match | | `PasswordLengthIncorrect` | 32 | Password should be at least 8 characters | | `EmailLengthIncorrect` | 35 | Email is empty or invalid | | `WrongEmail` | 37 | (no description attribute) | | `HardwareIdMismatch` | 40 | Hardware mismatch — unauthorized hardware | | `BadHardware` | 45 | Hardware should be not empty | | `WrongResourceName` | 50 | Wrong resource file name | | `NoFileProvided` | 60 | No file provided | ## Internal Logic Static constructor eagerly loads all `ExceptionEnum` descriptions into a dictionary via `EnumExtensions.GetDescriptions()`. Messages are retrieved by dictionary lookup with fallback to `ToString()`. ## Dependencies - `EnumExtensions` — for `GetDescriptions()` ## Consumers - `BusinessExceptionHandler` — catches and serializes to HTTP 409 response - `UserService` — throws for email/password/hardware validation failures - `ResourcesService` — throws for missing file uploads - FluentValidation validators — reference `ExceptionEnum` codes in `.WithErrorCode()` ## Data Models None. ## Configuration None. ## External Integrations None. ## Security Error codes are returned to the client via `BusinessExceptionHandler`. Codes are numeric and messages are user-facing. ## Tests None.