diff --git a/Models/Context/AlbumStoreContext.cs b/Models/Context/AlbumStoreContext.cs index 7697dce..b202b84 100644 --- a/Models/Context/AlbumStoreContext.cs +++ b/Models/Context/AlbumStoreContext.cs @@ -273,6 +273,29 @@ namespace Icarus.Models.Context _logger.Error(msg, "An error occurred"); } } + public void DeleteAlbum(Album album) + { + try + { + using (var conn = GetConnection()) + { + conn.Open(); + var query = "DELETE Album WHERE AlbumId=@AlbumId"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@AlbumId", album.AlbumId); + + cmd.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } private List ParseData(MySqlDataReader reader) { diff --git a/Models/Context/ArtistStoreContext.cs b/Models/Context/ArtistStoreContext.cs index daefe2d..93245a3 100644 --- a/Models/Context/ArtistStoreContext.cs +++ b/Models/Context/ArtistStoreContext.cs @@ -192,6 +192,32 @@ namespace Icarus.Models.Context _logger.Error(msg, "An error occurred"); } } + public void DeleteArtist(Artist artist) + { + try + { + _logger.Info("Deleting artist record"); + + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "DELETE Artist WHERE ArtistId=@ArtistId"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@ArtistId", artist.ArtistId); + + cmd.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } public Artist GetArtist(Artist artist) { diff --git a/Models/Context/GenreStoreContext.cs b/Models/Context/GenreStoreContext.cs index 577855c..5754cc3 100644 --- a/Models/Context/GenreStoreContext.cs +++ b/Models/Context/GenreStoreContext.cs @@ -123,6 +123,8 @@ namespace Icarus.Models.Context _logger.Error(msg, "An error occurred"); } + _logger.Info("Genre does not exist"); + return false; } public bool DoesGenreExist(Song song) @@ -133,11 +135,11 @@ namespace Icarus.Models.Context { conn.Open(); - var query = "SELECT * FROM Genre WHERE GenreName=@GenreName"; + var query = "SELECT * FROM Song WHERE Genre=@Genre"; using (var cmd = new MySqlCommand(query, conn)) { - cmd.Parameters.AddWithValue("@GenreName", song.Genre); + cmd.Parameters.AddWithValue("@Genre", song.Genre); using (var reader = cmd.ExecuteReader()) { @@ -160,9 +162,83 @@ namespace Icarus.Models.Context _logger.Error(msg, "An error occurred"); } + _logger.Info("Genre does not exist"); + return false; } + public void SaveGenre(Genre genre) + { + try + { + using (var conn = GetConnection()) + { + var query = "INSERT INTO Genre(GenreName, SongCount) VALUES(" + + "@GenreName, @SongCount)"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@GenreName", genre.GenreName); + cmd.Parameters.AddWithValue("@SongCount", genre.SongCount); + + cmd.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + public void UpdateGenre(Genre genre) + { + try + { + using (var conn = GetConnection()) + { + var query = "UPDATE Genre SET GenreName=@GenreName, " + + "SongCount=@SongCount WHERE GenreId=@GenreId"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@GenreName", genre.GenreName); + cmd.Parameters.AddWithValue("@SongCount", genre.SongCount); + cmd.Parameters.AddWithValue("@GenreId", genre.GenreId); + + cmd.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + public void DeleteGenre(Genre genre) + { + try + { + using (var conn = GetConnection()) + { + var query = "DELETE Genre WHERE GenreId=@GenreId"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@GenreId", genre.GenreId); + + cmd.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + private List ParseData(MySqlDataReader reader) { var genres = new List(); diff --git a/Models/Context/YearStoreContext.cs b/Models/Context/YearStoreContext.cs index 1c82ae8..ccd553b 100644 --- a/Models/Context/YearStoreContext.cs +++ b/Models/Context/YearStoreContext.cs @@ -28,20 +28,245 @@ namespace Icarus.Models.Context #region Methods - public List GetSongYear() + public List GetSongYears() { var yearValues = new List(); - using (var conn = GetConnection()) + try { - conn.Open(); + using (var conn = GetConnection()) + { + conn.Open(); - var query = "SELECT * FROM Year"; - // TODO: Left off here for the YearStore + var query = "SELECT * FROM Year"; + + using (var cmd = new MySqlCommand(query, conn)) + { + using (var reader = cmd.ExecuteReader()) + { + yearValues = ParseData(reader); + } + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); } return yearValues; } + + public Year GetSongYear(Year year) + { + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT * FROM Year WHERE YearId=@YearId"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@YearId", year.YearId); + + using (var reader = cmd.ExecuteReader()) + { + year = ParseSingleData(reader); + } + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + return year; + } + + public bool DoesYearExist(Year year) + { + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT * FROM Year WHERE YearId=@YearId"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@YearId", year.YearId); + + using (var reader = cmd.ExecuteReader()) + { + year = ParseSingleData(reader); + + if (year.YearValue > 0) + { + _logger.Info("Year record exists"); + + return true; + } + } + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + _logger.Info("Year record does not exist"); + + return false; + } + public bool DoesYearExist(Song song) + { + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT * FROM Song WHERE Year=@Year"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Year", song.Year); + + using (var reader = cmd.ExecuteReader()) + { + var year = ParseSingleData(reader); + + if (year.YearValue > 0) + { + _logger.Info("Year record exists"); + + return true; + } + } + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + _logger.Info("Year record does not exist"); + + return false; + } + + public void SaveYear(Year year) + { + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "INSERT INTO Year(YearValue, SongCount) VALUES(" + + "@YearValue, @SongCount)"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@YearValue", year.YearValue); + cmd.Parameters.AddWithValue("@SongCount", year.SongCount); + + cmd.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + public void UpdateYear(Year year) + { + try + { + // TODO: Add functionality for updating the Year record + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + public void DeleteYear(Year year) + { + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "DELETE Year WHERE YearId=@YearId"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@YearId", year.YearId); + + cmd.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + + private List ParseData(MySqlDataReader reader) + { + var yearValues = new List(); + + while (reader.Read()) + { + var id = Convert.ToInt32(reader["YearId"].ToString()); + var year = Convert.ToInt32(reader["YearValue"].ToString()); + var songCount = Convert.ToInt32(reader["SongCount"].ToString()); + + yearValues.Add(new Year + { + YearId = id, + YearValue = year, + SongCount = songCount + }); + } + + + return yearValues; + } + + private Year ParseSingleData(MySqlDataReader reader) + { + var yearValue = new Year(); + + while (reader.Read()) + { + var id = Convert.ToInt32(reader["YearId"].ToString()); + var year = Convert.ToInt32(reader["YearValue"].ToString()); + var songCount = Convert.ToInt32(reader["SongCount"].ToString()); + + yearValue.YearId = id; + yearValue.YearValue = year; + yearValue.SongCount = songCount; + } + + return yearValue; + } #endregion } } diff --git a/Startup.cs b/Startup.cs index 932f32b..3f9de84 100644 --- a/Startup.cs +++ b/Startup.cs @@ -98,7 +98,6 @@ namespace Icarus var connString = Configuration.GetConnectionString("DefaultConnection"); - // TODO: Add the Genre and Year stores #41 and #42. services.Add(new ServiceDescriptor(typeof(MusicStoreContext), new MusicStoreContext(Configuration .GetConnectionString("DefaultConnection")))); @@ -111,6 +110,14 @@ namespace Icarus new ArtistStoreContext(Configuration .GetConnectionString("DefaultConnection")))); + services.Add(new ServiceDescriptor(typeof(GenreStoreContext), + new GenreStoreContext(Configuration + .GetConnectionString("DefaultConnection")))); + + services.Add(new ServiceDescriptor(typeof(YearStoreContext), + new YearStoreContext(Configuration + .GetConnectionString("DefaultConnection")))); + services.Add(new ServiceDescriptor(typeof(UserStoreContext), new UserStoreContext(Configuration .GetConnectionString("DefaultConnection")))); @@ -119,7 +126,8 @@ namespace Icarus services.AddDbContext(options => options.UseMySQL(connString)); services.AddDbContext(options => options.UseMySQL(connString)); services.AddDbContext(options => options.UseMySQL(connString)); - // TODO: Add the Genre and Year contexts #41 and #42 + services.AddDbContext(options => options.UseMySQL(connString)); + services.AddDbContext(options => options.UseMySQL(connString)); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.