The SongCount field is not mapped during migrations. Working on changes to the StoreContext classes. These changes will calculate the song count for the album, artist, genre, and year records when querying data. The other change is to check to see if the record exist in the first place before querying using a left join. #47

This commit is contained in:
amazing-username
2019-05-25 03:06:04 +00:00
parent dd89b97997
commit e1627b04b9
9 changed files with 59 additions and 29 deletions
+3
View File
@@ -634,8 +634,11 @@ namespace Icarus.Controllers.Managers
{ {
_logger.Info("Starting process to save the song to the database"); _logger.Info("Starting process to save the song to the database");
MetadataRetriever.PrintMetadata(song);
SaveAlbumToDatabase(ref song, albumStore); SaveAlbumToDatabase(ref song, albumStore);
MetadataRetriever.PrintMetadata(song);
SaveArtistToDatabase(ref song, artistStore); SaveArtistToDatabase(ref song, artistStore);
MetadataRetriever.PrintMetadata(song);
_logger.Info($"Song;\nTitle {song.Title}\nAlbum {song.AlbumTitle}\nAlbum Id {song.AlbumId}\nArtist {song.ArtistId}"); _logger.Info($"Song;\nTitle {song.Title}\nAlbum {song.AlbumTitle}\nAlbum Id {song.AlbumId}\nArtist {song.ArtistId}");
+1
View File
@@ -15,6 +15,7 @@ namespace Icarus.Models
[JsonProperty("album_artist")] [JsonProperty("album_artist")]
public string AlbumArtist { get; set; } public string AlbumArtist { get; set; }
[JsonProperty("song_count")] [JsonProperty("song_count")]
[NotMapped]
public int SongCount { get; set; } public int SongCount { get; set; }
[JsonIgnore] [JsonIgnore]
+2
View File
@@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using Newtonsoft.Json; using Newtonsoft.Json;
@@ -12,6 +13,7 @@ namespace Icarus.Models
[JsonProperty("name")] [JsonProperty("name")]
public string Name { get; set; } public string Name { get; set; }
[JsonProperty("song_count")] [JsonProperty("song_count")]
[NotMapped]
public int SongCount { get; set; } public int SongCount { get; set; }
[JsonIgnore] [JsonIgnore]
+39 -10
View File
@@ -36,7 +36,9 @@ namespace Icarus.Models.Context
using (MySqlConnection conn = GetConnection()) using (MySqlConnection conn = GetConnection())
{ {
conn.Open(); conn.Open();
var query = "SELECT * FROM Album"; var query = "SELECT alb.*,COUNT(*) AS SongCount FROM Album alb " +
"LEFT JOIN Song sng ON alb.AlbumId=sng.AlbumId WHERE " +
"alb.AlbumId=sng.AlbumId GROUP BY alb.AlbumId";
using (MySqlCommand cmd = new MySqlCommand(query, conn)) using (MySqlCommand cmd = new MySqlCommand(query, conn))
{ {
using (var reader = cmd.ExecuteReader()) using (var reader = cmd.ExecuteReader())
@@ -63,7 +65,9 @@ namespace Icarus.Models.Context
using (MySqlConnection conn = GetConnection()) using (MySqlConnection conn = GetConnection())
{ {
conn.Open(); conn.Open();
var query = "SELECT * FROM Album WHERE AlbumId=@AlbumId"; var query = "SELECT alb.*, COUNT(*) AS SongCount FROM Album alb " +
"LEFT JOIN Song sng ON alb.AlbumId=sng.AlbumId WHERE "+
"alb.AlbumId=@AlbumId LIMIT 1";
using (MySqlCommand cmd = new MySqlCommand(query, conn)) using (MySqlCommand cmd = new MySqlCommand(query, conn))
{ {
cmd.Parameters.AddWithValue("@AlbumId", album.AlbumId); cmd.Parameters.AddWithValue("@AlbumId", album.AlbumId);
@@ -92,11 +96,13 @@ namespace Icarus.Models.Context
using (MySqlConnection conn = GetConnection()) using (MySqlConnection conn = GetConnection())
{ {
conn.Open(); conn.Open();
var query = "SELECT * FROM Album WHERE Title=@Title"; 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";
using (MySqlCommand cmd = new MySqlCommand(query, conn)) using (MySqlCommand cmd = new MySqlCommand(query, conn))
{ {
cmd.Parameters.AddWithValue("@Title", song.AlbumTitle); cmd.Parameters.AddWithValue("@Id", song.Id);
using (var reader = cmd.ExecuteReader()) using (var reader = cmd.ExecuteReader())
{ {
@@ -118,6 +124,18 @@ namespace Icarus.Models.Context
{ {
try 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()) using (MySqlConnection conn = GetConnection())
{ {
conn.Open(); conn.Open();
@@ -139,6 +157,7 @@ namespace Icarus.Models.Context
} }
} }
} }
*/
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -151,6 +170,18 @@ namespace Icarus.Models.Context
{ {
try 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()) using (MySqlConnection conn = GetConnection())
{ {
conn.Open(); conn.Open();
@@ -172,6 +203,7 @@ namespace Icarus.Models.Context
} }
} }
} }
*/
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -188,14 +220,12 @@ namespace Icarus.Models.Context
using (MySqlConnection conn = GetConnection()) using (MySqlConnection conn = GetConnection())
{ {
conn.Open(); conn.Open();
var query = "INSERT INTO Album(Title, AlbumArtist, " + var query = "INSERT INTO Album(Title, AlbumArtist)" +
"SongCount) VALUES (@Title, @AlbumArtist, " + " VALUES (@Title, @AlbumArtist)";
"@SongCount)";
using (MySqlCommand cmd = new MySqlCommand(query, conn)) using (MySqlCommand cmd = new MySqlCommand(query, conn))
{ {
cmd.Parameters.AddWithValue("@Title", album.Title); cmd.Parameters.AddWithValue("@Title", album.Title);
cmd.Parameters.AddWithValue("@AlbumArtist", album.AlbumArtist); cmd.Parameters.AddWithValue("@AlbumArtist", album.AlbumArtist);
cmd.Parameters.AddWithValue("@SongCount", album.SongCount);
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
} }
@@ -215,13 +245,12 @@ namespace Icarus.Models.Context
{ {
conn.Open(); conn.Open();
var query = "UPDATE Album SET Title=@Title, AlbumArtist=" + var query = "UPDATE Album SET Title=@Title, AlbumArtist=" +
"@AlbumArtist, SongCount=@SongCount WHERE AlbumId=@AlbumId"; "@AlbumArtist WHERE AlbumId=@AlbumId";
using (MySqlCommand cmd = new MySqlCommand(query, conn)) using (MySqlCommand cmd = new MySqlCommand(query, conn))
{ {
cmd.Parameters.AddWithValue("@Title", album.Title); cmd.Parameters.AddWithValue("@Title", album.Title);
cmd.Parameters.AddWithValue("@AlbumArtist", album.AlbumArtist); cmd.Parameters.AddWithValue("@AlbumArtist", album.AlbumArtist);
cmd.Parameters.AddWithValue("@SongCount", album.SongCount);
cmd.Parameters.AddWithValue("@AlbumId", album.AlbumId); cmd.Parameters.AddWithValue("@AlbumId", album.AlbumId);
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
+2 -7
View File
@@ -13,7 +13,6 @@ namespace Icarus.Models.Context
public class ArtistStoreContext : BaseStoreContext public class ArtistStoreContext : BaseStoreContext
{ {
#region Fields #region Fields
//private static Logger _logger = NLog.LogManager.GetCurrentClassLogger();
#endregion #endregion
@@ -143,13 +142,11 @@ namespace Icarus.Models.Context
using (MySqlConnection conn = GetConnection()) using (MySqlConnection conn = GetConnection())
{ {
conn.Open(); conn.Open();
var query = "INSERT INTO Artist(Name, SongCount) " + var query = "INSERT INTO Artist(Name) VALUES(@Name)";
"VALUES(@Name, @SongCount)";
using (MySqlCommand cmd = new MySqlCommand(query, conn)) using (MySqlCommand cmd = new MySqlCommand(query, conn))
{ {
cmd.Parameters.AddWithValue("@Name", artist.Name); cmd.Parameters.AddWithValue("@Name", artist.Name);
cmd.Parameters.AddWithValue("@SongCount", artist.SongCount);
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
} }
@@ -171,13 +168,11 @@ namespace Icarus.Models.Context
using (MySqlConnection conn = GetConnection()) using (MySqlConnection conn = GetConnection())
{ {
conn.Open(); conn.Open();
var query = "UPDATE Artist SET Name=@Name, SongCount" + var query = "UPDATE Artist SET Name=@Name WHERE ArtistId=@ArtistId";
"=@SongCount WHERE ArtistId=@ArtistId";
using (MySqlCommand cmd = new MySqlCommand(query, conn)) using (MySqlCommand cmd = new MySqlCommand(query, conn))
{ {
cmd.Parameters.AddWithValue("@Name", artist.Name); cmd.Parameters.AddWithValue("@Name", artist.Name);
cmd.Parameters.AddWithValue("@SongCount", artist.SongCount);
cmd.Parameters.AddWithValue("@ArtistId", artist.ArtistId); cmd.Parameters.AddWithValue("@ArtistId", artist.ArtistId);
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
+6 -6
View File
@@ -172,6 +172,8 @@ namespace Icarus.Models.Context
try try
{ {
var genre = ParseSingleData(song);
using (var conn = GetConnection()) using (var conn = GetConnection())
{ {
conn.Open(); conn.Open();
@@ -196,6 +198,7 @@ namespace Icarus.Models.Context
} }
} }
} }
*/
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -218,13 +221,11 @@ namespace Icarus.Models.Context
{ {
conn.Open(); conn.Open();
var query = "INSERT INTO Genre(GenreName, SongCount) VALUES(" + var query = "INSERT INTO Genre(GenreName) VALUES(@GenreName)";
"@GenreName, @SongCount)";
using (var cmd = new MySqlCommand(query, conn)) using (var cmd = new MySqlCommand(query, conn))
{ {
cmd.Parameters.AddWithValue("@GenreName", genre.GenreName); cmd.Parameters.AddWithValue("@GenreName", genre.GenreName);
cmd.Parameters.AddWithValue("@SongCount", genre.SongCount);
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
} }
@@ -246,13 +247,12 @@ namespace Icarus.Models.Context
{ {
conn.Open(); conn.Open();
var query = "UPDATE Genre SET GenreName=@GenreName, " + var query = "UPDATE Genre SET GenreName=@GenreName " +
"SongCount=@SongCount WHERE GenreId=@GenreId"; "WHERE GenreId=@GenreId";
using (var cmd = new MySqlCommand(query, conn)) using (var cmd = new MySqlCommand(query, conn))
{ {
cmd.Parameters.AddWithValue("@GenreName", genre.GenreName); cmd.Parameters.AddWithValue("@GenreName", genre.GenreName);
cmd.Parameters.AddWithValue("@SongCount", genre.SongCount);
cmd.Parameters.AddWithValue("@GenreId", genre.GenreId); cmd.Parameters.AddWithValue("@GenreId", genre.GenreId);
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
+2 -6
View File
@@ -216,13 +216,11 @@ namespace Icarus.Models.Context
{ {
conn.Open(); conn.Open();
var query = "INSERT INTO Year(YearValue, SongCount) VALUES(" + var query = "INSERT INTO Year(YearValue) VALUES(@YearValue)";
"@YearValue, @SongCount)";
using (var cmd = new MySqlCommand(query, conn)) using (var cmd = new MySqlCommand(query, conn))
{ {
cmd.Parameters.AddWithValue("@YearValue", year.YearValue); cmd.Parameters.AddWithValue("@YearValue", year.YearValue);
cmd.Parameters.AddWithValue("@SongCount", year.SongCount);
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
} }
@@ -244,14 +242,12 @@ namespace Icarus.Models.Context
{ {
conn.Open(); conn.Open();
var query = "UPDATE Year SET YearValue=@YearValue, SongCount=@SongCount " + var query = "UPDATE Year SET YearValue=@YearValue WHERE YearId=@YearId";
"WHERE YearId=@YearId";
using (var cmd = new MySqlCommand(query, conn)) using (var cmd = new MySqlCommand(query, conn))
{ {
cmd.Parameters.AddWithValue("@YearId", year.YearId); cmd.Parameters.AddWithValue("@YearId", year.YearId);
cmd.Parameters.AddWithValue("@YearValue", year.YearValue); cmd.Parameters.AddWithValue("@YearValue", year.YearValue);
cmd.Parameters.AddWithValue("@SongCount", year.SongCount);
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
} }
+2
View File
@@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using Newtonsoft.Json; using Newtonsoft.Json;
@@ -12,6 +13,7 @@ namespace Icarus.Models
[JsonProperty("genre")] [JsonProperty("genre")]
public string GenreName { get; set; } public string GenreName { get; set; }
[JsonProperty("song_count")] [JsonProperty("song_count")]
[NotMapped]
public int SongCount { get; set; } public int SongCount { get; set; }
[JsonIgnore] [JsonIgnore]
+2
View File
@@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using Newtonsoft.Json; using Newtonsoft.Json;
@@ -12,6 +13,7 @@ namespace Icarus.Models
[JsonProperty("year")] [JsonProperty("year")]
public int YearValue { get; set; } public int YearValue { get; set; }
[JsonProperty("song_count")] [JsonProperty("song_count")]
[NotMapped]
public int SongCount { get; set; } public int SongCount { get; set; }
[JsonIgnore] [JsonIgnore]