From e052d951571e5fbd43b8df44cac6b30fa50e7e67 Mon Sep 17 00:00:00 2001
From: ale <ale@incal.net>
Date: Sun, 23 Oct 2022 13:51:41 +0100
Subject: [PATCH] Add JSON API endpoint

---
 feedbackloop/model.py |  9 +++++++++
 feedbackloop/views.py | 12 +++++++++++-
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/feedbackloop/model.py b/feedbackloop/model.py
index 3db965f..00cbbe0 100644
--- a/feedbackloop/model.py
+++ b/feedbackloop/model.py
@@ -9,3 +9,12 @@ class FeedbackEntry(db.Model):
     is_list = db.Column(db.Boolean, index=True)
     message = db.Column(db.Text)
     timestamp = db.Column(db.DateTime)
+
+    def to_api_dict(self):
+        return {
+            'id': self.id,
+            'sender': self.sender,
+            'reporter': self.reporter,
+            'is_list': self.is_list,
+            'timestamp': self.timestamp.strftime('%Y-%m-%dT%H:%M:%SZ'),
+        }
diff --git a/feedbackloop/views.py b/feedbackloop/views.py
index d4a9f7b..98dcd5b 100644
--- a/feedbackloop/views.py
+++ b/feedbackloop/views.py
@@ -1,4 +1,4 @@
-from flask import request, render_template, abort
+from flask import request, render_template, abort, jsonify
 from sqlalchemy import func, text
 from .app import app, db
 from .model import FeedbackEntry
@@ -24,6 +24,16 @@ def by_sender(sender):
                            reports=reports)
 
 
+@app.route('/api/by_sender/<sender>')
+def api_by_sender(sender):
+    reports = FeedbackEntry.query.filter(
+        FeedbackEntry.sender == sender).order_by(
+            FeedbackEntry.timestamp.desc())
+    return jsonify({
+        'reports': [x.to_api_dict() for x in reports],
+    })
+
+
 @app.route('/')
 def index():
     n = int(request.args.get('n', '20'))
-- 
GitLab