@@ -61,9 +61,9 @@ def by_domain
6161 end
6262 end
6363
64- def self . all_staff_position_mappings
64+ def self . all_staff_position_mappings ( staff_position_scope = StaffPosition . all )
6565 MappingSet . new (
66- StaffPosition
66+ staff_position_scope
6767 . includes ( user_con_profiles : :user )
6868 . joins ( :convention )
6969 . where ( "staff_positions.email ilike '%@' || conventions.domain" )
@@ -73,9 +73,9 @@ def self.all_staff_position_mappings
7373 )
7474 end
7575
76- def self . all_catch_all_mappings
76+ def self . all_catch_all_mappings ( convention_scope = Convention . all )
7777 MappingSet . new (
78- Convention
78+ convention_scope
7979 . where . not ( catch_all_staff_position_id : nil )
8080 . filter_map do |convention |
8181 sp = convention . catch_all_staff_position
@@ -87,9 +87,9 @@ def self.all_catch_all_mappings
8787 )
8888 end
8989
90- def self . all_team_member_mappings
90+ def self . all_team_member_mappings ( event_scope = Event . all )
9191 MappingSet . new (
92- Event
92+ event_scope
9393 . includes ( :convention , team_members : { user_con_profile : :user } )
9494 . joins ( :convention )
9595 . where . not ( conventions : { event_mailing_list_domain : nil } )
@@ -104,9 +104,9 @@ def self.all_team_member_mappings
104104 )
105105 end
106106
107- def self . all_email_route_mappings
107+ def self . all_email_route_mappings ( email_route_scope = EmailRoute . all )
108108 MappingSet . new (
109- EmailRoute
109+ email_route_scope
110110 . pluck ( :receiver_address , :forward_addresses )
111111 . filter_map do |receiver_address , forward_addresses |
112112 if forward_addresses . blank?
@@ -125,6 +125,30 @@ def self.all_mappings
125125 . merge ( all_email_route_mappings )
126126 end
127127
128+ def self . all_mappings_for_domains ( domains )
129+ conventions = Convention . where ( "domain IN (:domains) OR event_mailing_list_domain IN (:domains)" , domains :)
130+
131+ all_staff_position_mappings ( StaffPosition . where ( convention_id : conventions . select ( :id ) ) )
132+ . merge ( all_catch_all_mappings ( conventions ) )
133+ . merge ( all_team_member_mappings ( Event . where ( convention_id : conventions . select ( :id ) ) ) )
134+ . merge (
135+ all_email_route_mappings (
136+ EmailRoute . where (
137+ domains . map { |_ | "receiver_address ILIKE ?" } . join ( " OR " ) ,
138+ *domains . map { |domain | "%@#{ domain } " }
139+ )
140+ )
141+ )
142+ end
143+
144+ def self . all_mappings_for_inbound_address ( address )
145+ all_mappings [ EmailRoute . normalize_address ( address ) ]
146+ end
147+
148+ def self . all_mappings_for_destination_address ( address )
149+ all_mappings . values . flatten . select { |mapping | mapping . destination_addresses . include? ( address ) }
150+ end
151+
128152 def self . all_inbound_addresses
129153 all_mappings . keys
130154 end
0 commit comments