Skip to main content
Version: 0.14.0 (Latest)

📐 Order schemas

Order schemas define the strict stored-order shape and attach request validation to the Order feature routes.

Inventory

ExportRequest locationContract
orderSchemaN/AStrict reusable order object.
createOrderSchemaBodyRequired JSON order body.
updateOrderSchemaPath, bodyOrder ID plus required JSON body.
getOrderSchemaPathRequired string order ID.
deleteOrderSchemaPathRequired string order ID.
findOrdersSchemaQueryOptional filters plus bounded pagination.
View shared source context
const orderIdPathParameter: OpenAPIParameter = {
in: 'path',
name: 'orderId',
required: true,
schema: {
type: 'string',
},
};

Details

orderSchema

Definition

The reusable strict JSON Schema shape that createOrderSchema and updateOrderSchema spread. It is not itself attached to a route. Stored documents may also have source-generated base-entity fields and MongoDB _id; _id is not part of this schema and is removed by Order response terminators.

LocationFieldTypeRequiredConstraints
BodycurrencystringNoNo format or enum.
BodyidentityIdstringNoUUID format.
BodyitemsarrayNoEach item is the strict nested object below.
Body / items[]pricenumberYesMinimum 0; no additional properties in an item.
Body / items[]productIdstringYesUUID format.
Body / items[]quantitynumberYesMinimum 1.
BodyorganizationIdstringNoUUID format.
BodystatusstringNoNo enum.
BodysubtotalnumberNoMinimum 0.
BodytaxnumberNoMinimum 0.
BodytotalnumberNoMinimum 0.

The outer object and each items[] object have additionalProperties: false.

Used by route: Indirectly through createOrderRoute and updateOrderRoute. Used by feature: Indirectly through createOrderFeature and updateOrderFeature.

View complete source
export const orderSchema: SchemaDefinition = {
$schema: 'http://json-schema.org/draft-07/schema#',
additionalProperties: false,
properties: {
currency: {type: 'string'},
identityId: {format: 'uuid', type: 'string'},
items: {
items: {
additionalProperties: false,
properties: {
price: {minimum: 0, type: 'number'},
productId: {format: 'uuid', type: 'string'},
quantity: {minimum: 1, type: 'number'},
},
required: ['productId', 'quantity', 'price'],
type: 'object',
},
type: 'array',
},
organizationId: {format: 'uuid', type: 'string'},
status: {type: 'string'},
subtotal: {minimum: 0, type: 'number'},
tax: {minimum: 0, type: 'number'},
total: {minimum: 0, type: 'number'},
},
type: 'object',
};

createOrderSchema

Definition

Validates the required application/json body for createOrderRoute, composed by createOrderFeature. It spreads orderSchema, so the body is strict.

LocationFieldTypeRequiredConstraints
BodyidentityIdstringYesUUID format.
BodyitemsarrayYesStrict item objects; each requires UUID productId, number quantity1, and number price0.
BodytotalnumberYesMinimum 0.
Bodycurrency, organizationId, status, subtotal, taxAs in orderSchemaNoThe spread schema defines the exact formats and minimums.

Used by route: createOrderRoute. Used by feature: createOrderFeature.

View complete source
export const createOrderSchema = withSchema({
requestBody: {
content: {
'application/json': {
schema: {
...orderSchema,
required: ['identityId', 'items', 'total'],
},
},
},
required: true,
},
});

updateOrderSchema

Definition

Validates updateOrderRoute, composed by updateOrderFeature. The JSON body is required but its spread schema has required: []; runtime updateOrder additionally rejects an empty object.

LocationFieldTypeRequiredConstraints
PathorderIdstringYesNo format or pattern.
BodyAll orderSchema fieldsAs in reusable schemaNoapplication/json; strict outer/nested objects; no body property is schema-required.

Used by route: updateOrderRoute. Used by feature: updateOrderFeature.

View complete source
export const updateOrderSchema = withSchema({
parameters: [{...orderIdPathParameter}],
requestBody: {
content: {
'application/json': {
schema: {
...orderSchema,
required: [],
},
},
},
required: true,
},
});

getOrderSchema

Definition

Validates the path for getOrderRoute, composed by getOrderFeature. It has no query or request body.

LocationFieldTypeRequiredConstraints
PathorderIdstringYesNo format or pattern.

Used by route: getOrderRoute. Used by feature: getOrderFeature.

View complete source
export const getOrderSchema = withSchema({
parameters: [{...orderIdPathParameter}],
});

deleteOrderSchema

Definition

Validates the path for deleteOrderRoute, composed by deleteOrderFeature. It has no query or request body.

LocationFieldTypeRequiredConstraints
PathorderIdstringYesNo format or pattern.

Used by route: deleteOrderRoute. Used by feature: deleteOrderFeature.

View complete source
export const deleteOrderSchema = withSchema({
parameters: [{...orderIdPathParameter}],
});

findOrdersSchema

Definition

Validates query inputs for findOrdersRoute, composed by findOrdersFeature. It has no path parameter or body. withPagination consumes page and limit before findOrders receives the remaining query as its Mongo filter.

LocationFieldTypeRequiredConstraints
QuerycurrencystringNoNo format or enum.
QueryorganizationIdstringNoNo format or pattern.
QuerystatusstringNoNo enum.
QuerysubtotalnumberNoMinimum 0.
QuerytaxnumberNoMinimum 0.
QuerytotalnumberNoMinimum 0.
QueryidentityIdstringNoNo format or pattern.
QuerypageintegerNoShared pagination; minimum 1, maximum 1000.
QuerylimitintegerNoShared pagination; minimum 1, maximum 50.

Used by route: findOrdersRoute. Used by feature: findOrdersFeature.

View complete source
export const findOrdersSchema = withSchema({
parameters: [
{
in: 'query',
name: 'currency',
required: false,
schema: {
type: 'string',
},
},
{
in: 'query',
name: 'organizationId',
required: false,
schema: {
type: 'string',
},
},
{
in: 'query',
name: 'status',
required: false,
schema: {
type: 'string',
},
},
{
in: 'query',
name: 'subtotal',
required: false,
schema: {
minimum: 0,
type: 'number',
},
},
{
in: 'query',
name: 'tax',
required: false,
schema: {
minimum: 0,
type: 'number',
},
},
{
in: 'query',
name: 'total',
required: false,
schema: {
minimum: 0,
type: 'number',
},
},
{
in: 'query',
name: 'identityId',
required: false,
schema: {
type: 'string',
},
},
...paginationQueryParametersSchema,
],
});