updateMonetizationSettings method
override
Updates MonetizationSettings of the authenticated MyUser.
If the userId argument is specified, then MonetizationSettings will be
updated individually for that User. Otherwise, common
MonetizationSettings are updated, affecting all Users. Naturally,
individual MonetizationSettings take precedence over common
MonetizationSettings.
Implementation
@override
Future<void> updateMonetizationSettings({
UserId? userId,
bool? donationsEnabled,
Sum? donationsMinimum,
}) async {
Log.debug(
'updateMonetizationSettings(userId: $userId, donationsEnabled: $donationsEnabled, donationsMinimum: $donationsMinimum)',
'$runtimeType',
);
final bool hasAny = donationsEnabled != null || donationsMinimum != null;
if (userId != null) {
final Rx<MonetizationSettings>? existing = individual[userId];
// If any setting is provided, then apply the [MonetizationSettings].
if (hasAny) {
final settings = MonetizationSettings(
createdAt: PreciseDateTime.now(),
donation: MonetizationSettingsDonation(
enabled: donationsEnabled ?? true,
min: Price.xxx(donationsMinimum?.val ?? 1),
),
);
if (existing != null) {
existing.value = settings;
} else {
individual[userId] = Rx(settings);
}
}
// Otherwise remove the applied settings, if any.
else {
individual.remove(userId);
paginated.remove(userId);
}
}
final mixin = await _graphQlProvider.updateMonetizationSettings(
userId: userId,
settings: MonetizationSettingsInput(
donation: MonetizationSettingsDonationInput(
// `null` provided in the `new` argument resets the settings to use
// the default one set by [MyUser].
kw$new: donationsEnabled == null && donationsMinimum == null
? null
: MonetizationSettingsDonationSettingsInput(
enabled:
donationsEnabled ??
settings.value.donation?.enabled ??
true,
min:
donationsMinimum ??
settings.value.donation?.min.sum ??
Sum(1),
),
),
),
);
if (mixin != null) {
final events = MonetizationSettingsEventsEvent(
MonetizationSettingsEventsVersioned(
mixin.events.map(_decodeMonetizationSettingsEvent).toList(),
mixin.ver,
mixin.listVer,
),
);
if (userId == null) {
_myMonetizationSettingsEvent(events);
} else {
_monetizationSettingsEvent(events, userId);
}
}
}