File tree 3 files changed +40
-0
lines changed
3 files changed +40
-0
lines changed Original file line number Diff line number Diff line change
1
+ <apply template =" base" >
2
+ <h1 >Blog Posts</h1 >
3
+ <ul >
4
+ <blogPosts >
5
+ <li >
6
+ <strong ><title /></strong >
7
+ <p ><postContent /></p >
8
+ </li >
9
+ </blogPosts >
10
+ </ul >
11
+ </apply >
Original file line number Diff line number Diff line change @@ -10,13 +10,26 @@ module Models where
10
10
11
11
import Data.Text
12
12
import Data.Time.Clock
13
+ import Control.Monad.IO.Class (MonadIO )
13
14
14
15
import Database.Persist.TH
15
16
import Snap.Snaplet.Auth.Backends.Persistent (authEntityDefs )
16
17
18
+ import qualified Database.Esqueleto as E
19
+
17
20
share [mkPersist sqlSettings, mkMigrate " migrateAll" ] $ authEntityDefs ++ [persistLowerCase |
18
21
BlogPost
19
22
title String
20
23
content String
21
24
deriving Eq Show
22
25
|]
26
+
27
+ selectBlogPosts :: MonadIO m => E. SqlPersistT m [BlogPost ]
28
+ selectBlogPosts = do
29
+ posts <-
30
+ E. select $
31
+ E. from $ \ blogPost -> do
32
+ E. orderBy [E. asc (blogPost E. ^. BlogPostTitle )]
33
+ E. limit 3
34
+ return blogPost
35
+ return $ E. entityVal <$> posts
Original file line number Diff line number Diff line change @@ -63,12 +63,28 @@ handleNewUser = method GET handleForm <|> method POST handleFormSubmit
63
63
handleFormSubmit = registerUser " login" " password" >> redirect " /"
64
64
65
65
66
+ ------------------------------------------------------------------------------
67
+ -- | Handle the blog posts view when logged in
68
+ handleBlogPosts :: Handler App (AuthManager App ) ()
69
+ handleBlogPosts = do
70
+ blogPosts <- runPersist selectBlogPosts
71
+ renderWithSplices " blog_posts" (splices blogPosts)
72
+ where
73
+ splices bps =
74
+ " blogPosts" ## I. mapSplices (I. runChildrenWith . splicesFromBlogPost) bps
75
+
76
+ splicesFromBlogPost p = do
77
+ " title" ## I. textSplice (T. pack (blogPostTitle p))
78
+ " postContent" ## I. textSplice (T. pack (blogPostContent p))
79
+
80
+
66
81
------------------------------------------------------------------------------
67
82
-- | The application's routes.
68
83
routes :: [(ByteString , Handler App App () )]
69
84
routes = [ (" /login" , with auth handleLoginSubmit)
70
85
, (" /logout" , with auth handleLogout)
71
86
, (" /new_user" , with auth handleNewUser)
87
+ , (" /posts" , with auth handleBlogPosts)
72
88
, (" " , serveDirectory " static" )
73
89
]
74
90
You can’t perform that action at this time.
0 commit comments