metis-desk/modules/companies/src/api/application/mail-configuration-policy.ts

39 lines
1.6 KiB
TypeScript
Raw Normal View History

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)
);
});
}