import { DomainEntity, Result, UniqueID } from "@common/domain"; import { EmailAddress } from "../value-objects"; export interface ILogoutDataProps { email: EmailAddress; tabId: UniqueID; } export interface ILogoutData { email: EmailAddress; tabId: UniqueID; } export class LogoutData extends DomainEntity implements ILogoutData { static create(props: ILogoutDataProps): Result { return Result.ok(new this(props)); } static createFromPrimitives(props: { email: string; tabId: string }): Result { const { email, tabId } = props; const emailOrError = EmailAddress.create(email); const tabIdOrError = UniqueID.create(tabId); const result = Result.combine([emailOrError, tabIdOrError]); if (result.isFailure) { return Result.fail(result.error); } if (emailOrError.data.isEmpty()) { return Result.fail(new Error("Email is required")); } return LogoutData.create({ email: emailOrError.data, tabId: tabIdOrError.data, }); } get email(): EmailAddress { return this._props.email; } get tabId(): UniqueID { return this._props.tabId; } }