diff --git a/Controllers/ArtistController.cs b/Controllers/ArtistController.cs index d7cc2c4..ed5ee84 100644 --- a/Controllers/ArtistController.cs +++ b/Controllers/ArtistController.cs @@ -37,6 +37,7 @@ namespace Icarus.Controllers public IActionResult Get() { List artists = new List(); + // TODO: Implement functionality return Ok(artists); } @@ -45,6 +46,7 @@ namespace Icarus.Controllers public IActionResult Get(int id) { Artist artist = new Artist(); + // TODO: Implement functionality return Ok(artist); } diff --git a/Models/Artist.cs b/Models/Artist.cs index 102498d..e4997d0 100644 --- a/Models/Artist.cs +++ b/Models/Artist.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using Newtonsoft.Json; @@ -7,10 +8,13 @@ namespace Icarus.Models public class Artist { [JsonProperty("id")] - public int Id { get; set; } + public int ArtistId { get; set; } [JsonProperty("name")] public string Name { get; set; } [JsonProperty("song_count")] public int SongCount { get; set; } + + [JsonIgnore] + public List Songs { get; set; } } } diff --git a/Models/Context/ArtistContext.cs b/Models/Context/ArtistContext.cs index e680d78..9664034 100644 --- a/Models/Context/ArtistContext.cs +++ b/Models/Context/ArtistContext.cs @@ -12,7 +12,7 @@ namespace Icarus.Models.Context { public class ArtistContext : DbContext { - public DbSet Artist { get; set; } + public DbSet Artists { get; set; } public ArtistContext(DbContextOptions options) : base (options) @@ -20,7 +20,8 @@ namespace Icarus.Models.Context protected override void OnModelCreating(ModelBuilder modelBuilder) { - modelBuilder.Entity(); + modelBuilder.Entity() + .ToTable("Artist"); } } } diff --git a/Models/Context/ArtistStoreContext.cs b/Models/Context/ArtistStoreContext.cs index 0c2f17f..2fef7bc 100644 --- a/Models/Context/ArtistStoreContext.cs +++ b/Models/Context/ArtistStoreContext.cs @@ -43,18 +43,8 @@ namespace Icarus.Models.Context { using (var reader = cmd.ExecuteReader()) { - while (reader.Read()) - { - var id = Convert.ToInt32(reader["Id"].ToString()); - var name = reader["Name"].ToString(); - var songCount = Convert.ToInt32(reader["SongCount"].ToString()); - artists.Add(new Artist - { - Id = id, - Name = name, - SongCount = songCount - }); - } + + artists = ParseData(reader); } } } @@ -67,6 +57,211 @@ namespace Icarus.Models.Context return artists; } + + + public bool DoesArtistExist(Artist artist) + { + try + { + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT * FROM Artist WHERE ArtistId=@ArtistId"; + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@AlbumId", artist.ArtistId); + + using (var reader = cmd.ExecuteReader()) + { + artist = ParseSingleData(reader); + + if (artist.Name != null) + { + _logger.Info($"Artist {artist.Name} exists"); + return true; + } + } + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + return false; + } + public bool DoesArtistExist(Song song) + { + try + { + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT * FROM Album WHERE Name=@Name"; + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Name", song.Artist); + + using (var reader = cmd.ExecuteReader()) + { + var artist = ParseSingleData(reader); + + if (!String.IsNullOrEmpty(artist.Name)) + { + _logger.Info($"Artist {artist.Name} exists"); + return true; + } + } + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + return false; + } + + + public void SaveArtist(Artist artist) + { + try + { + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + var query = "INSERT INTO Artist(Name, SongCount) " + + "VALUES(@Name, @SongCount)"; + + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Name", artist.Name); + cmd.Parameters.AddWithValue("@SongCount", artist.SongCount); + + cmd.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + public void UpdateArtist(Artist artist) + { + try + { + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + // TODO: Implement functionality + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + + public Artist GetArtist(Artist artist) + { + try + { + 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 + { + 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", song.ArtistId); + 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(); + + while (reader.Read()) + { + var id = Convert.ToInt32(reader["ArtistId"]); + var name = reader["Name"].ToString(); + var songCount = Convert.ToInt32(reader["SongCount"].ToString()); + artists.Add(new Artist + { + ArtistId = id, + Name = name, + SongCount = songCount + }); + } + + return artists; + } + + private Artist ParseSingleData(MySqlDataReader reader) + { + Artist artist = new Artist(); + + while (reader.Read()) + { + var id = Convert.ToInt32(reader["ArtistId"]); + var name = reader["Name"].ToString(); + var songCount = Convert.ToInt32(reader["SongCount"].ToString()); + artist.ArtistId = id; + artist.Name = name; + artist.SongCount = songCount; + } + + return artist; + } #endregion } } diff --git a/Models/Context/SongContext.cs b/Models/Context/SongContext.cs index 3fd05ce..6ed8fd8 100644 --- a/Models/Context/SongContext.cs +++ b/Models/Context/SongContext.cs @@ -24,9 +24,15 @@ namespace Icarus.Models.Context modelBuilder.Entity() .ToTable("Song") .HasOne(s => s.Album) - .WithMany(a => a.Songs) + .WithMany(al => al.Songs) .HasForeignKey(s => s.AlbumId) .HasConstraintName("ForeignKey_Song_Album"); + + modelBuilder.Entity() + .HasOne(sa => sa.SongArtist) + .WithMany(ar => ar.Songs) + .HasForeignKey(s => s.ArtistId) + .HasConstraintName("ForeignKey_Song_Artist"); } } } diff --git a/Models/Song.cs b/Models/Song.cs index 82750ef..75cc762 100644 --- a/Models/Song.cs +++ b/Models/Song.cs @@ -35,5 +35,10 @@ namespace Icarus.Models public Album Album { get; set; } [JsonIgnore] public int AlbumId { get; set; } + + [JsonIgnore] + public Artist SongArtist { get; set; } + [JsonIgnore] + public int ArtistId { get; set; } } }