import { Request, Response } from "express"; import { AllocationType, DiscountConditionOperator } from "../../../../models"; import { AdminUpsertConditionsReq } from "../../../../types/discount"; import { FindParams } from "../../../../types/common"; /** * @oas [post] /discounts/{id} * operationId: "PostDiscountsDiscount" * summary: "Update a Discount" * description: "Updates a Discount with a given set of rules that define how the Discount behaves." * x-authenticated: true * parameters: * - (path) id=* {string} The ID of the Discount. * - (query) expand {string} (Comma separated) Which fields should be expanded in each item of the result. * - (query) fields {string} (Comma separated) Which fields should be included in each item of the result. * requestBody: * content: * application/json: * schema: * properties: * code: * type: string * description: A unique code that will be used to redeem the Discount * rule: * description: The Discount Rule that defines how Discounts are calculated * type: object * required: * - id * properties: * id: * type: string * description: "The ID of the Rule" * description: * type: string * description: "A short description of the discount" * value: * type: number * description: "The value that the discount represents; this will depend on the type of the discount" * allocation: * type: string * description: "The scope that the discount should apply to." * enum: [total, item] * conditions: * type: array * description: "A set of conditions that can be used to limit when the discount can be used. Only one of `products`, `product_types`, `product_collections`, `product_tags`, and `customer_groups` should be provided." * items: * type: object * required: * - operator * properties: * id: * type: string * description: "The ID of the Rule" * operator: * type: string * description: Operator of the condition * enum: [in, not_in] * products: * type: array * description: list of product IDs if the condition is applied on products. * items: * type: string * product_types: * type: array * description: list of product type IDs if the condition is applied on product types. * items: * type: string * product_collections: * type: array * description: list of product collection IDs if the condition is applied on product collections. * items: * type: string * product_tags: * type: array * description: list of product tag IDs if the condition is applied on product tags. * items: * type: string * customer_groups: * type: array * description: list of customer group IDs if the condition is applied on customer groups. * items: * type: string * is_disabled: * type: boolean * description: Whether the Discount code is disabled on creation. You will have to enable it later to make it available to Customers. * starts_at: * type: string * format: date-time * description: The time at which the Discount should be available. * ends_at: * type: string * format: date-time * description: The time at which the Discount should no longer be available. * valid_duration: * type: string * description: Duration the discount runs between * example: P3Y6M4DT12H30M5S * usage_limit: * type: number * description: Maximum times the discount can be used * regions: * description: A list of Region ids representing the Regions in which the Discount can be used. * type: array * items: * type: string * metadata: * description: An object containing metadata of the discount * type: object * x-codeSamples: * - lang: JavaScript * label: JS Client * source: | * import Medusa from "@medusajs/medusa-js" * const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 }) * // must be previously logged in or use api token * medusa.admin.discounts.update(discount_id, { * code: 'TEST' * }) * .then(({ discount }) => { * console.log(discount.id); * }); * - lang: Shell * label: cURL * source: | * curl --location --request POST 'https://medusa-url.com/admin/discounts/{id}' \ * --header 'Authorization: Bearer {api_token}' \ * --header 'Content-Type: application/json' \ * --data-raw '{ * "code": "TEST" * }' * security: * - api_token: [] * - cookie_auth: [] * tags: * - Discount * responses: * 200: * description: OK * content: * application/json: * schema: * properties: * discount: * $ref: "#/components/schemas/discount" * "400": * $ref: "#/components/responses/400_error" * "401": * $ref: "#/components/responses/unauthorized" * "404": * $ref: "#/components/responses/not_found_error" * "409": * $ref: "#/components/responses/invalid_state_error" * "422": * $ref: "#/components/responses/invalid_request_error" * "500": * $ref: "#/components/responses/500_error" */ declare const _default: (req: Request, res: Response) => Promise; export default _default; export declare class AdminPostDiscountsDiscountReq { code?: string; rule?: AdminUpdateDiscountRule; is_disabled?: boolean; starts_at?: Date; ends_at?: Date | null; valid_duration?: string | null; usage_limit?: number | null; regions?: string[]; metadata?: Record; } export declare class AdminUpdateDiscountRule { id: string; description?: string; value?: number; allocation?: AllocationType; conditions?: AdminUpsertCondition[]; } export declare class AdminUpsertCondition extends AdminUpsertConditionsReq { id?: string; operator: DiscountConditionOperator; } export declare class AdminPostDiscountsDiscountParams extends FindParams { }