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:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
@@ -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; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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(),
|
||||||
|
|||||||
@@ -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
@@ -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; }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user