defmodule Stripe.PromotionCode do use Stripe.Entity @moduledoc "A Promotion Code represents a customer-redeemable code for a [coupon](https://stripe.com/docs/api#coupons). It can be used to\ncreate multiple codes for a single coupon." ( defstruct [ :active, :code, :coupon, :created, :customer, :expires_at, :id, :livemode, :max_redemptions, :metadata, :object, :restrictions, :times_redeemed ] @typedoc "The `promotion_code` type.\n\n * `active` Whether the promotion code is currently active. A promotion code is only active if the coupon is also valid.\n * `code` The customer-facing code. Regardless of case, this code must be unique across all active promotion codes for each customer.\n * `coupon` \n * `created` Time at which the object was created. Measured in seconds since the Unix epoch.\n * `customer` The customer that this promotion code can be used by.\n * `expires_at` Date at which the promotion code can no longer be redeemed.\n * `id` Unique identifier for the object.\n * `livemode` Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode.\n * `max_redemptions` Maximum number of times this promotion code can be redeemed.\n * `metadata` Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format.\n * `object` String representing the object's type. Objects of the same type share the same value.\n * `restrictions` \n * `times_redeemed` Number of times this promotion code has been used.\n" @type t :: %__MODULE__{ active: boolean, code: binary, coupon: Stripe.Coupon.t(), created: integer, customer: (binary | Stripe.Customer.t() | Stripe.DeletedCustomer.t()) | nil, expires_at: integer | nil, id: binary, livemode: boolean, max_redemptions: integer | nil, metadata: term | nil, object: binary, restrictions: term, times_redeemed: integer } ) ( @typedoc nil @type created :: %{ optional(:gt) => integer, optional(:gte) => integer, optional(:lt) => integer, optional(:lte) => integer } ) ( @typedoc "Settings that restrict the redemption of the promotion code." @type restrictions :: %{ optional(:currency_options) => map(), optional(:first_time_transaction) => boolean, optional(:minimum_amount) => integer, optional(:minimum_amount_currency) => binary } ) ( nil @doc "
Retrieves the promotion code with the given ID. In order to retrieve a promotion code by the customer-facing code use list with the desired code.
A promotion code points to a coupon. You can optionally restrict the code to a specific customer, redemption limit, and expiration date.
\n\n#### Details\n\n * Method: `post`\n * Path: `/v1/promotion_codes`\n" ( @spec create( params :: %{ optional(:active) => boolean, optional(:code) => binary, optional(:coupon) => binary, optional(:customer) => binary, optional(:expand) => list(binary), optional(:expires_at) => integer, optional(:max_redemptions) => integer, optional(:metadata) => %{optional(binary) => binary}, optional(:restrictions) => restrictions }, opts :: Keyword.t() ) :: {:ok, Stripe.PromotionCode.t()} | {:error, Stripe.ApiErrors.t()} | {:error, term()} def create(params \\ %{}, opts \\ []) do path = Stripe.OpenApi.Path.replace_path_params("/v1/promotion_codes", [], []) Stripe.Request.new_request(opts) |> Stripe.Request.put_endpoint(path) |> Stripe.Request.put_params(params) |> Stripe.Request.put_method(:post) |> Stripe.Request.make_request() end ) ) ( nil @doc "Updates the specified promotion code by setting the values of the parameters passed. Most fields are, by design, not editable.
\n\n#### Details\n\n * Method: `post`\n * Path: `/v1/promotion_codes/{promotion_code}`\n" ( @spec update( promotion_code :: binary(), params :: %{ optional(:active) => boolean, optional(:expand) => list(binary), optional(:metadata) => %{optional(binary) => binary} | binary, optional(:restrictions) => restrictions }, opts :: Keyword.t() ) :: {:ok, Stripe.PromotionCode.t()} | {:error, Stripe.ApiErrors.t()} | {:error, term()} def update(promotion_code, params \\ %{}, opts \\ []) do path = Stripe.OpenApi.Path.replace_path_params( "/v1/promotion_codes/{promotion_code}", [ %OpenApiGen.Blueprint.Parameter{ in: "path", name: "promotion_code", required: true, schema: %OpenApiGen.Blueprint.Parameter.Schema{ name: "promotion_code", title: nil, type: "string", items: [], properties: [], any_of: [] } } ], [promotion_code] ) Stripe.Request.new_request(opts) |> Stripe.Request.put_endpoint(path) |> Stripe.Request.put_params(params) |> Stripe.Request.put_method(:post) |> Stripe.Request.make_request() end ) ) ( nil @doc "Returns a list of your promotion codes.
\n\n#### Details\n\n * Method: `get`\n * Path: `/v1/promotion_codes`\n" ( @spec list( params :: %{ optional(:active) => boolean, optional(:code) => binary, optional(:coupon) => binary, optional(:created) => created | integer, optional(:customer) => binary, optional(:ending_before) => binary, optional(:expand) => list(binary), optional(:limit) => integer, optional(:starting_after) => binary }, opts :: Keyword.t() ) :: {:ok, Stripe.List.t(Stripe.PromotionCode.t())} | {:error, Stripe.ApiErrors.t()} | {:error, term()} def list(params \\ %{}, opts \\ []) do path = Stripe.OpenApi.Path.replace_path_params("/v1/promotion_codes", [], []) Stripe.Request.new_request(opts) |> Stripe.Request.put_endpoint(path) |> Stripe.Request.put_params(params) |> Stripe.Request.put_method(:get) |> Stripe.Request.make_request() end ) ) end