summary refs log tree commit diff
path: root/synapse/storage/feedback.py
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2014-08-13 16:27:14 +0100
committerErik Johnston <erik@matrix.org>2014-08-13 18:03:41 +0100
commit336987bb8debec9dcdbe27d59ce3889b39f86dbb (patch)
treea2009c85c449021dcae897424f4a1b351f01ed2f /synapse/storage/feedback.py
parentConvert im schema to a 'one' table structure (diff)
downloadsynapse-336987bb8debec9dcdbe27d59ce3889b39f86dbb.tar.xz
Initial stab at refactoring the SQL tables, including rejigging some of the storage layer.
Diffstat (limited to 'synapse/storage/feedback.py')
-rw-r--r--synapse/storage/feedback.py69
1 files changed, 21 insertions, 48 deletions
diff --git a/synapse/storage/feedback.py b/synapse/storage/feedback.py
index 9bd562c762..fc93f92e1d 100644
--- a/synapse/storage/feedback.py
+++ b/synapse/storage/feedback.py
@@ -22,54 +22,27 @@ import json
 
 class FeedbackStore(SQLBaseStore):
 
-    def store_feedback(self, room_id, msg_id, msg_sender_id,
-                       fb_sender_id, fb_type, content):
-        return self._simple_insert(FeedbackTable.table_name, dict(
-            room_id=room_id,
-            msg_id=msg_id,
-            msg_sender_id=msg_sender_id,
-            fb_sender_id=fb_sender_id,
-            fb_type=fb_type,
-            content=content,
-        ))
-
-    def get_feedback(self, room_id=None, msg_id=None, msg_sender_id=None,
-                     fb_sender_id=None, fb_type=None):
-        query = FeedbackTable.select_statement(
-            "msg_sender_id = ? AND room_id = ? AND msg_id = ? " +
-            "AND fb_sender_id = ? AND feedback_type = ? " +
-            "ORDER BY id DESC LIMIT 1")
-        return self._execute(
-            FeedbackTable.decode_single_result,
-            query, msg_sender_id, room_id, msg_id, fb_sender_id, fb_type,
+    def _store_feedback(self, event):
+        return self._simple_insert("feedback", {
+            "event_id": event.event_id,
+            "feedback_type": event.feedback_type,
+            "room_id": event.room_id,
+            "target_event_id": event.target_event,
+        })
+
+    @defer.inlineCallback
+    def get_feedback_for_event(self, event_id):
+        sql = (
+            "SELECT events.* FROM events INNER JOIN feedback "
+            "ON events.event_id = feedback.event_id "
+            "WHERE feedback.target_event_id = ? "
         )
 
-    def get_max_feedback_id(self):
-        return self._simple_max_id(FeedbackTable.table_name)
-
-
-class FeedbackTable(Table):
-    table_name = "feedback"
+        rows = yield self._execute_query(sql, event_id)
 
-    fields = [
-        "id",
-        "content",
-        "feedback_type",
-        "fb_sender_id",
-        "msg_id",
-        "room_id",
-        "msg_sender_id"
-    ]
-
-    class EntryType(collections.namedtuple("FeedbackEntry", fields)):
-
-        def as_event(self, event_factory):
-            return event_factory.create_event(
-                etype=FeedbackEvent.TYPE,
-                room_id=self.room_id,
-                msg_id=self.msg_id,
-                msg_sender_id=self.msg_sender_id,
-                user_id=self.fb_sender_id,
-                feedback_type=self.feedback_type,
-                content=json.loads(self.content),
-            )
+        defer.returnValue(
+            [
+                self._parse_event_from_row(r)
+                for r in rows
+            ]
+        )