import { makeFailureMessage } from "@/feature/common/failures/failure-helpers"; /** * This class can be used as a base class for creating custom failure classes. * With this class you can set message and metadata, with messages and extending * you can create your failure messages hierarchy and automatically by syncing langKey * with the hirerarchy of failure messages. * For example if you pass a key of `user` to the constructor of `UserCreationFailure` * so in langKey you can have failure message `faiure.user` so automatically, * you can show translated error message everywhere in the app. * Also you can use this failure message to have grained control over failures. */ export default abstract class BaseFailure { /* ------------------------------- Attributes ------------------------------- */ private readonly BASE_FAILURE_MESSAGE = "failure"; /* -------------------------------------------------------------------------- */ /** * Use this message as key lang for failure messages */ message = this.BASE_FAILURE_MESSAGE; /* -------------------------------------------------------------------------- */ metadata: META_DATA | undefined; /* -------------------------------------------------------------------------- */ constructor(key: string, metadata?: META_DATA) { this.message = makeFailureMessage(this.message, key); this.metadata = metadata ?? undefined; } /* -------------------------------------------------------------------------- */ }