haskellblog / src / Blog / Post.hs

module Blog.Post where

import Database.HDBC
import Blog.DBUtils (makeSlugGeneric, slugFromTitle)
import qualified Blog.DB as DB

data Post = Post {
      uid :: Int,
      title :: String,
      slug :: String,
      post_raw :: String,
      post_formatted :: String,
      summary_raw :: String,
      summary_formatted :: String,
      format_id :: Int,
      timestamp :: Int,
      comments_open :: Bool
    } deriving (Show, Eq)

addPost cn p = do { theslug <- makePostSlug cn p;
                    p2 <- return $ p { slug = theslug };
                    DB.doInsert cn "posts"
                    ["title",
                     "slug",
                     "post_raw",
                     "post_formatted",
                     "summary_raw",
                     "summary_formatted",
                     "format_id",
                     "timestamp",
                     "comments_open"]
                    [toSql $ title p2,
                     toSql $ slug p2,
                     toSql $ post_raw p2,
                     toSql $ post_formatted p2,
                     toSql $ summary_raw p2,
                     toSql $ summary_formatted p2,
                     toSql $ format_id p2,
                     toSql $ timestamp p2,
                     toSql $ comments_open p2];
                    [[newid]] <- quickQuery cn "SELECT last_insert_rowid();" [];
                    return p2 { uid = fromSql $ newid } ;
                  }

makePostSlug cn p = makeSlugGeneric cn (slugFromTitle $ title p) "posts" 1
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.