import type { CartDiscountReference, DiscountCode, DiscountCodeChangeCartDiscountsAction, DiscountCodeChangeIsActiveAction, DiscountCodeSetCartPredicateAction, DiscountCodeSetCustomFieldAction, DiscountCodeSetCustomTypeAction, DiscountCodeSetDescriptionAction, DiscountCodeSetMaxApplicationsAction, DiscountCodeSetMaxApplicationsPerCustomerAction, DiscountCodeSetNameAction, DiscountCodeSetValidFromAction, DiscountCodeSetValidFromAndUntilAction, DiscountCodeSetValidUntilAction, DiscountCodeUpdateAction, } from "@commercetools/platform-sdk"; import type { Writable } from "#src/types.ts"; import type { UpdateHandlerInterface } from "../abstract.ts"; import { AbstractUpdateHandler, type RepositoryContext } from "../abstract.ts"; export class DiscountCodeUpdateHandler extends AbstractUpdateHandler implements Partial> { changeCartDiscounts( context: RepositoryContext, resource: Writable, { cartDiscounts }: DiscountCodeChangeCartDiscountsAction, ) { resource.cartDiscounts = cartDiscounts.map( (obj): CartDiscountReference => ({ typeId: "cart-discount", id: obj.id!, }), ); } changeIsActive( context: RepositoryContext, resource: Writable, { isActive }: DiscountCodeChangeIsActiveAction, ) { resource.isActive = isActive; } setCartPredicate( context: RepositoryContext, resource: Writable, { cartPredicate }: DiscountCodeSetCartPredicateAction, ) { resource.cartPredicate = cartPredicate; } setCustomField( context: RepositoryContext, resource: Writable, { name, value }: DiscountCodeSetCustomFieldAction, ) { this._setCustomFieldValues(resource, { name, value }); } async setCustomType( context: RepositoryContext, resource: Writable, { type, fields }: DiscountCodeSetCustomTypeAction, ) { await this._setCustomType(context, resource, { type, fields }); } setDescription( context: RepositoryContext, resource: Writable, { description }: DiscountCodeSetDescriptionAction, ) { resource.description = description; } setMaxApplications( context: RepositoryContext, resource: Writable, { maxApplications }: DiscountCodeSetMaxApplicationsAction, ) { resource.maxApplications = maxApplications; } setMaxApplicationsPerCustomer( context: RepositoryContext, resource: Writable, { maxApplicationsPerCustomer, }: DiscountCodeSetMaxApplicationsPerCustomerAction, ) { resource.maxApplicationsPerCustomer = maxApplicationsPerCustomer; } setName( context: RepositoryContext, resource: Writable, { name }: DiscountCodeSetNameAction, ) { resource.name = name; } setValidFrom( context: RepositoryContext, resource: Writable, { validFrom }: DiscountCodeSetValidFromAction, ) { resource.validFrom = validFrom; } setValidFromAndUntil( context: RepositoryContext, resource: Writable, { validFrom, validUntil }: DiscountCodeSetValidFromAndUntilAction, ) { resource.validFrom = validFrom; resource.validUntil = validUntil; } setValidUntil( context: RepositoryContext, resource: Writable, { validUntil }: DiscountCodeSetValidUntilAction, ) { resource.validUntil = validUntil; } }