]> git.cworth.org Git - turbot/blobdiff - turbot/interaction.py
Convert /puzzle puzzle creation to all-one-table database schema
[turbot] / turbot / interaction.py
index 62199eb5725adc7aff4d4398d5a86ec6542cf1fe..8f94a064071674d75dc1a039ac2d273b2a72e33b 100644 (file)
@@ -7,6 +7,7 @@ import json
 import re
 import requests
 from botocore.exceptions import ClientError
+from boto3.dynamodb.conditions import Key
 from turbot.slack import slack_send_message
 
 actions = {}
@@ -275,7 +276,15 @@ def channel_is_hunt(turb, channel_id):
     Returns a dict (filled with database entries) if there is a hunt
     for this channel, otherwise returns None."""
 
-    return get_table_item(turb, "channel_id_index", 'channel_id', channel_id)
+    response = turb.table.query(
+        IndexName = "channel_id_index",
+        KeyConditionExpression=Key("channel_id").eq(channel_id)
+    )
+
+    if 'Items' not in response:
+        return None
+
+    return response['Items'][0]
 
 def find_hunt_for_hunt_id(turb, hunt_id):
     """Given a hunt ID find the database for for that hunt
@@ -306,7 +315,7 @@ def find_hunt_for_channel(turb, channel_id, channel_name):
 
     """
 
-    (hunt, _) = channel_is_hunt(turb, channel_id)
+    hunt = channel_is_hunt(turb, channel_id)
 
     if hunt:
         return hunt
@@ -388,18 +397,18 @@ def puzzle_submission(turb, payload, metadata):
             "Error creating Slack channel {}: {}"
             .format(hunt_dash_channel, e.response['error']))
 
-    puzzle_channel_id = response['channel']['id']
+    channel_id = response['channel']['id']
 
     # Insert the newly-created puzzle into the database
-    table = turb.db.Table(hunt_id)
-    table.put_item(
+    turb.table.put_item(
         Item={
-            "channel_id": puzzle_channel_id,
+            "PK": "hunt-{}".format(hunt_id),
+            "SK": "puzzle-{}".format(puzzle_id),
+            "puzzle_id": puzzle_id,
+            "channel_id": channel_id,
             "solution": [],
             "status": 'unsolved',
-            "hunt_id": hunt_id,
             "name": name,
-            "puzzle_id": puzzle_id,
             "url": url,
         }
     )