@@ -12,14 +12,14 @@ namespace SocketLabs.InjectionApi.Core
1212 internal class InjectionRequestFactory : IInjectionRequestFactory
1313 {
1414 private readonly int _serverId ;
15- private readonly string _apiKey ;
15+ private readonly string ? _apiKey ;
1616
1717 /// <summary>
1818 /// Creates a new instance of the <c>InjectionRequestFactory</c>.
1919 /// </summary>
2020 /// <param name="serverId">Your SocketLabs ServerId number.</param>
21- /// <param name="apiKey">Your SocketLabs Injection API key.</param>
22- public InjectionRequestFactory ( int serverId , string apiKey )
21+ /// <param name="apiKey">Your SocketLabs Injection API key. Set to null if using Bearer token. </param>
22+ public InjectionRequestFactory ( int serverId , string ? apiKey )
2323 {
2424 _serverId = serverId ;
2525 _apiKey = apiKey ;
@@ -41,7 +41,7 @@ public InjectionRequest GenerateRequest(IBasicMessage message)
4141
4242 request . Messages . Add ( jsonMsg ) ;
4343
44- if ( message . ReplyTo != null )
44+ if ( message . ReplyTo ? . Email is not null )
4545 jsonMsg . ReplyTo = new AddressJson ( message . ReplyTo . Email , message . ReplyTo . FriendlyName ) ;
4646
4747 return request ;
@@ -63,10 +63,13 @@ public InjectionRequest GenerateRequest(IBulkMessage message)
6363
6464 // handle merge data per recipient for message
6565 var mergeDataForEmail = GetBulkMergeFields ( message . To ) ;
66- jsonMsg . MergeData . PerMessage = mergeDataForEmail ;
66+ jsonMsg . MergeData = new ( )
67+ {
68+ PerMessage = mergeDataForEmail ,
6769
68- // handle global (per message) merge data
69- jsonMsg . MergeData . Global = PopulateMergeData ( message . GlobalMergeData ) ;
70+ // handle global (per message) merge data
71+ Global = PopulateMergeData ( message . GlobalMergeData )
72+ } ;
7073
7174 request . Messages . Add ( jsonMsg ) ;
7275
@@ -90,18 +93,19 @@ internal virtual MessageJson GenerateBaseMessageJson(IMessageBase message)
9093 MailingId = message . MailingId ,
9194 MessageId = message . MessageId ,
9295 CharSet = message . CharSet ,
93- CustomHeaders = PopulateCustomHeaders ( message . CustomHeaders ) ,
94- From = new AddressJson ( message . From . Email , message . From . FriendlyName ) ,
96+ CustomHeaders = PopulateCustomHeaders ( message . CustomHeaders ) ,
9597 Attachments = PopulateList ( message . Attachments ) ,
9698 Metadata = PopulateMetadata ( message . Metadata ) ,
9799 Tags = PopulateTags ( message . Tags )
98100 } ;
101+ if ( message . From ? . Email is not null )
102+ jsonMsg . From = new AddressJson ( message . From . Email , message . From . FriendlyName ) ;
99103
100- if ( message . ReplyTo != null )
104+ if ( message . ReplyTo ? . Email is not null )
101105 jsonMsg . ReplyTo = new AddressJson ( message . ReplyTo . Email , message . ReplyTo . FriendlyName ) ;
102106
103107 if ( message . ApiTemplate . HasValue )
104- jsonMsg . ApiTemplate = message . ApiTemplate . ToString ( ) ;
108+ jsonMsg . ApiTemplate = message . ApiTemplate ? . ToString ( ) ;
105109
106110 return jsonMsg ;
107111 }
@@ -113,9 +117,6 @@ internal virtual MessageJson GenerateBaseMessageJson(IMessageBase message)
113117 /// <returns>A <c><![CDATA[ List<AttachmentJson> ]]></c> used in generating an InjectionRequest</returns>
114118 internal virtual List < AttachmentJson > PopulateList ( IEnumerable < IAttachment > attachments )
115119 {
116- if ( attachments == null )
117- return null ;
118-
119120 var results = new List < AttachmentJson > ( ) ;
120121
121122 foreach ( var attachment in attachments )
@@ -140,8 +141,8 @@ internal virtual List<AttachmentJson> PopulateList(IEnumerable<IAttachment> atta
140141 /// <returns>A <c><![CDATA[ List<CustomHeadersJson> ]]></c> used in generating an InjectionRequest</returns>
141142 internal virtual List < CustomHeadersJson > PopulateCustomHeaders ( IList < ICustomHeader > customHeaders )
142143 {
143- var result = customHeaders ? . Select ( item => new CustomHeadersJson ( item . Name , item . Value ) ) ;
144- return result ? . ToList ( ) ;
144+ var result = customHeaders . Select ( item => new CustomHeadersJson ( item . Name , item . Value ) ) ;
145+ return result . ToList ( ) ;
145146 }
146147
147148 /// <summary>
@@ -151,33 +152,37 @@ internal virtual List<CustomHeadersJson> PopulateCustomHeaders(IList<ICustomHead
151152 /// <returns>A <c><![CDATA[ List<AddressJson> ]]></c> used in generating an InjectionRequest</returns>
152153 internal virtual List < AddressJson > PopulateList ( IEnumerable < IEmailAddress > recipients )
153154 {
154- var result = recipients ? . Select ( item => new AddressJson ( item . Email , item . FriendlyName ) ) ;
155- return result ? . ToList ( ) ;
155+ var result = recipients . Where ( x => x . Email is not null )
156+ . Select ( item => new AddressJson ( item . Email ! , item . FriendlyName ) ) ;
157+
158+ return result . ToList ( ) ;
156159 }
157160
158161 /// <summary>
159162 /// Converting a <c><![CDATA[ IEnumerable<IBulkRecipient> ]]></c> to a <c><![CDATA[ List<List<MergeFieldJson>> ]]></c>
160163 /// </summary>
161164 /// <param name="recipients">A <c><![CDATA[ IEnumerable<IBulkRecipient> ]]></c> from the message</param>
162165 /// <returns>A <c><![CDATA[ List<List<MergeFieldJson>> ]]></c> used in generating an InjectionRequest</returns>
163- internal virtual List < List < MergeFieldJson > > GetBulkMergeFields ( IEnumerable < IBulkRecipient > recipients )
166+ internal virtual List < List < MergeFieldJson > > GetBulkMergeFields ( IEnumerable < IBulkRecipient > ? recipients )
164167 {
165168 var result = new List < List < MergeFieldJson > > ( ) ;
166-
167- //each recipient get's their own list of merge fields
168- foreach ( var recipient in recipients )
169+ if ( recipients is not null )
169170 {
170- // Get any merge data associated with the Recipients and put it in the MergeData section
171- var recipientMergeFields = recipient . MergeData ? . Select ( mergeField => new MergeFieldJson ( mergeField . Key , mergeField . Value ) ) . ToList ( ) ??
172- new List < MergeFieldJson > ( ) ;
171+ //each recipient get's their own list of merge fields
172+ foreach ( var recipient in recipients )
173+ {
174+ // Get any merge data associated with the Recipients and put it in the MergeData section
175+ var recipientMergeFields = recipient . MergeData ? . Select ( mergeField => new MergeFieldJson ( mergeField . Key , mergeField . Value ) ) . ToList ( ) ??
176+ new List < MergeFieldJson > ( ) ;
173177
174- recipientMergeFields . Add ( new MergeFieldJson ( "DeliveryAddress" , recipient . Email ) ) ;
178+ recipientMergeFields . Add ( new MergeFieldJson ( "DeliveryAddress" , recipient . Email ) ) ;
175179
176- //don't include friendly name if it hasn't been provided
177- if ( ! string . IsNullOrWhiteSpace ( recipient . FriendlyName ) )
178- recipientMergeFields . Add ( new MergeFieldJson ( "RecipientName" , recipient . FriendlyName ) ) ;
180+ //don't include friendly name if it hasn't been provided
181+ if ( ! string . IsNullOrWhiteSpace ( recipient . FriendlyName ) )
182+ recipientMergeFields . Add ( new MergeFieldJson ( "RecipientName" , recipient . FriendlyName ! ) ) ;
179183
180- result . Add ( recipientMergeFields ) ;
184+ result . Add ( recipientMergeFields ) ;
185+ }
181186 }
182187
183188 return result ;
@@ -191,8 +196,8 @@ internal virtual List<List<MergeFieldJson>> GetBulkMergeFields(IEnumerable<IBulk
191196 internal virtual List < MergeFieldJson > PopulateMergeData ( IDictionary < string , string > mergeData )
192197 {
193198
194- var result = mergeData ? . Select ( item => new MergeFieldJson ( item . Key , item . Value ) ) ;
195- return result ? . ToList ( ) ;
199+ var result = mergeData . Select ( item => new MergeFieldJson ( item . Key , item . Value ) ) ;
200+ return result . ToList ( ) ;
196201 }
197202
198203
@@ -203,8 +208,8 @@ internal virtual List<MergeFieldJson> PopulateMergeData(IDictionary<string, stri
203208 /// <returns>A <c><![CDATA[ List<MetadataHeaderJson> ]]></c> used in generating an InjectionRequest</returns>
204209 internal virtual List < MetadataHeaderJson > PopulateMetadata ( IList < IMetadata > metadata )
205210 {
206- var result = metadata ? . Select ( item => new MetadataHeaderJson ( item . Key , item . Value ) ) ;
207- return result ? . ToList ( ) ;
211+ var result = metadata . Select ( item => new MetadataHeaderJson ( item . Key , item . Value ) ) ;
212+ return result . ToList ( ) ;
208213 }
209214
210215 /// <summary>
@@ -215,7 +220,7 @@ internal virtual List<MetadataHeaderJson> PopulateMetadata(IList<IMetadata> meta
215220 internal virtual List < string > PopulateTags ( IList < string > tags )
216221 {
217222 var result = tags . ToList ( ) ;
218- return result ? . ToList ( ) ;
223+ return result ;
219224 }
220225 }
221226}
0 commit comments