diff --git a/Controllers/Managers/SongManager.cs b/Controllers/Managers/SongManager.cs index ddbf65c..4bfb040 100644 --- a/Controllers/Managers/SongManager.cs +++ b/Controllers/Managers/SongManager.cs @@ -673,6 +673,7 @@ namespace Icarus.Controllers.Managers album.SongCount = 1; albumStore.SaveAlbum(album); album = albumStore.GetAlbum(song); + Console.WriteLine($"Album Id {album.AlbumId}"); } else { @@ -724,6 +725,7 @@ namespace Icarus.Controllers.Managers if (!genreStore.DoesGenreExist(song)) { genreStore.SaveGenre(genre); + Console.WriteLine("Going to find genre"); genre = genreStore.GetGenre(song); var genreDump = $"Genre id {genre.GenreId} GenreName {genre.GenreName}" + $" Genre song Count {genre.SongCount}"; @@ -807,7 +809,7 @@ namespace Icarus.Controllers.Managers private Album UpdateAlbumInDatabase(Song oldSongRecord, Song newSongRecord, AlbumStoreContext albumStore) { - var albumRecord = albumStore.GetAlbum(oldSongRecord); + var albumRecord = albumStore.GetAlbum(oldSongRecord, true); var oldAlbumTitle = oldSongRecord.AlbumTitle; var oldAlbumArtist = oldSongRecord.Artist; var newAlbumTitle = newSongRecord.AlbumTitle; @@ -838,7 +840,7 @@ namespace Icarus.Controllers.Managers { _logger.Info("Decrementing existing album's song count"); - albumRecord.SongCount -= 1; + //albumRecord.SongCount -= 1; albumStore.UpdateAlbum(albumRecord); } else @@ -867,16 +869,16 @@ namespace Icarus.Controllers.Managers var existingAlbumRecord = albumStore.GetAlbum(newSongRecord); existingAlbumRecord.AlbumArtist = newAlbumArtist; - existingAlbumRecord.SongCount += 1; + //existingAlbumRecord.SongCount += 1; albumStore.UpdateAlbum(existingAlbumRecord); } - return albumStore.GetAlbum(newSongRecord); + return albumStore.GetAlbum(newSongRecord, true); } private Artist UpdateArtistInDatabase(Song oldSongRecord, Song newSongRecord, ArtistStoreContext artistStore) { - var oldArtistRecord = artistStore.GetArtist(oldSongRecord); + var oldArtistRecord = artistStore.GetArtist(oldSongRecord, true); var oldArtistName = oldArtistRecord.Name; var newArtistName = newSongRecord.Artist; @@ -892,7 +894,7 @@ namespace Icarus.Controllers.Managers { _logger.Info("Decrementing existing artist's song count"); - oldArtistRecord.SongCount -= 1; + //oldArtistRecord.SongCount -= 1; artistStore.UpdateArtist(oldArtistRecord); } else @@ -919,16 +921,16 @@ namespace Icarus.Controllers.Managers _logger.Info("Updating existing artist record"); var existingArtistRecord = artistStore.GetArtist(newSongRecord); - existingArtistRecord.SongCount += 1; + //existingArtistRecord.SongCount += 1; artistStore.UpdateArtist(existingArtistRecord); } - return artistStore.GetArtist(newSongRecord); + return artistStore.GetArtist(newSongRecord, true); } private Genre UpdateGenreInDatabase(Song oldSongRecord, Song newSongRecord, GenreStoreContext genreStore) { - var oldGenreRecord = genreStore.GetGenre(oldSongRecord); + var oldGenreRecord = genreStore.GetGenre(oldSongRecord, true); var oldGenreName = oldGenreRecord.GenreName; var newGenreName = newSongRecord.Genre; @@ -971,17 +973,17 @@ namespace Icarus.Controllers.Managers _logger.Info("Updating existing genre record"); var existingGenreRecord = genreStore.GetGenre(newSongRecord); - existingGenreRecord.SongCount += 1; + //existingGenreRecord.SongCount += 1; genreStore.UpdateGenre(existingGenreRecord); } - return genreStore.GetGenre(newSongRecord); + return genreStore.GetGenre(newSongRecord, true); } private Year UpdateYearInDatabase(Song oldSongRecord, Song newSongRecord, YearStoreContext yearStore) { - var oldYearRecord = yearStore.GetSongYear(oldSongRecord); + var oldYearRecord = yearStore.GetSongYear(oldSongRecord, true); var oldYearValue = oldYearRecord.YearValue; var newYearValue = newSongRecord.Year; @@ -1024,12 +1026,12 @@ namespace Icarus.Controllers.Managers _logger.Info("Updating existing year record"); var existingYearRecord = yearStore.GetSongYear(newSongRecord); - existingYearRecord.SongCount += 1; + //existingYearRecord.SongCount += 1; yearStore.UpdateYear(existingYearRecord); } - return yearStore.GetSongYear(newSongRecord); + return yearStore.GetSongYear(newSongRecord, true); } private void UpdateSongInDatabase(ref Song oldSongRecord, ref Song newSongRecord, MusicStoreContext songStore, ref SongResult result) diff --git a/Controllers/SongController.cs b/Controllers/SongController.cs index c76eeee..0c58054 100644 --- a/Controllers/SongController.cs +++ b/Controllers/SongController.cs @@ -75,6 +75,8 @@ namespace Icarus.Controllers Song song = context.GetSong(id); + Console.WriteLine("Here"); + if (song.Id != 0) { return Ok(song); @@ -85,9 +87,8 @@ namespace Icarus.Controllers } } - - [HttpPut("{id}")] [Authorize("update:songs")] + [HttpPut("{id}")] public IActionResult Put(int id, [FromBody] Song song) { MusicStoreContext context = HttpContext diff --git a/Models/Context/AlbumStoreContext.cs b/Models/Context/AlbumStoreContext.cs index 4ac7f42..1c482e0 100644 --- a/Models/Context/AlbumStoreContext.cs +++ b/Models/Context/AlbumStoreContext.cs @@ -27,6 +27,36 @@ namespace Icarus.Models.Context #region Methods + public List GetAlbumWithoutCount() + { + var albums = new List(); + + if (AnyAlbums()) + { + try + { + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + var query = "SELECT * FROM Album"; + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + using (var reader = cmd.ExecuteReader()) + { + albums = ParseData(reader); + } + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + + return albums; + } public List GetAlbums() { List albums = new List(); @@ -96,13 +126,54 @@ namespace Icarus.Models.Context using (MySqlConnection conn = GetConnection()) { conn.Open(); - var query = "SELECT alb.*, COUNT(*) AS SongCount FROM Album alb " + - "LEFT JOIN Song sng ON alb.AlbumId=sng.AlbumId WHERE " + - "sng.Id=@Id LIMIT 1"; + var query = "SELECT alb.*, 0 AS SongCount FROM Album alb " + + "WHERE alb.Title=@Title LIMIT 1"; using (MySqlCommand cmd = new MySqlCommand(query, conn)) { - cmd.Parameters.AddWithValue("@Id", song.Id); + Console.WriteLine($"Album title {song.AlbumTitle}"); + cmd.Parameters.AddWithValue("@Title", song.AlbumTitle); + + using (var reader = cmd.ExecuteReader()) + { + album = ParseSingleData(reader); + } + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + return album; + } + public Album GetAlbum(Song song, bool retrieveCount) + { + var album = new Album(); + + try + { + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + var query = string.Empty; + if (retrieveCount) + { + query = "SELECT alb.*, COUNT(*) AS SongCount FROM Album alb " + + "LEFT JOIN Song sng ON alb.AlbumId=sng.AlbumId WHERE " + + "alb.Title=@Title GROUP BY alb.AlbumId LIMIT 1"; + } + else + { + query = "SELECT alb.*, 0 AS SongCount FROM Album alb WHERE " + + "alb.Title=@Title LIMIT 1"; + } + + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Title", song.AlbumTitle); using (var reader = cmd.ExecuteReader()) { @@ -124,23 +195,11 @@ namespace Icarus.Models.Context { try { - album = GetAlbum(album); - - if (!string.IsNullOrEmpty(album.Title)) - { - _logger.Info("Album exists"); - return true; - } - else - { - _logger.Info("Album does not exist"); - } - /** using (MySqlConnection conn = GetConnection()) { conn.Open(); - var query = "SELECT * FROM Album WHERE AlbumId=@AlbumId"; + var query = "SELECT alb.*, 0 AS SongCount FROM Album alb WHERE alb.AlbumId=@AlbumId"; using (MySqlCommand cmd = new MySqlCommand(query, conn)) { cmd.Parameters.AddWithValue("@AlbumId", album.AlbumId); @@ -157,7 +216,6 @@ namespace Icarus.Models.Context } } } - */ } catch (Exception ex) { @@ -170,23 +228,11 @@ namespace Icarus.Models.Context { try { - var album = GetAlbum(song); - - if (!string.IsNullOrEmpty(album.Title)) - { - _logger.Info("Album exists"); - return true; - } - else - { - _logger.Info("Album does not exist"); - } - /** using (MySqlConnection conn = GetConnection()) { conn.Open(); - var query = "SELECT * FROM Album WHERE Title=@Title"; + var query = "SELECT alb.*, 0 AS SongCount FROM Album alb WHERE alb.Title=@Title"; using (MySqlCommand cmd = new MySqlCommand(query, conn)) { cmd.Parameters.AddWithValue("@Title", song.AlbumTitle); @@ -203,7 +249,6 @@ namespace Icarus.Models.Context } } } - */ } catch (Exception ex) { @@ -334,6 +379,33 @@ namespace Icarus.Models.Context return album; } + + private bool AnyAlbums() + { + var albums = new List(); + + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT * FROM Album"; + + using (var cmd = new MySqlCommand(query, conn)) + { + using (var reader = cmd.ExecuteReader()) + { + albums = ParseData(reader); + } + } + } + + if (albums.Count > 0) + { + return true; + } + + return false; + } #endregion } } diff --git a/Models/Context/ArtistStoreContext.cs b/Models/Context/ArtistStoreContext.cs index d437885..844b46e 100644 --- a/Models/Context/ArtistStoreContext.cs +++ b/Models/Context/ArtistStoreContext.cs @@ -37,7 +37,10 @@ namespace Icarus.Models.Context using (MySqlConnection conn = GetConnection()) { conn.Open(); - var query = "SELECT * FROM Artist"; + var query = "SELECT art.*, COUNT(*) AS SongCount FROM Artist " + + "art LEFT JOIN Song sng ON art.ArtistId=sng.ArtistId " + + "GROUPY BY art.ArtistId"; + using (MySqlCommand cmd = new MySqlCommand(query, conn)) { using (var reader = cmd.ExecuteReader()) @@ -57,6 +60,113 @@ namespace Icarus.Models.Context return artists; } + public Artist GetArtist(Artist artist) + { + try + { + _logger.Info("Retrieving artist record from the database"); + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT art.*, COUNT(*) AS SongCount FROM Artist " + + "art LEFT JOIN Song sng ON art.ArtistId=sng.ArtistId " + + "WHERE ArtistId=@ArtistId"; + + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@ArtistId", artist.ArtistId); + + using (var reader = cmd.ExecuteReader()) + { + artist = ParseSingleData(reader); + } + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + return artist; + } + public Artist GetArtist(Song song) + { + Artist artist = new Artist(); + try + { + _logger.Info("Retrieving artist record from the database"); + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT art.*, 0 AS SongCount FROM Artist " + + "art WHERE Name=@Name"; + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Name", song.Artist); + + using (var reader = cmd.ExecuteReader()) + { + artist = ParseSingleData(reader); + } + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + return artist; + } + public Artist GetArtist(Song song, bool retrieveCount) + { + var artist = new Artist(); + + try + { + _logger.Info("Retrieving artist record from the database"); + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + + var query = string.Empty; + + if (retrieveCount) + { + query = "SELECT art.*, COUNT(*) AS SongCount FROM Artist " + + "art LEFT JOIN Song sng ON art.ArtistId=sng.ArtistId " + + "WHERE art.Name=@Name GROUP BY art.ArtistId LIMIT 1"; + } + else + { + query = "SELECT art.*, 0 AS SongCount FROM Artist art " + + "WHERE art.Name=@Name LIMIT 1"; + } + + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Name", song.Artist); + + using (var reader = cmd.ExecuteReader()) + { + artist = ParseSingleData(reader); + } + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + return artist; + } public bool DoesArtistExist(Artist artist) { @@ -67,7 +177,8 @@ namespace Icarus.Models.Context { conn.Open(); - var query = "SELECT * FROM Artist WHERE ArtistId=@ArtistId"; + var query = "SELECT art.*, 0 AS SongCount FROM Artist art WHERE art.ArtistId=@ArtistId"; + using (MySqlCommand cmd = new MySqlCommand(query, conn)) { cmd.Parameters.AddWithValue("@ArtistId", artist.ArtistId); @@ -104,7 +215,7 @@ namespace Icarus.Models.Context { conn.Open(); - var query = "SELECT * FROM Artist WHERE Name=@Name"; + var query = "SELECT art.*, 0 AS SongCount FROM Artist art WHERE art.Name=@Name"; using (MySqlCommand cmd = new MySqlCommand(query, conn)) { cmd.Parameters.AddWithValue("@Name", song.Artist); @@ -214,67 +325,6 @@ namespace Icarus.Models.Context } } - public Artist GetArtist(Artist artist) - { - try - { - _logger.Info("Retrieving artist record from the database"); - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); - - var query = "SELECT * FROM Artist WHERE ArtistId=@ArtistId"; - using (MySqlCommand cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@ArtistId", artist.ArtistId); - - using (var reader = cmd.ExecuteReader()) - { - artist = ParseSingleData(reader); - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - - return artist; - } - public Artist GetArtist(Song song) - { - Artist artist = new Artist(); - try - { - _logger.Info("Retrieving artist record from the database"); - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); - - var query = "SELECT * FROM Artist WHERE Name=@Name"; - using (MySqlCommand cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@Name", song.Artist); - - using (var reader = cmd.ExecuteReader()) - { - artist = ParseSingleData(reader); - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - - return artist; - } - - private List ParseData(MySqlDataReader reader) { List artists = new List(); diff --git a/Models/Context/GenreStoreContext.cs b/Models/Context/GenreStoreContext.cs index c606f9c..441694a 100644 --- a/Models/Context/GenreStoreContext.cs +++ b/Models/Context/GenreStoreContext.cs @@ -28,33 +28,74 @@ namespace Icarus.Models.Context #region Methods + public List GetGenresWithoutCount() + { + _logger.Info("Retrieving all genre records without song counts"); + + var genres = new List(); + + if (AnyGenre()) + { + + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT * FROM Genre"; + + using (var cmd = new MySqlCommand(query, conn)) + { + using (var reader = cmd.ExecuteReader()) + { + genres = ParseData(reader); + } + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + + return genres; + } public List GetGenres() { _logger.Info("Retrieving Genre records"); var genres = new List(); - try + if (AnyGenre()) { - using (var conn = GetConnection()) + + try { - conn.Open(); - - var query = "SELECT * FROM Genre"; - - using (var cmd = new MySqlCommand(query, conn)) + using (var conn = GetConnection()) { - using (var reader = cmd.ExecuteReader()) + conn.Open(); + + var query = "SELECT gnr.*, COUNT(*) AS SongCount FROM Genre " + + "gnr LEFt JOIN Song sng ON gnr.GenreId=sng.GenreId " + + "GROUP BY gnr.GenreId"; + + using (var cmd = new MySqlCommand(query, conn)) { - genres = ParseData(reader); + using (var reader = cmd.ExecuteReader()) + { + genres = ParseData(reader); + } } } } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } } return genres; @@ -64,29 +105,34 @@ namespace Icarus.Models.Context { _logger.Info("Retrieving Genre record"); - try + if (DoesGenreExist(genre)) { - using (var conn = GetConnection()) + try { - conn.Open(); - - var query = "SELECT * FROM Genre WHERE GenreId=@GenreId"; - - using (var cmd = new MySqlCommand(query, conn)) + using (var conn = GetConnection()) { - cmd.Parameters.AddWithValue("@GenreId", genre.GenreId); + conn.Open(); - using (var reader = cmd.ExecuteReader()) + var query = "SELECT gnr.*, COUNT(*) AS SongCount FROM Genre " + + "gnr LEFT JOIN Song sng ON gnr.GenreId=sng.GenreId " + + "WHERE gnr.GenreId=@GenreId"; + + using (var cmd = new MySqlCommand(query, conn)) { - genre = ParseSingleData(reader); + cmd.Parameters.AddWithValue("@GenreId", genre.GenreId); + + using (var reader = cmd.ExecuteReader()) + { + genre = ParseSingleData(reader); + } } } } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } } return genre; @@ -97,29 +143,84 @@ namespace Icarus.Models.Context var genre = new Genre(); - try + if (DoesGenreExist(song)) { - using (var conn = GetConnection()) + try { - conn.Open(); - - var query = "SELECT * FROM Genre WHERE GenreName=@GenreName"; - - using (var cmd = new MySqlCommand(query, conn)) + using (var conn = GetConnection()) { - cmd.Parameters.AddWithValue("@GenreName", song.Genre); + conn.Open(); - using (var reader = cmd.ExecuteReader()) + var query = "SELECT gnr.*, 0 AS SongCount FROM Genre " + + "gnr WHERE gnr.GenreName=@GenreName"; + + using (var cmd = new MySqlCommand(query, conn)) { - genre = ParseSingleData(reader); + cmd.Parameters.AddWithValue("@GenreName", song.Genre); + _logger.Info($"Song genre:\n\n\n {song.Genre}"); + + using (var reader = cmd.ExecuteReader()) + { + genre = ParseSingleData(reader); + } } } } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } } - catch (Exception ex) + + return genre; + } + public Genre GetGenre(Song song, bool retrieveCount) + { + _logger.Info("Retrieving Genre record"); + + var genre = new Genre(); + + if (DoesGenreExist(song)) { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = string.Empty; + + if (retrieveCount) + { + query = "SELECT gnr.*, 0 AS SongCount FROM Genre gnr " + + "LEFT JOIN Song sng ON gnr.GenreId=sng.GenreId " + + "WHERE gnr.GenreName=@GenreName GROUP BY gnr.GenreId " + + "LIMIT 1"; + } + else + { + query = "SELECT gnr.*, 0 AS SongCount FROM Genre gnr " + + "WHERE gnr.GenreName=@GenreName LIMIT 1"; + } + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@GenreName", song.Genre); + _logger.Info($"Song genre:\n\n\n {song.Genre}"); + + using (var reader = cmd.ExecuteReader()) + { + genre = ParseSingleData(reader); + } + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } } return genre; @@ -135,7 +236,8 @@ namespace Icarus.Models.Context { conn.Open(); - var query = "SELECT * FROM Genre WHERE GenreId=@GenreId"; + var query = "SELECT gnr.*, 0 AS SongCount FROM Genre gnr WHERE " + + "gnr.GenreId=@GenreId"; using (var cmd = new MySqlCommand(query, conn)) { @@ -172,13 +274,12 @@ namespace Icarus.Models.Context try { - var genre = ParseSingleData(song); - using (var conn = GetConnection()) { conn.Open(); - var query = "SELECT * FROM Genre WHERE GenreName=@GenreName"; + var query = "SELECT gnr.*, 0 AS SongCount FROM Genre gnr WHERE " + + "gnr.GenreName=@GenreName"; using (var cmd = new MySqlCommand(query, conn)) { @@ -198,7 +299,6 @@ namespace Icarus.Models.Context } } } - */ } catch (Exception ex) { @@ -335,6 +435,42 @@ namespace Icarus.Models.Context return genre; } + + private bool AnyGenre() + { + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT * FROM Genre"; + + using (var cmd = new MySqlCommand(query, conn)) + { + using (var reader = cmd.ExecuteReader()) + { + var genres = ParseData(reader); + + if (genres.Count > 0) + { + _logger.Info("Genres records"); + return true; + } + } + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + _logger.Info("No genre records found"); + + return false; + } #endregion } } diff --git a/Models/Context/UserStoreContext.cs b/Models/Context/UserStoreContext.cs index e294362..eac2a54 100644 --- a/Models/Context/UserStoreContext.cs +++ b/Models/Context/UserStoreContext.cs @@ -40,6 +40,7 @@ namespace Icarus.Models.Context ", PhoneNumber, Firstname, Lastname, EmailVerified) " + "VALUES(@Username, @Password, @Nickname, @Email, @PhoneNumber," + " @Firstname, @Lastname, @EmailVerified)"; + using (MySqlCommand cmd = new MySqlCommand(query, conn)) { cmd.Parameters.AddWithValue("@Username", user.Username); diff --git a/Models/Context/YearStoreContext.cs b/Models/Context/YearStoreContext.cs index 5601a4f..000ae32 100644 --- a/Models/Context/YearStoreContext.cs +++ b/Models/Context/YearStoreContext.cs @@ -40,7 +40,9 @@ namespace Icarus.Models.Context { conn.Open(); - var query = "SELECT * FROM Year"; + var query = "SELECT yr.*, COUNT(*) AS SongCount FROM Year " + + "yr LEFT JOIN Song sng ON yr.YearId=sng.YearId " + + "GROUP BY gnr.YearId"; using (var cmd = new MySqlCommand(query, conn)) { @@ -70,7 +72,9 @@ namespace Icarus.Models.Context { conn.Open(); - var query = "SELECT * FROM Year WHERE YearId=@YearId"; + var query = "SELECT yr.*, COUNT(*) AS SongCount FROM Year " + + "yr LEFT JOIN Song sng ON yr.YearId=sng.YearId WHERE " + + "YearId=@YearId GROUP BY yr.YearId"; using (var cmd = new MySqlCommand(query, conn)) { @@ -103,7 +107,53 @@ namespace Icarus.Models.Context { conn.Open(); - var query = "SELECT * FROM Year WHERE YearValue=@YearValue"; + var query = "SELECT yr.*, 0 AS SongCount FROM Year " + + "yr WHERE yr.YearValue=@YearValue"; + + using(var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@YearValue", song.Year); + + using (var reader = cmd.ExecuteReader()) + { + year = ParseSingleData(reader); + } + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + return year; + } + public Year GetSongYear(Song song, bool retrieveCount) + { + var year = new Year(); + + _logger.Info("Retrieving year record"); + + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = string.Empty; + + if (retrieveCount) + { + query = "SELECT yr.*, COUNT(*) AS SongCount FROM Year yr " + + "LEFT JOIN Song sng ON yr.YearValue=sng.Year WHERE " + + "yr.YearValue=@YearValue GROUP BY yr.YearId LIMIT 1"; + } + else + { + query = "SELECT yr.*, 0 AS SongCount FROM Year yr " + + "WHERE yr.YearValue=@YearValue LIMIT 1"; + } using(var cmd = new MySqlCommand(query, conn)) { @@ -135,7 +185,8 @@ namespace Icarus.Models.Context { conn.Open(); - var query = "SELECT * FROM Year WHERE YearId=@YearId"; + var query = "SELECT yr.*, 0 AS SongCount FROM Year yr WHERE " + + "yr.YearId=@YearId"; using (var cmd = new MySqlCommand(query, conn)) { @@ -175,7 +226,8 @@ namespace Icarus.Models.Context { conn.Open(); - var query = "SELECT * FROM Year WHERE YearValue=@YearValue"; + var query = "SELECT yr.*, 0 AS SongCount FROM Year yr WHERE " + + "yr.YearValue=@YearValue"; using (var cmd = new MySqlCommand(query, conn)) {