metis-desk/modules/companies/src/api/application/printer-configuration.use-cases.ts

73 lines
2.4 KiB
TypeScript
Raw Normal View History

2026-10-05 15:01:32 +00:00
import { UniqueID } from "@repo/rdx-ddd";
import { Result } from "@repo/rdx-utils";
import { PrinterConfiguration } from "../domain/printer-configuration.aggregate";
2026-10-08 14:43:34 +00:00
import type { PrinterConfigurationInput } from "../domain/printer-configuration-values";
import { PrinterConfigurationError } from "../domain/printer-configuration-values";
2026-10-05 15:01:32 +00:00
import type { IPrinterConfigurationRepository } from "./printer-configuration.repository";
import { mapPrinterInput } from "./printer-configuration-input.mapper";
2026-10-10 10:01:58 +00:00
2026-10-05 15:01:32 +00:00
export class PrinterConfigurationUseCases {
constructor(private readonly repository: IPrinterConfigurationRepository) {}
2026-10-10 10:01:58 +00:00
remove(companyId: string, id: string) {
const company = UniqueID.create(companyId);
const identity = UniqueID.create(id);
2026-10-10 10:01:58 +00:00
if (!(company.isSuccess && identity.isSuccess)) {
return Promise.resolve(Result.fail(new PrinterConfigurationError("INVALID_REQUEST")));
}
2026-10-10 10:01:58 +00:00
return this.repository.remove(company.data, identity.data);
}
2026-10-10 10:01:58 +00:00
2026-10-05 15:01:32 +00:00
get(companyId: string) {
const company = UniqueID.create(companyId);
2026-10-10 10:01:58 +00:00
2026-10-05 15:01:32 +00:00
return company.isSuccess
? this.repository.get(company.data)
: Promise.resolve(Result.fail(new PrinterConfigurationError("INVALID_REQUEST")));
}
2026-10-10 10:01:58 +00:00
2026-10-05 15:01:32 +00:00
save(
companyId: string,
id: string | undefined,
input: PrinterConfigurationInput,
actorId: string
) {
const company = UniqueID.create(companyId);
const actor = UniqueID.create(actorId);
const identity = id ? UniqueID.create(id) : undefined;
2026-10-10 10:01:58 +00:00
2026-10-05 15:01:32 +00:00
if (!(company.isSuccess && actor.isSuccess) || (identity && !identity.isSuccess)) {
return Promise.resolve(Result.fail(new PrinterConfigurationError("INVALID_REQUEST")));
}
2026-10-10 10:01:58 +00:00
2026-10-05 15:01:32 +00:00
return this.repository.save(company.data, (context) => {
const previous = identity?.isSuccess
? context.configurations.find((item) => item.id.equals(identity.data))
: undefined;
2026-10-10 10:01:58 +00:00
2026-10-05 15:01:32 +00:00
if (id && !previous) {
return Result.fail(new PrinterConfigurationError("PRINTER_CONFIGURATION_NOT_FOUND"));
}
const values = mapPrinterInput(input, context, previous);
2026-10-10 10:01:58 +00:00
2026-10-05 15:01:32 +00:00
if (!values.isSuccess) {
return values;
}
const now = new Date().toISOString();
const candidate = previous
? previous.update(values.data, actor.data, now)
: PrinterConfiguration.create(company.data, values.data, actor.data, now);
2026-10-10 10:01:58 +00:00
2026-10-05 15:01:32 +00:00
if (!candidate.isSuccess) {
return candidate;
}
2026-10-10 10:01:58 +00:00
2026-10-05 15:01:32 +00:00
return candidate;
});
}
}