feat(backend): read time of my messages from the archive, exact dates and group readers asked from telegram on demand
This commit is contained in:
1 parent
f27943aae6
commit
d8dd08d7de
10 files changed
+497
-9
No files matched your search
@@ -1,4 +1,4 @@
|
||||
from datetime import datetime
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
import asyncpg
|
||||
|
||||
@@ -9,6 +9,26 @@ VALUES ($1, $2, $3, $4, $5, $6, $7::jsonb)
|
||||
ON CONFLICT (account_id, chat_id, message_id, ts) DO NOTHING
|
||||
"""
|
||||
|
||||
_UPSERT_READ = """
|
||||
INSERT INTO message_reads
|
||||
(account_id, chat_id, message_id, reader_id, read_at, source, fetched_at)
|
||||
VALUES ($1, $2, $3, $4, $5, $6, now())
|
||||
ON CONFLICT (account_id, chat_id, message_id, reader_id) DO UPDATE SET
|
||||
read_at = EXCLUDED.read_at,
|
||||
source = EXCLUDED.source,
|
||||
fetched_at = EXCLUDED.fetched_at
|
||||
"""
|
||||
|
||||
_UPSERT_FETCH = """
|
||||
INSERT INTO read_fetches
|
||||
(account_id, chat_id, message_id, outcome, fetched_at, retry_at)
|
||||
VALUES ($1, $2, $3, $4, now(), now() + $5::interval)
|
||||
ON CONFLICT (account_id, chat_id, message_id) DO UPDATE SET
|
||||
outcome = EXCLUDED.outcome,
|
||||
fetched_at = EXCLUDED.fetched_at,
|
||||
retry_at = EXCLUDED.retry_at
|
||||
"""
|
||||
|
||||
|
||||
async def insert_read( # noqa: PLR0913
|
||||
pool: asyncpg.Pool,
|
||||
@@ -34,3 +54,33 @@ async def insert_listened( # noqa: PLR0913
|
||||
await pool.execute(
|
||||
_INSERT, account_id, chat_id, message_id, ts, reader_id, "listened", raw
|
||||
)
|
||||
|
||||
|
||||
async def save_reads( # noqa: PLR0913
|
||||
pool: asyncpg.Pool,
|
||||
account_id: int,
|
||||
chat_id: int,
|
||||
message_id: int,
|
||||
source: str,
|
||||
reads: list[tuple[int, datetime]],
|
||||
) -> None:
|
||||
await pool.executemany(
|
||||
_UPSERT_READ,
|
||||
[
|
||||
(account_id, chat_id, message_id, reader_id, read_at, source)
|
||||
for reader_id, read_at in reads
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
async def save_fetch( # noqa: PLR0913
|
||||
pool: asyncpg.Pool,
|
||||
account_id: int,
|
||||
chat_id: int,
|
||||
message_id: int,
|
||||
outcome: str,
|
||||
retry_after: timedelta,
|
||||
) -> None:
|
||||
await pool.execute(
|
||||
_UPSERT_FETCH, account_id, chat_id, message_id, outcome, retry_after
|
||||
)
|
||||
Reference in new issue
Block a user