"""Legacy operations for compatibility."""fromdatetimeimportdatetimefromtypingimportAny,List,Optionalfromsqlalchemyimportselect,and_from..connectionimportSessionLocalfrom..modelsimportUserSettings,ResearchTopic
[docs]asyncdefget_user_settings(user_id:int)->Optional[UserSettings]:"""Get user settings. :param user_id: User ID :returns: UserSettings instance or None """asyncwithSessionLocal()assession:result=awaitsession.execute(select(UserSettings).where(UserSettings.user_id==user_id))returnresult.scalar_one_or_none()
[docs]asyncdefget_or_create_user_settings(user_id:int)->UserSettings:"""Get or create user settings. :param user_id: User ID :returns: UserSettings instance """asyncwithSessionLocal()assession:result=awaitsession.execute(select(UserSettings).where(UserSettings.user_id==user_id))settings=result.scalar_one_or_none()ifsettingsisNone:settings=UserSettings(user_id=user_id)session.add(settings)awaitsession.commit()awaitsession.refresh(settings)returnsettings
[docs]asyncdefupdate_user_settings(user_id:int,**fields:Any)->None:"""Update user settings. :param user_id: User ID :param fields: Fields to update """asyncwithSessionLocal()assession:result=awaitsession.execute(select(UserSettings).where(UserSettings.user_id==user_id))settings=result.scalar_one_or_none()ifsettingsisNone:settings=UserSettings(user_id=user_id)session.add(settings)forkey,valueinfields.items():setattr(settings,key,value)settings.updated_at=datetime.now()awaitsession.commit()
[docs]asyncdefdeactivate_user_topics(user_id:int)->None:"""Deactivate all user topics. :param user_id: User ID """asyncwithSessionLocal()assession:result=awaitsession.execute(select(ResearchTopic).where(and_(ResearchTopic.user_id==user_id,ResearchTopic.is_active)))topics=result.scalars().all()fortintopics:t.is_active=Falset.updated_at=datetime.now()awaitsession.commit()
[docs]asyncdefcreate_research_topic(user_id:int,target_topic:str,search_area:str)->ResearchTopic:"""Create a research topic. :param user_id: User ID :param target_topic: Target topic :param search_area: Search area :returns: ResearchTopic instance """asyncwithSessionLocal()assession:topic=ResearchTopic(user_id=user_id,target_topic=target_topic,search_area=search_area,is_active=True,)session.add(topic)awaitsession.commit()awaitsession.refresh(topic)returntopic
[docs]asyncdefget_active_topic_by_user(user_id:int)->Optional[ResearchTopic]:"""Get active topic for user. :param user_id: User ID :returns: ResearchTopic instance or None """asyncwithSessionLocal()assession:result=awaitsession.execute(select(ResearchTopic).where(and_(ResearchTopic.user_id==user_id,ResearchTopic.is_active)))returnresult.scalar_one_or_none()
[docs]asyncdeflist_active_topics()->List[ResearchTopic]:"""List all active topics. :returns: List of ResearchTopic instances """asyncwithSessionLocal()assession:result=awaitsession.execute(select(ResearchTopic).where(ResearchTopic.is_active))returnlist(result.scalars().all())
[docs]asyncdefget_topic_by_user_and_text(user_id:int,target_topic:str,search_area:str)->Optional[ResearchTopic]:"""Get topic by user and text. :param user_id: User ID :param target_topic: Target topic :param search_area: Search area :returns: ResearchTopic instance or None """asyncwithSessionLocal()assession:result=awaitsession.execute(select(ResearchTopic).where(and_(ResearchTopic.user_id==user_id,ResearchTopic.target_topic==target_topic,ResearchTopic.search_area==search_area,)))returnresult.scalar_one_or_none()