summaryrefslogtreecommitdiff
path: root/haunt/jakob/dynamic/capabilities/comments.scm
diff options
context:
space:
mode:
Diffstat (limited to 'haunt/jakob/dynamic/capabilities/comments.scm')
-rw-r--r--haunt/jakob/dynamic/capabilities/comments.scm49
1 files changed, 34 insertions, 15 deletions
diff --git a/haunt/jakob/dynamic/capabilities/comments.scm b/haunt/jakob/dynamic/capabilities/comments.scm
index 314ae75..044852b 100644
--- a/haunt/jakob/dynamic/capabilities/comments.scm
+++ b/haunt/jakob/dynamic/capabilities/comments.scm
@@ -21,37 +21,56 @@
#:use-module (jakob dynamic util)
#:use-module (json)
#:use-module (squee)
+ #:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-19)
+ #:use-module (srfi srfi-26)
#:use-module (web request)
#:use-module (web response)
#:use-module (web uri)
#:export (get-comments
get-comments-by-slug
put-comment
- put-reaction))
+ put-reaction
+
+ internal-comment?
+ internal-comment-id
+ internal-comment-name
+ internal-comment-subject
+ internal-comment-email
+ internal-comment-comment
+ internal-comment-url
+ internal-comment-publish-time
+ internal-comment-reactions))
(define conn (connect-to-postgres-paramstring "dbname=jakob_comments"))
+(define-json-type <internal-comment>
+ (id)
+ (name)
+ (subject)
+ (email)
+ (comment)
+ (url)
+ (publish-time)
+ (reactions))
+
(define (get-comments-by-slug slug)
"Internal function for querying the approved comments on a post
This interface exists for dynamically generating the comment view from Haunt."
- (define (format-comment comment)
- (match comment
- ((id name subject email comment url approved reactions)
- `((id . ,id)
- (name . ,name)
- (subject . ,subject)
- (email . ,email)
- (comment . ,comment)
- (url . ,url)
- (publish-time . ,approved)
- (reactions . ,(if reactions
- (with-input-from-string reactions read)
- '()))))))
+ (define (make-internal-comment~ . args)
+ (let* ((approved (first (take-right args 2)))
+ (approved (string->date approved "~Y~m~d ~H~M~S.~N"))
+ (reactions (last args))
+ (reactions (if reactions
+ (with-input-from-string reactions read)
+ '())))
+ (apply make-internal-comment
+ (append (drop-right args 2) (list approved reactions)))))
(let* ((query "SELECT id, name, subject, email, comment, url, approved, reactions
FROM comments WHERE slug = $1 and approved IS NOT NULL")
(result (exec-query conn query (list slug))))
- (map format-comment result)))
+ (map (cut apply make-internal-comment~ <>) result)))
(define (get-comments request body)
"API endpoint handler for querying for the comments on a particular post