import type { MailConfigurationValues } from "../domain/value-objects/mail-configuration-values"; import type { MailContext } from "./mail-configuration.repository"; // La autorización depende del periodo, no de que se haya terminado de configurar un dispositivo. export function mailAuthorized(values: MailConfigurationValues, context: MailContext) { const account = context.items.find((item) => item.id.equals(values.accountId))?.values; if ( account?.kind !== "account" || account.usage === "technical" || !account.active || (account.expiresOn !== null && account.expiresOn < context.today) || !context.people.some((person) => person.id.equals(values.personId) && person.active) || !context.assets.some((asset) => asset.id.equals(values.assetId) && asset.available) ) { return false; } const system = context.items.find((item) => item.id.toPrimitive() === account.systemId)?.values; const environment = context.items.find( (item) => item.id.toPrimitive() === account.environmentId )?.values; if ( system?.kind !== "system" || !system.active || (account.environmentId !== null && (environment?.kind !== "environment" || !environment.active)) ) { return false; } return context.items.some((item) => { const relation = item.values; return ( relation.kind === "account_person" && relation.personId === values.personId.toPrimitive() && relation.accountId === values.accountId.toPrimitive() && relation.startDate <= context.today && (relation.endDate === null || context.today < relation.endDate) ); }); }