mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	This commit adds 'visibility_policy' as a parameter to user_allows_notifications_in_StreamTopic function. This adds logic inside the user_allows_notifications_in_StreamTopic function, to not return False when a stream is muted but the topic is UNMUTED. Adds a method `user_id_to_visibility_policy_dict` to 'StreamTopicTarget' class to fetch (user_id => visibility_policy) in single db query. Co-authored-by: Kartik Srivastava <kaushiksri0908@gmail.com> Co-authored-by: Prakhar Pratyush <prakhar841301@gmail.com>
		
			
				
	
	
		
			40 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from typing import Dict, Set
 | 
						|
 | 
						|
from zerver.models import UserTopic
 | 
						|
 | 
						|
 | 
						|
class StreamTopicTarget:
 | 
						|
    """
 | 
						|
    This class is designed to help us move to a
 | 
						|
    StreamTopic table or something similar.  It isolates
 | 
						|
    places where we are still using `topic_name` as
 | 
						|
    a key into tables.
 | 
						|
    """
 | 
						|
 | 
						|
    def __init__(self, stream_id: int, topic_name: str) -> None:
 | 
						|
        self.stream_id = stream_id
 | 
						|
        self.topic_name = topic_name
 | 
						|
 | 
						|
    def user_ids_with_visibility_policy(self, visibility_policy: int) -> Set[int]:
 | 
						|
        query = UserTopic.objects.filter(
 | 
						|
            stream_id=self.stream_id,
 | 
						|
            topic_name__iexact=self.topic_name,
 | 
						|
            visibility_policy=visibility_policy,
 | 
						|
        ).values(
 | 
						|
            "user_profile_id",
 | 
						|
        )
 | 
						|
        return {row["user_profile_id"] for row in query}
 | 
						|
 | 
						|
    def user_id_to_visibility_policy_dict(self) -> Dict[int, int]:
 | 
						|
        user_id_to_visibility_policy: Dict[int, int] = {}
 | 
						|
 | 
						|
        query = UserTopic.objects.filter(
 | 
						|
            stream_id=self.stream_id, topic_name__iexact=self.topic_name
 | 
						|
        ).values(
 | 
						|
            "visibility_policy",
 | 
						|
            "user_profile_id",
 | 
						|
        )
 | 
						|
        for row in query:
 | 
						|
            user_id_to_visibility_policy[row["user_profile_id"]] = row["visibility_policy"]
 | 
						|
        return user_id_to_visibility_policy
 |