쿼리 라이브러리
쿼리 라이브러리LemonSqueezy에서 AppSumo용 할인 코드를 수천 개 생성하기

LemonSqueezy에서 AppSumo용 할인 코드를 수천 개 생성하기

이 쿼리는 LemonSqueezy API에 연결하여 한 번에 100개의 100% 할인 코드를 생성합니다.

AppSumo 캠페인에 필요한 10,000개의 코드를 생성하려면 이 쿼리를 여러 번 실행하세요.

다음 정보를 제공해야 합니다:

  • Lemon Squeezy API에 연결하기 위한 액세스 토큰 (변수 $lemonSqueezyAccessToken 사용)
  • Lemon Squeezy 스토어 (변수 $storeID 사용)
  • 해당 코드로 교환할 제품 (변수 $variantIDs 사용)

생성되는 할인 코드는 무작위 문자열입니다. 코드에 접두사를 추가하거나 (변수 $codePrefix), 코드 길이를 지정하거나 (변수 $codeLength), 할인 코드의 이름을 커스터마이즈하여 (변수 $discountNamePrefix$firstRecordNumber) Lemon Squeezy 대시보드에서 쉽게 검색할 수 있습니다.

$postId를 지정하면 새로 생성된 모든 할인 코드가 수집되어 해당 게시물의 끝에 추가됩니다.

query ExportLemonSqueezyAPIData(
  $lemonSqueezyAccessToken: String!,
  $variantIDs: [String!]!,
  $postId: ID,
) {
  bearerToken: _sprintf(
    string: "Bearer %s",
    values: [$lemonSqueezyAccessToken]
  )
    @remove
 
  lemonSqueezyAPIHeaders: _echo(value: [
    {
      name: "Accept",
      value: "application/vnd.api+json"
    },
    {
      name: "Content-Type",
      value: "application/vnd.api+json"
    },
    {
      name: "Authorization",
      value: $__bearerToken
    }
  ])
    @export(as: "lemonSqueezyAPIHeaders")
    @remove
 
  variants: _echo(value: $variantIDs)
    @underEachArrayItem(
      passValueOnwardsAs: "variantID"
    )
      @applyField(
        name: "_echo",
        arguments: {
          value: {
            type: "variants",
            id: $variantID,
          }
        }
        setResultInResponse: true
      )
    @export(as: "variants")
 
  hasPostId: _notEmpty(value: $postId)
    @export(as: "hasPostId")
}
 
query CreateMutationInputs(
  $storeID: String!,
  $discountNamePrefix: String! = "AppSumo campaign",
  $codePrefix: String! = "",
  $numberCodes: Int! = 100,
  $codeLength: Int! = 16,
  $firstRecordNumber: Int! = 1,
  $isTestMode: Boolean! = false,
)
  @depends(on: "ExportLemonSqueezyAPIData")
{
  mutationInputs: _arrayPad(array: [], length: $numberCodes, value: null)
    @underEachArrayItem(
      passIndexOnwardsAs: "key"
      affectDirectivesUnderPos: [1, 2, 3, 4, 5]
    )
      @applyField(
        name: "_generateRandomString",
        arguments: {
          length: $codeLength,
          characters: "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",
        },
        passOnwardsAs: "randomCode"
      )
      @applyField(
        name: "_strAppend",
        arguments: {
          after: $codePrefix,
          append: $randomCode,
        },
        passOnwardsAs: "discountCode"
      )
      @applyField(
        name: "_intAdd",
        arguments: {
          add: $key,
          to: $firstRecordNumber,
        },
        passOnwardsAs: "recordNumber"
      )
      @applyField(
        name: "_sprintf",
        arguments: {
          string: "%s #%s",
          values: [$discountNamePrefix, $recordNumber],
        },
        passOnwardsAs: "discountName"
      )
      @applyField(
        name: "_echo",
        arguments: {
          value: {
            url: "https://api.lemonsqueezy.com/v1/discounts",
            method: POST,
            options: {
              headers: $lemonSqueezyAPIHeaders
              json: {
                data: {
                  type: "discounts",
                  attributes: {
                    name: $discountName,
                    code: $discountCode,
                    amount: 100,
                    amount_type: "percent",
                    is_limited_to_products: true,
                    is_limited_redemptions: true,
                    max_redemptions: 1,
                    test_mode: $isTestMode,
                  },
                  relationships: {
                    store: {
                      data: {
                        type: "stores",
                        id: $storeID,
                      }
                    },
                    variants: {
                      data: $variants
                    }
                  }
                }
              }
            }
          }
        },
        setResultInResponse: true
      )
    @export(as: "mutationInputs")
    @remove
}
 
query CreateDiscountCodesInLemonSqueezy
  @depends(on: "CreateMutationInputs")
{
  createDiscountCodesInLemonSqueezy: _sendJSONObjectItemHTTPRequests(inputs: $mutationInputs)
    @underEachArrayItem
      @underJSONObjectProperty(by: { path: "data.attributes.code" })
        @export(as: "discountCodes")
}
 
query PrintDiscountCodesFromLemonSqueezy
  @depends(on: "CreateDiscountCodesInLemonSqueezy")
{
  discountCodes: _echo(value: $discountCodes)
}
 
query GetPostWithDiscountCodes($postId: ID)
  @depends(on: "CreateDiscountCodesInLemonSqueezy")
  @include(if: $hasPostId)
{
  post(by: { id: $postId }, status: any) {
    title
    postContent: rawContent
 
    discountCodesAsContent: _arrayJoin(
      array: $discountCodes,
      separator: "\n"
    )
    updatedPostContent: _sprintf(
      string: "%s\n%s"
      values: [$__postContent, $__discountCodesAsContent]
    )
      @export(as: "updatedPostContent")
  }
}
 
mutation UpdatePostWithDiscountCodes($postId: ID)
  @depends(on: "GetPostWithDiscountCodes")
  @include(if: $hasPostId)
{
  updatePost(input: {
    id: $postId,
    contentAs: { html: $updatedPostContent },
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    post {
      title
      rawContent
    }
  }
}