@@ -46,7 +46,7 @@ npm install
46
46
This project uses:
47
47
48
48
- [ Zod] ( https://zod.dev/ ) to define and validate the structure of form submissions.
49
- - [ pdfkit] ( https://pdfkit.org/ ) to generate pdfs from html templates.
49
+ - [ pdfkit] ( https://pdfkit.org/ ) to generate PDFs from html templates.
50
50
51
51
### Install Zod
52
52
@@ -56,7 +56,7 @@ npm install zod pdfkit
56
56
57
57
### Define a schema for form submissions
58
58
59
- Create a file at ` src/forms/ form/schema.ts` :
59
+ Create a file at ` form/schema.ts ` :
60
60
61
61
``` ts title:src/forms/form/schema.ts
62
62
import { z } from ' zod'
@@ -76,7 +76,7 @@ This schema ensures that any incoming submission contains a valid name, a 1–5
76
76
77
77
Create and configure the cloud resources your backend will use, such as storage buckets, queues, and key-value stores.
78
78
79
- ` ` ` ts title : src / resources /resources .ts
79
+ ` ` ` ts title : resources /resources .ts
80
80
import { bucket , kv , topic } from ' @nitric/sdk'
81
81
82
82
export const output = bucket (' receipts' ).allow (' read' , ' write' )
@@ -89,10 +89,10 @@ export const receipts = topic('form-submitted')
89
89
90
90
Create an API route that validates and stores form submissions, then triggers further processing.
91
91
92
- ``` ts title:src/ services/forms.ts
92
+ ``` ts title:services/forms.ts
93
93
import { api } from ' @nitric/sdk'
94
94
import { submissions , submitted } from ' ../resources/resources'
95
- import { SubmissionSchema } from ' .../forms /form/schema'
95
+ import { SubmissionSchema } from ' ../form/schema'
96
96
97
97
const formApi = api (' forms' )
98
98
@@ -118,9 +118,9 @@ formApi.post('/forms/:formId', async (ctx) => {
118
118
119
119
Listen for submitted events and generate a formatted PDF receipt from the stored data.
120
120
121
- ``` ts title:src/ services/pdfs.ts
121
+ ``` ts title:services/pdfs.ts
122
122
import { receipts , submissions , output } from ' ../resources/resources'
123
- import { buildReceipt } from ' ../forms/ form/receipt'
123
+ import { buildReceipt } from ' ../form/receipt'
124
124
125
125
receipts .subscribe (async (ctx ) => {
126
126
const { id } = ctx .req .json ()
@@ -144,7 +144,7 @@ receipts.subscribe(async (ctx) => {
144
144
145
145
### Build the PDF Receipt
146
146
147
- ``` ts title:src/forms/ form/receipt.ts
147
+ ``` ts title:form/receipt.ts
148
148
import PDFDocument from ' pdfkit'
149
149
import { Submission } from ' ./schema'
150
150
@@ -198,7 +198,7 @@ This PDF output is fairly plain, you can enhance it further using layout templat
198
198
199
199
Simulate or perform delivery of the receipt (e.g. via email or other downstream systems).
200
200
201
- ``` ts title:src/ services/deliver.ts
201
+ ``` ts title:services/deliver.ts
202
202
import { receipts } from ' ../resources/resources'
203
203
204
204
receipts .subscribe (async (ctx ) => {
@@ -213,7 +213,7 @@ receipts.subscribe(async (ctx) => {
213
213
214
214
Create an endpoint that returns a download URL for the generated receipt file.
215
215
216
- ``` ts title:src/apis /receipts.ts
216
+ ``` ts title:services /receipts.ts
217
217
import { api } from ' @nitric/sdk'
218
218
import { output } from ' ../resources/resources'
219
219
0 commit comments