Coverage for src / local_deep_research / database / models / user_news_search_history.py: 86%

14 statements  

« prev     ^ index     » next       coverage.py v7.12.0, created at 2026-01-11 00:51 +0000

1"""Database model for storing user-specific news search history. 

2 

3This model tracks all news searches performed by users, allowing for 

4personalized search history that is properly isolated per user account. 

5""" 

6 

7from sqlalchemy import Column, Integer, String, Text 

8from sqlalchemy_utc import UtcDateTime, utcnow 

9 

10from .base import Base 

11 

12 

13class UserNewsSearchHistory(Base): 

14 """Stores news search queries performed by users. 

15 

16 Each record represents a single search performed on the news page, 

17 tracking the query, when it was performed, and how many results were found. 

18 """ 

19 

20 __tablename__ = "user_news_search_history" 

21 

22 id = Column(Integer, primary_key=True) 

23 

24 # Search details 

25 query = Column(Text, nullable=False) 

26 search_type = Column( 

27 String(50), nullable=False, default="filter" 

28 ) # filter, deep, table 

29 result_count = Column(Integer, default=0) 

30 

31 # Timestamps 

32 created_at = Column( 

33 UtcDateTime, nullable=False, default=utcnow(), index=True 

34 ) 

35 

36 def __repr__(self): 

37 return f"<UserNewsSearchHistory(query='{self.query[:30]}...', type={self.search_type})>" 

38 

39 def to_dict(self): 

40 """Convert to dictionary for API responses.""" 

41 return { 

42 "id": self.id, 

43 "query": self.query, 

44 "type": self.search_type, 

45 "timestamp": self.created_at.isoformat(), 

46 "resultCount": self.result_count, 

47 }