Guest User

Untitled

a guest
Mar 5th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.68 KB | None | 0 0
  1. module LulzBB.ORM where
  2. import Database.HDBC (SqlValue)
  3. import qualified Data.Map as Map
  4. import ORM
  5. import Text.Json (encode, toJSObject)
  6.  
  7. parseSql :: DbRecord a => Map.Map String SqlValue -> Maybe a
  8. parseSql = parseSql' ""
  9.  
  10. class DbRecord a where
  11. parseSql' :: String -> Map.Map String SqlValue -> Maybe a
  12.  
  13.  
  14.  
  15. data Forum = Forum {
  16. forumId :: Integer,
  17. forumName :: String,
  18. forumDesc :: String
  19. } deriving (Show)
  20.  
  21. data Post = Post {
  22. postId :: Integer,
  23. postForum :: Maybe Forum,
  24. postParent :: Maybe Post,
  25. postAuthor :: Maybe User,
  26. postCreated :: Integer,
  27. postRev :: Maybe Rev
  28. } deriving (Show)
  29.  
  30. data Rev = Rev {
  31. revId :: Integer,
  32. revPost :: Maybe Post,
  33. revUpdated :: Integer,
  34. revAuthor :: Maybe User,
  35. revAuthorIp :: String,
  36. revSubject :: String,
  37. revBody :: String
  38. } deriving (Show)
  39.  
  40. data User = User {
  41. userId :: Integer,
  42. userName :: String,
  43. userDisplayName :: String,
  44. userPassword :: String,
  45. userCreated :: Integer,
  46. userLastVisit :: Integer
  47. } deriving (Show)
  48.  
  49. instance DbRecord Forum where
  50. parseSql' pfx sql =
  51. case Map.lookup (pfx ++ "forum_id") sql of
  52. Nothing -> Nothing
  53. _ -> Just $ Forum {
  54. forumId = coerseSql 0 pfx "forum_id" sql,
  55. forumName = coerseSql "" pfx "forum_name" sql,
  56. forumDesc = coerseSql "" pfx "forum_desc" sql }
  57.  
  58. instance DbRecord Post where
  59. parseSql' pfx sql =
  60. case Map.lookup (pfx ++ "post_id") sql of
  61. Nothing -> Nothing
  62. _ -> Just $ Post {
  63. postId = coerseSql 0 pfx "post_id" sql,
  64. postForum = parseSql' pfx sql,
  65. postParent = parseSql' pfx sql,
  66. postAuthor = parseSql' pfx sql,
  67. postCreated = coerseSql 0 pfx "post_created" sql,
  68. postRev = parseSql' pfx sql }
  69.  
  70. instance DbRecord Rev where
  71. parseSql' pfx sql =
  72. case Map.lookup (pfx ++ "rev_id") sql of
  73. Nothing -> Nothing
  74. _ -> Just $ Rev {
  75. revId = coerseSql 0 pfx "rev_id" sql,
  76. revPost = parseSql' pfx sql,
  77. revUpdated = coerseSql 0 pfx "rev_updated" sql,
  78. revAuthor = parseSql' pfx sql,
  79. revAuthorIp = coerseSql "" pfx "rev_author_ip" sql,
  80. revSubject = coerseSql "" pfx "rev_subject" sql,
  81. revBody = coerseSql "" pfx "rev_body" sql }
  82.  
  83. instance DbRecord User where
  84. parseSql' pfx sql =
  85. case Map.lookup (pfx ++ "user_id") sql of
  86. Nothing -> Nothing
  87. _ -> Just $ User {
  88. userId = coerseSql 0 pfx "user_id" sql,
  89. userName = coerseSql "" pfx "user_name" sql,
  90. userDisplayName = coerseSql "" pfx "user_display_name" sql,
  91. userPassword = coerseSql "" pfx "user_password" sql,
  92. userCreated = coerseSql 0 pfx "user_created" sql,
  93. userLastVisit = coerseSql 0 pfx "user_last_visit" sql }
  94.  
  95. instance JSON Forum where
  96. showJSON x = makeObj [
  97. ("forumId", showJSON $ forumId x),
  98. ("forumName", showJSON $ forumName x),
  99. ("forumDesc", showJSON $ forumDesc x)]
  100. readJSON = undefined
  101.  
  102. instance JSON Post where
  103. showJSON x = makeObj [
  104. ("postId", showJSON $ postId x),
  105. ("postForum", showJSON $ postForum x),
  106. ("postParent", showJSON $ postParent x),
  107. ("postAuthor", showJSON $ postAuthor x),
  108. ("postCreated", showJSON $ postCreated x),
  109. ("postRev", showJSON $ postRev x)]
  110. readJSON = undefined
  111.  
  112. instance JSON Rev where
  113. showJSON x = makeObj [
  114. ("revId", showJSON $ revId x),
  115. ("revPost", showJSON $ revPost x),
  116. ("revUpdated", showJSON $ revUpdated x),
  117. ("revAuthor", showJSON $ revAuthor x),
  118. ("revAuthorIp", showJSON $ revAuthorIp x),
  119. ("revSubject", showJSON $ revSubject x),
  120. ("revBody", showJSON $ revBody x)]
  121. readJSON = undefined
  122.  
  123. instance JSON User where
  124. showJSON x = makeObj [
  125. ("userId", showJSON $ userId x),
  126. ("userName", showJSON $ userName x),
  127. ("userDisplayName", showJSON $ userDisplayName x),
  128. ("userPassword", showJSON $ userPassword x),
  129. ("userCreated", showJSON $ userCreated x),
  130. ("userLastVisit", showJSON $ userLastVisit x)]
  131. readJSON = undefined
Add Comment
Please, Sign In to add comment