import type { CartDiscount, CartDiscountChangeIsActiveAction, CartDiscountChangeSortOrderAction, CartDiscountChangeTargetAction, CartDiscountSetCustomFieldAction, CartDiscountSetCustomTypeAction, CartDiscountSetDescriptionAction, CartDiscountSetKeyAction, CartDiscountSetStoresAction, CartDiscountSetValidFromAction, CartDiscountSetValidFromAndUntilAction, CartDiscountSetValidUntilAction, CartDiscountUpdateAction, } from "@commercetools/platform-sdk"; import { getStoreKeyReference } from "#src/repositories/helpers.ts"; import type { Writable } from "#src/types.ts"; import type { UpdateHandlerInterface } from "../abstract.ts"; import { AbstractUpdateHandler, type RepositoryContext } from "../abstract.ts"; export class CartDiscountUpdateHandler extends AbstractUpdateHandler implements Partial> { changeIsActive( context: RepositoryContext, resource: Writable, { isActive }: CartDiscountChangeIsActiveAction, ) { resource.isActive = isActive; } changeSortOrder( context: RepositoryContext, resource: Writable, { sortOrder }: CartDiscountChangeSortOrderAction, ) { resource.sortOrder = sortOrder; } changeTarget( context: RepositoryContext, resource: Writable, { target }: CartDiscountChangeTargetAction, ) { resource.target = target; } setCustomField( context: RepositoryContext, resource: Writable, { name, value }: CartDiscountSetCustomFieldAction, ) { this._setCustomFieldValues(resource, { name, value }); } async setCustomType( context: RepositoryContext, resource: Writable, { type, fields }: CartDiscountSetCustomTypeAction, ) { await this._setCustomType(context, resource, { type, fields }); } setDescription( context: RepositoryContext, resource: Writable, { description }: CartDiscountSetDescriptionAction, ) { resource.description = description; } setKey( context: RepositoryContext, resource: Writable, { key }: CartDiscountSetKeyAction, ) { resource.key = key; } async setStores( context: RepositoryContext, resource: Writable, { stores }: CartDiscountSetStoresAction, ) { const resolvedStores = stores ? await Promise.all( stores.map((s) => getStoreKeyReference(s, context.projectKey, this._storage), ), ) : undefined; resource.stores = resolvedStores as Writable["stores"]; } setValidFrom( context: RepositoryContext, resource: Writable, { validFrom }: CartDiscountSetValidFromAction, ) { resource.validFrom = validFrom; } setValidFromAndUntil( context: RepositoryContext, resource: Writable, { validFrom, validUntil }: CartDiscountSetValidFromAndUntilAction, ) { resource.validFrom = validFrom; resource.validUntil = validUntil; } setValidUntil( context: RepositoryContext, resource: Writable, { validUntil }: CartDiscountSetValidUntilAction, ) { resource.validUntil = validUntil; } }