public async Task <IActionResult> UploadFile(string partId)
        {
            // get part
            Part part;

            try
            {
                part = await CosmosRepo.GetDocument <Part>(ConstantNames.PARTS, partId);
            }
            catch (DocumentClientException)
            {
                return(ItemNotFoundResult(partId));
            }

            // read contents
            string contents;

            using (StreamReader reader = new StreamReader(Request.Body, Encoding.UTF8))
            {
                contents = await reader.ReadToEndAsync();
            }

            // upload blob
            string container = ConstantNames.XMLCONTAINER;
            string blobId    = await BlobRepo.UploadBlob(container, contents);

            string uri = BlobRepo.GetBlobUri(container, blobId);

            // change part
            part.Path = blobId;
            await CosmosRepo.ReplaceDocument <Part>(ConstantNames.PARTS, partId, part);

            return(Created(uri, contents));
        }
        public override async Task <IActionResult> Post([FromBody] Event docIn)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            // check required properties
            if (docIn.Name == null)
            {
                return(MissingPropertyResult("name"));
            }
            if (docIn.Band == null)
            {
                return(MissingPropertyResult("band"));
            }

            // remove unused properties
            docIn.Songs       = new List <string>();
            docIn.Users       = new List <string>();
            docIn.CurrentSong = null;

            // get band if it exists
            string bandId         = docIn.Band;
            string bandCollection = CollectionNames.BANDS;
            Band   band           = null;

            try
            {
                band = await CosmosRepo.GetDocument <Band>(bandCollection, bandId);
            }
            catch (DocumentClientException)
            {
                return(ItemNotFoundResult(bandId, bandCollection));
            }

            // create event
            Event created = await CosmosRepo.CreateDocument(CollectionName, docIn);

            string eventId = created.Id;

            // update band
            if (!band.Events.Contains(eventId))
            {
                List <string> events = band.Events.ToList();
                events.Add(eventId);
                band.Events = events;
                await CosmosRepo.ReplaceDocument(bandCollection, bandId, band);
            }

            return(Created(GetGetUri(eventId), created));
        }
        public async Task <IActionResult> RemoveEvent(string bandid, string eventid)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            // GET band
            Band band = await CosmosRepo.GetDocument <Band>(ConstantNames.BANDS, bandid);

            if (band == null)
            {
                return(ItemNotFoundResult(bandid));
            }

            // GET event
            Event ev = await CosmosRepo.GetDocument <Event>(ConstantNames.EVENTS, eventid);

            if (ev == null)
            {
                return(ItemNotFoundResult(eventid));
            }

            // remove event from band
            List <string> events = band.Events.ToList();

            events.Remove(eventid);
            band.Events = events;
            Band result = await CosmosRepo.ReplaceDocument(ConstantNames.BANDS, bandid, band);

            // remove event ID from each user
            foreach (string userid in ev.Users)
            {
                Player player = await CosmosRepo.GetDocument <Player>(ConstantNames.PLAYERS, userid);

                if (player != null)
                {
                    List <string> userEvents = player.Events.ToList();
                    userEvents.Remove(eventid);
                    player.Events = userEvents;
                    await CosmosRepo.ReplaceDocument(ConstantNames.PLAYERS, userid, player);
                }
            }

            return(Ok(result));
        }
        public override async Task <IActionResult> Post([FromBody] Part docIn)
        {
            // make sure required fields are included
            if (docIn.Instrument == null)
            {
                return(MissingPropertyResult("instrument"));
            }
            if (docIn.Song == null)
            {
                return(MissingPropertyResult("song"));
            }
            docIn.Path = null;

            // make sure song exists
            string songsCollection = ConstantNames.SONGS;
            string songId          = docIn.Song;
            Song   song;

            try
            {
                song = await CosmosRepo.GetDocument <Song>(songsCollection, songId);
            }
            catch (DocumentClientException)
            {
                return(ItemNotFoundResult(songId, songsCollection));
            }

            // create part
            Part newDoc = await CosmosRepo.CreateDocument(CollectionName, docIn);

            string partId = newDoc.Id;

            // update song
            if (!song.Parts.Contains(partId))
            {
                List <string> parts = song.Parts.ToList();
                parts.Add(partId);
                song.Parts = parts;
                await CosmosRepo.ReplaceDocument(songsCollection, songId, song);
            }

            return(Created(GetGetUri(newDoc.Id), newDoc));
        }