public ActionResult SalvarAlbum([FromBody] AlbumRequestDTO albumDTO)
        {
            var album = new Album(albumDTO.Nome);

            var inconsistencias = albumService.VerificarInconsistenciasEmUmNovoAlbum(album);

            if (inconsistencias.Any())
            {
                return(BadRequest(inconsistencias));
            }

            albumRepository.CriarAlbum(album);

            return(Ok(album));
        }
        public ActionResult PostDeNovoAlbum([FromBody] AlbumRequestDTO albumDTO)
        {
            var album = new Album(albumDTO.Nome);

            var inconsistencias = albumService.VerificarInconsistencia(album);

            if (inconsistencias.Any())
            {
                return(BadRequest(inconsistencias));
            }

            database.InsereNovoAlbum(album);

            return(CreatedAtRoute("GetAlbumPeloId", new { id = album.Id }, album));
        }
Esempio n. 3
0
        public ActionResult <Album> PostResource([FromBody] AlbumRequestDTO album)
        {
            // Tjek om forespørgselsobjektet er validt
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                // Opret nyt album-objekt
                var newAlbum = new Album
                {
                    Artist        = album.Artist,
                    Title         = album.Title,
                    Released      = album.Released,
                    Label         = album.Label,
                    CoverImageUrl = album.CoverImageUrl,
                    Tracks        = new List <Track>()
                };

                // Opret et track-objekt for hvert track
                foreach (TrackRequestDTO track in album.Tracks)
                {
                    var newTrack = new Track
                    {
                        Length = track.Length,
                        Title  = track.Title,
                        Number = track.Number
                    };

                    // Tilføj track til nyt album
                    newAlbum.Tracks.Add(newTrack);
                }

                // Tilføj album til repository (dvs. databasen)
                _repo.Add(newAlbum);

                // Returner 201 Created med det oprettede objekt
                return(CreatedAtAction(nameof(GetById), new { id = newAlbum.Id }, newAlbum));
            }
            catch (Exception ex)
            {
                // Hvis noget går galt, returner 500
                return(StatusCode(StatusCodes.Status500InternalServerError, ex));
            }
        }
        // Upload data til CatalogApi
        private async Task <AlbumDTO> PostMetadata(AlbumRequestDTO newAlbumRequest, string accessToken)
        {
            // Send albummet til CatalogApi
            var apiClient = new HttpClient();

            apiClient.SetBearerToken(accessToken);

            string newAlbumRequestAsJson = JsonConvert.SerializeObject(newAlbumRequest);

            // Hent url i environment-variable
            var catalogApiUrl = System.Environment.GetEnvironmentVariable("CATALOG_LOAD_BALANCER");

            try
            {
                var response = await apiClient.PostAsync(catalogApiUrl,
                                                         new StringContent(newAlbumRequestAsJson, Encoding.UTF8, "application/json"));

                if (!response.IsSuccessStatusCode)
                {
                    Log("XML-data kunne ikke sendes til katalog-API'et", true);
                    throw new Exception();
                }
                else
                {
                    try
                    {
                        var newAlbum = JsonConvert.DeserializeObject <AlbumDTO>(await response.Content.ReadAsStringAsync());
                        Log("XML-data blevet sendt succesfuldt til album-API'et");
                        return(newAlbum);
                    }
                    catch (Exception e)
                    {
                        Log("Data fra katalog-API'et kunne ikke deserialiseres", true);
                        Console.WriteLine(e);
                        throw new Exception();
                    }
                }
            }
            catch (System.Net.Http.HttpRequestException)
            {
                Log("Der kunne ikke oprettes forbindelse til katalog-API'et", true);
                throw new Exception();
            }
        }
        public ActionResult AlterarAlbum(int id, [FromBody] AlbumRequestDTO albumDTO)
        {
            var albumAlterado = new Album(albumDTO.Nome);

            if (albumAlterado == null)
            {
                return(NotFound("Album não encontrado"));
            }

            var inconsistencias = albumService.VerificarInconsistenciasEmUmNovoAlbum(albumAlterado);

            if (inconsistencias.Any())
            {
                return(BadRequest(inconsistencias));
            }

            albumRepository.AlterarAlbum(id, albumAlterado);

            return(Ok(albumAlterado));
        }
        // Deserialiser albummet til et AlbumRequestDTO-objekt
        private AlbumRequestDTO DeserializeAlbums(XDocument metadataXmlDoc)
        {
            try
            {
                // Deserialiser XML til objekt
                AlbumRequestDTO newAlbum = new AlbumRequestDTO();

                XmlSerializer xmlFormat = new XmlSerializer(typeof(AlbumRequestDTO));

                using (XmlReader xmlReader = metadataXmlDoc.Root.CreateReader())
                {
                    newAlbum = (AlbumRequestDTO)xmlFormat.Deserialize(xmlReader);
                }

                Log("XML-filen blev deserialiseret korrekt");
                return(newAlbum);
            }
            catch (Exception ex)
            {
                Log("XML-filen kunne ikke deserialiseres:\n" + ex, true);
                throw ex;
            }
        }
        public ActionResult PutAtualizaAlbum(int id, [FromBody] AlbumRequestDTO albumDTO)
        {
            var album = database.BuscaAlbumPorId(id);

            if (album == null)
            {
                return(NotFound("Não existe album com esse id"));
            }

            var albumAtualizado = new Album(albumDTO.Nome);

            albumAtualizado.Id = album.Id;

            List <Musica> musicasDoAlbum = album.Musicas;

            foreach (Musica musica in musicasDoAlbum)
            {
                albumAtualizado.AdicionarMusica(musica);
            }

            database.AtualizaAlbum(albumAtualizado);

            return(Ok("Album atualizado"));
        }
        // Validér pakkestruktur (mappenavn og track-numre)
        private void ValidateStructure(string packageRoot, AlbumRequestDTO album)
        {
            // Track-numre fra metadata
            List <int> trackNumbers = album.Tracks.Select(a => a.Number).ToList();

            // Liste med mapper i rod-mappen
            string [] directories = Directory.GetDirectories(packageRoot);

            if (directories.Length == 1)
            {
                // Pakken indeholder netop én mappe

                var dataFolder = directories[0];

                if (Path.GetRelativePath(packageRoot, dataFolder) == "data")
                {
                    // Mappen er navngivet korrekt;
                    string [] musicFiles = Directory.GetFiles(dataFolder);

                    List <int> fileNames = new List <int>();

                    foreach (string file in musicFiles)
                    {
                        // Tjek filendelse
                        if (Path.GetExtension(file) != ".wav")
                        {
                            Log("En track-fil har ikke endelse '.wav'", true);
                            throw new Exception();
                        }

                        try
                        {
                            // Forsøg at parse track-filnavn til integer
                            fileNames.Add(Int32.Parse(Path.GetFileNameWithoutExtension(file)));
                        }
                        catch (Exception ex)
                        {
                            Log("Et filnavn er ikke et tal", true);
                            throw ex;
                        }
                    }

                    // Sammenlign tracknumre fra metadata med filnavne
                    trackNumbers.Sort();
                    fileNames.Sort();
                    bool areEqual = trackNumbers.SequenceEqual(fileNames);

                    if (areEqual)
                    {
                        Log("Datapakkens struktur er korrekt");
                    }
                    else
                    {
                        Log("Track-numre i metadata og i datamappen stemmer ikke overens", true);
                        throw new Exception();
                    }
                }
                else
                {
                    Log("Datamappen er navngivet forkert - skal hedde 'data'", true);
                    throw new Exception();
                }
            }
            else
            {
                Log("Der er ikke det korrekte antal mapper i pakkens rod - der skal være én", true);
                throw new Exception();
            }
        }