public async Task <IActionResult> AddCharacter([FromRoute] string campaignId, [FromRoute] string characterId) { var userId = User.FindFirst(ClaimTypes.NameIdentifier).Value; var findCampaginFilter = Builders <Campaign> .Filter.And( Builders <Campaign> .Filter.Eq("_id", ObjectId.Parse(campaignId)), Builders <Campaign> .Filter.Eq("ownerID", userId)); var foundCampaigns = await(await CampaignCollection.FindAsync(findCampaginFilter)).ToListAsync(); if (foundCampaigns == null || foundCampaigns.Count != 1) { return(BadRequest("Campagin null or not unique")); } if (foundCampaigns[0].OwnerID != userId) { return(Unauthorized()); } var findCharacterFilter = Builders <dynamic> .Filter.Eq("_id", ObjectId.Parse(characterId)); var foundCharacters = await(await CharacterCollection.FindAsync(findCharacterFilter)).ToListAsync(); if (foundCharacters == null || foundCharacters.Count != 1) { return(BadRequest("Character null or not unique")); } var foundCampaign = foundCampaigns[0]; var foundCharacter = foundCharacters[0] as BaseCharacterSheet; if (foundCharacter.GameSystem != foundCampaign.CampaignType) { return(BadRequest($"Why are you adding a {foundCharacter.GameSystem} character to a {foundCampaign.CampaignType} campaign?")); } CampaignCollection.UpdateOne(c => c.Id == campaignId, Builders <Campaign> .Update.AddToSet("characters", foundCharacter.Id)); return(Json(campaignId)); }