Completed all TODO tasks, what's left is to go over the code and do some cleanup regarding the album API functonality. #22, #25

This commit is contained in:
amazing-username
2019-05-08 22:06:19 -04:00
parent 677646bb62
commit f7d6580253
10 changed files with 110 additions and 66 deletions
+15
View File
@@ -7,6 +7,7 @@ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Icarus.Models; using Icarus.Models;
using Icarus.Models.Context;
namespace Icarus.Controllers namespace Icarus.Controllers
{ {
@@ -37,6 +38,13 @@ namespace Icarus.Controllers
{ {
List<Album> albums = new List<Album>(); List<Album> albums = new List<Album>();
AlbumStoreContext albumStoreContext = HttpContext
.RequestServices
.GetService(typeof(AlbumStoreContext)) as AlbumStoreContext;
albums = albumStoreContext.GetAlbums();
return Ok(albums); return Ok(albums);
} }
@@ -44,6 +52,13 @@ namespace Icarus.Controllers
public IActionResult Get(int id) public IActionResult Get(int id)
{ {
Album album = new Album(); Album album = new Album();
album.AlbumId = id;
AlbumStoreContext albumStoreContext = HttpContext
.RequestServices
.GetService(typeof(AlbumStoreContext)) as AlbumStoreContext;
album = albumStoreContext.GetAlbum(album);
return Ok(album); return Ok(album);
} }
+23 -22
View File
@@ -116,13 +116,13 @@ namespace Icarus.Controllers.Managers
using (MySqlConnection conn = new MySqlConnection(_connectionString)) using (MySqlConnection conn = new MySqlConnection(_connectionString))
{ {
conn.Open(); conn.Open();
string query = "INSERT INTO Songs(Title, Album, Artist, Year, Genre, Duration, " + string query = "INSERT INTO Songs(Title, AlbumTitle, Artist, Year, Genre, Duration, " +
"Filename, SongPath) VALUES(@Title, @Album, @Artist, @Year, @Genre, " + "Filename, SongPath) VALUES(@Title, @AlbumTitle, @Artist, @Year, @Genre, " +
"@Duration, @Filename, @SongPath)"; "@Duration, @Filename, @SongPath)";
using (MySqlCommand cmd = new MySqlCommand(query, conn)) using (MySqlCommand cmd = new MySqlCommand(query, conn))
{ {
cmd.Parameters.AddWithValue("@Title", _song.Title); cmd.Parameters.AddWithValue("@Title", _song.Title);
cmd.Parameters.AddWithValue("@Album", _song.Album); cmd.Parameters.AddWithValue("@AlbumTitle", _song.AlbumTitle);
cmd.Parameters.AddWithValue("@Artist", _song.Artist); cmd.Parameters.AddWithValue("@Artist", _song.Artist);
cmd.Parameters.AddWithValue("@Year", _song.Year); cmd.Parameters.AddWithValue("@Year", _song.Year);
cmd.Parameters.AddWithValue("@Genre", _song.Genre); cmd.Parameters.AddWithValue("@Genre", _song.Genre);
@@ -147,13 +147,13 @@ namespace Icarus.Controllers.Managers
using (MySqlConnection conn = new MySqlConnection(_connectionString)) using (MySqlConnection conn = new MySqlConnection(_connectionString))
{ {
conn.Open(); conn.Open();
string query = "INSERT INTO Songs(Title, Album, Artist, Year, Genre, Duration, " + string query = "INSERT INTO Songs(Title, AlbumTitle, Artist, Year, Genre, Duration, " +
", Filename, SongPath) VALUES(@Title, @Album, @Artist, @Year, @Genre, " + ", Filename, SongPath) VALUES(@Title, @AlbumTitle, @Artist, @Year, @Genre, " +
"@Duration, @Filename, @SongPath)"; "@Duration, @Filename, @SongPath)";
using (MySqlCommand cmd = new MySqlCommand(query, conn)) using (MySqlCommand cmd = new MySqlCommand(query, conn))
{ {
cmd.Parameters.AddWithValue("@Title", song.Title); cmd.Parameters.AddWithValue("@Title", song.Title);
cmd.Parameters.AddWithValue("@Album", song.Album); cmd.Parameters.AddWithValue("@AlbumTitle", song.AlbumTitle);
cmd.Parameters.AddWithValue("@Artist", song.Artist); cmd.Parameters.AddWithValue("@Artist", song.Artist);
cmd.Parameters.AddWithValue("@Year", song.Year); cmd.Parameters.AddWithValue("@Year", song.Year);
cmd.Parameters.AddWithValue("@Genre", song.Genre); cmd.Parameters.AddWithValue("@Genre", song.Genre);
@@ -235,12 +235,8 @@ namespace Icarus.Controllers.Managers
{ {
try try
{ {
// TODO: Define and implement method that will take care of the
// song and album records, eventually will address the artist
// records. Make use of helper functions
_logger.Info("Starting process to save song to the filesystem"); _logger.Info("Starting process to save song to the filesystem");
var fileTempPath = Path.Combine(_tempDirectoryRoot, songFile.FileName); var fileTempPath = Path.Combine(_tempDirectoryRoot, songFile.FileName);
//await SaveSongToFileSystemTemp(song, fileTempPath);
var song = await SaveSongTemp(songFile, fileTempPath); var song = await SaveSongTemp(songFile, fileTempPath);
System.IO.File.Delete(fileTempPath); System.IO.File.Delete(fileTempPath);
@@ -372,13 +368,13 @@ namespace Icarus.Controllers.Managers
} }
Song RetrieveMetaData(string filePath) private Song RetrieveMetaData(string filePath)
{ {
Song newSong = new Song Song newSong = new Song
{ {
Title = "Untitled", Title = "Untitled",
Artist = "Untitled", Artist = "Untitled",
Album = "Untitled", AlbumTitle = "Untitled",
Year = 0, Year = 0,
Genre = "Untitled", Genre = "Untitled",
Duration = 0, Duration = 0,
@@ -404,7 +400,7 @@ namespace Icarus.Controllers.Managers
newSong.Artist = artist; newSong.Artist = artist;
album = tag.Album; album = tag.Album;
Console.WriteLine("Album: {0}", album); Console.WriteLine("Album: {0}", album);
newSong.Album = album; newSong.AlbumTitle = album;
genre = "Not Implemented"; genre = "Not Implemented";
Console.WriteLine("Genre: {0}", genre); Console.WriteLine("Genre: {0}", genre);
newSong.Genre = genre; newSong.Genre = genre;
@@ -428,7 +424,7 @@ namespace Icarus.Controllers.Managers
return newSong; return newSong;
} }
async Task<SongData> RetrieveSongFromFileSystem(Song details) private async Task<SongData> RetrieveSongFromFileSystem(Song details)
{ {
byte[] uncompressedSong = System.IO.File.ReadAllBytes(details.SongPath); byte[] uncompressedSong = System.IO.File.ReadAllBytes(details.SongPath);
@@ -497,31 +493,36 @@ namespace Icarus.Controllers.Managers
private void SaveSongToDatabase(Song song, MusicStoreContext songStore, AlbumStoreContext albumStore, private void SaveSongToDatabase(Song song, MusicStoreContext songStore, AlbumStoreContext albumStore,
ArtistStoreContext artistStore) ArtistStoreContext artistStore)
{ {
// TODO: Not finished and have not been tested song.AlbumId = 1;
var album = new Album(); var album = new Album();
album.Title = song.Album; album.Title = song.AlbumTitle;
album.AlbumArtist = song.Artist; album.AlbumArtist = song.Artist;
if (!albumStore.DoesAlbumExist(song)) if (!albumStore.DoesAlbumExist(song))
{ {
album.SongCount = 1; album.SongCount = 1;
_logger.Info("Saving album to database"); _logger.Info("Saving album to database");
_logger.Info($"Ablum song count before retrieving from store: {album.SongCount}");
_logger.Info($"Ablum Id before retrieving from store: {album.AlbumId}");
albumStore.SaveAlbum(album); albumStore.SaveAlbum(album);
_logger.Info("Album suuccessfully saved to database"); _logger.Info("Album suuccessfully saved to database");
album = albumStore.GetAlbum(album); album = albumStore.GetAlbum(song);
_logger.Info($"Ablum song count after retrieving from store: {album.SongCount}");
_logger.Info($"Ablum Id after retrieving from store: {album.AlbumId}");
} }
else else
{ {
var albumRetrieved = albumStore.GetAlbum(song); var albumRetrieved = albumStore.GetAlbum(song);
album.Id = albumRetrieved.Id; album.AlbumId = albumRetrieved.AlbumId;
album.SongCount = albumRetrieved.SongCount + 1; album.SongCount = albumRetrieved.SongCount + 1;
// TODO: Add functionality to the method below
albumStore.UpdateAlbum(album); albumStore.UpdateAlbum(album);
} }
song.AlbumId = album.Id; song.AlbumId = album.AlbumId;
// TODO: Update the method below to save the newly added AlbumId value _logger.Info($"Song;\nTitle {song.Title}\nAlbum {song.AlbumTitle}\nAlbum Id {song.AlbumId}");
songStore.SaveSong(song); songStore.SaveSong(song);
_logger.Info("Successfully saved song to database");
} }
private async Task PopulateSongDetails() private async Task PopulateSongDetails()
@@ -541,7 +542,7 @@ namespace Icarus.Controllers.Managers
song.Title = row[col].ToString(); song.Title = row[col].ToString();
break; break;
case "ALBUM": case "ALBUM":
song.Album = row[col].ToString(); song.AlbumTitle = row[col].ToString();
break; break;
case "ARTIST": case "ARTIST":
song.Artist = row[col].ToString(); song.Artist = row[col].ToString();
+1 -3
View File
@@ -86,11 +86,9 @@ namespace Icarus.Controllers
if (sng.Length > 0) { if (sng.Length > 0) {
Console.WriteLine($"Song filename {sng.FileName}"); Console.WriteLine($"Song filename {sng.FileName}");
_logger.LogInformation($"Song filename {sng.FileName}"); _logger.LogInformation($"Song filename {sng.FileName}");
// TODO: Add functionality for overloaded method
await _songMgr.SaveSongToFileSystem(sng, songStoreContext, await _songMgr.SaveSongToFileSystem(sng, songStoreContext,
albumStoreContext, artistStoreContext); albumStoreContext, artistStoreContext);
var song = _songMgr.SongDetails;
songStoreContext.SaveSong(song);
} }
} }
} }
+5 -5
View File
@@ -59,7 +59,7 @@ namespace Icarus.Controllers.Utilities
song.Title = _title; song.Title = _title;
song.Artist = _artist; song.Artist = _artist;
song.Album = _album; song.AlbumTitle = _album;
song.Genre = _genre; song.Genre = _genre;
song.Year = _year; song.Year = _year;
song.Duration = _duration; song.Duration = _duration;
@@ -120,7 +120,7 @@ namespace Icarus.Controllers.Utilities
var filePath = updatedSong.SongPath; var filePath = updatedSong.SongPath;
var title = updatedSong.Title; var title = updatedSong.Title;
var artist = updatedSong.Artist; var artist = updatedSong.Artist;
var album = updatedSong.Album; var album = updatedSong.AlbumTitle;
var genre = updatedSong.Genre; var genre = updatedSong.Genre;
var year = updatedSong.Year; var year = updatedSong.Year;
TagLib.File fileTag = TagLib.File.Create(filePath); TagLib.File fileTag = TagLib.File.Create(filePath);
@@ -144,7 +144,7 @@ namespace Icarus.Controllers.Utilities
fileTag.Tag.Artists = new []{artist}; fileTag.Tag.Artists = new []{artist};
break; break;
case "album": case "album":
_updatedSong.Album = album; _updatedSong.AlbumTitle = album;
fileTag.Tag.Album = album; fileTag.Tag.Album = album;
break; break;
case "genre": case "genre":
@@ -175,7 +175,7 @@ namespace Icarus.Controllers.Utilities
{ {
Id = song.Id, Id = song.Id,
Title = song.Title, Title = song.Title,
Album = song.Album, AlbumTitle = song.AlbumTitle,
Artist = song.Artist, Artist = song.Artist,
Genre = song.Genre, Genre = song.Genre,
Year = song.Year, Year = song.Year,
@@ -230,7 +230,7 @@ namespace Icarus.Controllers.Utilities
{ {
songValues["Title"] = String.IsNullOrEmpty(song.Title); songValues["Title"] = String.IsNullOrEmpty(song.Title);
songValues["Artists"] = String.IsNullOrEmpty(song.Artist); songValues["Artists"] = String.IsNullOrEmpty(song.Artist);
songValues["Album"] = String.IsNullOrEmpty(song.Album); songValues["Album"] = String.IsNullOrEmpty(song.AlbumTitle);
songValues["Genre"] = String.IsNullOrEmpty(song.Genre); songValues["Genre"] = String.IsNullOrEmpty(song.Genre);
if (song.Year==0) if (song.Year==0)
{ {
+2 -1
View File
@@ -9,13 +9,14 @@ namespace Icarus.Models
public class Album public class Album
{ {
[JsonProperty("id")] [JsonProperty("id")]
public int Id { get; set; } public int AlbumId { get; set; }
[JsonProperty("title")] [JsonProperty("title")]
public string Title { get; set; } public string Title { get; set; }
[JsonProperty("album_artist")] [JsonProperty("album_artist")]
public string AlbumArtist { get; set; } public string AlbumArtist { get; set; }
[JsonProperty("song_count")] [JsonProperty("song_count")]
public int SongCount { get; set; } public int SongCount { get; set; }
[JsonIgnore] [JsonIgnore]
public List<Song> Songs { get; set; } public List<Song> Songs { get; set; }
} }
+2 -1
View File
@@ -20,7 +20,8 @@ namespace Icarus.Models.Context
protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnModelCreating(ModelBuilder modelBuilder)
{ {
modelBuilder.Entity<Album>(); modelBuilder.Entity<Album>()
.ToTable("Album");
} }
} }
} }
+36 -17
View File
@@ -45,13 +45,13 @@ namespace Icarus.Models.Context
{ {
while (reader.Read()) while (reader.Read())
{ {
var id = Convert.ToInt32(reader["Id"]); var id = Convert.ToInt32(reader["AlbumId"]);
var title = reader["Title"].ToString(); var title = reader["Title"].ToString();
var albumArtist = reader["AlbumArtist"].ToString(); var albumArtist = reader["AlbumArtist"].ToString();
var songCount = Convert.ToInt32(reader["SongCount"]); var songCount = Convert.ToInt32(reader["SongCount"]);
albums.Add(new Album albums.Add(new Album
{ {
Id = id, AlbumId = id,
Title = title, Title = title,
AlbumArtist = albumArtist, AlbumArtist = albumArtist,
SongCount = songCount SongCount = songCount
@@ -78,22 +78,22 @@ namespace Icarus.Models.Context
using (MySqlConnection conn = GetConnection()) using (MySqlConnection conn = GetConnection())
{ {
conn.Open(); conn.Open();
var query = "SELECT * FROM Album WHERE Id=@Id"; var query = "SELECT * FROM Album WHERE AlbumId=@AlbumId";
using (MySqlCommand cmd = new MySqlCommand(query, conn)) using (MySqlCommand cmd = new MySqlCommand(query, conn))
{ {
cmd.Parameters.AddWithValue("@Id", album.Id); cmd.Parameters.AddWithValue("@AlbumId", album.AlbumId);
using (var reader = cmd.ExecuteReader()) using (var reader = cmd.ExecuteReader())
{ {
while (reader.Read()) while (reader.Read())
{ {
var id = Convert.ToInt32(reader["Id"]); var id = Convert.ToInt32(reader["AlbumId"]);
var title = reader["Title"].ToString(); var title = reader["Title"].ToString();
var albumArtist = reader["AlbumArtist"].ToString(); var albumArtist = reader["AlbumArtist"].ToString();
var songCount = Convert.ToInt32(reader["SongCount"]); var songCount = Convert.ToInt32(reader["SongCount"]);
album =new Album album =new Album
{ {
Id = id, AlbumId = id,
Title = title, Title = title,
AlbumArtist = albumArtist, AlbumArtist = albumArtist,
SongCount = songCount SongCount = songCount
@@ -121,21 +121,22 @@ namespace Icarus.Models.Context
{ {
conn.Open(); conn.Open();
var query = "SELECT * FROM Album WHERE Title=@Title"; var query = "SELECT * FROM Album WHERE Title=@Title";
_logger.Info($"Song title to rerieve album:\n{song.AlbumTitle}");
using (MySqlCommand cmd = new MySqlCommand(query, conn)) using (MySqlCommand cmd = new MySqlCommand(query, conn))
{ {
cmd.Parameters.AddWithValue("@Title", song.Album); cmd.Parameters.AddWithValue("@Title", song.AlbumTitle);
using (var reader = cmd.ExecuteReader()) using (var reader = cmd.ExecuteReader())
{ {
while (reader.Read()) while (reader.Read())
{ {
var id = Convert.ToInt32(reader["Id"]); var id = Convert.ToInt32(reader["AlbumId"]);
var title = reader["Title"].ToString(); var title = reader["Title"].ToString();
var albumArtist = reader["AlbumArtist"].ToString(); var albumArtist = reader["AlbumArtist"].ToString();
var songCount = Convert.ToInt32(reader["SongCount"]); var songCount = Convert.ToInt32(reader["SongCount"]);
album = new Album album = new Album
{ {
Id = id, AlbumId = id,
Title = title, Title = title,
AlbumArtist = albumArtist, AlbumArtist = albumArtist,
SongCount = songCount SongCount = songCount
@@ -162,10 +163,10 @@ namespace Icarus.Models.Context
{ {
conn.Open(); conn.Open();
var query = "SELECT * FROM Album WHERE Id=@Id"; var query = "SELECT * FROM Album WHERE AlbumId=@AlbumId";
using (MySqlCommand cmd = new MySqlCommand(query, conn)) using (MySqlCommand cmd = new MySqlCommand(query, conn))
{ {
cmd.Parameters.AddWithValue("@Id", album.Id); cmd.Parameters.AddWithValue("@AlbumId", album.AlbumId);
using (var reader = cmd.ExecuteReader()) using (var reader = cmd.ExecuteReader())
{ {
@@ -198,7 +199,7 @@ namespace Icarus.Models.Context
var query = "SELECT * FROM Album WHERE Title=@Title"; var query = "SELECT * FROM Album WHERE Title=@Title";
using (MySqlCommand cmd = new MySqlCommand(query, conn)) using (MySqlCommand cmd = new MySqlCommand(query, conn))
{ {
cmd.Parameters.AddWithValue("@Title", song.Album); cmd.Parameters.AddWithValue("@Title", song.AlbumTitle);
using (var reader = cmd.ExecuteReader()) using (var reader = cmd.ExecuteReader())
{ {
@@ -230,7 +231,7 @@ namespace Icarus.Models.Context
conn.Open(); conn.Open();
var query = "INSERT INTO Album(Title, AlbumArtist, " + var query = "INSERT INTO Album(Title, AlbumArtist, " +
"SongCount) VALUES (@Title, @AlbumArtist, " + "SongCount) VALUES (@Title, @AlbumArtist, " +
"SongCount)"; "@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);
@@ -251,6 +252,22 @@ namespace Icarus.Models.Context
{ {
try try
{ {
using (MySqlConnection conn = GetConnection())
{
conn.Open();
var query = "UPDATE Album SET Title=@Title, AlbumArtist=" +
"@AlbumArtist, SongCount=@SongCount 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();
}
}
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -264,13 +281,13 @@ namespace Icarus.Models.Context
List<Album> albums = new List<Album>(); List<Album> albums = new List<Album>();
while (reader.Read()) while (reader.Read())
{ {
var id = Convert.ToInt32(reader["Id"]); var id = Convert.ToInt32(reader["AlbumId"]);
var title = reader["Title"].ToString(); var title = reader["Title"].ToString();
var albumArtist = reader["AlbumArtist"].ToString(); var albumArtist = reader["AlbumArtist"].ToString();
var songCount = Convert.ToInt32(reader["SongCount"]); var songCount = Convert.ToInt32(reader["SongCount"]);
albums.Add(new Album albums.Add(new Album
{ {
Id = id, AlbumId = id,
Title = title, Title = title,
AlbumArtist = albumArtist, AlbumArtist = albumArtist,
SongCount = songCount SongCount = songCount
@@ -282,20 +299,22 @@ namespace Icarus.Models.Context
private Album ParseSingleData(MySqlDataReader reader) private Album ParseSingleData(MySqlDataReader reader)
{ {
Album album = new Album(); Album album = new Album();
_logger.Info("Retrieving single album record");
while (reader.Read()) while (reader.Read())
{ {
var id = Convert.ToInt32(reader["Id"]); var id = Convert.ToInt32(reader["AlbumId"]);
var title = reader["Title"].ToString(); var title = reader["Title"].ToString();
var albumArtist = reader["AlbumArtist"].ToString(); var albumArtist = reader["AlbumArtist"].ToString();
var songCount = Convert.ToInt32(reader["SongCount"]); var songCount = Convert.ToInt32(reader["SongCount"]);
album = new Album album = new Album
{ {
Id = id, AlbumId = id,
Title = title, Title = title,
AlbumArtist = albumArtist, AlbumArtist = albumArtist,
SongCount = songCount SongCount = songCount
}; };
} }
_logger.Info("Single ablum retreived");
return album; return album;
} }
+21 -14
View File
@@ -33,20 +33,21 @@ namespace Icarus.Models.Context
using (MySqlConnection conn = GetConnection()) using (MySqlConnection conn = GetConnection())
{ {
conn.Open(); conn.Open();
string query = "INSERT INTO Songs(Title, Album, Artist," + string query = "INSERT INTO Song(Title, AlbumTitle, Artist," +
" Year, Genre, Duration, Filename, SongPath) " + " Year, Genre, Duration, Filename, SongPath, AlbumId) " +
"VALUES(@Title, @Album, @Artist, @Year, @Genre, " + "VALUES(@Title, @AlbumTitle, @Artist, @Year, @Genre, " +
"@Duration, @Filename, @SongPath)"; "@Duration, @Filename, @SongPath, @AlbumId)";
using (MySqlCommand cmd = new MySqlCommand(query, conn)) using (MySqlCommand cmd = new MySqlCommand(query, conn))
{ {
cmd.Parameters.AddWithValue("@Title", song.Title); cmd.Parameters.AddWithValue("@Title", song.Title);
cmd.Parameters.AddWithValue("@Album", song.Album); cmd.Parameters.AddWithValue("@AlbumTitle", song.AlbumTitle);
cmd.Parameters.AddWithValue("@Artist", song.Artist); cmd.Parameters.AddWithValue("@Artist", song.Artist);
cmd.Parameters.AddWithValue("@Year", song.Year); cmd.Parameters.AddWithValue("@Year", song.Year);
cmd.Parameters.AddWithValue("@Genre", song.Genre); cmd.Parameters.AddWithValue("@Genre", song.Genre);
cmd.Parameters.AddWithValue("@Duration", song.Duration); cmd.Parameters.AddWithValue("@Duration", song.Duration);
cmd.Parameters.AddWithValue("@Filename", song.Filename); cmd.Parameters.AddWithValue("@Filename", song.Filename);
cmd.Parameters.AddWithValue("@SongPath", song.SongPath); cmd.Parameters.AddWithValue("@SongPath", song.SongPath);
cmd.Parameters.AddWithValue("@AlbumId", song.AlbumId);
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
} }
@@ -56,8 +57,10 @@ namespace Icarus.Models.Context
{ {
var exMsg = ex.Message; var exMsg = ex.Message;
Console.WriteLine($"An error occurred:\n{exMsg}"); Console.WriteLine($"An error occurred:\n{exMsg}");
_logger.Error(exMsg, "An error occurred");
} }
} }
// TODO: Update this method to be compatible with the new AlbumId field
public void UpdateSong(Song song) public void UpdateSong(Song song)
{ {
try try
@@ -66,14 +69,14 @@ namespace Icarus.Models.Context
{ {
conn.Open(); conn.Open();
string query = "UPDATE Songs SET Title=@Title, Album=@Album, " + string query = "UPDATE Song SET Title=@Title, AlbumTitle=@AlbumTitle, " +
"Artist=@Artist, Year=@Year, Genre=@Genre, " + "Artist=@Artist, Year=@Year, Genre=@Genre, " +
"Duration=@Duration, Filename=@Filename, " + "Duration=@Duration, Filename=@Filename, " +
"SongPath=@SongPath WHERE Id=@Id"; "SongPath=@SongPath WHERE Id=@Id";
using (MySqlCommand cmd = new MySqlCommand(query, conn)) using (MySqlCommand cmd = new MySqlCommand(query, conn))
{ {
cmd.Parameters.AddWithValue("@Title", song.Title); cmd.Parameters.AddWithValue("@Title", song.Title);
cmd.Parameters.AddWithValue("@Album", song.Album); cmd.Parameters.AddWithValue("@AlbumTitle", song.AlbumTitle);
cmd.Parameters.AddWithValue("@Artist", song.Artist); cmd.Parameters.AddWithValue("@Artist", song.Artist);
cmd.Parameters.AddWithValue("@Year", song.Year); cmd.Parameters.AddWithValue("@Year", song.Year);
cmd.Parameters.AddWithValue("@Genre", song.Genre); cmd.Parameters.AddWithValue("@Genre", song.Genre);
@@ -91,6 +94,7 @@ namespace Icarus.Models.Context
var msg = ex.Message; var msg = ex.Message;
Console.WriteLine("An error occurred in MusicStoreContext:"); Console.WriteLine("An error occurred in MusicStoreContext:");
Console.WriteLine(msg); Console.WriteLine(msg);
_logger.Error(msg, "An error occurred");
} }
} }
public void DeleteSong(int id) public void DeleteSong(int id)
@@ -100,7 +104,7 @@ namespace Icarus.Models.Context
using (MySqlConnection conn = GetConnection()) using (MySqlConnection conn = GetConnection())
{ {
conn.Open(); conn.Open();
string query = "DELETE FROM Songs WHERE Id=@Id"; string query = "DELETE FROM Song WHERE Id=@Id";
using (MySqlCommand cmd = new MySqlCommand(query, conn)) using (MySqlCommand cmd = new MySqlCommand(query, conn))
{ {
@@ -114,6 +118,7 @@ namespace Icarus.Models.Context
{ {
var exMsg = ex.Message; var exMsg = ex.Message;
Console.WriteLine($"An error occurred:\n{exMsg}"); Console.WriteLine($"An error occurred:\n{exMsg}");
_logger.Error(exMsg, "An error occurred");
} }
} }
@@ -125,7 +130,7 @@ namespace Icarus.Models.Context
using (MySqlConnection conn = GetConnection()) using (MySqlConnection conn = GetConnection())
{ {
conn.Open(); conn.Open();
var query = "SELECT * FROM Songs"; var query = "SELECT * FROM Song";
MySqlCommand cmd = new MySqlCommand(query, conn); MySqlCommand cmd = new MySqlCommand(query, conn);
using (var reader = cmd.ExecuteReader()) using (var reader = cmd.ExecuteReader())
{ {
@@ -135,7 +140,7 @@ namespace Icarus.Models.Context
{ {
Id = Convert.ToInt32(reader["Id"]), Id = Convert.ToInt32(reader["Id"]),
Title = reader["Title"].ToString(), Title = reader["Title"].ToString(),
Album = reader["Album"].ToString(), AlbumTitle = reader["AlbumTitle"].ToString(),
Artist = reader["Artist"].ToString(), Artist = reader["Artist"].ToString(),
Year = Convert.ToInt32(reader["Year"]), Year = Convert.ToInt32(reader["Year"]),
Genre = reader["Genre"].ToString(), Genre = reader["Genre"].ToString(),
@@ -152,6 +157,7 @@ namespace Icarus.Models.Context
var exMsg = ex.Message; var exMsg = ex.Message;
Console.WriteLine($"An error ocurred:\n{exMsg}"); Console.WriteLine($"An error ocurred:\n{exMsg}");
songs.Clear(); songs.Clear();
_logger.Error(exMsg, "An error occurred");
} }
return songs; return songs;
@@ -166,7 +172,7 @@ namespace Icarus.Models.Context
using (MySqlConnection conn = GetConnection()) using (MySqlConnection conn = GetConnection())
{ {
conn.Open(); conn.Open();
var query = "SELECT * FROM Songs WHERE Id=@Id"; var query = "SELECT * FROM Song WHERE Id=@Id";
MySqlCommand cmd = new MySqlCommand(query, conn); MySqlCommand cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@Id", id); cmd.Parameters.AddWithValue("@Id", id);
@@ -179,7 +185,7 @@ namespace Icarus.Models.Context
{ {
Id = Convert.ToInt32(reader["Id"]), Id = Convert.ToInt32(reader["Id"]),
Title = reader["Title"].ToString(), Title = reader["Title"].ToString(),
Album = reader["Album"].ToString(), AlbumTitle = reader["AlbumTitle"].ToString(),
Artist = reader["Artist"].ToString(), Artist = reader["Artist"].ToString(),
Year = Convert.ToInt32(reader["Year"]), Year = Convert.ToInt32(reader["Year"]),
Genre = reader["Genre"].ToString(), Genre = reader["Genre"].ToString(),
@@ -196,6 +202,7 @@ namespace Icarus.Models.Context
{ {
var exMsg = ex.Message; var exMsg = ex.Message;
Console.WriteLine($"An error ocurred: {exMsg}"); Console.WriteLine($"An error ocurred: {exMsg}");
_logger.Error(exMsg, "An error occurred");
} }
return song; return song;
@@ -211,7 +218,7 @@ namespace Icarus.Models.Context
{ {
Id = Convert.ToInt32(reader["Id"]), Id = Convert.ToInt32(reader["Id"]),
Title = reader["Title"].ToString(), Title = reader["Title"].ToString(),
Album = reader["Album"].ToString(), AlbumTitle = reader["AlbumTitle"].ToString(),
Artist = reader["Artist"].ToString(), Artist = reader["Artist"].ToString(),
Year = Convert.ToInt32(reader["Year"]), Year = Convert.ToInt32(reader["Year"]),
Genre = reader["Genre"].ToString(), Genre = reader["Genre"].ToString(),
@@ -235,7 +242,7 @@ namespace Icarus.Models.Context
{ {
Id = Convert.ToInt32(reader["Id"]), Id = Convert.ToInt32(reader["Id"]),
Title = reader["Title"].ToString(), Title = reader["Title"].ToString(),
Album = reader["Album"].ToString(), AlbumTitle = reader["AlbumTitle"].ToString(),
Artist = reader["Artist"].ToString(), Artist = reader["Artist"].ToString(),
Year = Convert.ToInt32(reader["Year"]), Year = Convert.ToInt32(reader["Year"]),
Genre = reader["Genre"].ToString(), Genre = reader["Genre"].ToString(),
+2 -1
View File
@@ -22,7 +22,8 @@ namespace Icarus.Models.Context
protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnModelCreating(ModelBuilder modelBuilder)
{ {
modelBuilder.Entity<Song>() modelBuilder.Entity<Song>()
.HasOne(s => s.AlbumObject) .ToTable("Song")
.HasOne(s => s.Album)
.WithMany(a => a.Songs) .WithMany(a => a.Songs)
.HasForeignKey(s => s.AlbumId) .HasForeignKey(s => s.AlbumId)
.HasConstraintName("ForeignKey_Song_Album"); .HasConstraintName("ForeignKey_Song_Album");
+3 -2
View File
@@ -17,7 +17,7 @@ namespace Icarus.Models
[JsonProperty("title")] [JsonProperty("title")]
public string Title { get; set; } public string Title { get; set; }
[JsonProperty("album")] [JsonProperty("album")]
public string Album { get; set; } public string AlbumTitle { get; set; }
[JsonProperty("artist")] [JsonProperty("artist")]
public string Artist { get; set; } public string Artist { get; set; }
[JsonProperty("year")] [JsonProperty("year")]
@@ -30,8 +30,9 @@ namespace Icarus.Models
public string Filename { get; set; } public string Filename { get; set; }
[JsonProperty("song_path")] [JsonProperty("song_path")]
public string SongPath { get; set; } public string SongPath { get; set; }
[JsonIgnore] [JsonIgnore]
public Album AlbumObject { get; set; } public Album Album { get; set; }
[JsonIgnore] [JsonIgnore]
public int AlbumId { get; set; } public int AlbumId { get; set; }
} }