Skip to main content

Product

Source: src/data/product/

Service

The product service is a stub (export {}). Not yet implemented.

Repository

ProductRepository

MethodParametersReturns
getById(ctx: RequestContext, id: string)Promise<ProductRecord | null>
listByTenant(ctx: RequestContext)Promise<ProductRecord[]>
create(ctx: RequestContext, record: ProductRecord)Promise<void>
update(ctx: RequestContext, id: string, patch: Partial<Omit<ProductRecord, 'id' | 'tenantId'>>)Promise<ProductRecord>
delete(ctx: RequestContext, id: string)Promise<void>

ProductRecord

FieldType
idstring
tenantIdstring
createdAtDate
updatedAtDate
dataRecord<string, unknown> (optional)

Validators

currencySchema

string — exactly 3 characters, defaults to 'USD'.

productSchema

FieldTypeRequiredDefault
tenantIdstringYes
namestringYes
descriptionstringNo
skustringYes
priceCentsnumber (int, ≥ 0)Yes
currencycurrencySchemaNo'USD'
requiredRoleIdsstring[]No[]
grantedRoleIdsstring[]No[]
isDigitalbooleanNofalse
isActivebooleanNotrue
inventoryTrackedbooleanNotrue
costCentsnumber (int, ≥ 0)No0
qtyVisibilityenum('public' | 'private' | 'inherit')No'inherit'
createdAtDate (coerced)Yes
updatedAtDate (coerced)Yes

productPublicSchema

productSchema.omit({ costCents: true }) — customer-facing output shape. costCents is admin-only and must never appear in public responses.

Inferred Types

  • Productz.infer<typeof productSchema>
  • ProductPublicz.infer<typeof productPublicSchema>