- Add mailbox persistence mapper for domain object mapping. - Create Sequelize repository for mailbox data access. - Define common mailbox schemas and types for validation. - Implement mailbox API for frontend communication. - Develop mailbox form component for creating and editing mailboxes. - Add internationalization support for mailbox labels and messages. - Create mailbox use form for managing mailbox usage periods. - Build mailboxes page to display and manage mailboxes and their usage.
49 lines
1.9 KiB
TypeScript
49 lines
1.9 KiB
TypeScript
import { UniqueID } from "@repo/rdx-ddd";
|
|
import { Result } from "@repo/rdx-utils";
|
|
|
|
import { MailConfiguration } from "../domain/mail-configuration.aggregate";
|
|
import {
|
|
MailConfigurationError,
|
|
type MailConfigurationInput,
|
|
} from "../domain/mail-configuration-values";
|
|
|
|
import type { IMailConfigurationRepository } from "./mail-configuration.repository";
|
|
import { mapMailInput } from "./mail-configuration-input.mapper";
|
|
export class MailConfigurationUseCases {
|
|
constructor(private readonly repository: IMailConfigurationRepository) {}
|
|
get(companyId: string) {
|
|
const company = UniqueID.create(companyId);
|
|
return company.isSuccess
|
|
? this.repository.get(company.data)
|
|
: Promise.resolve(Result.fail(new MailConfigurationError("INVALID_REQUEST")));
|
|
}
|
|
save(companyId: string, id: string | undefined, input: MailConfigurationInput, actorId: string) {
|
|
const company = UniqueID.create(companyId);
|
|
const actor = UniqueID.create(actorId);
|
|
const identity = id ? UniqueID.create(id) : undefined;
|
|
if (!(company.isSuccess && actor.isSuccess) || (identity && !identity.isSuccess)) {
|
|
return Promise.resolve(Result.fail(new MailConfigurationError("INVALID_REQUEST")));
|
|
}
|
|
return this.repository.save(company.data, (context) => {
|
|
const previous = identity?.isSuccess
|
|
? context.configurations.find((item) => item.id.equals(identity.data))
|
|
: undefined;
|
|
if (id && !previous) {
|
|
return Result.fail(new MailConfigurationError("MAIL_CONFIGURATION_NOT_FOUND"));
|
|
}
|
|
const values = mapMailInput(input, context, previous);
|
|
if (!values.isSuccess) {
|
|
return values;
|
|
}
|
|
const now = new Date().toISOString();
|
|
const candidate = previous
|
|
? previous.update(values.data, actor.data, now)
|
|
: MailConfiguration.create(company.data, values.data, actor.data, now);
|
|
if (!candidate.isSuccess) {
|
|
return candidate;
|
|
}
|
|
return candidate;
|
|
});
|
|
}
|
|
}
|