Files
ds_quickbooks/feedback_logger.py
T

77 lines
2.2 KiB
Python
Raw Normal View History

2025-08-05 22:25:51 +01:00
import json
import os
from dataclasses import dataclass
from datetime import datetime, timedelta
from typing import List
2025-08-05 22:25:51 +01:00
@dataclass
class FeedbackLog:
transaction_id: str
original_match: str
correction: str
reason: str
timestamp: datetime
user_id: str
2025-08-05 22:25:51 +01:00
class FeedbackLogger:
def __init__(self, log_file: str = "feedback_logs.json"):
self.log_file = log_file
self.logs: List[FeedbackLog] = self._load_logs()
2025-08-05 22:25:51 +01:00
def _load_logs(self) -> List[FeedbackLog]:
if not os.path.exists(self.log_file):
return []
2025-08-05 22:25:51 +01:00
try:
with open(self.log_file, "r") as f:
2025-08-05 22:25:51 +01:00
data = json.load(f)
return [FeedbackLog(**log) for log in data]
except Exception:
2025-08-05 22:25:51 +01:00
return []
2025-08-05 22:25:51 +01:00
def _save_logs(self):
with open(self.log_file, "w") as f:
json.dump(
[
{
"transaction_id": log.transaction_id,
"original_match": log.original_match,
"correction": log.correction,
"reason": log.reason,
"timestamp": log.timestamp.isoformat(),
"user_id": log.user_id,
}
for log in self.logs
],
f,
indent=2,
)
def log_override(
self,
transaction_id: str,
original_match: str,
correction: str,
reason: str,
user_id: str,
):
2025-08-05 22:25:51 +01:00
log = FeedbackLog(
transaction_id=transaction_id,
original_match=original_match,
correction=correction,
reason=reason,
timestamp=datetime.now(),
user_id=user_id,
2025-08-05 22:25:51 +01:00
)
self.logs.append(log)
self._save_logs()
2025-08-05 22:25:51 +01:00
def get_logs_by_transaction(self, transaction_id: str) -> List[FeedbackLog]:
return [log for log in self.logs if log.transaction_id == transaction_id]
2025-08-05 22:25:51 +01:00
def get_recent_logs(self, days: int = 30) -> List[FeedbackLog]:
cutoff = datetime.now() - timedelta(days=days)
return [log for log in self.logs if log.timestamp > cutoff]