@withpotter/invoice — module reference

HTTP routes this module mounts, plus its internal use-cases, entities, and repositories. The exhaustive request/response contract is the engine’s OpenAPI document at /docs; the layered structure below follows the package internal architecture.

HTTP routes

Invoices /invoices

MethodPathAuthDescription
GET/invoicesYesList invoices with filters
GET/invoices/:idYesGet invoice by ID
GET/invoices/:id/pdfYesDownload invoice as PDF
GET/invoices/number/:invoiceNumberGet invoice by number (public or dashboard)
GET/invoices/statsYesGet invoice statistics
POST/invoicesYesCreate a new invoice
POST/invoices/:id/cancelYesCancel an invoice
POST/invoices/:id/payInitialize online payment for an invoice (public)
POST/invoices/:id/paymentYesRecord a manual payment against an invoice
POST/invoices/:id/sendYesSend invoice to customer via email
POST/invoices/number/:invoiceNumber/viewRecord that a customer viewed this invoice (public)
PUT/invoices/:idYesUpdate a draft invoice

Internals

Use-cases

Application operations. Each is a single-purpose class with one execute() method.

Use-caseSignature
CancelInvoiceUseCaseexecute(tenantId: string, id: string): Promise<InvoiceResponseDto>
CreateInvoiceUseCaseexecute(tenantId: string, dto: CreateInvoiceDto): Promise<InvoiceResponseDto>
GenerateInvoicePdfUseCaseexecute(tenantId: string, id: string): Promise<Buffer>
GetInvoiceByNumberUseCaseexecute(tenantId: string, invoiceNumber: string): Promise<InvoiceResponseDto>
GetInvoiceStatsUseCaseexecute(tenantId: string): Promise<InvoiceStatsResponseDto>
GetInvoiceUseCaseexecute(tenantId: string, id: string): Promise<InvoiceResponseDto>
InitializeInvoicePaymentUseCaseexecute(tenantId: string, input: InitializeInvoicePaymentInput): Promise<InitializeInvoicePaymentOutput>
ListInvoicesUseCaseexecute(tenantId: string, query: InvoiceQueryDto): Promise<PaginatedInvoicesResponseDto>
MarkInvoiceViewedUseCaseexecute(tenantId: string, invoiceNumber: string): Promise<InvoiceResponseDto>
RecordPaymentUseCaseexecute(tenantId: string, id: string, dto: RecordPaymentDto): Promise<InvoiceResponseDto>
SendInvoiceUseCaseexecute(tenantId: string, id: string): Promise<InvoiceResponseDto>
UpdateInvoiceUseCaseexecute(tenantId: string, id: string, dto: UpdateInvoiceDto): Promise<InvoiceResponseDto>

Entities

Sequelize models owned by this module.

Invoice — table invoices

FieldType
idstring
tenantIdstring
tenantTenant
memberIdstring | null
memberMember
invoiceNumberstring
statusInvoiceStatus
customerEmailstring
customerNamestring | null
customerPhonestring | null
customerAddressInvoiceAddress | null
subtotalnumber
discountTotalnumber
taxTotalnumber
totalnumber
amountPaidnumber
amountDuenumber
currencystring
issueDatestring
dueDatestring
paidAtDate | null
sentAtDate | null
viewedAtDate | null
viewCountnumber
cancelledAtDate | null
paymentReferencestring | null
paymentMethodstring | null
paymentLinkstring | null
notestring | null
internalNotestring | null
termsstring | null
metadataRecord<string, unknown> | null
relatedTypestring | null
relatedIdstring | null
createdAtDate
updatedAtDate
itemsInvoiceItem[]
idstring
invoiceIdstring
invoiceInvoice
contentIdstring | null
titlestring
descriptionstring | null
quantitynumber
unitPricenumber
discountnumber
taxnumber
totalnumber
positionnumber
metadataRecord<string, unknown> | null
createdAtDate
updatedAtDate

Repositories

Data-access classes wrapping the entities.

InvoiceRepository

findById · findByInvoiceNumber · findByPaymentReference · findWithFilters · findByMember · create · createWithItems · update · updateStatus · markViewed · recordPayment · addItem · updateItem · removeItem · replaceItems · recalculateTotals · generateInvoiceNumber · countByStatus · getPaidRevenueInRange · markOverdueInvoices

Ports

DI contracts other modules bind adapters to.

  • InvoiceMailerTenantConfig, SendInvoiceEmailOptions, InvoiceMailerPort — token INVOICE_MAILER

Generated from the module’s source. Routes are relative to the engine root (default http://localhost:3001). For full request/response schemas use the live OpenAPI document.