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");
MetadataRetriever.PrintMetadata(song);
SaveAlbumToDatabase(ref song, albumStore);
MetadataRetriever.PrintMetadata(song);
SaveArtistToDatabase(ref song, artistStore);
MetadataRetriever.PrintMetadata(song);
_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")]
public string AlbumArtist { get; set; }
[JsonProperty("song_count")]
[NotMapped]
public int SongCount { get; set; }
[JsonIgnore]
+2
View File
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using Newtonsoft.Json;
@@ -12,6 +13,7 @@ namespace Icarus.Models
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("song_count")]
[NotMapped]
public int SongCount { get; set; }
[JsonIgnore]
+39 -10
View File
@@ -36,7 +36,9 @@ namespace Icarus.Models.Context
using (MySqlConnection conn = GetConnection())
{
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 (var reader = cmd.ExecuteReader())
@@ -63,7 +65,9 @@ namespace Icarus.Models.Context
using (MySqlConnection conn = GetConnection())
{
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))
{
cmd.Parameters.AddWithValue("@AlbumId", album.AlbumId);
@@ -92,11 +96,13 @@ namespace Icarus.Models.Context
using (MySqlConnection conn = GetConnection())
{
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))
{
cmd.Parameters.AddWithValue("@Title", song.AlbumTitle);
cmd.Parameters.AddWithValue("@Id", song.Id);
using (var reader = cmd.ExecuteReader())
{
@@ -118,6 +124,18 @@ 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();
@@ -139,6 +157,7 @@ namespace Icarus.Models.Context
}
}
}
*/
}
catch (Exception ex)
{
@@ -151,6 +170,18 @@ 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();
@@ -172,6 +203,7 @@ namespace Icarus.Models.Context
}
}
}
*/
}
catch (Exception ex)
{
@@ -188,14 +220,12 @@ namespace Icarus.Models.Context
using (MySqlConnection conn = GetConnection())
{
conn.Open();
var query = "INSERT INTO Album(Title, AlbumArtist, " +
"SongCount) VALUES (@Title, @AlbumArtist, " +
"@SongCount)";
var query = "INSERT INTO Album(Title, AlbumArtist)" +
" VALUES (@Title, @AlbumArtist)";
using (MySqlCommand cmd = new MySqlCommand(query, conn))
{
cmd.Parameters.AddWithValue("@Title", album.Title);
cmd.Parameters.AddWithValue("@AlbumArtist", album.AlbumArtist);
cmd.Parameters.AddWithValue("@SongCount", album.SongCount);
cmd.ExecuteNonQuery();
}
@@ -215,13 +245,12 @@ namespace Icarus.Models.Context
{
conn.Open();
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))
{
cmd.Parameters.AddWithValue("@Title", album.Title);
cmd.Parameters.AddWithValue("@AlbumArtist", album.AlbumArtist);
cmd.Parameters.AddWithValue("@SongCount", album.SongCount);
cmd.Parameters.AddWithValue("@AlbumId", album.AlbumId);
cmd.ExecuteNonQuery();
+2 -7
View File
@@ -13,7 +13,6 @@ namespace Icarus.Models.Context
public class ArtistStoreContext : BaseStoreContext
{
#region Fields
//private static Logger _logger = NLog.LogManager.GetCurrentClassLogger();
#endregion
@@ -143,13 +142,11 @@ namespace Icarus.Models.Context
using (MySqlConnection conn = GetConnection())
{
conn.Open();
var query = "INSERT INTO Artist(Name, SongCount) " +
"VALUES(@Name, @SongCount)";
var query = "INSERT INTO Artist(Name) VALUES(@Name)";
using (MySqlCommand cmd = new MySqlCommand(query, conn))
{
cmd.Parameters.AddWithValue("@Name", artist.Name);
cmd.Parameters.AddWithValue("@SongCount", artist.SongCount);
cmd.ExecuteNonQuery();
}
@@ -171,13 +168,11 @@ namespace Icarus.Models.Context
using (MySqlConnection conn = GetConnection())
{
conn.Open();
var query = "UPDATE Artist SET Name=@Name, SongCount" +
"=@SongCount WHERE ArtistId=@ArtistId";
var query = "UPDATE Artist SET Name=@Name WHERE ArtistId=@ArtistId";
using (MySqlCommand cmd = new MySqlCommand(query, conn))
{
cmd.Parameters.AddWithValue("@Name", artist.Name);
cmd.Parameters.AddWithValue("@SongCount", artist.SongCount);
cmd.Parameters.AddWithValue("@ArtistId", artist.ArtistId);
cmd.ExecuteNonQuery();
+6 -6
View File
@@ -172,6 +172,8 @@ namespace Icarus.Models.Context
try
{
var genre = ParseSingleData(song);
using (var conn = GetConnection())
{
conn.Open();
@@ -196,6 +198,7 @@ namespace Icarus.Models.Context
}
}
}
*/
}
catch (Exception ex)
{
@@ -218,13 +221,11 @@ namespace Icarus.Models.Context
{
conn.Open();
var query = "INSERT INTO Genre(GenreName, SongCount) VALUES(" +
"@GenreName, @SongCount)";
var query = "INSERT INTO Genre(GenreName) VALUES(@GenreName)";
using (var cmd = new MySqlCommand(query, conn))
{
cmd.Parameters.AddWithValue("@GenreName", genre.GenreName);
cmd.Parameters.AddWithValue("@SongCount", genre.SongCount);
cmd.ExecuteNonQuery();
}
@@ -246,13 +247,12 @@ namespace Icarus.Models.Context
{
conn.Open();
var query = "UPDATE Genre SET GenreName=@GenreName, " +
"SongCount=@SongCount WHERE GenreId=@GenreId";
var query = "UPDATE Genre SET GenreName=@GenreName " +
"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();
+2 -6
View File
@@ -216,13 +216,11 @@ namespace Icarus.Models.Context
{
conn.Open();
var query = "INSERT INTO Year(YearValue, SongCount) VALUES(" +
"@YearValue, @SongCount)";
var query = "INSERT INTO Year(YearValue) VALUES(@YearValue)";
using (var cmd = new MySqlCommand(query, conn))
{
cmd.Parameters.AddWithValue("@YearValue", year.YearValue);
cmd.Parameters.AddWithValue("@SongCount", year.SongCount);
cmd.ExecuteNonQuery();
}
@@ -244,14 +242,12 @@ namespace Icarus.Models.Context
{
conn.Open();
var query = "UPDATE Year SET YearValue=@YearValue, SongCount=@SongCount " +
"WHERE YearId=@YearId";
var query = "UPDATE Year SET YearValue=@YearValue WHERE YearId=@YearId";
using (var cmd = new MySqlCommand(query, conn))
{
cmd.Parameters.AddWithValue("@YearId", year.YearId);
cmd.Parameters.AddWithValue("@YearValue", year.YearValue);
cmd.Parameters.AddWithValue("@SongCount", year.SongCount);
cmd.ExecuteNonQuery();
}
+2
View File
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using Newtonsoft.Json;
@@ -12,6 +13,7 @@ namespace Icarus.Models
[JsonProperty("genre")]
public string GenreName { get; set; }
[JsonProperty("song_count")]
[NotMapped]
public int SongCount { get; set; }
[JsonIgnore]
+2
View File
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using Newtonsoft.Json;
@@ -12,6 +13,7 @@ namespace Icarus.Models
[JsonProperty("year")]
public int YearValue { get; set; }
[JsonProperty("song_count")]
[NotMapped]
public int SongCount { get; set; }
[JsonIgnore]