@@ -11,13 +11,15 @@ import type { User } from './models/users.ts'
1111import { getCurrentUser } from './utils/context.ts'
1212import { render } from './utils/render.ts'
1313import { RestfulForm } from './components/restful-form.tsx'
14+ import { ensureCart } from './middleware/cart.ts'
1415
1516export default {
1617 use : [ loadAuth ] ,
1718 handlers : {
1819 index ( { session } ) {
19- let cart = getCart ( session . get ( 'userId' ) )
20- let total = getCartTotal ( cart )
20+ let cartId = session . get ( 'cartId' )
21+ let cart = cartId ? getCart ( cartId ) : null
22+ let total = cart ? getCartTotal ( cart ) : 0
2123
2224 let user : User | null = null
2325 try {
@@ -31,7 +33,7 @@ export default {
3133 < h1 > Shopping Cart</ h1 >
3234
3335 < div class = "card" >
34- { cart . items . length > 0 ? (
36+ { cart && cart . items . length > 0 ? (
3537 < >
3638 < table >
3739 < thead >
@@ -135,52 +137,55 @@ export default {
135137 } ,
136138
137139 api : {
138- async add ( { session, formData } ) {
139- // Simulate network latency
140- await new Promise ( ( resolve ) => setTimeout ( resolve , 1000 ) )
140+ use : [ ensureCart ] ,
141+ handlers : {
142+ async add ( { session, formData } ) {
143+ // Simulate network latency
144+ await new Promise ( ( resolve ) => setTimeout ( resolve , 1000 ) )
141145
142- let bookId = formData . get ( 'bookId' ) ?. toString ( ) ?? ''
146+ let bookId = formData . get ( 'bookId' ) ?. toString ( ) ?? ''
143147
144- let book = getBookById ( bookId )
145- if ( ! book ) {
146- return new Response ( 'Book not found' , { status : 404 } )
147- }
148+ let book = getBookById ( bookId )
149+ if ( ! book ) {
150+ return new Response ( 'Book not found' , { status : 404 } )
151+ }
148152
149- addToCart ( session . get ( 'userId' ) , book . id , book . slug , book . title , book . price , 1 )
153+ addToCart ( session . get ( 'cartId' ) ! , book . id , book . slug , book . title , book . price , 1 )
150154
151- if ( formData . get ( 'redirect' ) === 'none' ) {
152- return new Response ( null , { status : 204 } )
153- }
155+ if ( formData . get ( 'redirect' ) === 'none' ) {
156+ return new Response ( null , { status : 204 } )
157+ }
154158
155- return redirect ( routes . cart . index . href ( ) )
156- } ,
159+ return redirect ( routes . cart . index . href ( ) )
160+ } ,
157161
158- async update ( { session, formData } ) {
159- let bookId = formData . get ( 'bookId' ) ?. toString ( ) ?? ''
160- let quantity = parseInt ( formData . get ( 'quantity' ) ?. toString ( ) ?? '1' , 10 )
162+ async update ( { session, formData } ) {
163+ let bookId = formData . get ( 'bookId' ) ?. toString ( ) ?? ''
164+ let quantity = parseInt ( formData . get ( 'quantity' ) ?. toString ( ) ?? '1' , 10 )
161165
162- updateCartItem ( session . get ( 'userId' ) , bookId , quantity )
166+ updateCartItem ( session . get ( 'cartId' ) ! , bookId , quantity )
163167
164- if ( formData . get ( 'redirect' ) === 'none' ) {
165- return new Response ( null , { status : 204 } )
166- }
168+ if ( formData . get ( 'redirect' ) === 'none' ) {
169+ return new Response ( null , { status : 204 } )
170+ }
167171
168- return redirect ( routes . cart . index . href ( ) )
169- } ,
172+ return redirect ( routes . cart . index . href ( ) )
173+ } ,
170174
171- async remove ( { session, formData } ) {
172- // Simulate network latency
173- await new Promise ( ( resolve ) => setTimeout ( resolve , 1000 ) )
175+ async remove ( { session, formData } ) {
176+ // Simulate network latency
177+ await new Promise ( ( resolve ) => setTimeout ( resolve , 1000 ) )
174178
175- let bookId = formData . get ( 'bookId' ) ?. toString ( ) ?? ''
179+ let bookId = formData . get ( 'bookId' ) ?. toString ( ) ?? ''
176180
177- removeFromCart ( session . get ( 'userId' ) , bookId )
181+ removeFromCart ( session . get ( 'cartId' ) ! , bookId )
178182
179- if ( formData . get ( 'redirect' ) === 'none' ) {
180- return new Response ( null , { status : 204 } )
181- }
183+ if ( formData . get ( 'redirect' ) === 'none' ) {
184+ return new Response ( null , { status : 204 } )
185+ }
182186
183- return redirect ( routes . cart . index . href ( ) )
187+ return redirect ( routes . cart . index . href ( ) )
188+ } ,
184189 } ,
185190 } ,
186191 } ,
0 commit comments