models.dsl.examples.cardinalityoverrides.TaxBlaster.rapid Maven / Gradle / Ivy
/*
This example shows cardinality overrides. The data type definition for Person
allows zero or more addresses, but the TaxBlaster system requires at least one
address. This additional constraint is enforced in PersonObject and
PersonCollection, within the includedProperties list.
*/
rapidModel TaxBlaster
resourceAPI TaxBlasterInterface baseURI "http://taxblaster.com/api"
/** The Index Resource is the entry point to the TaxBlaster API. To minimize
coupling, consuming applications should start here, and follow the links to
related resources. */
objectResource IndexObject type Index
URI index
/*
By default, reference links will use the reference property name
as the link relation. Here, we are overriding the reference
links to use the IANA-registered 'subsection' link relation.
http://www.iana.org/assignments/link-relations/link-relations.xhtml
*/
referenceLink > people
targetResource PersonCollection
linkRelation subsection
referenceLink > taxFilings
targetResource TaxFilingCollection
linkRelation subsection
mediaTypes
application/json
method GET getIndex
response IndexObject statusCode 200
response statusCode 404
/** The list of Tax Filings visible to the authorized user. */
default collectionResource TaxFilingCollection type TaxFiling
URI /taxFilings
mediaTypes
application/json
method GET getTaxFilingCollection
request
response TaxFilingCollection statusCode 200
method POST updateTaxFilingCollection
request TaxFilingCollection
response statusCode 200
response statusCode 400
/** The list of TaxBlaster users. The results will vary in membership and level
of detail, depending on your access privileges. */
default collectionResource PersonCollection type Person
URI /people
only properties
taxpayerID
lastName
firstName
otherNames
netWorth
netWorthSpecialValue
preferredLanguage
DOB
taxFilings
addresses+ // must have at least one address
mediaTypes
application/json
method GET getPersonCollection
request
response PersonCollection statusCode 200
method POST updatePersonCollection
request PersonCollection
response statusCode 200
response statusCode 400
/** An individual Tax Filing record, accessed by its ID */
objectResource TaxFilingObject type TaxFiling
URI taxFilings/{id}
/** filingID of the requested TaxFiling */
required templateParam id property filingID
referenceLink > taxpayer
targetResource PersonObject
targetProperties
taxpayerID
firstName
mediaTypes
application/json
method GET getTaxFiling
request
response TaxFilingObject statusCode 200
response statusCode 404
/** An individual user by ID. */
objectResource PersonObject type Person
URI people/{id}
/** taxpayerID of the requested Person */
required templateParam id property taxpayerID
only properties
taxpayerID
lastName
firstName
otherNames
netWorth
netWorthSpecialValue
preferredLanguage
DOB
taxFilings
addresses+ // must have at least one address
mediaTypes
application/json
method GET getPersonObject
request
response PersonObject statusCode 200
method PUT putPersonObject
request PersonObject
response statusCode 200
response statusCode 400
objectResource PersonTaxFilingCollection type Person
URI /people/{id}/taxFilings
/* Subset of person properties included here. */
only properties
taxpayerID
lastName
firstName
/* Tax filings data will be embedded within the Person representation. */
referenceEmbed > taxFilings
targetProperties
currency
filingID
grossIncome
jurisdiction
period
status
taxLiability
year
mediaTypes
application/json
method GET getPersonTaxFilingCollection
request
response PersonTaxFilingCollection statusCode 200
method PUT putPersonTaxFilingCollection
request PersonTaxFilingCollection
response statusCode 200
response statusCode 400
/** Supporting data types for the TaxBlaster API */
dataModel TaxBlasterDataModel
/** A tax filing record for a given user, in a given tax jurisdiction, in a
specified tax year. */
structure TaxFiling
/** A unique, system-assigned identifier for the tax filing. */
filingID : string
/** Reference to the person who owns this filing. */
taxpayer : reference to Person inverse taxFilings
/** Country, province, state or local tax authority where this is being filed.
*/
jurisdiction : string
/** Tax year */
year : gYear
/** Period within the year, if any */
period : int
/** Currency code */
currency : CurrencyCodeEnum
/** Total income reported on tax filing. */
grossIncome : decimal
/** Net tax liability */
taxLiability : decimal
/** Tax filing status */
status : TaxFilingStatusEnum
/** A TaxBlaster user. */
structure Person
/** A unique, system-assigned identifier for the user. */
taxpayerID : string
/** Legal family name. */
lastName : string
/** Legal first name. */
firstName : string
/** Names previously used **/
otherNames : string*
/** Net worth, if known */
netWorth : decimal
/** Net worth special value */
netWorthSpecialValue : SpecialValueEnum
/** Preferred language for communications with this person */
preferredLanguage : string
/** Date of birth */
DOB : date
/* Inverse reference to TaxFilings. PersonObject will have
a list of hyperlinks to TaxFilingObject, the inverse of the
TaxFilingObject.taxpayer hyperlink. Note that the inverse
keyword must also be specified on TaxFiling.taxpayer
*/
/** Tax filings on record for this individual */
taxFilings : reference to TaxFiling* inverse taxpayer
/** Postal addresses, zero or more */
addresses : containing Address*
/** The supporting data type for the Index resource. Not meaningful as a
business entity, but required to support a single point of entry. */
structure Index
people : reference to Person*
taxFilings : reference to TaxFiling*
/** Tax filing status enumeration, using default values */
enum int TaxFilingStatusEnum
DRAFT
PENDING_CPA_REVIEW
PENDING_CLIENT_REVIEW
FILED
AMENDED
CLOSED
/** Special Value Enum, using explicit integer values */
enum int SpecialValueEnum
NORMAL_VALUE : 0
NOT_AVAILABLE : -65534
NOT_APPLICABLE : -65533
RESTRICTED : -65532
/** Currency code enum, using explicit string values */
enum string CurrencyCodeEnum
EUR : "Euro"
CAD : "Canadian Dollar"
USD : "US Dollar"
CHF : "Swiss Franc"
JPY : "Japanese Yen"
INR : "Indian Rupee"
BRL : "Brazilian Real"
/** Postal address */
structure Address
street1 : string
street2 : string?
city : string
stateOrProvince : string
postalCode : string
country : string