import { UniqueID, UtcDate } from "@common/domain"; import { Result } from "@common/helpers"; import { ISequelizeMapper, MapperParamsType, SequelizeMapper, } from "@common/infrastructure/sequelize/sequelize-mapper"; import { CustomerInvoice } from "@contexts/customer-billing/domain"; import { InvoiceStatus } from "@contexts/customer-billing/domain/value-objetcs"; import { CustomerInvoiceCreationAttributes, CustomerInvoiceModel, } from "../sequelize/customer-invoice.model"; export interface ICustomerInvoiceMapper extends ISequelizeMapper< CustomerInvoiceModel, CustomerInvoiceCreationAttributes, CustomerInvoice > {} export class CustomerInvoiceMapper extends SequelizeMapper implements ICustomerInvoiceMapper { public mapToDomain( source: CustomerInvoiceModel, params?: MapperParamsType ): Result { const idOrError = UniqueID.create(source.id); const statusOrError = InvoiceStatus.create(source.status); const issueDateOrError = UtcDate.create(source.issue_date); const result = Result.combine([idOrError, statusOrError]); if (result.isFailure) { return Result.fail(result.error); } return CustomerInvoice.create( { status: statusOrError.data, issueDate: issueDateOrError.data, invoiceNumber: source.invoice_number, invoiceType: source.invoice_type, }, idOrError.data ); /*const tinOrError = TINNumber.create(source.tin); const emailOrError = EmailAddress.create(source.email); const phoneOrError = PhoneNumber.create(source.phone); const faxOrError = PhoneNumber.createNullable(source.fax); const postalAddressOrError = PostalAddress.create({ street: source.street, city: source.city, state: source.state, postalCode: source.postal_code, country: source.country, }); const result = Result.combine([ idOrError, tinOrError, emailOrError, phoneOrError, faxOrError, postalAddressOrError, ]); if (result.isFailure) { return Result.fail(result.error); } return Customer.create( { isFreelancer: source.is_freelancer, reference: source.reference, name: source.name, tradeName: source.trade_name ? Maybe.Some(source.trade_name) : Maybe.None(), tin: tinOrError.data, address: postalAddressOrError.data, email: emailOrError.data, phone: phoneOrError.data, fax: faxOrError.data, website: source.website ? Maybe.Some(source.website) : Maybe.None(), legalRecord: source.legal_record, defaultTax: source.default_tax, status: source.status, langCode: source.lang_code, currencyCode: source.currency_code, }, idOrError.data );*/ } public mapToPersistence( source: CustomerInvoice, params?: MapperParamsType ): Result { return Result.ok({ id: source.id.toString(), status: source.status.toString(), }); /*return Result.ok({ id: source.id.toString(), reference: source.reference, is_freelancer: source.isFreelancer, name: source.name, trade_name: source.tradeName.isSome() ? source.tradeName.getValue() : undefined, tin: source.tin.toString(), street: source.address.street, city: source.address.city, state: source.address.state, postal_code: source.address.postalCode, country: source.address.country, email: source.email.toString(), phone: source.phone.toString(), fax: source.fax.isSome() ? source.fax.getValue()?.toString() : undefined, website: source.website.isSome() ? source.website.getValue() : undefined, legal_record: source.legalRecord, default_tax: source.defaultTax, status: source.isActive ? "active" : "inactive", lang_code: source.langCode, currency_code: source.currencyCode, });*/ } } const customerInvoiceMapper: CustomerInvoiceMapper = new CustomerInvoiceMapper(); export { customerInvoiceMapper };