예제 #1
0
        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));
        }