mirror of
https://github.com/whekin/household-bot.git
synced 2026-03-31 22:34:03 +00:00
2.0 KiB
2.0 KiB
HOUSEBOT-021: Purchase Topic Ingestion
Summary
Ingest messages from configured Telegram household purchase topic (Общие покупки) and persist raw message metadata idempotently.
Goals
- Process only configured chat/topic.
- Persist sender + raw message + Telegram metadata.
- Make ingestion idempotent for duplicate Telegram deliveries.
Non-goals
- Purchase amount parsing.
- Settlement impact calculations.
Scope
- In: bot middleware for topic filtering, persistence repository, DB schema for raw inbox records.
- Out: parser pipeline and command responses.
Interfaces and Contracts
- Telegram webhook receives update.
- Bot middleware extracts candidate from
message:textupdates. - DB write target:
purchase_messages.
Domain Rules
- Only configured
TELEGRAM_HOUSEHOLD_CHAT_ID+TELEGRAM_PURCHASE_TOPIC_IDare accepted. - Empty/blank messages are ignored.
- Duplicate message IDs are ignored via unique constraints.
Data Model Changes
- Add
purchase_messageswith:- sender metadata
- raw text
- Telegram IDs (chat/message/thread/update)
- processing status (
pendingdefault)
Security and Privacy
- No PII beyond Telegram sender identifiers needed for household accounting.
- Webhook auth remains enforced by secret token header.
Observability
- Log successful ingestion with chat/thread/message IDs.
- Log ingestion failures without crashing bot process.
Edge Cases and Failure Modes
- Missing ingestion env config -> ingestion disabled.
- Unknown sender member -> stored with null member mapping.
- Duplicate webhook delivery -> ignored as duplicate.
Test Plan
- Unit tests for topic filter extraction logic.
- Existing endpoint tests continue to pass.
Acceptance Criteria
- Only configured topic messages are persisted.
- Sender + message metadata stored in DB.
- Duplicate deliveries are idempotent.
Rollout Plan
- Deploy with ingestion enabled in dev group first.
- Validate rows in
purchase_messagesbefore enabling parser flow.