|
1 | 1 | import { getApplication } from '@event-driven-io/emmett-honojs'; |
2 | | -import { pongoClient, type PongoDb } from '@event-driven-io/pongo'; |
3 | | -import { d1Driver } from '@event-driven-io/pongo/cloudflare'; |
4 | | -import { Hono } from 'hono'; |
| 2 | +import { env } from 'cloudflare:workers'; |
5 | 3 | import { migrationsApi } from './migrations'; |
6 | | -import pongoConfig from './pongo.config'; |
7 | | -import { shoppingCartApi } from './shoppingCarts'; |
8 | | - |
9 | | -type Bindings = Omit<CloudflareBindings, 'ENVIRONMENT'> & { |
10 | | - ENVIRONMENT: 'development' | 'production' | 'test'; |
11 | | - MIGRATION_TOKEN?: string; |
12 | | -}; |
13 | | - |
14 | | -let pongoDb: PongoDb | undefined; |
15 | | - |
16 | | -const getPongoDb = (env: Bindings): PongoDb => { |
17 | | - pongoDb ??= pongoClient({ |
18 | | - driver: d1Driver, |
19 | | - database: env.DB, |
20 | | - schema: { |
21 | | - definition: pongoConfig.schema, |
22 | | - autoMigration: |
23 | | - env.ENVIRONMENT === 'development' ? 'CreateOrUpdate' : 'None', |
24 | | - }, |
25 | | - }).database; |
26 | | - return pongoDb; |
27 | | -}; |
28 | | - |
29 | | -const unitPrices: Readonly<Record<string, number>> = { |
30 | | - 'product-1': 1000, |
31 | | - 'product-2': 2500, |
32 | | -}; |
33 | | - |
34 | | -const getUnitPrice = (productId: string): Promise<number> => { |
35 | | - const unitPrice = unitPrices[productId]; |
36 | | - if (unitPrice === undefined) throw new Error('Product not found'); |
37 | | - return Promise.resolve(unitPrice); |
38 | | -}; |
39 | | - |
40 | | -const api = new Hono<{ Bindings: Bindings }>(); |
41 | | -migrationsApi(getPongoDb)(api); |
42 | | -shoppingCartApi(getPongoDb, getUnitPrice, () => new Date())(api); |
43 | | - |
44 | | -const app = getApplication({ apis: [] }); |
45 | | -app.route('/', api); |
46 | | - |
47 | | -export default app; |
| 4 | +import { pongoDb } from './pongo'; |
| 5 | +import { getUnitPrice, shoppingCartApi } from './shoppingCarts'; |
| 6 | + |
| 7 | +export default getApplication({ |
| 8 | + apis: [ |
| 9 | + migrationsApi({ pongoDb, migrationToken: env.MIGRATION_TOKEN }), |
| 10 | + shoppingCartApi({ |
| 11 | + pongoDb, |
| 12 | + getUnitPrice, |
| 13 | + getCurrentTime: () => new Date(), |
| 14 | + }), |
| 15 | + ], |
| 16 | +}); |
0 commit comments