diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8d090e3..36ae9c0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,14 +13,19 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - java: [ '13' ] - scala: [ '2.13.6' ] + java: [ '17' ] + scala: [ '2.13.16' ] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set up JDK - uses: actions/setup-java@v2 + uses: actions/setup-java@v4 with: - java-version: ${{ matrix.java }} - distribution: 'zulu' + distribution: temurin + java-version: ${{matrix.java}} + cache: sbt + - name: print Java version + run: java -version + - name: Setup sbt launcher + uses: sbt/setup-sbt@v1 - name: Run tests run: sbt ++${{ matrix.scala }} clean test diff --git a/build.sbt b/build.sbt index 3050549..1850db7 100644 --- a/build.sbt +++ b/build.sbt @@ -1,8 +1,9 @@ + name := "apibuilder-graphql" organization := "io.apibuilder" -ThisBuild / scalaVersion := "2.13.6" +ThisBuild / scalaVersion := "2.13.16" lazy val allScalacOptions = Seq( "-deprecation", @@ -19,6 +20,7 @@ lazy val resolversSettings = Seq( resolvers += "Typesafe repository" at "https://repo.typesafe.com/typesafe/releases/", resolvers += "scalaz-bintray" at "https://dl.bintray.com/scalaz/releases", resolvers += "Artifactory" at "https://flow.jfrog.io/flow/libs-release/", + resolvers += "jitpack" at "https://jitpack.io", credentials += Credentials( "Artifactory Realm", "flow.jfrog.io", @@ -32,9 +34,9 @@ lazy val root = project .settings(resolversSettings) .settings( libraryDependencies ++= Seq( - "io.apibuilder" %% "apibuilder-validation" % "0.4.28", - "org.typelevel" %% "cats-core" % "2.1.1", - "org.scalatest" %% "scalatest" % "3.2.9" % Test, + "com.github.apicollective" %% "apibuilder-validation" % "0.5.8", + "org.typelevel" %% "cats-core" % "2.10.0", + "org.scalatest" %% "scalatest" % "3.2.19" % Test, ), testOptions += Tests.Argument("-oF"), scalacOptions ++= allScalacOptions, diff --git a/src/main/scala/io/apibuilder/graphql/GraphQLOperation.scala b/src/main/scala/io/apibuilder/graphql/GraphQLOperation.scala index bc60763..4fff1a4 100644 --- a/src/main/scala/io/apibuilder/graphql/GraphQLOperation.scala +++ b/src/main/scala/io/apibuilder/graphql/GraphQLOperation.scala @@ -110,7 +110,7 @@ object GraphQLOperation { } def all(ms: MultiService, intent: GraphQLIntent): Seq[GraphQLOperation] = { - ms.services().flatMap { service => + ms.services.flatMap { service => service.service.resources.flatMap { resource => resource.operations.flatMap { operation => GraphQLAttribute.fromOperation(operation).toSeq.flatMap { attribute => diff --git a/src/main/scala/io/apibuilder/graphql/generators/metadata/ApiBuilderTypeMetadataGenerator.scala b/src/main/scala/io/apibuilder/graphql/generators/metadata/ApiBuilderTypeMetadataGenerator.scala index 6cf2756..0b8a682 100644 --- a/src/main/scala/io/apibuilder/graphql/generators/metadata/ApiBuilderTypeMetadataGenerator.scala +++ b/src/main/scala/io/apibuilder/graphql/generators/metadata/ApiBuilderTypeMetadataGenerator.scala @@ -37,11 +37,11 @@ object ApiBuilderTypeMetadataGenerator { } } - private[this] def generate(enum: GraphQLType.Enum): String = { + private[this] def generate(`enum`: GraphQLType.Enum): String = { Seq( - s"new EnumData(${Text.wrapInQuotes(enum.name)}, [", + s"new EnumData(${Text.wrapInQuotes(`enum`.name)}, [", Text.indent( - enum.apiBuilderEnum.`enum`.values.map { v => + `enum`.apiBuilderEnum.`enum`.values.map { v => val serverName = v.value.getOrElse(v.name) val graphQLName = Text.allCaps(serverName) s"new EnumValue(${Text.wrapInQuotes(graphQLName)}, ${Text.wrapInQuotes(serverName)})" diff --git a/src/main/scala/io/apibuilder/graphql/generators/query/GraphQLQueryMutationTypeGenerator.scala b/src/main/scala/io/apibuilder/graphql/generators/query/GraphQLQueryMutationTypeGenerator.scala index 270500d..bdc4c32 100644 --- a/src/main/scala/io/apibuilder/graphql/generators/query/GraphQLQueryMutationTypeGenerator.scala +++ b/src/main/scala/io/apibuilder/graphql/generators/query/GraphQLQueryMutationTypeGenerator.scala @@ -126,6 +126,7 @@ case class GraphQLQueryMutationTypeGenerator(multiService: MultiService) extends } case _: ApiBuilderType.Model => unsupportedError case _: ApiBuilderType.Union => unsupportedError + case _: ApiBuilderType.Interface => unsupportedError case _: ApiBuilderType.Enum => Text.allCaps(d) } } diff --git a/src/main/scala/io/apibuilder/graphql/generators/resolver/EnumResolverGenerator.scala b/src/main/scala/io/apibuilder/graphql/generators/resolver/EnumResolverGenerator.scala index 440de9a..ecb8fe7 100644 --- a/src/main/scala/io/apibuilder/graphql/generators/resolver/EnumResolverGenerator.scala +++ b/src/main/scala/io/apibuilder/graphql/generators/resolver/EnumResolverGenerator.scala @@ -5,9 +5,9 @@ import io.apibuilder.validation.ApiBuilderType case class EnumResolverGenerator() extends ResolverHelpers { - def generate(enum: ApiBuilderType.Enum): String = { + def generate(`enum`: ApiBuilderType.Enum): String = { // TODO: Should we encapsulate formatting along with enum generator class? - generateResolver(enum)( + generateResolver(`enum`)( enum.`enum`.values.map { v => val wireValue = v.value.getOrElse(v.name) val graphQLValue = Text.allCaps(wireValue) diff --git a/src/main/scala/io/apibuilder/graphql/generators/schema/ApiBuilderTypeToGraphQLConverter.scala b/src/main/scala/io/apibuilder/graphql/generators/schema/ApiBuilderTypeToGraphQLConverter.scala index 56eea16..1b62d12 100644 --- a/src/main/scala/io/apibuilder/graphql/generators/schema/ApiBuilderTypeToGraphQLConverter.scala +++ b/src/main/scala/io/apibuilder/graphql/generators/schema/ApiBuilderTypeToGraphQLConverter.scala @@ -64,6 +64,9 @@ case class ApiBuilderTypeToGraphQLConverter( case v: ApiBuilderType.Union => trace("union", v.name); withNamespace(v) { converter => unionGenerator.generate(converter, v) } + case v: ApiBuilderType.Interface => trace("interface", v.name); withNamespace(v) { converter => + modelGenerator.generate(converter, v) + } } } diff --git a/src/main/scala/io/apibuilder/graphql/generators/schema/ModelGenerator.scala b/src/main/scala/io/apibuilder/graphql/generators/schema/ModelGenerator.scala index 0872792..fd6022a 100644 --- a/src/main/scala/io/apibuilder/graphql/generators/schema/ModelGenerator.scala +++ b/src/main/scala/io/apibuilder/graphql/generators/schema/ModelGenerator.scala @@ -3,17 +3,36 @@ package io.apibuilder.graphql.generators.schema import io.apibuilder.graphql.schema.{GraphQLIntent, GraphQLType, GraphQLTypeField} import io.apibuilder.validation.{ApiBuilderField, ApiBuilderType, ScalarType} +object ModelGenerator { + case class Container(typ: String, qualified: String) + + object Container { + def apply(m: ApiBuilderType.Model): Container = Container("Model", m.qualified) + def apply(i: ApiBuilderType.Interface): Container = Container("Interface", i.qualified) + } +} + case class ModelGenerator() { + import ModelGenerator.Container def generate(converter: ApiBuilderTypeToGraphQLConverter, model: ApiBuilderType.Model): GraphQLType = { - val fields = model.fields.map { f => generateField(converter, f) } + val fields = model.fields.map { f => generateField(converter, f)(Container(model)) } converter.intent match { case GraphQLIntent.Query => GraphQLType.Type(model, fields) case GraphQLIntent.Mutation => GraphQLType.Input(model, fields) } } - private[this] def generateField(converter: ApiBuilderTypeToGraphQLConverter, field: ApiBuilderField): GraphQLTypeField = { + // Treat same as model based on ApiBuilderType.Interface.typeDiscriminator returning TypeDiscriminator.Models + def generate(converter: ApiBuilderTypeToGraphQLConverter, interface: ApiBuilderType.Interface): GraphQLType = { + val fields = interface.fields.map { f => generateField(converter, f)(Container(interface)) } + converter.intent match { + case GraphQLIntent.Query => GraphQLType.Type(interface, fields) + case GraphQLIntent.Mutation => GraphQLType.Input(interface, fields) + } + } + + private def generateField(converter: ApiBuilderTypeToGraphQLConverter, field: ApiBuilderField)(implicit container: Container): GraphQLTypeField = { GraphQLTypeField( originalName = field.field.name, declaration = fieldTypeDeclaration(converter, field), @@ -22,7 +41,7 @@ case class ModelGenerator() { ) } - private[this] def fieldTypeDeclaration(types: ApiBuilderTypeToGraphQLConverter, field: ApiBuilderField): String = { + private def fieldTypeDeclaration(types: ApiBuilderTypeToGraphQLConverter, field: ApiBuilderField)(implicit container: Container): String = { val f = field.field (f.name, f.`type`, f.required) match { case ("id", ScalarType.StringType.name, true) => "ID" @@ -30,7 +49,7 @@ case class ModelGenerator() { } } - private[this] def description(field: ApiBuilderField): String = { - s"Model '${field.model.qualified}' field '${field.field.name}'" + private def description(field: ApiBuilderField)(implicit container: Container): String = { + s"${container.typ} '${container.qualified}' field '${field.field.name}'" } } diff --git a/src/main/scala/io/apibuilder/graphql/util/AppendInputSuffixRewriter.scala b/src/main/scala/io/apibuilder/graphql/util/AppendInputSuffixRewriter.scala index d2aefcc..963eac9 100644 --- a/src/main/scala/io/apibuilder/graphql/util/AppendInputSuffixRewriter.scala +++ b/src/main/scala/io/apibuilder/graphql/util/AppendInputSuffixRewriter.scala @@ -12,6 +12,7 @@ object AppendInputSuffixRewriter extends MultiServiceRewriter { case t: ApiBuilderType.Enum => t case t: ApiBuilderType.Model => addSuffix(t) case t: ApiBuilderType.Union => addSuffix(t) + case t: ApiBuilderType.Interface => addSuffix(t) }.rewrite(multiService) } diff --git a/src/main/scala/io/apibuilder/graphql/util/MultiServiceView.scala b/src/main/scala/io/apibuilder/graphql/util/MultiServiceView.scala index 3dc354d..d6a1609 100644 --- a/src/main/scala/io/apibuilder/graphql/util/MultiServiceView.scala +++ b/src/main/scala/io/apibuilder/graphql/util/MultiServiceView.scala @@ -1,9 +1,9 @@ package io.apibuilder.graphql.util import apibuilder.ApiBuilderHelper -import io.apibuilder.rewriter._ -import io.apibuilder.graphql.schema.GraphQLIntent import io.apibuilder.graphql.GraphQLAttribute +import io.apibuilder.graphql.schema.GraphQLIntent +import io.apibuilder.rewriter._ import io.apibuilder.spec.v0.models.{Operation, Response} import io.apibuilder.validation.MultiService @@ -41,6 +41,7 @@ case class MultiServiceView(multiService: MultiService) { all.headOption.toSeq }, UnionTypesMustBeModelsRewriter, + InterfaceTypesRewriter, RenameTypesByAttributeRewriter(intent), ReduceTypesRewriter(intent), ) diff --git a/src/main/scala/io/apibuilder/graphql/util/RenameTypesByAttributeRewriter.scala b/src/main/scala/io/apibuilder/graphql/util/RenameTypesByAttributeRewriter.scala index c4a5ac2..7cd5847 100644 --- a/src/main/scala/io/apibuilder/graphql/util/RenameTypesByAttributeRewriter.scala +++ b/src/main/scala/io/apibuilder/graphql/util/RenameTypesByAttributeRewriter.scala @@ -17,6 +17,7 @@ case class RenameTypesByAttributeRewriter(intent: GraphQLIntent) extends MultiSe case e: ApiBuilderType.Enum => name(e.`enum`.attributes) case e: ApiBuilderType.Model => name(e.model.attributes) case e: ApiBuilderType.Union => name(e.union.attributes) + case e: ApiBuilderType.Interface => name(e.interface.attributes) } } diff --git a/src/test/resources/examples/flow/resolvers.ts b/src/test/resources/examples/flow/resolvers.ts index 025d448..bfec322 100644 --- a/src/test/resources/examples/flow/resolvers.ts +++ b/src/test/resources/examples/flow/resolvers.ts @@ -8,9 +8,6 @@ export default { b2bInvoices: (_: any, { organization, id, key, orderNumber, limit, offset, sort }: { organization: string, id: any, key: string, orderNumber: string, limit: number, offset: number, sort: string }, { dataSources }: { dataSources: any }) => dataSources.api.get(`/${organization}/b2b/invoices`, { id, key, order_number: orderNumber, limit, offset, sort }), - checkout: (_: any, { id }: { id: string }, { dataSources }: { dataSources: any }) => - dataSources.api.get(`/v2/checkouts/${id}`), - consumerInvoices: (_: any, { organization, id, key, orderNumber, limit, offset, sort }: { organization: string, id: any, key: string, orderNumber: string, limit: number, offset: number, sort: string }, { dataSources }: { dataSources: any }) => dataSources.api.get(`/${organization}/consumer/invoices`, { id, key, order_number: orderNumber, limit, offset, sort }), @@ -20,8 +17,8 @@ export default { orderSummary: (_: any, { organization, number }: { organization: string, number: string }, { dataSources }: { dataSources: any }) => dataSources.api.get(`/${organization}/order/summaries/${number}`), - organizations: (_: any, { id, name, environment, parent, limit, offset, sort }: { id: any, name: string, environment: any, parent: string, limit: number, offset: number, sort: string }, { dataSources }: { dataSources: any }) => - dataSources.api.get("/organizations", { id, name, environment: inputMapper("Environment", environment), parent, limit, offset, sort }), + organizations: (_: any, { id, channelId, name, environment, parent, inChannel, limit, offset, sort }: { id: any, channelId: string, name: string, environment: any, parent: string, inChannel: boolean, limit: number, offset: number, sort: string }, { dataSources }: { dataSources: any }) => + dataSources.api.get("/organizations", { id, channel_id: channelId, name, environment: inputMapper("Environment", environment), parent, in_channel: inChannel, limit, offset, sort }), organization: (_: any, { organizationId }: { organizationId: string }, { dataSources }: { dataSources: any }) => dataSources.api.get(`/organizations/${organizationId}`), @@ -31,7 +28,6 @@ export default { }, Mutation: { - checkout: () => ({}), // CheckoutMutations organization: () => ({}) // OrganizationMutations }, @@ -40,11 +36,6 @@ export default { INVOICE: "invoice" }, - CheckoutMutations: { - createBySessionId: (_: any, { sessionId }: { sessionId: string }, { dataSources }: { dataSources: any }) => - dataSources.api.post(`/v2/checkouts/session/${sessionId}`, {}) - }, - ConsumerInvoiceCustomerType: { BUSINESS_EU_VERIFIED: "business_eu_verified", BUSINESS_NON_VERIFIED: "business_non_verified", @@ -93,6 +84,12 @@ export default { DESTINATION: "destination" }, + EntityIdentifierType: { + IOSS: "ioss", + VOEC: "voec", + ZAZ: "zaz" + }, + Environment: { SANDBOX: "sandbox", PRODUCTION: "production" @@ -112,7 +109,13 @@ export default { OrganizationStatus: { ACTIVE: "active", INACTIVE: "inactive", - DEACTIVATED: "deactivated" + DEACTIVATED: "deactivated", + PROVISIONED: "provisioned" + }, + + OrganizationType: { + STANDALONE: "standalone", + CHANNEL: "channel" }, TaxVerificationResult: { diff --git a/src/test/resources/examples/flow/schema.graphql b/src/test/resources/examples/flow/schema.graphql index a73a1df..f914051 100644 --- a/src/test/resources/examples/flow/schema.graphql +++ b/src/test/resources/examples/flow/schema.graphql @@ -9,11 +9,6 @@ type Query { # Response 200 [b2b_invoice] b2bInvoices(organization: String!, id: [String!], key: String, orderNumber: String, limit: Long! = 25, offset: Long! = 0, sort: String! = "-created_at"): [B2bInvoice!] - # Resource io.flow.checkout.backend.v0.models.checkout - # Operation 'GET /v2/checkouts/:id' response '200' - # Response 200 io.flow.checkout.backend.v0.models.checkout - checkout(id: String!): Checkout - # Resource io.flow.consumer.invoice.v0.models.consumer_invoice # Operation 'GET /:organization/consumer/invoices' response '200' # Response 200 [consumer_invoice] @@ -32,7 +27,7 @@ type Query { # Resource io.flow.common.v0.models.organization # Operation 'GET /organizations' response '200' # Response 200 [io.flow.common.v0.models.organization] - organizations(id: [String!], name: String, environment: Environment, parent: String, limit: Long! = 25, offset: Long! = 0, sort: String! = "name"): [Organization!] + organizations(id: [String!], channelId: String, name: String, environment: Environment, parent: String, inChannel: Boolean, limit: Long! = 25, offset: Long! = 0, sort: String! = "id"): [Organization!] # Resource io.flow.common.v0.models.organization # Operation 'GET /organizations/:organization_id' response '200' @@ -46,18 +41,9 @@ type Query { } type Mutation { - checkout: CheckoutMutations - organization: OrganizationMutations } -type CheckoutMutations { - # Resource io.flow.checkout.backend.v0.models.checkout_input - # Operation 'POST /v2/checkouts/session/:session_id' response '201' - # Response 201 io.flow.checkout.backend.v0.models.checkout_input - createBySessionId(sessionId: String!): Checkout -} - type OrganizationMutations { # Resource io.flow.common.v0.models.organization_input # Operation 'POST /organizations' response '201' @@ -91,11 +77,25 @@ scalar Object scalar Unit +# io.flow.common.v0.enums.organization_type +enum OrganizationType { + STANDALONE + CHANNEL +} + +# io.flow.common.v0.enums.entity_identifier_type +enum EntityIdentifierType { + IOSS + VOEC + ZAZ +} + # io.flow.common.v0.enums.organization_status enum OrganizationStatus { ACTIVE INACTIVE DEACTIVATED + PROVISIONED } # io.flow.common.v0.enums.environment @@ -110,9 +110,11 @@ enum B2bInvoiceType { INVOICE } -# io.flow.consumer.invoice.v0.enums.consumer_invoice_document_type -enum ConsumerInvoiceDocumentType { - PDF +# io.flow.consumer.invoice.v0.enums.consumer_invoice_customer_type +enum ConsumerInvoiceCustomerType { + BUSINESS_EU_VERIFIED + BUSINESS_NON_VERIFIED + INDIVIDUAL } # io.flow.consumer.invoice.v0.enums.consumer_invoice_status @@ -122,11 +124,9 @@ enum ConsumerInvoiceStatus { INVALID } -# io.flow.consumer.invoice.v0.enums.consumer_invoice_customer_type -enum ConsumerInvoiceCustomerType { - BUSINESS_EU_VERIFIED - BUSINESS_NON_VERIFIED - INDIVIDUAL +# io.flow.consumer.invoice.v0.enums.consumer_invoice_document_type +enum ConsumerInvoiceDocumentType { + PDF } # io.flow.harmonization.v0.enums.tax_verification_result @@ -143,17 +143,48 @@ enum EconomicTitleLocation { DESTINATION } -# io.flow.common.v0.models.name -type Name { - first: String - last: String +# io.flow.common.v0.models.merchant_of_record_entity +type MerchantOfRecordEntity { + organization: OrganizationReference! + name: String! + vat: MerchantOfRecordEntityRegistration + identifiers: [EntityIdentifier!] + streets: [String!]! + city: String! + province: String + postal: String + country: String! + phone: String + email: String } -# io.flow.common.v0.models.price -type Price { - amount: Float! - currency: String! - label: String! +# io.flow.common.v0.models.billing_address +type BillingAddress { + name: Name + streets: [String!] + city: String + province: String + postal: String + country: String + company: String +} + +# io.flow.common.v0.models.address +type Address { + text: String + streets: [String!] + streetNumber: String + city: String + province: String + postal: String + country: String + latitude: String + longitude: String +} + +# io.flow.common.v0.models.item_reference +type ItemReference { + number: String! } # io.flow.common.v0.models.organization @@ -165,20 +196,14 @@ type Organization { defaults: OrganizationDefaults createdAt: DateTimeIso8601 status: OrganizationStatus + type: OrganizationType } -# io.flow.common.v0.models.merchant_of_record_entity -type MerchantOfRecordEntity { - organization: OrganizationReference! - name: String! - vat: MerchantOfRecordEntityRegistration! - streets: [String!]! - city: String! - province: String - postal: String - country: String! - phone: String - email: String +# io.flow.common.v0.models.entity_identifier +type EntityIdentifier { + name: EntityIdentifierType! + number: String! + issuingCountry: String } # io.flow.common.v0.models.merchant_of_record_entity_registration @@ -187,19 +212,23 @@ type MerchantOfRecordEntityRegistration { country: String! } -# io.flow.common.v0.models.contact -type Contact { - name: Name! - company: String - email: String - phone: String -} - # io.flow.common.v0.models.organization_reference type OrganizationReference { id: ID! } +# io.flow.common.v0.models.name +type Name { + first: String + last: String +} + +# io.flow.common.v0.models.money +type Money { + amount: Float! + currency: String! +} + # io.flow.common.v0.models.organization_defaults type OrganizationDefaults { country: String! @@ -209,39 +238,56 @@ type OrganizationDefaults { timezone: String! } -# io.flow.common.v0.models.item_reference -type ItemReference { - number: String! +# io.flow.common.v0.models.contact +type Contact { + name: Name! + company: String + email: String + phone: String } -# io.flow.common.v0.models.money -type Money { +# io.flow.common.v0.models.price +type Price { amount: Float! currency: String! + label: String! } -# io.flow.common.v0.models.billing_address -type BillingAddress { - name: Name - streets: [String!] - city: String - province: String - postal: String - country: String - company: String +# io.flow.consumer.invoice.v0.models.b2b_invoice +type B2bInvoice { + id: ID! + number: String! + buyer: MerchantOfRecordEntity! + seller: MerchantOfRecordEntity! + status: ConsumerInvoiceStatus! + date: DateTimeIso8601! + key: String! + order: ConsumerInvoiceOrderSummary! + economicTitleLocation: EconomicTitleLocation! + center: ConsumerInvoiceCenterReference + destination: OrderAddress + tax: Money! + lines: [ConsumerInvoiceLine!]! + documents: [ConsumerInvoiceDocument!]! + attributes: Object! + estimatedDeliveryDate: DateTimeIso8601 + b2bInvoiceType: B2bInvoiceType! } -# io.flow.common.v0.models.address -type Address { - text: String - streets: [String!] - streetNumber: String - city: String - province: String - postal: String - country: String - latitude: String - longitude: String +# io.flow.consumer.invoice.v0.models.credit_memo +type CreditMemo { + id: ID! + number: String + status: ConsumerInvoiceStatus! + date: DateTimeIso8601! + key: String! + invoice: ConsumerInvoiceReference! + entity: MerchantOfRecordEntity! + payments: [ConsumerInvoicePayment!]! + lines: [ConsumerInvoiceLine!]! + documents: [ConsumerInvoiceDocument!]! + attributes: Object! + taxRegistration: TaxRegistration } # io.flow.consumer.invoice.v0.models.consumer_invoice_line_item @@ -255,11 +301,20 @@ type ConsumerInvoiceLineItem { unitDuty: ConsumerInvoiceLevy } -# io.flow.consumer.invoice.v0.models.consumer_invoice_order_summary -type ConsumerInvoiceOrderSummary { +# io.flow.consumer.invoice.v0.models.b2b_credit_memo +type B2bCreditMemo { id: ID! number: String! - submittedAt: DateTimeIso8601! + buyer: MerchantOfRecordEntity! + seller: MerchantOfRecordEntity! + status: ConsumerInvoiceStatus! + date: DateTimeIso8601! + key: String! + invoice: B2bInvoiceReference! + lines: [ConsumerInvoiceLine!]! + documents: [ConsumerInvoiceDocument!]! + attributes: Object! + b2bInvoiceType: B2bInvoiceType! } # io.flow.consumer.invoice.v0.models.consumer_invoice @@ -283,47 +338,19 @@ type ConsumerInvoice { estimatedDeliveryDate: DateTimeIso8601 } -# io.flow.consumer.invoice.v0.models.b2b_invoice -type B2bInvoice { - id: ID! - number: String! - buyer: MerchantOfRecordEntity! - seller: MerchantOfRecordEntity! - status: ConsumerInvoiceStatus! - date: DateTimeIso8601! - key: String! - order: ConsumerInvoiceOrderSummary! - economicTitleLocation: EconomicTitleLocation! - center: ConsumerInvoiceCenterReference - destination: OrderAddress - tax: Money! - lines: [ConsumerInvoiceLine!]! - documents: [ConsumerInvoiceDocument!]! - attributes: Object! - estimatedDeliveryDate: DateTimeIso8601 - b2bInvoiceType: B2bInvoiceType! -} - -# io.flow.consumer.invoice.v0.models.consumer_invoice_levy -type ConsumerInvoiceLevy { - rate: Decimal! - value: Price! +# io.flow.consumer.invoice.v0.models.consumer_invoice_document +type ConsumerInvoiceDocument { + type: ConsumerInvoiceDocumentType! + language: String! + url: String! } -# io.flow.consumer.invoice.v0.models.credit_memo -type CreditMemo { +# io.flow.consumer.invoice.v0.models.consumer_invoice_center_reference +type ConsumerInvoiceCenterReference { id: ID! - number: String - status: ConsumerInvoiceStatus! - date: DateTimeIso8601! key: String! - invoice: ConsumerInvoiceReference! - entity: MerchantOfRecordEntity! - payments: [ConsumerInvoicePayment!]! - lines: [ConsumerInvoiceLine!]! - documents: [ConsumerInvoiceDocument!]! - attributes: Object! - taxRegistration: TaxRegistration + name: String! + address: Address! } # io.flow.consumer.invoice.v0.models.consumer_invoice_reference @@ -333,6 +360,12 @@ type ConsumerInvoiceReference { number: String! } +# io.flow.consumer.invoice.v0.models.consumer_invoice_levy +type ConsumerInvoiceLevy { + rate: Decimal! + value: Price! +} + # io.flow.consumer.invoice.v0.models.consumer_invoice_payment type ConsumerInvoicePayment { date: DateTimeIso8601! @@ -348,9 +381,11 @@ type B2bInvoiceReference { number: String! } -# io.flow.consumer.invoice.v0.models.consumer_invoice_line_discount -type ConsumerInvoiceLineDiscount { - price: Price! +# io.flow.consumer.invoice.v0.models.consumer_invoice_order_summary +type ConsumerInvoiceOrderSummary { + id: ID! + number: String! + submittedAt: DateTimeIso8601! } # io.flow.consumer.invoice.v0.models.consumer_invoice_line_shipping @@ -361,63 +396,9 @@ type ConsumerInvoiceLineShipping { duty: ConsumerInvoiceLevy } -# io.flow.consumer.invoice.v0.models.consumer_invoice_center_reference -type ConsumerInvoiceCenterReference { - id: ID! - key: String! - name: String! - address: Address! -} - -# io.flow.consumer.invoice.v0.models.b2b_credit_memo -type B2bCreditMemo { - id: ID! - number: String! - buyer: MerchantOfRecordEntity! - seller: MerchantOfRecordEntity! - status: ConsumerInvoiceStatus! - date: DateTimeIso8601! - key: String! - invoice: B2bInvoiceReference! - lines: [ConsumerInvoiceLine!]! - documents: [ConsumerInvoiceDocument!]! - attributes: Object! - b2bInvoiceType: B2bInvoiceType! -} - -# io.flow.consumer.invoice.v0.models.consumer_invoice_document -type ConsumerInvoiceDocument { - type: ConsumerInvoiceDocumentType! - language: String! - url: String! -} - -# io.flow.experience.v0.models.order_summary_levy -type OrderSummaryLevy { - rate: Decimal! - rateLabel: String - value: Price! -} - -# io.flow.experience.v0.models.order_summary_price_detail -type OrderSummaryPriceDetail { - price: Price! - name: String - rate: Decimal - rateLabel: String -} - -# io.flow.experience.v0.models.order_summary_line_item -type OrderSummaryLineItem { - id: String - item: OrderSummaryItem! - quantity: Long! - discount: Price - tax: OrderSummaryLevy - duty: OrderSummaryLevy - total: Price! - priceAttributes: Object! - attributes: Object +# io.flow.consumer.invoice.v0.models.consumer_invoice_line_discount +type ConsumerInvoiceLineDiscount { + price: Price! } # io.flow.experience.v0.models.order_address @@ -433,6 +414,18 @@ type OrderAddress { contact: Contact } +# io.flow.experience.v0.models.checkout_item_content_attribute +type CheckoutItemContentAttribute { + key: String! + name: String! + value: String! +} + +# io.flow.experience.v0.models.order_summary_image +type OrderSummaryImage { + url: String! +} + # io.flow.experience.v0.models.order_summary type OrderSummary { number: String! @@ -450,16 +443,12 @@ type OrderSummary { attributes: Object } -# io.flow.experience.v0.models.order_summary_image -type OrderSummaryImage { - url: String! -} - -# io.flow.experience.v0.models.checkout_item_content_attribute -type CheckoutItemContentAttribute { - key: String! - name: String! - value: String! +# io.flow.experience.v0.models.order_summary_price_detail +type OrderSummaryPriceDetail { + price: Price! + name: String + rate: Decimal + rateLabel: String } # io.flow.experience.v0.models.order_summary_item @@ -476,6 +465,26 @@ type OrderSummaryItem { priceAttributes: Object! } +# io.flow.experience.v0.models.order_summary_line_item +type OrderSummaryLineItem { + id: String + item: OrderSummaryItem! + quantity: Long! + discount: Price + tax: OrderSummaryLevy + duty: OrderSummaryLevy + total: Price! + priceAttributes: Object! + attributes: Object +} + +# io.flow.experience.v0.models.order_summary_levy +type OrderSummaryLevy { + rate: Decimal! + rateLabel: String + value: Price! +} + # io.flow.harmonization.v0.models.tax_registration type TaxRegistration { id: ID! @@ -506,6 +515,7 @@ type OrganizationForm { parentId: String defaults: OrganizationDefaults status: OrganizationStatus + type: OrganizationType } # io.flow.payment.v0.models.public_key @@ -513,31 +523,6 @@ type PublicKey { id: ID! } -# io.flow.checkout.backend.v0.models.checkout -type Checkout { - id: ID! - organization: CheckoutOrganizationSummary! - geo: CheckoutGeoParameters! - orderNumber: String - startingSequenceNumber: Long! -} - -# io.flow.checkout.backend.v0.models.checkout_organization_summary -type CheckoutOrganizationSummary { - id: ID! - environment: Environment! -} - -# io.flow.checkout.backend.v0.models.checkout_geo_parameters -type CheckoutGeoParameters { - experienceKey: String! - country: String! - ip: String - currency: String - language: String - locale: String -} - # io.flow.consumer.invoice.v0.unions.consumer_invoice_line union ConsumerInvoiceLine = ConsumerInvoiceLineItem | ConsumerInvoiceLineDiscount | ConsumerInvoiceLineShipping @@ -548,17 +533,48 @@ enum ConsumerInvoiceLineDiscriminator { SHIPPING } -# added automatically from io.flow.common.v0.models.name -input NameInput { - first: String - last: String +# added automatically from io.flow.common.v0.models.merchant_of_record_entity +input MerchantOfRecordEntityInput { + organization: OrganizationReferenceInput! + name: String! + vat: MerchantOfRecordEntityRegistrationInput + identifiers: [EntityIdentifierInput!] + streets: [String!]! + city: String! + province: String + postal: String + country: String! + phone: String + email: String } -# added automatically from io.flow.common.v0.models.price -input PriceInput { - amount: Float! - currency: String! - label: String! +# added automatically from io.flow.common.v0.models.billing_address +input BillingAddressInput { + name: NameInput + streets: [String!] + city: String + province: String + postal: String + country: String + company: String +} + +# added automatically from io.flow.common.v0.models.address +input AddressInput { + text: String + streets: [String!] + streetNumber: String + city: String + province: String + postal: String + country: String + latitude: String + longitude: String +} + +# added automatically from io.flow.common.v0.models.item_reference +input ItemReferenceInput { + number: String! } # added automatically from io.flow.common.v0.models.organization @@ -570,20 +586,14 @@ input OrganizationInput { defaults: OrganizationDefaultsInput createdAt: DateTimeIso8601 status: OrganizationStatus + type: OrganizationType } -# added automatically from io.flow.common.v0.models.merchant_of_record_entity -input MerchantOfRecordEntityInput { - organization: OrganizationReferenceInput! - name: String! - vat: MerchantOfRecordEntityRegistrationInput! - streets: [String!]! - city: String! - province: String - postal: String - country: String! - phone: String - email: String +# added automatically from io.flow.common.v0.models.entity_identifier +input EntityIdentifierInput { + name: EntityIdentifierType! + number: String! + issuingCountry: String } # added automatically from io.flow.common.v0.models.merchant_of_record_entity_registration @@ -592,19 +602,23 @@ input MerchantOfRecordEntityRegistrationInput { country: String! } -# added automatically from io.flow.common.v0.models.contact -input ContactInput { - name: NameInput! - company: String - email: String - phone: String -} - # added automatically from io.flow.common.v0.models.organization_reference input OrganizationReferenceInput { id: ID! } +# added automatically from io.flow.common.v0.models.name +input NameInput { + first: String + last: String +} + +# added automatically from io.flow.common.v0.models.money +input MoneyInput { + amount: Float! + currency: String! +} + # added automatically from io.flow.common.v0.models.organization_defaults input OrganizationDefaultsInput { country: String! @@ -614,39 +628,56 @@ input OrganizationDefaultsInput { timezone: String! } -# added automatically from io.flow.common.v0.models.item_reference -input ItemReferenceInput { - number: String! +# added automatically from io.flow.common.v0.models.contact +input ContactInput { + name: NameInput! + company: String + email: String + phone: String } -# added automatically from io.flow.common.v0.models.money -input MoneyInput { +# added automatically from io.flow.common.v0.models.price +input PriceInput { amount: Float! currency: String! + label: String! } -# added automatically from io.flow.common.v0.models.billing_address -input BillingAddressInput { - name: NameInput - streets: [String!] - city: String - province: String - postal: String - country: String - company: String +# added automatically from io.flow.consumer.invoice.v0.models.b2b_invoice +input B2bInvoiceInput { + id: ID! + number: String! + buyer: MerchantOfRecordEntityInput! + seller: MerchantOfRecordEntityInput! + status: ConsumerInvoiceStatus! + date: DateTimeIso8601! + key: String! + order: ConsumerInvoiceOrderSummaryInput! + economicTitleLocation: EconomicTitleLocation! + center: ConsumerInvoiceCenterReferenceInput + destination: OrderAddressInput + tax: MoneyInput! + lines: [ConsumerInvoiceLineInput!]! + documents: [ConsumerInvoiceDocumentInput!]! + attributes: Object! + estimatedDeliveryDate: DateTimeIso8601 + b2bInvoiceType: B2bInvoiceType! } -# added automatically from io.flow.common.v0.models.address -input AddressInput { - text: String - streets: [String!] - streetNumber: String - city: String - province: String - postal: String - country: String - latitude: String - longitude: String +# added automatically from io.flow.consumer.invoice.v0.models.credit_memo +input CreditMemoInput { + id: ID! + number: String + status: ConsumerInvoiceStatus! + date: DateTimeIso8601! + key: String! + invoice: ConsumerInvoiceReferenceInput! + entity: MerchantOfRecordEntityInput! + payments: [ConsumerInvoicePaymentInput!]! + lines: [ConsumerInvoiceLineInput!]! + documents: [ConsumerInvoiceDocumentInput!]! + attributes: Object! + taxRegistration: TaxRegistrationInput } # added automatically from io.flow.consumer.invoice.v0.models.consumer_invoice_line_item @@ -660,11 +691,20 @@ input ConsumerInvoiceLineItemInput { unitDuty: ConsumerInvoiceLevyInput } -# added automatically from io.flow.consumer.invoice.v0.models.consumer_invoice_order_summary -input ConsumerInvoiceOrderSummaryInput { +# added automatically from io.flow.consumer.invoice.v0.models.b2b_credit_memo +input B2bCreditMemoInput { id: ID! number: String! - submittedAt: DateTimeIso8601! + buyer: MerchantOfRecordEntityInput! + seller: MerchantOfRecordEntityInput! + status: ConsumerInvoiceStatus! + date: DateTimeIso8601! + key: String! + invoice: B2bInvoiceReferenceInput! + lines: [ConsumerInvoiceLineInput!]! + documents: [ConsumerInvoiceDocumentInput!]! + attributes: Object! + b2bInvoiceType: B2bInvoiceType! } # added automatically from io.flow.consumer.invoice.v0.models.consumer_invoice @@ -688,47 +728,19 @@ input ConsumerInvoiceInput { estimatedDeliveryDate: DateTimeIso8601 } -# added automatically from io.flow.consumer.invoice.v0.models.b2b_invoice -input B2bInvoiceInput { - id: ID! - number: String! - buyer: MerchantOfRecordEntityInput! - seller: MerchantOfRecordEntityInput! - status: ConsumerInvoiceStatus! - date: DateTimeIso8601! - key: String! - order: ConsumerInvoiceOrderSummaryInput! - economicTitleLocation: EconomicTitleLocation! - center: ConsumerInvoiceCenterReferenceInput - destination: OrderAddressInput - tax: MoneyInput! - lines: [ConsumerInvoiceLineInput!]! - documents: [ConsumerInvoiceDocumentInput!]! - attributes: Object! - estimatedDeliveryDate: DateTimeIso8601 - b2bInvoiceType: B2bInvoiceType! -} - -# added automatically from io.flow.consumer.invoice.v0.models.consumer_invoice_levy -input ConsumerInvoiceLevyInput { - rate: Decimal! - value: PriceInput! +# added automatically from io.flow.consumer.invoice.v0.models.consumer_invoice_document +input ConsumerInvoiceDocumentInput { + type: ConsumerInvoiceDocumentType! + language: String! + url: String! } -# added automatically from io.flow.consumer.invoice.v0.models.credit_memo -input CreditMemoInput { +# added automatically from io.flow.consumer.invoice.v0.models.consumer_invoice_center_reference +input ConsumerInvoiceCenterReferenceInput { id: ID! - number: String - status: ConsumerInvoiceStatus! - date: DateTimeIso8601! key: String! - invoice: ConsumerInvoiceReferenceInput! - entity: MerchantOfRecordEntityInput! - payments: [ConsumerInvoicePaymentInput!]! - lines: [ConsumerInvoiceLineInput!]! - documents: [ConsumerInvoiceDocumentInput!]! - attributes: Object! - taxRegistration: TaxRegistrationInput + name: String! + address: AddressInput! } # added automatically from io.flow.consumer.invoice.v0.models.consumer_invoice_reference @@ -738,6 +750,12 @@ input ConsumerInvoiceReferenceInput { number: String! } +# added automatically from io.flow.consumer.invoice.v0.models.consumer_invoice_levy +input ConsumerInvoiceLevyInput { + rate: Decimal! + value: PriceInput! +} + # added automatically from io.flow.consumer.invoice.v0.models.consumer_invoice_payment input ConsumerInvoicePaymentInput { date: DateTimeIso8601! @@ -753,9 +771,11 @@ input B2bInvoiceReferenceInput { number: String! } -# added automatically from io.flow.consumer.invoice.v0.models.consumer_invoice_line_discount -input ConsumerInvoiceLineDiscountInput { - price: PriceInput! +# added automatically from io.flow.consumer.invoice.v0.models.consumer_invoice_order_summary +input ConsumerInvoiceOrderSummaryInput { + id: ID! + number: String! + submittedAt: DateTimeIso8601! } # added automatically from io.flow.consumer.invoice.v0.models.consumer_invoice_line_shipping @@ -766,35 +786,9 @@ input ConsumerInvoiceLineShippingInput { duty: ConsumerInvoiceLevyInput } -# added automatically from io.flow.consumer.invoice.v0.models.consumer_invoice_center_reference -input ConsumerInvoiceCenterReferenceInput { - id: ID! - key: String! - name: String! - address: AddressInput! -} - -# added automatically from io.flow.consumer.invoice.v0.models.b2b_credit_memo -input B2bCreditMemoInput { - id: ID! - number: String! - buyer: MerchantOfRecordEntityInput! - seller: MerchantOfRecordEntityInput! - status: ConsumerInvoiceStatus! - date: DateTimeIso8601! - key: String! - invoice: B2bInvoiceReferenceInput! - lines: [ConsumerInvoiceLineInput!]! - documents: [ConsumerInvoiceDocumentInput!]! - attributes: Object! - b2bInvoiceType: B2bInvoiceType! -} - -# added automatically from io.flow.consumer.invoice.v0.models.consumer_invoice_document -input ConsumerInvoiceDocumentInput { - type: ConsumerInvoiceDocumentType! - language: String! - url: String! +# added automatically from io.flow.consumer.invoice.v0.models.consumer_invoice_line_discount +input ConsumerInvoiceLineDiscountInput { + price: PriceInput! } # added automatically from io.flow.consumer.invoice.v0.models.consumer_invoice_line @@ -813,34 +807,6 @@ input ConsumerInvoiceLineInput { duty: ConsumerInvoiceLevyInput } -# added automatically from io.flow.experience.v0.models.order_summary_levy -input OrderSummaryLevyInput { - rate: Decimal! - rateLabel: String - value: PriceInput! -} - -# added automatically from io.flow.experience.v0.models.order_summary_price_detail -input OrderSummaryPriceDetailInput { - price: PriceInput! - name: String - rate: Decimal - rateLabel: String -} - -# added automatically from io.flow.experience.v0.models.order_summary_line_item -input OrderSummaryLineItemInput { - id: String - item: OrderSummaryItemInput! - quantity: Long! - discount: PriceInput - tax: OrderSummaryLevyInput - duty: OrderSummaryLevyInput - total: PriceInput! - priceAttributes: Object! - attributes: Object -} - # added automatically from io.flow.experience.v0.models.order_address input OrderAddressInput { text: String @@ -854,6 +820,18 @@ input OrderAddressInput { contact: ContactInput } +# added automatically from io.flow.experience.v0.models.checkout_item_content_attribute +input CheckoutItemContentAttributeInput { + key: String! + name: String! + value: String! +} + +# added automatically from io.flow.experience.v0.models.order_summary_image +input OrderSummaryImageInput { + url: String! +} + # added automatically from io.flow.experience.v0.models.order_summary input OrderSummaryInput { number: String! @@ -871,16 +849,12 @@ input OrderSummaryInput { attributes: Object } -# added automatically from io.flow.experience.v0.models.order_summary_image -input OrderSummaryImageInput { - url: String! -} - -# added automatically from io.flow.experience.v0.models.checkout_item_content_attribute -input CheckoutItemContentAttributeInput { - key: String! - name: String! - value: String! +# added automatically from io.flow.experience.v0.models.order_summary_price_detail +input OrderSummaryPriceDetailInput { + price: PriceInput! + name: String + rate: Decimal + rateLabel: String } # added automatically from io.flow.experience.v0.models.order_summary_item @@ -897,6 +871,26 @@ input OrderSummaryItemInput { priceAttributes: Object! } +# added automatically from io.flow.experience.v0.models.order_summary_line_item +input OrderSummaryLineItemInput { + id: String + item: OrderSummaryItemInput! + quantity: Long! + discount: PriceInput + tax: OrderSummaryLevyInput + duty: OrderSummaryLevyInput + total: PriceInput! + priceAttributes: Object! + attributes: Object +} + +# added automatically from io.flow.experience.v0.models.order_summary_levy +input OrderSummaryLevyInput { + rate: Decimal! + rateLabel: String + value: PriceInput! +} + # added automatically from io.flow.harmonization.v0.models.tax_registration input TaxRegistrationInput { id: ID! @@ -927,34 +921,10 @@ input OrganizationFormInput { parentId: String defaults: OrganizationDefaultsInput status: OrganizationStatus + type: OrganizationType } # added automatically from io.flow.payment.v0.models.public_key input PublicKeyInput { id: ID! -} - -# added automatically from io.flow.checkout.backend.v0.models.checkout -input CheckoutInput { - id: ID! - organization: CheckoutOrganizationSummaryInput! - geo: CheckoutGeoParametersInput! - orderNumber: String - startingSequenceNumber: Long! -} - -# added automatically from io.flow.checkout.backend.v0.models.checkout_organization_summary -input CheckoutOrganizationSummaryInput { - id: ID! - environment: Environment! -} - -# added automatically from io.flow.checkout.backend.v0.models.checkout_geo_parameters -input CheckoutGeoParametersInput { - experienceKey: String! - country: String! - ip: String - currency: String - language: String - locale: String } \ No newline at end of file diff --git a/src/test/resources/examples/flow/type-metadata.ts b/src/test/resources/examples/flow/type-metadata.ts index 38f7268..2946fba 100644 --- a/src/test/resources/examples/flow/type-metadata.ts +++ b/src/test/resources/examples/flow/type-metadata.ts @@ -81,10 +81,20 @@ const field = ( export const models = new Models([ + new EnumData("OrganizationType", [ + new EnumValue("STANDALONE", "standalone"), + new EnumValue("CHANNEL", "channel") + ]), + new EnumData("EntityIdentifierType", [ + new EnumValue("IOSS", "ioss"), + new EnumValue("VOEC", "voec"), + new EnumValue("ZAZ", "zaz") + ]), new EnumData("OrganizationStatus", [ new EnumValue("ACTIVE", "active"), new EnumValue("INACTIVE", "inactive"), - new EnumValue("DEACTIVATED", "deactivated") + new EnumValue("DEACTIVATED", "deactivated"), + new EnumValue("PROVISIONED", "provisioned") ]), new EnumData("Environment", [ new EnumValue("SANDBOX", "sandbox"), @@ -94,18 +104,18 @@ export const models = new Models([ new EnumValue("SELF_BILL_INVOICE", "self_bill_invoice"), new EnumValue("INVOICE", "invoice") ]), - new EnumData("ConsumerInvoiceDocumentType", [ - new EnumValue("PDF", "pdf") + new EnumData("ConsumerInvoiceCustomerType", [ + new EnumValue("BUSINESS_EU_VERIFIED", "business_eu_verified"), + new EnumValue("BUSINESS_NON_VERIFIED", "business_non_verified"), + new EnumValue("INDIVIDUAL", "individual") ]), new EnumData("ConsumerInvoiceStatus", [ new EnumValue("PENDING", "pending"), new EnumValue("AVAILABLE", "available"), new EnumValue("INVALID", "invalid") ]), - new EnumData("ConsumerInvoiceCustomerType", [ - new EnumValue("BUSINESS_EU_VERIFIED", "business_eu_verified"), - new EnumValue("BUSINESS_NON_VERIFIED", "business_non_verified"), - new EnumValue("INDIVIDUAL", "individual") + new EnumData("ConsumerInvoiceDocumentType", [ + new EnumValue("PDF", "pdf") ]), new EnumData("TaxVerificationResult", [ new EnumValue("VALID", "valid"), @@ -117,28 +127,11 @@ export const models = new Models([ new EnumValue("ORIGINATION", "origination"), new EnumValue("DESTINATION", "destination") ]), - new ModelData("Name", [ - field("first", "first", "String", "scalar"), - field("last", "last", "String", "scalar") - ]), - new ModelData("Price", [ - field("amount", "amount", "Float", "scalar"), - field("currency", "currency", "String", "scalar"), - field("label", "label", "String", "scalar") - ]), - new ModelData("Organization", [ - field("id", "id", "String", "scalar"), - field("name", "name", "String", "scalar"), - field("environment", "environment", "Environment", "enum"), - field("parent", "parent", "OrganizationReference", "type"), - field("defaults", "defaults", "OrganizationDefaults", "type"), - field("createdAt", "created_at", "DateTimeIso8601", "scalar"), - field("status", "status", "OrganizationStatus", "enum") - ]), new ModelData("MerchantOfRecordEntity", [ field("organization", "organization", "OrganizationReference", "type"), field("name", "name", "String", "scalar"), field("vat", "vat", "MerchantOfRecordEntityRegistration", "type"), + field("identifiers", "identifiers", "EntityIdentifier", "array"), field("streets", "streets", "String", "array"), field("city", "city", "String", "scalar"), field("province", "province", "String", "scalar"), @@ -147,33 +140,6 @@ export const models = new Models([ field("phone", "phone", "String", "scalar"), field("email", "email", "String", "scalar") ]), - new ModelData("MerchantOfRecordEntityRegistration", [ - field("number", "number", "String", "scalar"), - field("country", "country", "String", "scalar") - ]), - new ModelData("Contact", [ - field("name", "name", "Name", "type"), - field("company", "company", "String", "scalar"), - field("email", "email", "String", "scalar"), - field("phone", "phone", "String", "scalar") - ]), - new ModelData("OrganizationReference", [ - field("id", "id", "String", "scalar") - ]), - new ModelData("OrganizationDefaults", [ - field("country", "country", "String", "scalar"), - field("baseCurrency", "base_currency", "String", "scalar"), - field("language", "language", "String", "scalar"), - field("locale", "locale", "String", "scalar"), - field("timezone", "timezone", "String", "scalar") - ]), - new ModelData("ItemReference", [ - field("number", "number", "String", "scalar") - ]), - new ModelData("Money", [ - field("amount", "amount", "Float", "scalar"), - field("currency", "currency", "String", "scalar") - ]), new ModelData("BillingAddress", [ field("name", "name", "Name", "type"), field("streets", "streets", "String", "array"), @@ -194,38 +160,56 @@ export const models = new Models([ field("latitude", "latitude", "String", "scalar"), field("longitude", "longitude", "String", "scalar") ]), - new ModelData("ConsumerInvoiceLineItem", [ - field("item", "item", "ItemReference", "type"), - field("description", "description", "String", "scalar"), - field("quantity", "quantity", "Long", "scalar"), - field("unitPrice", "unit_price", "Price", "type"), - field("unitDiscount", "unit_discount", "Price", "type"), - field("unitTax", "unit_tax", "ConsumerInvoiceLevy", "type"), - field("unitDuty", "unit_duty", "ConsumerInvoiceLevy", "type") + new ModelData("ItemReference", [ + field("number", "number", "String", "scalar") ]), - new ModelData("ConsumerInvoiceOrderSummary", [ + new ModelData("Organization", [ field("id", "id", "String", "scalar"), + field("name", "name", "String", "scalar"), + field("environment", "environment", "Environment", "enum"), + field("parent", "parent", "OrganizationReference", "type"), + field("defaults", "defaults", "OrganizationDefaults", "type"), + field("createdAt", "created_at", "DateTimeIso8601", "scalar"), + field("status", "status", "OrganizationStatus", "enum"), + field("type", "type", "OrganizationType", "enum") + ]), + new ModelData("EntityIdentifier", [ + field("name", "name", "EntityIdentifierType", "enum"), field("number", "number", "String", "scalar"), - field("submittedAt", "submitted_at", "DateTimeIso8601", "scalar") + field("issuingCountry", "issuing_country", "String", "scalar") ]), - new ModelData("ConsumerInvoice", [ - field("id", "id", "String", "scalar"), + new ModelData("MerchantOfRecordEntityRegistration", [ field("number", "number", "String", "scalar"), - field("status", "status", "ConsumerInvoiceStatus", "enum"), - field("date", "date", "DateTimeIso8601", "scalar"), - field("key", "key", "String", "scalar"), - field("order", "order", "ConsumerInvoiceOrderSummary", "type"), - field("entity", "entity", "MerchantOfRecordEntity", "type"), - field("payments", "payments", "ConsumerInvoicePayment", "array"), - field("center", "center", "ConsumerInvoiceCenterReference", "type"), - field("destination", "destination", "OrderAddress", "type"), - field("billingAddress", "billing_address", "BillingAddress", "type"), - field("lines", "lines", "ConsumerInvoiceLine", "array"), - field("documents", "documents", "ConsumerInvoiceDocument", "array"), - field("attributes", "attributes", "Object", "scalar"), - field("taxRegistration", "tax_registration", "TaxRegistration", "type"), - field("customerType", "customer_type", "ConsumerInvoiceCustomerType", "enum"), - field("estimatedDeliveryDate", "estimated_delivery_date", "DateTimeIso8601", "scalar") + field("country", "country", "String", "scalar") + ]), + new ModelData("OrganizationReference", [ + field("id", "id", "String", "scalar") + ]), + new ModelData("Name", [ + field("first", "first", "String", "scalar"), + field("last", "last", "String", "scalar") + ]), + new ModelData("Money", [ + field("amount", "amount", "Float", "scalar"), + field("currency", "currency", "String", "scalar") + ]), + new ModelData("OrganizationDefaults", [ + field("country", "country", "String", "scalar"), + field("baseCurrency", "base_currency", "String", "scalar"), + field("language", "language", "String", "scalar"), + field("locale", "locale", "String", "scalar"), + field("timezone", "timezone", "String", "scalar") + ]), + new ModelData("Contact", [ + field("name", "name", "Name", "type"), + field("company", "company", "String", "scalar"), + field("email", "email", "String", "scalar"), + field("phone", "phone", "String", "scalar") + ]), + new ModelData("Price", [ + field("amount", "amount", "Float", "scalar"), + field("currency", "currency", "String", "scalar"), + field("label", "label", "String", "scalar") ]), new ModelData("B2bInvoice", [ field("id", "id", "String", "scalar"), @@ -246,10 +230,6 @@ export const models = new Models([ field("estimatedDeliveryDate", "estimated_delivery_date", "DateTimeIso8601", "scalar"), field("b2bInvoiceType", "b2b_invoice_type", "B2bInvoiceType", "enum") ]), - new ModelData("ConsumerInvoiceLevy", [ - field("rate", "rate", "Decimal", "scalar"), - field("value", "value", "Price", "type") - ]), new ModelData("CreditMemo", [ field("id", "id", "String", "scalar"), field("number", "number", "String", "scalar"), @@ -264,36 +244,14 @@ export const models = new Models([ field("attributes", "attributes", "Object", "scalar"), field("taxRegistration", "tax_registration", "TaxRegistration", "type") ]), - new ModelData("ConsumerInvoiceReference", [ - field("id", "id", "String", "scalar"), - field("key", "key", "String", "scalar"), - field("number", "number", "String", "scalar") - ]), - new ModelData("ConsumerInvoicePayment", [ - field("date", "date", "DateTimeIso8601", "scalar"), + new ModelData("ConsumerInvoiceLineItem", [ + field("item", "item", "ItemReference", "type"), field("description", "description", "String", "scalar"), - field("value", "value", "Price", "type"), - field("billingAddress", "billing_address", "BillingAddress", "type") - ]), - new ModelData("B2bInvoiceReference", [ - field("id", "id", "String", "scalar"), - field("key", "key", "String", "scalar"), - field("number", "number", "String", "scalar") - ]), - new ModelData("ConsumerInvoiceLineDiscount", [ - field("price", "price", "Price", "type") - ]), - new ModelData("ConsumerInvoiceLineShipping", [ - field("price", "price", "Price", "type"), - field("discount", "discount", "Price", "type"), - field("tax", "tax", "ConsumerInvoiceLevy", "type"), - field("duty", "duty", "ConsumerInvoiceLevy", "type") - ]), - new ModelData("ConsumerInvoiceCenterReference", [ - field("id", "id", "String", "scalar"), - field("key", "key", "String", "scalar"), - field("name", "name", "String", "scalar"), - field("address", "address", "Address", "type") + field("quantity", "quantity", "Long", "scalar"), + field("unitPrice", "unit_price", "Price", "type"), + field("unitDiscount", "unit_discount", "Price", "type"), + field("unitTax", "unit_tax", "ConsumerInvoiceLevy", "type"), + field("unitDuty", "unit_duty", "ConsumerInvoiceLevy", "type") ]), new ModelData("B2bCreditMemo", [ field("id", "id", "String", "scalar"), @@ -309,32 +267,69 @@ export const models = new Models([ field("attributes", "attributes", "Object", "scalar"), field("b2bInvoiceType", "b2b_invoice_type", "B2bInvoiceType", "enum") ]), + new ModelData("ConsumerInvoice", [ + field("id", "id", "String", "scalar"), + field("number", "number", "String", "scalar"), + field("status", "status", "ConsumerInvoiceStatus", "enum"), + field("date", "date", "DateTimeIso8601", "scalar"), + field("key", "key", "String", "scalar"), + field("order", "order", "ConsumerInvoiceOrderSummary", "type"), + field("entity", "entity", "MerchantOfRecordEntity", "type"), + field("payments", "payments", "ConsumerInvoicePayment", "array"), + field("center", "center", "ConsumerInvoiceCenterReference", "type"), + field("destination", "destination", "OrderAddress", "type"), + field("billingAddress", "billing_address", "BillingAddress", "type"), + field("lines", "lines", "ConsumerInvoiceLine", "array"), + field("documents", "documents", "ConsumerInvoiceDocument", "array"), + field("attributes", "attributes", "Object", "scalar"), + field("taxRegistration", "tax_registration", "TaxRegistration", "type"), + field("customerType", "customer_type", "ConsumerInvoiceCustomerType", "enum"), + field("estimatedDeliveryDate", "estimated_delivery_date", "DateTimeIso8601", "scalar") + ]), new ModelData("ConsumerInvoiceDocument", [ field("type", "type", "ConsumerInvoiceDocumentType", "enum"), field("language", "language", "String", "scalar"), field("url", "url", "String", "scalar") ]), - new ModelData("OrderSummaryLevy", [ + new ModelData("ConsumerInvoiceCenterReference", [ + field("id", "id", "String", "scalar"), + field("key", "key", "String", "scalar"), + field("name", "name", "String", "scalar"), + field("address", "address", "Address", "type") + ]), + new ModelData("ConsumerInvoiceReference", [ + field("id", "id", "String", "scalar"), + field("key", "key", "String", "scalar"), + field("number", "number", "String", "scalar") + ]), + new ModelData("ConsumerInvoiceLevy", [ field("rate", "rate", "Decimal", "scalar"), - field("rateLabel", "rate_label", "String", "scalar"), field("value", "value", "Price", "type") ]), - new ModelData("OrderSummaryPriceDetail", [ - field("price", "price", "Price", "type"), - field("name", "name", "String", "scalar"), - field("rate", "rate", "Decimal", "scalar"), - field("rateLabel", "rate_label", "String", "scalar") + new ModelData("ConsumerInvoicePayment", [ + field("date", "date", "DateTimeIso8601", "scalar"), + field("description", "description", "String", "scalar"), + field("value", "value", "Price", "type"), + field("billingAddress", "billing_address", "BillingAddress", "type") ]), - new ModelData("OrderSummaryLineItem", [ + new ModelData("B2bInvoiceReference", [ field("id", "id", "String", "scalar"), - field("item", "item", "OrderSummaryItem", "type"), - field("quantity", "quantity", "Long", "scalar"), + field("key", "key", "String", "scalar"), + field("number", "number", "String", "scalar") + ]), + new ModelData("ConsumerInvoiceOrderSummary", [ + field("id", "id", "String", "scalar"), + field("number", "number", "String", "scalar"), + field("submittedAt", "submitted_at", "DateTimeIso8601", "scalar") + ]), + new ModelData("ConsumerInvoiceLineShipping", [ + field("price", "price", "Price", "type"), field("discount", "discount", "Price", "type"), - field("tax", "tax", "OrderSummaryLevy", "type"), - field("duty", "duty", "OrderSummaryLevy", "type"), - field("total", "total", "Price", "type"), - field("priceAttributes", "price_attributes", "Object", "scalar"), - field("attributes", "attributes", "Object", "scalar") + field("tax", "tax", "ConsumerInvoiceLevy", "type"), + field("duty", "duty", "ConsumerInvoiceLevy", "type") + ]), + new ModelData("ConsumerInvoiceLineDiscount", [ + field("price", "price", "Price", "type") ]), new ModelData("OrderAddress", [ field("text", "text", "String", "scalar"), @@ -347,6 +342,14 @@ export const models = new Models([ field("longitude", "longitude", "String", "scalar"), field("contact", "contact", "Contact", "type") ]), + new ModelData("CheckoutItemContentAttribute", [ + field("key", "key", "String", "scalar"), + field("name", "name", "String", "scalar"), + field("value", "value", "String", "scalar") + ]), + new ModelData("OrderSummaryImage", [ + field("url", "url", "String", "scalar") + ]), new ModelData("OrderSummary", [ field("number", "number", "String", "scalar"), field("subtotal", "subtotal", "OrderSummaryPriceDetail", "type"), @@ -362,13 +365,11 @@ export const models = new Models([ field("identifiers", "identifiers", "Object", "scalar"), field("attributes", "attributes", "Object", "scalar") ]), - new ModelData("OrderSummaryImage", [ - field("url", "url", "String", "scalar") - ]), - new ModelData("CheckoutItemContentAttribute", [ - field("key", "key", "String", "scalar"), + new ModelData("OrderSummaryPriceDetail", [ + field("price", "price", "Price", "type"), field("name", "name", "String", "scalar"), - field("value", "value", "String", "scalar") + field("rate", "rate", "Decimal", "scalar"), + field("rateLabel", "rate_label", "String", "scalar") ]), new ModelData("OrderSummaryItem", [ field("number", "number", "String", "scalar"), @@ -382,6 +383,22 @@ export const models = new Models([ field("duty", "duty", "OrderSummaryLevy", "type"), field("priceAttributes", "price_attributes", "Object", "scalar") ]), + new ModelData("OrderSummaryLineItem", [ + field("id", "id", "String", "scalar"), + field("item", "item", "OrderSummaryItem", "type"), + field("quantity", "quantity", "Long", "scalar"), + field("discount", "discount", "Price", "type"), + field("tax", "tax", "OrderSummaryLevy", "type"), + field("duty", "duty", "OrderSummaryLevy", "type"), + field("total", "total", "Price", "type"), + field("priceAttributes", "price_attributes", "Object", "scalar"), + field("attributes", "attributes", "Object", "scalar") + ]), + new ModelData("OrderSummaryLevy", [ + field("rate", "rate", "Decimal", "scalar"), + field("rateLabel", "rate_label", "String", "scalar"), + field("value", "value", "Price", "type") + ]), new ModelData("TaxRegistration", [ field("id", "id", "String", "scalar"), field("key", "key", "String", "scalar"), @@ -406,57 +423,22 @@ export const models = new Models([ field("environment", "environment", "Environment", "enum"), field("parentId", "parent_id", "String", "scalar"), field("defaults", "defaults", "OrganizationDefaults", "type"), - field("status", "status", "OrganizationStatus", "enum") + field("status", "status", "OrganizationStatus", "enum"), + field("type", "type", "OrganizationType", "enum") ]), new ModelData("PublicKey", [ field("id", "id", "String", "scalar") ]), - new ModelData("Checkout", [ - field("id", "id", "String", "scalar"), - field("organization", "organization", "CheckoutOrganizationSummary", "type"), - field("geo", "geo", "CheckoutGeoParameters", "type"), - field("orderNumber", "order_number", "String", "scalar"), - field("startingSequenceNumber", "starting_sequence_number", "Long", "scalar") - ]), - new ModelData("CheckoutOrganizationSummary", [ - field("id", "id", "String", "scalar"), - field("environment", "environment", "Environment", "enum") - ]), - new ModelData("CheckoutGeoParameters", [ - field("experienceKey", "experience_key", "String", "scalar"), - field("country", "country", "String", "scalar"), - field("ip", "ip", "String", "scalar"), - field("currency", "currency", "String", "scalar"), - field("language", "language", "String", "scalar"), - field("locale", "locale", "String", "scalar") - ]), - new EnumData("ConsumerInvoiceLineDiscriminator", [ - new EnumValue("ITEM", "item"), - new EnumValue("DISCOUNT", "discount"), - new EnumValue("SHIPPING", "shipping") - ]), - new ModelData("NameInput", [ - field("first", "first", "String", "scalar"), - field("last", "last", "String", "scalar") - ]), - new ModelData("PriceInput", [ - field("amount", "amount", "Float", "scalar"), - field("currency", "currency", "String", "scalar"), - field("label", "label", "String", "scalar") - ]), - new ModelData("OrganizationInput", [ - field("id", "id", "String", "scalar"), - field("name", "name", "String", "scalar"), - field("environment", "environment", "Environment", "enum"), - field("parent", "parent", "OrganizationReferenceInput", "input"), - field("defaults", "defaults", "OrganizationDefaultsInput", "input"), - field("createdAt", "created_at", "DateTimeIso8601", "scalar"), - field("status", "status", "OrganizationStatus", "enum") + new EnumData("ConsumerInvoiceLineDiscriminator", [ + new EnumValue("ITEM", "item"), + new EnumValue("DISCOUNT", "discount"), + new EnumValue("SHIPPING", "shipping") ]), new ModelData("MerchantOfRecordEntityInput", [ field("organization", "organization", "OrganizationReferenceInput", "input"), field("name", "name", "String", "scalar"), field("vat", "vat", "MerchantOfRecordEntityRegistrationInput", "input"), + field("identifiers", "identifiers", "EntityIdentifierInput", "array"), field("streets", "streets", "String", "array"), field("city", "city", "String", "scalar"), field("province", "province", "String", "scalar"), @@ -465,33 +447,6 @@ export const models = new Models([ field("phone", "phone", "String", "scalar"), field("email", "email", "String", "scalar") ]), - new ModelData("MerchantOfRecordEntityRegistrationInput", [ - field("number", "number", "String", "scalar"), - field("country", "country", "String", "scalar") - ]), - new ModelData("ContactInput", [ - field("name", "name", "NameInput", "input"), - field("company", "company", "String", "scalar"), - field("email", "email", "String", "scalar"), - field("phone", "phone", "String", "scalar") - ]), - new ModelData("OrganizationReferenceInput", [ - field("id", "id", "String", "scalar") - ]), - new ModelData("OrganizationDefaultsInput", [ - field("country", "country", "String", "scalar"), - field("baseCurrency", "base_currency", "String", "scalar"), - field("language", "language", "String", "scalar"), - field("locale", "locale", "String", "scalar"), - field("timezone", "timezone", "String", "scalar") - ]), - new ModelData("ItemReferenceInput", [ - field("number", "number", "String", "scalar") - ]), - new ModelData("MoneyInput", [ - field("amount", "amount", "Float", "scalar"), - field("currency", "currency", "String", "scalar") - ]), new ModelData("BillingAddressInput", [ field("name", "name", "NameInput", "input"), field("streets", "streets", "String", "array"), @@ -512,38 +467,56 @@ export const models = new Models([ field("latitude", "latitude", "String", "scalar"), field("longitude", "longitude", "String", "scalar") ]), - new ModelData("ConsumerInvoiceLineItemInput", [ - field("item", "item", "ItemReferenceInput", "input"), - field("description", "description", "String", "scalar"), - field("quantity", "quantity", "Long", "scalar"), - field("unitPrice", "unit_price", "PriceInput", "input"), - field("unitDiscount", "unit_discount", "PriceInput", "input"), - field("unitTax", "unit_tax", "ConsumerInvoiceLevyInput", "input"), - field("unitDuty", "unit_duty", "ConsumerInvoiceLevyInput", "input") + new ModelData("ItemReferenceInput", [ + field("number", "number", "String", "scalar") ]), - new ModelData("ConsumerInvoiceOrderSummaryInput", [ + new ModelData("OrganizationInput", [ field("id", "id", "String", "scalar"), + field("name", "name", "String", "scalar"), + field("environment", "environment", "Environment", "enum"), + field("parent", "parent", "OrganizationReferenceInput", "input"), + field("defaults", "defaults", "OrganizationDefaultsInput", "input"), + field("createdAt", "created_at", "DateTimeIso8601", "scalar"), + field("status", "status", "OrganizationStatus", "enum"), + field("type", "type", "OrganizationType", "enum") + ]), + new ModelData("EntityIdentifierInput", [ + field("name", "name", "EntityIdentifierType", "enum"), field("number", "number", "String", "scalar"), - field("submittedAt", "submitted_at", "DateTimeIso8601", "scalar") + field("issuingCountry", "issuing_country", "String", "scalar") ]), - new ModelData("ConsumerInvoiceInput", [ - field("id", "id", "String", "scalar"), + new ModelData("MerchantOfRecordEntityRegistrationInput", [ field("number", "number", "String", "scalar"), - field("status", "status", "ConsumerInvoiceStatus", "enum"), - field("date", "date", "DateTimeIso8601", "scalar"), - field("key", "key", "String", "scalar"), - field("order", "order", "ConsumerInvoiceOrderSummaryInput", "input"), - field("entity", "entity", "MerchantOfRecordEntityInput", "input"), - field("payments", "payments", "ConsumerInvoicePaymentInput", "array"), - field("center", "center", "ConsumerInvoiceCenterReferenceInput", "input"), - field("destination", "destination", "OrderAddressInput", "input"), - field("billingAddress", "billing_address", "BillingAddressInput", "input"), - field("lines", "lines", "ConsumerInvoiceLineInput", "array"), - field("documents", "documents", "ConsumerInvoiceDocumentInput", "array"), - field("attributes", "attributes", "Object", "scalar"), - field("taxRegistration", "tax_registration", "TaxRegistrationInput", "input"), - field("customerType", "customer_type", "ConsumerInvoiceCustomerType", "enum"), - field("estimatedDeliveryDate", "estimated_delivery_date", "DateTimeIso8601", "scalar") + field("country", "country", "String", "scalar") + ]), + new ModelData("OrganizationReferenceInput", [ + field("id", "id", "String", "scalar") + ]), + new ModelData("NameInput", [ + field("first", "first", "String", "scalar"), + field("last", "last", "String", "scalar") + ]), + new ModelData("MoneyInput", [ + field("amount", "amount", "Float", "scalar"), + field("currency", "currency", "String", "scalar") + ]), + new ModelData("OrganizationDefaultsInput", [ + field("country", "country", "String", "scalar"), + field("baseCurrency", "base_currency", "String", "scalar"), + field("language", "language", "String", "scalar"), + field("locale", "locale", "String", "scalar"), + field("timezone", "timezone", "String", "scalar") + ]), + new ModelData("ContactInput", [ + field("name", "name", "NameInput", "input"), + field("company", "company", "String", "scalar"), + field("email", "email", "String", "scalar"), + field("phone", "phone", "String", "scalar") + ]), + new ModelData("PriceInput", [ + field("amount", "amount", "Float", "scalar"), + field("currency", "currency", "String", "scalar"), + field("label", "label", "String", "scalar") ]), new ModelData("B2bInvoiceInput", [ field("id", "id", "String", "scalar"), @@ -564,10 +537,6 @@ export const models = new Models([ field("estimatedDeliveryDate", "estimated_delivery_date", "DateTimeIso8601", "scalar"), field("b2bInvoiceType", "b2b_invoice_type", "B2bInvoiceType", "enum") ]), - new ModelData("ConsumerInvoiceLevyInput", [ - field("rate", "rate", "Decimal", "scalar"), - field("value", "value", "PriceInput", "input") - ]), new ModelData("CreditMemoInput", [ field("id", "id", "String", "scalar"), field("number", "number", "String", "scalar"), @@ -582,11 +551,68 @@ export const models = new Models([ field("attributes", "attributes", "Object", "scalar"), field("taxRegistration", "tax_registration", "TaxRegistrationInput", "input") ]), + new ModelData("ConsumerInvoiceLineItemInput", [ + field("item", "item", "ItemReferenceInput", "input"), + field("description", "description", "String", "scalar"), + field("quantity", "quantity", "Long", "scalar"), + field("unitPrice", "unit_price", "PriceInput", "input"), + field("unitDiscount", "unit_discount", "PriceInput", "input"), + field("unitTax", "unit_tax", "ConsumerInvoiceLevyInput", "input"), + field("unitDuty", "unit_duty", "ConsumerInvoiceLevyInput", "input") + ]), + new ModelData("B2bCreditMemoInput", [ + field("id", "id", "String", "scalar"), + field("number", "number", "String", "scalar"), + field("buyer", "buyer", "MerchantOfRecordEntityInput", "input"), + field("seller", "seller", "MerchantOfRecordEntityInput", "input"), + field("status", "status", "ConsumerInvoiceStatus", "enum"), + field("date", "date", "DateTimeIso8601", "scalar"), + field("key", "key", "String", "scalar"), + field("invoice", "invoice", "B2bInvoiceReferenceInput", "input"), + field("lines", "lines", "ConsumerInvoiceLineInput", "array"), + field("documents", "documents", "ConsumerInvoiceDocumentInput", "array"), + field("attributes", "attributes", "Object", "scalar"), + field("b2bInvoiceType", "b2b_invoice_type", "B2bInvoiceType", "enum") + ]), + new ModelData("ConsumerInvoiceInput", [ + field("id", "id", "String", "scalar"), + field("number", "number", "String", "scalar"), + field("status", "status", "ConsumerInvoiceStatus", "enum"), + field("date", "date", "DateTimeIso8601", "scalar"), + field("key", "key", "String", "scalar"), + field("order", "order", "ConsumerInvoiceOrderSummaryInput", "input"), + field("entity", "entity", "MerchantOfRecordEntityInput", "input"), + field("payments", "payments", "ConsumerInvoicePaymentInput", "array"), + field("center", "center", "ConsumerInvoiceCenterReferenceInput", "input"), + field("destination", "destination", "OrderAddressInput", "input"), + field("billingAddress", "billing_address", "BillingAddressInput", "input"), + field("lines", "lines", "ConsumerInvoiceLineInput", "array"), + field("documents", "documents", "ConsumerInvoiceDocumentInput", "array"), + field("attributes", "attributes", "Object", "scalar"), + field("taxRegistration", "tax_registration", "TaxRegistrationInput", "input"), + field("customerType", "customer_type", "ConsumerInvoiceCustomerType", "enum"), + field("estimatedDeliveryDate", "estimated_delivery_date", "DateTimeIso8601", "scalar") + ]), + new ModelData("ConsumerInvoiceDocumentInput", [ + field("type", "type", "ConsumerInvoiceDocumentType", "enum"), + field("language", "language", "String", "scalar"), + field("url", "url", "String", "scalar") + ]), + new ModelData("ConsumerInvoiceCenterReferenceInput", [ + field("id", "id", "String", "scalar"), + field("key", "key", "String", "scalar"), + field("name", "name", "String", "scalar"), + field("address", "address", "AddressInput", "input") + ]), new ModelData("ConsumerInvoiceReferenceInput", [ field("id", "id", "String", "scalar"), field("key", "key", "String", "scalar"), field("number", "number", "String", "scalar") ]), + new ModelData("ConsumerInvoiceLevyInput", [ + field("rate", "rate", "Decimal", "scalar"), + field("value", "value", "PriceInput", "input") + ]), new ModelData("ConsumerInvoicePaymentInput", [ field("date", "date", "DateTimeIso8601", "scalar"), field("description", "description", "String", "scalar"), @@ -598,8 +624,10 @@ export const models = new Models([ field("key", "key", "String", "scalar"), field("number", "number", "String", "scalar") ]), - new ModelData("ConsumerInvoiceLineDiscountInput", [ - field("price", "price", "PriceInput", "input") + new ModelData("ConsumerInvoiceOrderSummaryInput", [ + field("id", "id", "String", "scalar"), + field("number", "number", "String", "scalar"), + field("submittedAt", "submitted_at", "DateTimeIso8601", "scalar") ]), new ModelData("ConsumerInvoiceLineShippingInput", [ field("price", "price", "PriceInput", "input"), @@ -607,30 +635,8 @@ export const models = new Models([ field("tax", "tax", "ConsumerInvoiceLevyInput", "input"), field("duty", "duty", "ConsumerInvoiceLevyInput", "input") ]), - new ModelData("ConsumerInvoiceCenterReferenceInput", [ - field("id", "id", "String", "scalar"), - field("key", "key", "String", "scalar"), - field("name", "name", "String", "scalar"), - field("address", "address", "AddressInput", "input") - ]), - new ModelData("B2bCreditMemoInput", [ - field("id", "id", "String", "scalar"), - field("number", "number", "String", "scalar"), - field("buyer", "buyer", "MerchantOfRecordEntityInput", "input"), - field("seller", "seller", "MerchantOfRecordEntityInput", "input"), - field("status", "status", "ConsumerInvoiceStatus", "enum"), - field("date", "date", "DateTimeIso8601", "scalar"), - field("key", "key", "String", "scalar"), - field("invoice", "invoice", "B2bInvoiceReferenceInput", "input"), - field("lines", "lines", "ConsumerInvoiceLineInput", "array"), - field("documents", "documents", "ConsumerInvoiceDocumentInput", "array"), - field("attributes", "attributes", "Object", "scalar"), - field("b2bInvoiceType", "b2b_invoice_type", "B2bInvoiceType", "enum") - ]), - new ModelData("ConsumerInvoiceDocumentInput", [ - field("type", "type", "ConsumerInvoiceDocumentType", "enum"), - field("language", "language", "String", "scalar"), - field("url", "url", "String", "scalar") + new ModelData("ConsumerInvoiceLineDiscountInput", [ + field("price", "price", "PriceInput", "input") ]), new ModelData("ConsumerInvoiceLineInput", [ field("discriminator", "discriminator", "ConsumerInvoiceLineDiscriminator", "enum"), @@ -646,28 +652,6 @@ export const models = new Models([ field("tax", "tax", "ConsumerInvoiceLevyInput", "input"), field("duty", "duty", "ConsumerInvoiceLevyInput", "input") ]), - new ModelData("OrderSummaryLevyInput", [ - field("rate", "rate", "Decimal", "scalar"), - field("rateLabel", "rate_label", "String", "scalar"), - field("value", "value", "PriceInput", "input") - ]), - new ModelData("OrderSummaryPriceDetailInput", [ - field("price", "price", "PriceInput", "input"), - field("name", "name", "String", "scalar"), - field("rate", "rate", "Decimal", "scalar"), - field("rateLabel", "rate_label", "String", "scalar") - ]), - new ModelData("OrderSummaryLineItemInput", [ - field("id", "id", "String", "scalar"), - field("item", "item", "OrderSummaryItemInput", "input"), - field("quantity", "quantity", "Long", "scalar"), - field("discount", "discount", "PriceInput", "input"), - field("tax", "tax", "OrderSummaryLevyInput", "input"), - field("duty", "duty", "OrderSummaryLevyInput", "input"), - field("total", "total", "PriceInput", "input"), - field("priceAttributes", "price_attributes", "Object", "scalar"), - field("attributes", "attributes", "Object", "scalar") - ]), new ModelData("OrderAddressInput", [ field("text", "text", "String", "scalar"), field("streets", "streets", "String", "array"), @@ -679,6 +663,14 @@ export const models = new Models([ field("longitude", "longitude", "String", "scalar"), field("contact", "contact", "ContactInput", "input") ]), + new ModelData("CheckoutItemContentAttributeInput", [ + field("key", "key", "String", "scalar"), + field("name", "name", "String", "scalar"), + field("value", "value", "String", "scalar") + ]), + new ModelData("OrderSummaryImageInput", [ + field("url", "url", "String", "scalar") + ]), new ModelData("OrderSummaryInput", [ field("number", "number", "String", "scalar"), field("subtotal", "subtotal", "OrderSummaryPriceDetailInput", "input"), @@ -694,13 +686,11 @@ export const models = new Models([ field("identifiers", "identifiers", "Object", "scalar"), field("attributes", "attributes", "Object", "scalar") ]), - new ModelData("OrderSummaryImageInput", [ - field("url", "url", "String", "scalar") - ]), - new ModelData("CheckoutItemContentAttributeInput", [ - field("key", "key", "String", "scalar"), + new ModelData("OrderSummaryPriceDetailInput", [ + field("price", "price", "PriceInput", "input"), field("name", "name", "String", "scalar"), - field("value", "value", "String", "scalar") + field("rate", "rate", "Decimal", "scalar"), + field("rateLabel", "rate_label", "String", "scalar") ]), new ModelData("OrderSummaryItemInput", [ field("number", "number", "String", "scalar"), @@ -714,6 +704,22 @@ export const models = new Models([ field("duty", "duty", "OrderSummaryLevyInput", "input"), field("priceAttributes", "price_attributes", "Object", "scalar") ]), + new ModelData("OrderSummaryLineItemInput", [ + field("id", "id", "String", "scalar"), + field("item", "item", "OrderSummaryItemInput", "input"), + field("quantity", "quantity", "Long", "scalar"), + field("discount", "discount", "PriceInput", "input"), + field("tax", "tax", "OrderSummaryLevyInput", "input"), + field("duty", "duty", "OrderSummaryLevyInput", "input"), + field("total", "total", "PriceInput", "input"), + field("priceAttributes", "price_attributes", "Object", "scalar"), + field("attributes", "attributes", "Object", "scalar") + ]), + new ModelData("OrderSummaryLevyInput", [ + field("rate", "rate", "Decimal", "scalar"), + field("rateLabel", "rate_label", "String", "scalar"), + field("value", "value", "PriceInput", "input") + ]), new ModelData("TaxRegistrationInput", [ field("id", "id", "String", "scalar"), field("key", "key", "String", "scalar"), @@ -738,28 +744,10 @@ export const models = new Models([ field("environment", "environment", "Environment", "enum"), field("parentId", "parent_id", "String", "scalar"), field("defaults", "defaults", "OrganizationDefaultsInput", "input"), - field("status", "status", "OrganizationStatus", "enum") + field("status", "status", "OrganizationStatus", "enum"), + field("type", "type", "OrganizationType", "enum") ]), new ModelData("PublicKeyInput", [ field("id", "id", "String", "scalar") - ]), - new ModelData("CheckoutInput", [ - field("id", "id", "String", "scalar"), - field("organization", "organization", "CheckoutOrganizationSummaryInput", "input"), - field("geo", "geo", "CheckoutGeoParametersInput", "input"), - field("orderNumber", "order_number", "String", "scalar"), - field("startingSequenceNumber", "starting_sequence_number", "Long", "scalar") - ]), - new ModelData("CheckoutOrganizationSummaryInput", [ - field("id", "id", "String", "scalar"), - field("environment", "environment", "Environment", "enum") - ]), - new ModelData("CheckoutGeoParametersInput", [ - field("experienceKey", "experience_key", "String", "scalar"), - field("country", "country", "String", "scalar"), - field("ip", "ip", "String", "scalar"), - field("currency", "currency", "String", "scalar"), - field("language", "language", "String", "scalar"), - field("locale", "locale", "String", "scalar") ]) ]); \ No newline at end of file diff --git a/src/test/resources/specs/lib-apibuilder.zip b/src/test/resources/specs/lib-apibuilder.zip new file mode 100644 index 0000000..787f853 Binary files /dev/null and b/src/test/resources/specs/lib-apibuilder.zip differ diff --git a/src/test/scala/io/apibuilder/graphql/GraphQLCodeGeneratorSpec.scala b/src/test/scala/io/apibuilder/graphql/GraphQLCodeGeneratorSpec.scala index 009203d..4f47c59 100644 --- a/src/test/scala/io/apibuilder/graphql/GraphQLCodeGeneratorSpec.scala +++ b/src/test/scala/io/apibuilder/graphql/GraphQLCodeGeneratorSpec.scala @@ -10,10 +10,10 @@ class GraphQLCodeGeneratorSpec extends AnyWordSpec with Matchers with FileHelpers { - val SpecsUrl = "https://s3.amazonaws.com/io.flow.aws-s3-public/util/lib-apibuilder/specs.zip" + val SpecsUrl = getClass.getResource("/specs/lib-apibuilder.zip") "generates flow graphql schema" in { - MultiService.fromUrl(SpecsUrl) match { + MultiService.fromUrl(SpecsUrl.toExternalForm).toEither match { case Left(errors) => sys.error(s"Error downloading ${SpecsUrl}: $errors") case Right(multiService) => { GraphQLCodeGenerator.Default.generate(multiService) match { diff --git a/src/test/scala/io/apibuilder/graphql/ReadmeSpec.scala b/src/test/scala/io/apibuilder/graphql/ReadmeSpec.scala index 9d27ebc..0ddd0ef 100644 --- a/src/test/scala/io/apibuilder/graphql/ReadmeSpec.scala +++ b/src/test/scala/io/apibuilder/graphql/ReadmeSpec.scala @@ -18,9 +18,9 @@ class ReadmeSpec extends AnyWordSpec with Matchers { "https://app.apibuilder.io/apicollective/apibuilder-generator/latest/service.json", "https://app.apibuilder.io/apicollective/apibuilder-api/latest/service.json" ) - ) match { + ).toEither match { case Left(errors) => { - println(s"Error downloading service: " + errors.mkString(", ")) + println(s"Error downloading service: " + errors.toNonEmptyList.toList.mkString(", ")) } case Right(multiService) => { GraphQLCodeGenerator.Default.generate(multiService) match { diff --git a/src/test/scala/io/apibuilder/graphql/generators/helpers/ApiBuilderTypeToGraphQLConverterHelpers.scala b/src/test/scala/io/apibuilder/graphql/generators/helpers/ApiBuilderTypeToGraphQLConverterHelpers.scala index 9d2b4e5..3c56491 100644 --- a/src/test/scala/io/apibuilder/graphql/generators/helpers/ApiBuilderTypeToGraphQLConverterHelpers.scala +++ b/src/test/scala/io/apibuilder/graphql/generators/helpers/ApiBuilderTypeToGraphQLConverterHelpers.scala @@ -14,7 +14,7 @@ trait ApiBuilderTypeToGraphQLConverterHelpers extends MultiServiceBuilders { schema.ApiBuilderTypeToGraphQLConverter( multiService, GraphQLIntent.Query, - namespace = multiService.services().head.namespace, + namespace = multiService.services.head.namespace, ) } diff --git a/src/test/scala/io/apibuilder/graphql/generators/schema/EnumGeneratorSpec.scala b/src/test/scala/io/apibuilder/graphql/generators/schema/EnumGeneratorSpec.scala index d0cca31..fce395e 100644 --- a/src/test/scala/io/apibuilder/graphql/generators/schema/EnumGeneratorSpec.scala +++ b/src/test/scala/io/apibuilder/graphql/generators/schema/EnumGeneratorSpec.scala @@ -13,11 +13,11 @@ class EnumGeneratorSpec extends AnyWordSpec with Matchers private[this] val Namespace = "testns" - private[this] def gen(enum: models.Enum): String = { + private[this] def gen(`enum`: models.Enum): String = { GraphQLType.Enum( ApiBuilderType.Enum( - ApiBuilderService(makeService(enums = Seq(enum), namespace = Namespace)), - enum, + ApiBuilderService(makeService(enums = Seq(`enum`), namespace = Namespace)), + `enum`, ) ).formatted } diff --git a/src/test/scala/io/apibuilder/graphql/util/MultiServiceViewSpec.scala b/src/test/scala/io/apibuilder/graphql/util/MultiServiceViewSpec.scala index 6f65d60..7841f3c 100644 --- a/src/test/scala/io/apibuilder/graphql/util/MultiServiceViewSpec.scala +++ b/src/test/scala/io/apibuilder/graphql/util/MultiServiceViewSpec.scala @@ -14,11 +14,11 @@ class MultiServiceViewSpec extends AnyWordSpec with Matchers { "mutation enums do not have an _input suffix" in { - val enum = makeValidEnum("environment") + val `enum` = makeValidEnum("environment") val model = makeModel(name = "example") val ms = makeMultiService( makeService( - enums = Seq(enum), + enums = Seq(`enum`), models = Seq(model), resources = Seq( makeResource(