@@ -25,7 +25,17 @@ router.get('/recipes/:id', async (req, res) => {
2525 const db = await getDbConnection ( )
2626 const recipeId = req . params . id
2727 const recipe = await db . get ( 'SELECT * FROM recipes WHERE id = ?' , [ recipeId ] )
28- res . render ( 'recipe' , { recipe } )
28+ let isFavorited = false
29+
30+ if ( req . session . user && recipe ) {
31+ const favorite = await db . get (
32+ 'SELECT id FROM favorites WHERE user_id = ? AND recipe_id = ?' ,
33+ [ req . session . user . id , recipeId ]
34+ )
35+ isFavorited = Boolean ( favorite )
36+ }
37+
38+ res . render ( 'recipe' , { recipe, isFavorited } )
2939} )
3040
3141router . get ( '/register' , ( req , res ) => {
@@ -85,7 +95,40 @@ router.post('/logout', (req, res) => {
8595} )
8696
8797router . get ( '/profile' , requireAuth , async ( req , res ) => {
88- res . render ( 'profile' , { user : req . session . user } )
98+ const db = await getDbConnection ( )
99+ const favorites = await db . all (
100+ `SELECT recipes.*
101+ FROM recipes
102+ INNER JOIN favorites ON favorites.recipe_id = recipes.id
103+ WHERE favorites.user_id = ?
104+ ORDER BY recipes.title ASC` ,
105+ [ req . session . user . id ]
106+ )
107+ res . render ( 'profile' , {
108+ user : req . session . user ,
109+ favorites,
110+ hasFavorites : favorites . length > 0 ,
111+ } )
112+ } )
113+
114+ router . post ( '/recipes/:id/favorite' , requireAuth , async ( req , res ) => {
115+ const db = await getDbConnection ( )
116+ const recipeId = req . params . id
117+ await db . run ( 'INSERT OR IGNORE INTO favorites (user_id, recipe_id) VALUES (?, ?)' , [
118+ req . session . user . id ,
119+ recipeId ,
120+ ] )
121+ res . redirect ( `/recipes/${ recipeId } ` )
122+ } )
123+
124+ router . post ( '/recipes/:id/unfavorite' , requireAuth , async ( req , res ) => {
125+ const db = await getDbConnection ( )
126+ const recipeId = req . params . id
127+ await db . run ( 'DELETE FROM favorites WHERE user_id = ? AND recipe_id = ?' , [
128+ req . session . user . id ,
129+ recipeId ,
130+ ] )
131+ res . redirect ( `/recipes/${ recipeId } ` )
89132} )
90133
91134router . post ( '/recipes' , async ( req , res ) => {
0 commit comments