diff options
Diffstat (limited to 'haunt/jakob/dynamic/capabilities/comments.scm')
| -rw-r--r-- | haunt/jakob/dynamic/capabilities/comments.scm | 49 |
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 |