Skip to content

Commit 1839327

Browse files
committed
include subscription info in stats
1 parent 4e92d52 commit 1839327

File tree

3 files changed

+51
-1
lines changed

3 files changed

+51
-1
lines changed

bot.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,13 +178,28 @@ async def _stats(self, update: Update, context: CallbackContext):
178178
return
179179

180180
activity_summary_text = []
181-
activity_summary_text.append('*Activity summary*')
181+
182+
# Query activity summary for each interval
183+
activity_summary_text.append('*Activity*')
182184
for interval in VALID_SUMMARY_INTERVALS:
183185
activity_summary = self._db.get_activity_summary(interval)
184186
activity_summary_text.append(f"_{interval.lower()}_")
185187
for activity in activity_summary:
186188
activity_summary_text.append(f"- {activity}")
187189
activity_summary_text.append('')
190+
191+
# Query subscription summary
192+
activity_summary_text.append('*Subscriptions*')
193+
subscription_summary = self._db.get_subscription_summary()
194+
for station in subscription_summary:
195+
activity_summary_text.append(f"- {station}")
196+
197+
# Query unique subscribers
198+
unique_subscribers = self._db.count_unique_subscribers()
199+
activity_summary_text.append('')
200+
activity_summary_text.append(f"_Unique subscribers: {unique_subscribers}_")
201+
activity_summary_text.append('')
202+
188203
activity_summary_text = "\n".join(activity_summary_text)
189204
await update.message.reply_markdown(activity_summary_text)
190205

db.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,21 @@ def get_subscriptions_by_station(self, station) -> list[int]:
128128
[subscription['user_id'] for subscription in subscriptions])
129129
else:
130130
return []
131+
132+
def count_unique_subscribers(self) -> list[int]:
133+
sql = f"""
134+
SELECT DISTINCT user_id
135+
FROM subscriptions_{self._table_suffix}
136+
"""
137+
subscribers = self._select(sql)
138+
return len([subscriber['user_id'] for subscriber in subscribers])
139+
140+
def get_subscription_summary(self) -> list[str]:
141+
stations = self.stations_with_subscribers()
142+
summary = []
143+
for station in stations:
144+
summary.append(f"{station}: {len(self.get_subscriptions_by_station(station))}")
145+
return summary
131146

132147
def _select_with_values(self, sql, values):
133148
connection = self._get_db_connection()

test/test_db.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,3 +107,23 @@ def test_get_subscriptions_by_station(db_instance):
107107
# Test for a station with no subscriptions
108108
users = db_instance.get_subscriptions_by_station("station3")
109109
assert users == []
110+
111+
def test_subscription_summary(db_instance):
112+
# Add test data
113+
db_instance.add_subscription("station1", 12345)
114+
db_instance.add_subscription("station2", 67890)
115+
db_instance.add_subscription("station1", 54321)
116+
117+
summary = db_instance.get_subscription_summary()
118+
119+
assert summary == ["station1: 2", "station2: 1"]
120+
121+
def test_get_unique_subscribers(db_instance):
122+
# Add test data
123+
db_instance.add_subscription("station1", 12345)
124+
db_instance.add_subscription("station2", 67890)
125+
db_instance.add_subscription("station1", 54321)
126+
127+
unique_subscribers = db_instance.count_unique_subscribers()
128+
129+
assert unique_subscribers == 3

0 commit comments

Comments
 (0)