Skip to content

Commit 4692ced

Browse files
author
Ryan Trinkle
committed
Add redirect functionality.
1 parent 5ed5a20 commit 4692ced

3 files changed

Lines changed: 17 additions & 2 deletions

File tree

.ghci

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
:set -XOverloadedStrings
33
:set -XTemplateHaskell
44
:set -XFlexibleInstances
5+
:set -XScopedTypeVariables

memoise.cabal

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Name: memoise
2-
Version: 0.8
2+
Version: 0.9
33
License: BSD3
44
Author: Ryan Trinkle
55
Maintainer: ryan.trinkle@gmail.com
@@ -26,3 +26,4 @@ Executable memoise
2626
Extensions: OverloadedStrings
2727
, TemplateHaskell
2828
, FlexibleInstances
29+
, ScopedTypeVariables

src/Main.hs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import Snap
22
import Snap.Snaplet.Heist
33
import Snap.Snaplet.PostgresqlSimple
44
import Snap.Util.FileServe
5+
import Snap.Extras.CoreUtils
56
import Snap.Extras.TextUtils
67
import Control.Lens
78
import 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+
4557
mainTextboxAttributeSplice :: AttrSplice (Handler Memoise Memoise)
4658
mainTextboxAttributeSplice _ = 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

Comments
 (0)