feat(sms): complete SmsConfig bundle export/import wiring + GetSmsConfigurationByIdAsync (S10b)

This commit is contained in:
Joseph Doherty
2026-06-19 11:10:39 -04:00
parent 78fadb82d2
commit c3501ecd72
19 changed files with 586 additions and 6 deletions
@@ -111,6 +111,15 @@ public sealed class DependencyResolver
if (sm is not null) smtpConfigs[sm.Id] = sm;
}
// SMS provider configs (S10b): mirror the SMTP seed exactly — resolve each
// selected id via the by-id repository accessor; missing ids are skipped.
var smsConfigs = new Dictionary<int, SmsConfiguration>();
foreach (var id in selection.SmsConfigurationIds.Distinct())
{
var sms = await _notifications.GetSmsConfigurationByIdAsync(id, ct).ConfigureAwait(false);
if (sms is not null) smsConfigs[sms.Id] = sms;
}
// Inbound API keys are intentionally NOT resolved into the bundle: per the
// inbound-API-key re-architecture (C4) keys are not transported between
// environments. Only API methods travel.
@@ -234,6 +243,7 @@ public sealed class DependencyResolver
dbConnections.Values,
notificationLists.Values,
smtpConfigs.Values,
smsConfigs.Values,
apiMethods.Values,
orderedSites,
orderedDataConnections,
@@ -256,6 +266,9 @@ public sealed class DependencyResolver
Sites = orderedSites,
DataConnections = orderedDataConnections,
Instances = orderedInstances,
// SMS (S10b): ordered by AccountSid — the natural key the importer matches
// on, mirroring how SMTP is ordered by Host.
SmsConfigs = smsConfigs.Values.OrderBy(s => s.AccountSid, StringComparer.Ordinal).ToList(),
};
}
@@ -549,6 +562,7 @@ public sealed class DependencyResolver
IEnumerable<DatabaseConnectionDefinition> dbConnections,
IEnumerable<NotificationList> notificationLists,
IEnumerable<SmtpConfiguration> smtpConfigs,
IEnumerable<SmsConfiguration> smsConfigs,
IEnumerable<ApiMethod> apiMethods,
IReadOnlyList<Site> sites,
IReadOnlyList<DataConnection> dataConnections,
@@ -604,6 +618,12 @@ public sealed class DependencyResolver
{
entries.Add(new ManifestContentEntry("SmtpConfiguration", s.Host, 1, Array.Empty<string>()));
}
// SMS (S10b): mirror SMTP — one manifest row per config, keyed by AccountSid
// (the natural key the importer matches on).
foreach (var s in smsConfigs.OrderBy(x => x.AccountSid, StringComparer.Ordinal))
{
entries.Add(new ManifestContentEntry("SmsConfiguration", s.AccountSid, 1, Array.Empty<string>()));
}
// Inbound API keys are not transported (re-arch C4) — no ApiKey manifest entries.
foreach (var m in apiMethods.OrderBy(x => x.Name, StringComparer.Ordinal))
{