refactor(apiv2): rewrite group member endpoints to be cleaner
This commit is contained in:
@@ -42,6 +42,115 @@ namespace PluralKit.API
|
||||
return Ok(o);
|
||||
}
|
||||
|
||||
[HttpPost("groups/{groupRef}/members/add")]
|
||||
public async Task<IActionResult> AddGroupMembers(string groupRef, [FromBody] JArray memberRefs)
|
||||
{
|
||||
if (memberRefs.Count == 0)
|
||||
throw Errors.GenericBadRequest;
|
||||
|
||||
var system = await ResolveSystem("@me");
|
||||
|
||||
var group = await ResolveGroup(groupRef);
|
||||
if (group == null)
|
||||
throw Errors.GroupNotFound;
|
||||
if (group.System != system.Id)
|
||||
throw Errors.NotOwnGroupError;
|
||||
|
||||
var members = new List<MemberId>();
|
||||
|
||||
foreach (var JmemberRef in memberRefs)
|
||||
{
|
||||
var memberRef = JmemberRef.Value<string>();
|
||||
var member = await ResolveMember(memberRef);
|
||||
|
||||
// todo: have a list of these errors instead of immediately throwing
|
||||
|
||||
if (member == null)
|
||||
throw Errors.MemberNotFoundWithRef(memberRef);
|
||||
if (member.System != system.Id)
|
||||
throw Errors.NotOwnMemberErrorWithRef(memberRef);
|
||||
|
||||
members.Add(member.Id);
|
||||
}
|
||||
|
||||
var existingMembers = await _repo.GetGroupMembers(group.Id).Select(x => x.Id).ToListAsync();
|
||||
members = members.Where(x => !existingMembers.Contains(x)).ToList();
|
||||
|
||||
if (members.Count > 0)
|
||||
await _repo.AddMembersToGroup(group.Id, members);
|
||||
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
[HttpPost("groups/{groupRef}/members/remove")]
|
||||
public async Task<IActionResult> RemoveGroupMembers(string groupRef, [FromBody] JArray memberRefs)
|
||||
{
|
||||
if (memberRefs.Count == 0)
|
||||
throw Errors.GenericBadRequest;
|
||||
|
||||
var system = await ResolveSystem("@me");
|
||||
|
||||
var group = await ResolveGroup(groupRef);
|
||||
if (group == null)
|
||||
throw Errors.GroupNotFound;
|
||||
if (group.System != system.Id)
|
||||
throw Errors.NotOwnGroupError;
|
||||
|
||||
var members = new List<MemberId>();
|
||||
|
||||
foreach (var JmemberRef in memberRefs)
|
||||
{
|
||||
var memberRef = JmemberRef.Value<string>();
|
||||
var member = await ResolveMember(memberRef);
|
||||
|
||||
if (member == null)
|
||||
throw Errors.MemberNotFoundWithRef(memberRef);
|
||||
if (member.System != system.Id)
|
||||
throw Errors.NotOwnMemberErrorWithRef(memberRef);
|
||||
|
||||
members.Add(member.Id);
|
||||
}
|
||||
|
||||
await _repo.RemoveMembersFromGroup(group.Id, members);
|
||||
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
[HttpPost("groups/{groupRef}/members/overwrite")]
|
||||
public async Task<IActionResult> OverwriteGroupMembers(string groupRef, [FromBody] JArray memberRefs)
|
||||
{
|
||||
var system = await ResolveSystem("@me");
|
||||
|
||||
var group = await ResolveGroup(groupRef);
|
||||
if (group == null)
|
||||
throw Errors.GroupNotFound;
|
||||
if (group.System != system.Id)
|
||||
throw Errors.NotOwnGroupError;
|
||||
|
||||
var members = new List<MemberId>();
|
||||
|
||||
foreach (var JmemberRef in memberRefs)
|
||||
{
|
||||
var memberRef = JmemberRef.Value<string>();
|
||||
var member = await ResolveMember(memberRef);
|
||||
|
||||
if (member == null)
|
||||
throw Errors.MemberNotFoundWithRef(memberRef);
|
||||
if (member.System != system.Id)
|
||||
throw Errors.NotOwnMemberErrorWithRef(memberRef);
|
||||
|
||||
members.Add(member.Id);
|
||||
}
|
||||
|
||||
await _repo.ClearGroupMembers(group.Id);
|
||||
|
||||
if (members.Count > 0)
|
||||
await _repo.AddMembersToGroup(group.Id, members);
|
||||
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
|
||||
[HttpGet("members/{memberRef}/groups")]
|
||||
public async Task<IActionResult> GetMemberGroups(string memberRef)
|
||||
{
|
||||
@@ -62,127 +171,8 @@ namespace PluralKit.API
|
||||
return Ok(o);
|
||||
}
|
||||
|
||||
[HttpPut("groups/{groupRef}/members/{memberRef}")]
|
||||
public async Task<IActionResult> GroupMemberPut(string groupRef, string memberRef)
|
||||
{
|
||||
var system = await ResolveSystem("@me");
|
||||
|
||||
var group = await ResolveGroup(groupRef);
|
||||
if (group == null)
|
||||
throw Errors.GroupNotFound;
|
||||
if (group.System != system.Id)
|
||||
throw Errors.NotOwnGroupError;
|
||||
|
||||
var member = await ResolveMember(memberRef);
|
||||
Console.WriteLine(member);
|
||||
if (member == null)
|
||||
throw Errors.MemberNotFound;
|
||||
if (member.System != system.Id)
|
||||
throw Errors.NotOwnMemberError;
|
||||
|
||||
var existingMembers = await _repo.GetGroupMembers(group.Id).Select(x => x.Id).ToListAsync();
|
||||
if (!existingMembers.Contains(member.Id))
|
||||
await _repo.AddMembersToGroup(group.Id, new List<MemberId>() { member.Id });
|
||||
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
[HttpPut("groups/{groupRef}/members")]
|
||||
public async Task<IActionResult> GroupMembersPut(string groupRef, [FromBody] JArray memberRefs)
|
||||
{
|
||||
if (memberRefs.Count == 0)
|
||||
throw Errors.GenericBadRequest;
|
||||
|
||||
var system = await ResolveSystem("@me");
|
||||
|
||||
var group = await ResolveGroup(groupRef);
|
||||
if (group == null)
|
||||
throw Errors.GroupNotFound;
|
||||
if (group.System != system.Id)
|
||||
throw Errors.NotOwnGroupError;
|
||||
|
||||
var members = new List<MemberId>();
|
||||
|
||||
foreach (var JmemberRef in memberRefs)
|
||||
{
|
||||
var memberRef = JmemberRef.Value<string>();
|
||||
var member = await ResolveMember(memberRef);
|
||||
|
||||
if (member == null)
|
||||
throw Errors.MemberNotFound;
|
||||
if (member.System != system.Id)
|
||||
throw Errors.NotOwnMemberErrorWithRef(memberRef);
|
||||
|
||||
members.Add(member.Id);
|
||||
}
|
||||
|
||||
var existingMembers = await _repo.GetGroupMembers(group.Id).Select(x => x.Id).ToListAsync();
|
||||
members = members.Where(x => !existingMembers.Contains(x)).ToList();
|
||||
|
||||
if (members.Count > 0)
|
||||
await _repo.AddMembersToGroup(group.Id, members);
|
||||
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
[HttpDelete("groups/{groupRef}/members/{memberRef}")]
|
||||
public async Task<IActionResult> GroupMemberDelete(string groupRef, string memberRef)
|
||||
{
|
||||
var system = await ResolveSystem("@me");
|
||||
|
||||
var group = await ResolveGroup(groupRef);
|
||||
if (group == null)
|
||||
throw Errors.GroupNotFound;
|
||||
if (group.System != system.Id)
|
||||
throw Errors.NotOwnGroupError;
|
||||
|
||||
var member = await ResolveMember(memberRef);
|
||||
if (member == null)
|
||||
throw Errors.MemberNotFound;
|
||||
if (member.System != system.Id)
|
||||
throw Errors.NotOwnMemberError;
|
||||
|
||||
await _repo.RemoveMembersFromGroup(group.Id, new List<MemberId>() { member.Id });
|
||||
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
[HttpDelete("groups/{groupRef}/members")]
|
||||
public async Task<IActionResult> GroupMembersDelete(string groupRef, [FromBody] JArray memberRefs)
|
||||
{
|
||||
if (memberRefs.Count == 0)
|
||||
throw Errors.GenericBadRequest;
|
||||
|
||||
var system = await ResolveSystem("@me");
|
||||
|
||||
var group = await ResolveGroup(groupRef);
|
||||
if (group == null)
|
||||
throw Errors.GroupNotFound;
|
||||
if (group.System != system.Id)
|
||||
throw Errors.NotOwnGroupError;
|
||||
|
||||
var members = new List<MemberId>();
|
||||
|
||||
foreach (var JmemberRef in memberRefs)
|
||||
{
|
||||
var memberRef = JmemberRef.Value<string>();
|
||||
var member = await ResolveMember(memberRef);
|
||||
|
||||
if (member == null)
|
||||
throw Errors.MemberNotFound;
|
||||
if (member.System != system.Id)
|
||||
throw Errors.NotOwnMemberError;
|
||||
|
||||
members.Add(member.Id);
|
||||
}
|
||||
|
||||
await _repo.RemoveMembersFromGroup(group.Id, members);
|
||||
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
[HttpPut("members/{memberRef}/groups")]
|
||||
public async Task<IActionResult> MemberGroupsPut(string memberRef, [FromBody] JArray groupRefs)
|
||||
[HttpPost("members/{memberRef}/groups/add")]
|
||||
public async Task<IActionResult> AddMemberGroups(string memberRef, [FromBody] JArray groupRefs)
|
||||
{
|
||||
if (groupRefs.Count == 0)
|
||||
throw Errors.GenericBadRequest;
|
||||
@@ -219,8 +209,8 @@ namespace PluralKit.API
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
[HttpDelete("members/{memberRef}/groups")]
|
||||
public async Task<IActionResult> MemberGroupsDelete(string memberRef, [FromBody] JArray groupRefs)
|
||||
[HttpPost("members/{memberRef}/groups/remove")]
|
||||
public async Task<IActionResult> RemoveMemberGroups(string memberRef, [FromBody] JArray groupRefs)
|
||||
{
|
||||
if (groupRefs.Count == 0)
|
||||
throw Errors.GenericBadRequest;
|
||||
@@ -241,7 +231,7 @@ namespace PluralKit.API
|
||||
var group = await ResolveGroup(groupRef);
|
||||
|
||||
if (group == null)
|
||||
throw Errors.GroupNotFound;
|
||||
throw Errors.GroupNotFoundWithRef(groupRef);
|
||||
if (group.System != system.Id)
|
||||
throw Errors.NotOwnGroupErrorWithRef(groupRef);
|
||||
|
||||
@@ -253,5 +243,39 @@ namespace PluralKit.API
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
[HttpPost("members/{memberRef}/groups/overwrite")]
|
||||
public async Task<IActionResult> OverwriteMemberGroups(string memberRef, [FromBody] JArray groupRefs)
|
||||
{
|
||||
var system = await ResolveSystem("@me");
|
||||
|
||||
var member = await ResolveMember(memberRef);
|
||||
if (member == null)
|
||||
throw Errors.MemberNotFound;
|
||||
if (member.System != system.Id)
|
||||
throw Errors.NotOwnMemberError;
|
||||
|
||||
var groups = new List<GroupId>();
|
||||
|
||||
foreach (var JgroupRef in groupRefs)
|
||||
{
|
||||
var groupRef = JgroupRef.Value<string>();
|
||||
var group = await ResolveGroup(groupRef);
|
||||
|
||||
if (group == null)
|
||||
throw Errors.GroupNotFoundWithRef(groupRef);
|
||||
if (group.System != system.Id)
|
||||
throw Errors.NotOwnGroupErrorWithRef(groupRef);
|
||||
|
||||
groups.Add(group.Id);
|
||||
}
|
||||
|
||||
await _repo.ClearMemberGroups(member.Id);
|
||||
|
||||
if (groups.Count > 0)
|
||||
await _repo.AddGroupsToMember(member.Id, groups);
|
||||
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user