39 lines
1.6 KiB
TypeScript
39 lines
1.6 KiB
TypeScript
|
|
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)
|
||
|
|
);
|
||
|
|
});
|
||
|
|
}
|