@@ -2,6 +2,7 @@ import Snap
22import Snap.Snaplet.Heist
33import Snap.Snaplet.PostgresqlSimple
44import Snap.Util.FileServe
5+ import Snap.Extras.CoreUtils
56import Snap.Extras.TextUtils
67import Control.Lens
78import Data.Text
@@ -38,10 +39,21 @@ indexHandler = do
3839 case mUrl of
3940 Just url -> do
4041 urlId <- getUrlId $ decodeUtf8 url
41- mainTextboxContents .= Just (" URL saved with id " <> showT urlId)
42+ mainTextboxContents .= Just (" http://memoi.se/ " <> showT urlId)
4243 render " index"
4344 Nothing -> render " index"
4445
46+ redirectHandler :: Handler Memoise Memoise ()
47+ redirectHandler = do
48+ mUrlId :: Maybe Integer <- readMayParam " urlId"
49+ case mUrlId of
50+ Nothing -> redirect " /"
51+ Just urlId -> do
52+ results <- query " SELECT url FROM urls WHERE id = ?" (Only urlId)
53+ case results of
54+ (Only url) : _ -> redirect url
55+ [] -> redirect " /"
56+
4557mainTextboxAttributeSplice :: AttrSplice (Handler Memoise Memoise )
4658mainTextboxAttributeSplice _ = do
4759 mContents <- lift $ use mainTextboxContents
@@ -55,6 +67,7 @@ memoiseInit = makeSnaplet "memoise" "The world's laziest hyperlink shortener" No
5567 modifyHeistState $ bindAttributeSplices [(" main-textbox" , mainTextboxAttributeSplice)]
5668 d <- nestSnaplet " db" db pgsInit
5769 addRoutes [ (" static" , serveDirectory " static" )
70+ , (" :urlId" , redirectHandler)
5871 , (" " , indexHandler)
5972 ]
6073 return $ Memoise { _heist = h
0 commit comments