fix(api): refactor autoproxy controller so unlatching can work (#615)

This commit is contained in:
ashe 2024-02-13 02:55:21 -07:00 committed by GitHub
parent 71ea11e97e
commit 99f905de4c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -53,7 +53,7 @@ public class AutoproxyControllerV2: PKControllerBase
private async Task<IActionResult> Patch(PKSystem system, ulong? guildId, ulong? channelId, JObject data, AutoproxySettings oldData) private async Task<IActionResult> Patch(PKSystem system, ulong? guildId, ulong? channelId, JObject data, AutoproxySettings oldData)
{ {
var updateMember = data.ContainsKey("autoproxy_member"); var updateMember = data.ContainsKey("autoproxy_member") && data.Value<string>("autoproxy_member") != null;
PKMember? member = null; PKMember? member = null;
if (updateMember) if (updateMember)
@ -64,15 +64,37 @@ public class AutoproxyControllerV2: PKControllerBase
} }
var patch = AutoproxyPatch.FromJson(data, member?.Id); var patch = AutoproxyPatch.FromJson(data, member?.Id);
patch.AssertIsValid(); patch.AssertIsValid();
var newAutoproxyMode = patch.AutoproxyMode.IsPresent ? patch.AutoproxyMode : oldData.AutoproxyMode;
var newAutoproxyMember = patch.AutoproxyMember.IsPresent ? patch.AutoproxyMember : oldData.AutoproxyMember;
if (updateMember && member == null) if (updateMember && member == null)
{
patch.Errors.Add(new("autoproxy_member", "Member not found.")); patch.Errors.Add(new("autoproxy_member", "Member not found."));
if (updateMember && !( }
(patch.AutoproxyMode.IsPresent && patch.AutoproxyMode.Value == AutoproxyMode.Member)
|| (!patch.AutoproxyMode.IsPresent && oldData.AutoproxyMode == AutoproxyMode.Member)) if (newAutoproxyMode.Value == AutoproxyMode.Member)
) {
patch.Errors.Add(new("autoproxy_member", "Cannot update autoproxy member if autoproxy mode is set to latch")); if (!updateMember)
{
patch.Errors.Add(new("autoproxy_member", "An autoproxy member must be supplied for autoproxy mode 'member'"));
}
patch.AutoproxyMode = newAutoproxyMode;
patch.AutoproxyMember = newAutoproxyMember;
}
else
{
if (updateMember)
{
patch.Errors.Add(new("autoproxy_member", "Cannot update autoproxy member if autoproxy mode is not set to 'member'"));
}
patch.AutoproxyMode = newAutoproxyMode;
patch.AutoproxyMember = null;
}
if (patch.Errors.Count > 0) if (patch.Errors.Count > 0)
throw new ModelParseError(patch.Errors); throw new ModelParseError(patch.Errors);