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​

  • Product — z.infer<typeof productSchema>
  • ProductPublic — z.infer<typeof productPublicSchema>