Updated Song model to include ArtistId, Updated Artist Model, and partially implemented Artist API endpoint functionality. I left TODO's on where to pick up. #19, #21, #26

This commit is contained in:
amazing-username
2019-05-09 21:51:29 -04:00
parent 287719db42
commit 0c4a1612b1
6 changed files with 229 additions and 16 deletions
+2
View File
@@ -37,6 +37,7 @@ namespace Icarus.Controllers
public IActionResult Get() public IActionResult Get()
{ {
List<Artist> artists = new List<Artist>(); List<Artist> artists = new List<Artist>();
// TODO: Implement functionality
return Ok(artists); return Ok(artists);
} }
@@ -45,6 +46,7 @@ namespace Icarus.Controllers
public IActionResult Get(int id) public IActionResult Get(int id)
{ {
Artist artist = new Artist(); Artist artist = new Artist();
// TODO: Implement functionality
return Ok(artist); return Ok(artist);
} }
+5 -1
View File
@@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using Newtonsoft.Json; using Newtonsoft.Json;
@@ -7,10 +8,13 @@ namespace Icarus.Models
public class Artist public class Artist
{ {
[JsonProperty("id")] [JsonProperty("id")]
public int Id { get; set; } public int ArtistId { get; set; }
[JsonProperty("name")] [JsonProperty("name")]
public string Name { get; set; } public string Name { get; set; }
[JsonProperty("song_count")] [JsonProperty("song_count")]
public int SongCount { get; set; } public int SongCount { get; set; }
[JsonIgnore]
public List<Song> Songs { get; set; }
} }
} }
+3 -2
View File
@@ -12,7 +12,7 @@ namespace Icarus.Models.Context
{ {
public class ArtistContext : DbContext public class ArtistContext : DbContext
{ {
public DbSet<Artist> Artist { get; set; } public DbSet<Artist> Artists { get; set; }
public ArtistContext(DbContextOptions<ArtistContext> options) public ArtistContext(DbContextOptions<ArtistContext> options)
: base (options) : base (options)
@@ -20,7 +20,8 @@ namespace Icarus.Models.Context
protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnModelCreating(ModelBuilder modelBuilder)
{ {
modelBuilder.Entity<Artist>(); modelBuilder.Entity<Artist>()
.ToTable("Artist");
} }
} }
} }
+207 -12
View File
@@ -43,18 +43,8 @@ namespace Icarus.Models.Context
{ {
using (var reader = cmd.ExecuteReader()) using (var reader = cmd.ExecuteReader())
{ {
while (reader.Read())
{ artists = ParseData(reader);
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
});
}
} }
} }
} }
@@ -67,6 +57,211 @@ namespace Icarus.Models.Context
return artists; 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<Artist> ParseData(MySqlDataReader reader)
{
List<Artist> artists = new List<Artist>();
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 #endregion
} }
} }
+7 -1
View File
@@ -24,9 +24,15 @@ namespace Icarus.Models.Context
modelBuilder.Entity<Song>() modelBuilder.Entity<Song>()
.ToTable("Song") .ToTable("Song")
.HasOne(s => s.Album) .HasOne(s => s.Album)
.WithMany(a => a.Songs) .WithMany(al => al.Songs)
.HasForeignKey(s => s.AlbumId) .HasForeignKey(s => s.AlbumId)
.HasConstraintName("ForeignKey_Song_Album"); .HasConstraintName("ForeignKey_Song_Album");
modelBuilder.Entity<Song>()
.HasOne(sa => sa.SongArtist)
.WithMany(ar => ar.Songs)
.HasForeignKey(s => s.ArtistId)
.HasConstraintName("ForeignKey_Song_Artist");
} }
} }
} }
+5
View File
@@ -35,5 +35,10 @@ namespace Icarus.Models
public Album Album { get; set; } public Album Album { get; set; }
[JsonIgnore] [JsonIgnore]
public int AlbumId { get; set; } public int AlbumId { get; set; }
[JsonIgnore]
public Artist SongArtist { get; set; }
[JsonIgnore]
public int ArtistId { get; set; }
} }
} }