{-# LANGUAGE NoMonomorphismRestriction #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE NamedFieldPuns #-}

module Bamboo.Controller.Post where

import Bamboo.Controller.Env
import qualified Bamboo.Model.Counter as Counter
import qualified Bamboo.Model.Post as Post
import qualified Bamboo.Type as T
import qualified Bamboo.Type.State as S

post :: Controller
post = do
  init_state
  
  env <- get ^ env
  let uid = env .uri .Post.uri_to_id
  
  post_model <- T.get uid .io >>= init_post_meta_data
  
  let posts = [post_model]
  comments <- list_for uid .io
  
  when (has_extension Counter) $
    Counter.hit uid .io
  
  s <- get
  human_test_data <- S.mk_human_test .io
  put s
    { uid
    , S.resource_title = post_model.resource_title
    , human_test_data
    , posts
    , comments
    }