@@ -12,14 +12,14 @@ namespace SocketLabs.InjectionApi.Core
12
12
internal class InjectionRequestFactory : IInjectionRequestFactory
13
13
{
14
14
private readonly int _serverId ;
15
- private readonly string _apiKey ;
15
+ private readonly string ? _apiKey ;
16
16
17
17
/// <summary>
18
18
/// Creates a new instance of the <c>InjectionRequestFactory</c>.
19
19
/// </summary>
20
20
/// <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 )
23
23
{
24
24
_serverId = serverId ;
25
25
_apiKey = apiKey ;
@@ -41,7 +41,7 @@ public InjectionRequest GenerateRequest(IBasicMessage message)
41
41
42
42
request . Messages . Add ( jsonMsg ) ;
43
43
44
- if ( message . ReplyTo != null )
44
+ if ( message . ReplyTo ? . Email is not null )
45
45
jsonMsg . ReplyTo = new AddressJson ( message . ReplyTo . Email , message . ReplyTo . FriendlyName ) ;
46
46
47
47
return request ;
@@ -63,10 +63,13 @@ public InjectionRequest GenerateRequest(IBulkMessage message)
63
63
64
64
// handle merge data per recipient for message
65
65
var mergeDataForEmail = GetBulkMergeFields ( message . To ) ;
66
- jsonMsg . MergeData . PerMessage = mergeDataForEmail ;
66
+ jsonMsg . MergeData = new ( )
67
+ {
68
+ PerMessage = mergeDataForEmail ,
67
69
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
+ } ;
70
73
71
74
request . Messages . Add ( jsonMsg ) ;
72
75
@@ -90,18 +93,19 @@ internal virtual MessageJson GenerateBaseMessageJson(IMessageBase message)
90
93
MailingId = message . MailingId ,
91
94
MessageId = message . MessageId ,
92
95
CharSet = message . CharSet ,
93
- CustomHeaders = PopulateCustomHeaders ( message . CustomHeaders ) ,
94
- From = new AddressJson ( message . From . Email , message . From . FriendlyName ) ,
96
+ CustomHeaders = PopulateCustomHeaders ( message . CustomHeaders ) ,
95
97
Attachments = PopulateList ( message . Attachments ) ,
96
98
Metadata = PopulateMetadata ( message . Metadata ) ,
97
99
Tags = PopulateTags ( message . Tags )
98
100
} ;
101
+ if ( message . From ? . Email is not null )
102
+ jsonMsg . From = new AddressJson ( message . From . Email , message . From . FriendlyName ) ;
99
103
100
- if ( message . ReplyTo != null )
104
+ if ( message . ReplyTo ? . Email is not null )
101
105
jsonMsg . ReplyTo = new AddressJson ( message . ReplyTo . Email , message . ReplyTo . FriendlyName ) ;
102
106
103
107
if ( message . ApiTemplate . HasValue )
104
- jsonMsg . ApiTemplate = message . ApiTemplate . ToString ( ) ;
108
+ jsonMsg . ApiTemplate = message . ApiTemplate ? . ToString ( ) ;
105
109
106
110
return jsonMsg ;
107
111
}
@@ -113,9 +117,6 @@ internal virtual MessageJson GenerateBaseMessageJson(IMessageBase message)
113
117
/// <returns>A <c><![CDATA[ List<AttachmentJson> ]]></c> used in generating an InjectionRequest</returns>
114
118
internal virtual List < AttachmentJson > PopulateList ( IEnumerable < IAttachment > attachments )
115
119
{
116
- if ( attachments == null )
117
- return null ;
118
-
119
120
var results = new List < AttachmentJson > ( ) ;
120
121
121
122
foreach ( var attachment in attachments )
@@ -140,8 +141,8 @@ internal virtual List<AttachmentJson> PopulateList(IEnumerable<IAttachment> atta
140
141
/// <returns>A <c><![CDATA[ List<CustomHeadersJson> ]]></c> used in generating an InjectionRequest</returns>
141
142
internal virtual List < CustomHeadersJson > PopulateCustomHeaders ( IList < ICustomHeader > customHeaders )
142
143
{
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 ( ) ;
145
146
}
146
147
147
148
/// <summary>
@@ -151,33 +152,37 @@ internal virtual List<CustomHeadersJson> PopulateCustomHeaders(IList<ICustomHead
151
152
/// <returns>A <c><![CDATA[ List<AddressJson> ]]></c> used in generating an InjectionRequest</returns>
152
153
internal virtual List < AddressJson > PopulateList ( IEnumerable < IEmailAddress > recipients )
153
154
{
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 ( ) ;
156
159
}
157
160
158
161
/// <summary>
159
162
/// Converting a <c><![CDATA[ IEnumerable<IBulkRecipient> ]]></c> to a <c><![CDATA[ List<List<MergeFieldJson>> ]]></c>
160
163
/// </summary>
161
164
/// <param name="recipients">A <c><![CDATA[ IEnumerable<IBulkRecipient> ]]></c> from the message</param>
162
165
/// <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 )
164
167
{
165
168
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 )
169
170
{
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 > ( ) ;
173
177
174
- recipientMergeFields . Add ( new MergeFieldJson ( "DeliveryAddress" , recipient . Email ) ) ;
178
+ recipientMergeFields . Add ( new MergeFieldJson ( "DeliveryAddress" , recipient . Email ) ) ;
175
179
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 ! ) ) ;
179
183
180
- result . Add ( recipientMergeFields ) ;
184
+ result . Add ( recipientMergeFields ) ;
185
+ }
181
186
}
182
187
183
188
return result ;
@@ -191,8 +196,8 @@ internal virtual List<List<MergeFieldJson>> GetBulkMergeFields(IEnumerable<IBulk
191
196
internal virtual List < MergeFieldJson > PopulateMergeData ( IDictionary < string , string > mergeData )
192
197
{
193
198
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 ( ) ;
196
201
}
197
202
198
203
@@ -203,8 +208,8 @@ internal virtual List<MergeFieldJson> PopulateMergeData(IDictionary<string, stri
203
208
/// <returns>A <c><![CDATA[ List<MetadataHeaderJson> ]]></c> used in generating an InjectionRequest</returns>
204
209
internal virtual List < MetadataHeaderJson > PopulateMetadata ( IList < IMetadata > metadata )
205
210
{
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 ( ) ;
208
213
}
209
214
210
215
/// <summary>
@@ -215,7 +220,7 @@ internal virtual List<MetadataHeaderJson> PopulateMetadata(IList<IMetadata> meta
215
220
internal virtual List < string > PopulateTags ( IList < string > tags )
216
221
{
217
222
var result = tags . ToList ( ) ;
218
- return result ? . ToList ( ) ;
223
+ return result ;
219
224
}
220
225
}
221
226
}
0 commit comments