From 56fe805f80cb7d3259c4e4a9b4d69a8526a61e6a Mon Sep 17 00:00:00 2001 From: amazing-username Date: Thu, 4 Jul 2019 17:19:40 -0400 Subject: [PATCH] Code cleanup and conforming to a coding covention --- Controllers/Managers/AlbumManager.cs | 22 +- Controllers/Managers/ArtistManager.cs | 22 +- Controllers/Managers/BaseManagers.cs | 12 +- Controllers/Managers/DirectoryManager.cs | 328 +-- Controllers/Managers/GenreManager.cs | 22 +- Controllers/Managers/SongManager.cs | 2389 ++++++++--------- Controllers/Managers/TokenManager.cs | 209 +- Controllers/Managers/YearManager.cs | 22 +- Controllers/Utilities/MetadataRetriever.cs | 510 ++-- Controllers/Utilities/PasswordEncryption.cs | 119 +- Controllers/v1/AlbumController.cs | 106 +- Controllers/v1/ArtistController.cs | 107 +- Controllers/v1/GenreController.cs | 106 +- Controllers/v1/LoginController.cs | 109 +- Controllers/v1/RegisterController.cs | 85 +- .../v1/SongCompressedDataControllers.cs | 71 +- Controllers/v1/SongController.cs | 173 +- Controllers/v1/SongDataController.cs | 225 +- Controllers/v1/SongStreamController.cs | 69 +- Controllers/v1/YearController.cs | 106 +- Database/Repositories/AlbumRepository.cs | 770 +++--- Database/Repositories/ArtistRepository.cs | 597 ++-- Database/Repositories/BaseRepository.cs | 26 +- Database/Repositories/GenreRepository.cs | 894 +++--- Database/Repositories/SongRepository.cs | 548 ++-- Database/Repositories/UserRepository.cs | 362 ++- Database/Repositories/YearRepository.cs | 726 +++-- Startup.cs | 4 - 28 files changed, 4274 insertions(+), 4465 deletions(-) diff --git a/Controllers/Managers/AlbumManager.cs b/Controllers/Managers/AlbumManager.cs index 039c7ea..4a907f5 100644 --- a/Controllers/Managers/AlbumManager.cs +++ b/Controllers/Managers/AlbumManager.cs @@ -8,21 +8,21 @@ using Icarus.Database.Contexts; namespace Icarus.Controllers.Managers { - public class AlbumManager : BaseManager - { - #region Fields - #endregion + public class AlbumManager : BaseManager + { + #region Fields + #endregion - #region Properties - #endregion + #region Properties + #endregion - #region Constructors - #endregion + #region Constructors + #endregion - #region Methods - #endregion - } + #region Methods + #endregion + } } diff --git a/Controllers/Managers/ArtistManager.cs b/Controllers/Managers/ArtistManager.cs index d370e39..a63f3e4 100644 --- a/Controllers/Managers/ArtistManager.cs +++ b/Controllers/Managers/ArtistManager.cs @@ -8,21 +8,21 @@ using Icarus.Database.Contexts; namespace Icarus.Controllers.Managers { - public class ArtistManager : BaseManager - { - #region Fields - #endregion + public class ArtistManager : BaseManager + { + #region Fields + #endregion - #region Properties - #endregion + #region Properties + #endregion - #region Constructors - #endregion + #region Constructors + #endregion - #region Methods - #endregion - } + #region Methods + #endregion + } } diff --git a/Controllers/Managers/BaseManagers.cs b/Controllers/Managers/BaseManagers.cs index 5fda4a5..125457d 100644 --- a/Controllers/Managers/BaseManagers.cs +++ b/Controllers/Managers/BaseManagers.cs @@ -4,10 +4,10 @@ using NLog; namespace Icarus.Controllers.Managers { - public class BaseManager - { - #region Fields - protected static Logger _logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger(); - #endregion - } + public class BaseManager + { + #region Fields + protected static Logger _logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger(); + #endregion + } } diff --git a/Controllers/Managers/DirectoryManager.cs b/Controllers/Managers/DirectoryManager.cs index 6cbe8db..5216581 100644 --- a/Controllers/Managers/DirectoryManager.cs +++ b/Controllers/Managers/DirectoryManager.cs @@ -8,198 +8,198 @@ using Icarus.Models; namespace Icarus.Controllers.Managers { - public class DirectoryManager : BaseManager - { - #region Fields - private IConfiguration _config; - private Song _song; - private string _rootSongDirectory; - private string _songDirectory; - #endregion + public class DirectoryManager : BaseManager + { + #region Fields + private IConfiguration _config; + private Song _song; + private string _rootSongDirectory; + private string _songDirectory; + #endregion - #region Properties - public string SongDirectory - { - get => _songDirectory; - set => _songDirectory = value; - } - #endregion + #region Properties + public string SongDirectory + { + get => _songDirectory; + set => _songDirectory = value; + } + #endregion - #region Constructors - public DirectoryManager(IConfiguration config, Song song) - { - _config = config; - _song = song; - Initialize(); - } - public DirectoryManager(IConfiguration config) - { - _config = config; - Initialize(); - } - #endregion + #region Constructors + public DirectoryManager(IConfiguration config, Song song) + { + _config = config; + _song = song; + Initialize(); + } + public DirectoryManager(IConfiguration config) + { + _config = config; + Initialize(); + } + #endregion - #region Methods - public void CreateDirectory() - { - try - { - _songDirectory = AlbumDirectory(); + #region Methods + public void CreateDirectory() + { + try + { + _songDirectory = AlbumDirectory(); - if (!Directory.Exists(_songDirectory)) - { - Directory.CreateDirectory(_songDirectory); - Console.WriteLine("The directory has been created"); - } + if (!Directory.Exists(_songDirectory)) + { + Directory.CreateDirectory(_songDirectory); + Console.WriteLine("The directory has been created"); + } - Console.WriteLine($"The song will be saved in the following" + - $" directory: {_songDirectory}"); - } - catch (Exception ex) - { - Console.WriteLine($"An error occurred {ex.Message}"); - } - } - public void DeleteEmptyDirectories() - { - try - { - var albumDirectory = AlbumDirectory(); - var artistDirectory = ArtistDirectory(); - if (IsDirectoryEmpty(albumDirectory)) - { - Directory.Delete(albumDirectory); - Console.WriteLine($"directory {albumDirectory} deleted"); - } - if (IsDirectoryEmpty(artistDirectory)) - { - Directory.Delete(artistDirectory); - Console.WriteLine($"directory {artistDirectory} deleted"); - } - } - catch (Exception ex) - { - var exMsg = ex.Message; - Console.WriteLine($"An error occurred {exMsg}"); - } - } - public void DeleteEmptyDirectories(Song song) - { - try - { - var albumDirectory = AlbumDirectory(song); - var artistDirectory = ArtistDirectory(song); + Console.WriteLine($"The song will be saved in the following" + + $" directory: {_songDirectory}"); + } + catch (Exception ex) + { + Console.WriteLine($"An error occurred {ex.Message}"); + } + } + public void DeleteEmptyDirectories() + { + try + { + var albumDirectory = AlbumDirectory(); + var artistDirectory = ArtistDirectory(); + if (IsDirectoryEmpty(albumDirectory)) + { + Directory.Delete(albumDirectory); + Console.WriteLine($"directory {albumDirectory} deleted"); + } + if (IsDirectoryEmpty(artistDirectory)) + { + Directory.Delete(artistDirectory); + Console.WriteLine($"directory {artistDirectory} deleted"); + } + } + catch (Exception ex) + { + var exMsg = ex.Message; + Console.WriteLine($"An error occurred {exMsg}"); + } + } + public void DeleteEmptyDirectories(Song song) + { + try + { + var albumDirectory = AlbumDirectory(song); + var artistDirectory = ArtistDirectory(song); - if (IsDirectoryEmpty(albumDirectory)) - { - Directory.Delete(albumDirectory); - _logger.Info("Album directory deleted"); - } - if (IsDirectoryEmpty(artistDirectory)) - { - Directory.Delete(artistDirectory); - _logger.Info("Artist directory deleted"); - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } + if (IsDirectoryEmpty(albumDirectory)) + { + Directory.Delete(albumDirectory); + _logger.Info("Album directory deleted"); + } + if (IsDirectoryEmpty(artistDirectory)) + { + Directory.Delete(artistDirectory); + _logger.Info("Artist directory deleted"); + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } - public string RetrieveAlbumPath(Song song) - { - _logger.Info("Retrieving album song path"); + public string RetrieveAlbumPath(Song song) + { + _logger.Info("Retrieving album song path"); - var albumPath = string.Empty; - albumPath = AlbumDirectory(song); + var albumPath = string.Empty; + albumPath = AlbumDirectory(song); - return albumPath; - } - public string RetrieveArtistPath(Song song) - { - _logger.Info("Retrieving artist path"); + return albumPath; + } + public string RetrieveArtistPath(Song song) + { + _logger.Info("Retrieving artist path"); - var artistPath = string.Empty; - artistPath = ArtistDirectory(song); + var artistPath = string.Empty; + artistPath = ArtistDirectory(song); - return artistPath; - } - public string GenerateSongPath(Song song) - { - _logger.Info("Generating song path"); + return artistPath; + } + public string GenerateSongPath(Song song) + { + _logger.Info("Generating song path"); - var songPath = string.Empty; - var artistPath = ArtistDirectory(song); - var albumPath = AlbumDirectory(song); + var songPath = string.Empty; + var artistPath = ArtistDirectory(song); + var albumPath = AlbumDirectory(song); - if (!Directory.Exists(artistPath)) - { - _logger.Info("Artist path does not exist"); + if (!Directory.Exists(artistPath)) + { + _logger.Info("Artist path does not exist"); - Directory.CreateDirectory(artistPath); + Directory.CreateDirectory(artistPath); - _logger.Info("Creating artist path"); - } - if (!Directory.Exists(albumPath)) - { - _logger.Info("Album path does not exist"); + _logger.Info("Creating artist path"); + } + if (!Directory.Exists(albumPath)) + { + _logger.Info("Album path does not exist"); - Directory.CreateDirectory(albumPath); + Directory.CreateDirectory(albumPath); - _logger.Info("Created album path"); - } + _logger.Info("Created album path"); + } - songPath = albumPath; + songPath = albumPath; - return songPath; - } + return songPath; + } - private void Initialize() - { - _rootSongDirectory = _config.GetValue("RootMusicPath"); - } + private void Initialize() + { + _rootSongDirectory = _config.GetValue("RootMusicPath"); + } - private bool IsDirectoryEmpty(string path) - { - return !Directory.EnumerateFileSystemEntries(path).Any(); - } + private bool IsDirectoryEmpty(string path) + { + return !Directory.EnumerateFileSystemEntries(path).Any(); + } - private string AlbumDirectory() - { - string directory = _rootSongDirectory; - directory += $@"{_song.Artist}/{_song.AlbumTitle}/"; + private string AlbumDirectory() + { + string directory = _rootSongDirectory; + directory += $@"{_song.Artist}/{_song.AlbumTitle}/"; - return directory; - } - private string AlbumDirectory(Song song) - { - var directory = _rootSongDirectory; - directory += $@"{song.Artist}/{song.AlbumTitle}/"; - Console.WriteLine($"Album directory {directory}"); + return directory; + } + private string AlbumDirectory(Song song) + { + var directory = _rootSongDirectory; + directory += $@"{song.Artist}/{song.AlbumTitle}/"; + Console.WriteLine($"Album directory {directory}"); - return directory; - } - private string ArtistDirectory() - { - var directory = _rootSongDirectory; - directory += $@"{_song.Artist}/"; + return directory; + } + private string ArtistDirectory() + { + var directory = _rootSongDirectory; + directory += $@"{_song.Artist}/"; - return directory; - } - private string ArtistDirectory(Song song) - { - var directory = _rootSongDirectory; - directory += $@"{song.Artist}/"; - Console.WriteLine($"Artist directory {directory}"); + return directory; + } + private string ArtistDirectory(Song song) + { + var directory = _rootSongDirectory; + directory += $@"{song.Artist}/"; + Console.WriteLine($"Artist directory {directory}"); - return directory; - } - #endregion - } + return directory; + } + #endregion + } } diff --git a/Controllers/Managers/GenreManager.cs b/Controllers/Managers/GenreManager.cs index f73bc6b..3571500 100644 --- a/Controllers/Managers/GenreManager.cs +++ b/Controllers/Managers/GenreManager.cs @@ -8,21 +8,21 @@ using Icarus.Database.Contexts; namespace Icarus.Controllers.Managers { - public class GenreManager : BaseManager - { - #region Fields - #endregion + public class GenreManager : BaseManager + { + #region Fields + #endregion - #region Properties - #endregion + #region Properties + #endregion - #region Constructors - #endregion + #region Constructors + #endregion - #region Methods - #endregion - } + #region Methods + #endregion + } } diff --git a/Controllers/Managers/SongManager.cs b/Controllers/Managers/SongManager.cs index 30a5b6b..bdef131 100644 --- a/Controllers/Managers/SongManager.cs +++ b/Controllers/Managers/SongManager.cs @@ -22,1211 +22,1186 @@ using Icarus.Database.Repositories; namespace Icarus.Controllers.Managers { - public class SongManager : BaseManager - { - #region Fields - private MySqlConnection _conn; - private MySqlCommand _cmd; - private MySqlDataAdapter _dataDump; - private DataTable _results; - private List _songs; - private Song _song; - private IConfiguration _config; - private string _connectionString; - private string _tempDirectoryRoot; - private string _archiveDirectoryRoot; - private string _compressedSongFilename; - private string _message; - #endregion - - - #region Properties - public Song SongDetails - { - get => _song; - set => _song = value; - } - - public string ArchiveDirectoryRoot - { - get => _archiveDirectoryRoot; - set => _archiveDirectoryRoot = value; - } - public string CompressedSongFilename - { - get => _compressedSongFilename; - set => _compressedSongFilename = value; - } - public string Message - { - get => _message; - set => _message = value; - } - #endregion - - - #region Constructors - public SongManager() - { - Initialize(); - InitializeConnection(); - } - - public SongManager(Song song) - { - Initialize(); - InitializeConnection(); - _song = song; - } - public SongManager(IConfiguration config) - { - _config = config; - Initialize(); - InitializeConnection(); - } - public SongManager(IConfiguration config, string tempDirectoryRoot) - { - _config = config; - _tempDirectoryRoot = tempDirectoryRoot; - Initialize(); - InitializeConnection(); - } - #endregion - - - #region Methods - public SongResult UpdateSong(Song song, SongRepository songStore, AlbumRepository albumStore, - ArtistRepository artistStore, GenreRepository genreStore, - YearRepository yearStore) - { - var result = new SongResult(); - - try - { - var oldSongRecord = songStore.GetSong(song); - song.SongPath = oldSongRecord.SongPath; - - MetadataRetriever updateMetadata = new MetadataRetriever(); - updateMetadata.UpdateMetadata(song, oldSongRecord); - - var updatedSong = updateMetadata.UpdatedSongRecord; - - var updatedAlbum = UpdateAlbumInDatabase(oldSongRecord, updatedSong, albumStore); - oldSongRecord.AlbumId = updatedAlbum.AlbumId; - - var updatedArtist = UpdateArtistInDatabase(oldSongRecord, updatedSong, artistStore); - oldSongRecord.ArtistId = updatedArtist.ArtistId; - - var updatedGenre = UpdateGenreInDatabase(oldSongRecord, updatedSong, genreStore); - Console.WriteLine($"Old Genre Id {oldSongRecord.GenreId}"); - oldSongRecord.GenreId = updatedGenre.GenreId; - Console.WriteLine($"Updated Genre Id {updatedGenre.GenreId}"); - - var updatedYear = UpdateYearInDatabase(oldSongRecord, updatedSong, yearStore); - oldSongRecord.YearId = updatedYear.YearId; - - UpdateSongInDatabase(ref oldSongRecord, ref updatedSong, songStore, ref result); - - DeleteEmptyDirectories(ref oldSongRecord, ref updatedSong); - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - - result.Message = $"An error occurred: {msg}"; - result.SongTitle = song.Title; - } - - return result; - } - - public bool DeleteSongFromFileSystem(Song songMetaData) - { - bool successful = false; - try - { - var songPath = songMetaData.SongPath; - System.IO.File.Delete(songPath); - successful = true; - DirectoryManager dirMgr = new DirectoryManager(_config, songMetaData); - dirMgr.DeleteEmptyDirectories(); - Console.WriteLine("Song successfully deleted"); - } - catch (Exception ex) - { - var exMsg = ex.Message; - } - - return successful; - } - - public void DeleteSong(Song song, SongRepository songStore, - AlbumRepository albumStore, ArtistRepository artistStore, - GenreRepository genreStore, YearRepository yearStore) - { - try - { - if (DeleteSongFromFilesystem(song)) - { - _logger.Info("Failed to delete the song"); - - throw new Exception("Failed to delete the song"); - } - - DeleteSongFromDatabase(song, songStore, albumStore, artistStore, - genreStore, yearStore); - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } - - public void SaveSongDetails() - { - try - { - using (MySqlConnection conn = new MySqlConnection(_connectionString)) - { - conn.Open(); - string query = "INSERT INTO Songs(Title, AlbumTitle, Artist, Year, Genre, Duration, " + - "Filename, SongPath) VALUES(@Title, @AlbumTitle, @Artist, @Year, @Genre, " + - "@Duration, @Filename, @SongPath)"; - using (MySqlCommand cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@Title", _song.Title); - cmd.Parameters.AddWithValue("@AlbumTitle", _song.AlbumTitle); - cmd.Parameters.AddWithValue("@Artist", _song.Artist); - cmd.Parameters.AddWithValue("@Year", _song.Year); - cmd.Parameters.AddWithValue("@Genre", _song.Genre); - cmd.Parameters.AddWithValue("@Duration", _song.Duration); - cmd.Parameters.AddWithValue("@Filename", _song.Filename); - cmd.Parameters.AddWithValue("@SongPath", _song.SongPath); - - cmd.ExecuteNonQuery(); - } - } - } - catch (Exception ex) - { - var exMsg = ex.Message; - Console.WriteLine($"An Error Occurred: {exMsg}"); - } - } - public void SaveSongDetails(Song song) - { - try - { - using (MySqlConnection conn = new MySqlConnection(_connectionString)) - { - conn.Open(); - string query = "INSERT INTO Songs(Title, AlbumTitle, Artist, Year, Genre, Duration, " + - ", Filename, SongPath) VALUES(@Title, @AlbumTitle, @Artist, @Year, @Genre, " + - "@Duration, @Filename, @SongPath)"; - using (MySqlCommand cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@Title", song.Title); - cmd.Parameters.AddWithValue("@AlbumTitle", song.AlbumTitle); - cmd.Parameters.AddWithValue("@Artist", song.Artist); - cmd.Parameters.AddWithValue("@Year", song.Year); - cmd.Parameters.AddWithValue("@Genre", song.Genre); - cmd.Parameters.AddWithValue("@Duration", song.Duration); - cmd.Parameters.AddWithValue("@Filename", song.Filename); - cmd.Parameters.AddWithValue("@SongPath", song.SongPath); - - cmd.ExecuteNonQuery(); - } - } - } - catch (Exception ex) - { - var exMsg = ex.Message; - Console.WriteLine($"An Error Occurred: {exMsg}"); - } - } - - public void SaveSong(SongData songData) - { - try - { - using (MySqlConnection conn = new MySqlConnection(_connectionString)) - { - conn.Open(); - string query = "INSERT INTO SongData(Data) VALUES(@Data)"; - using (MySqlCommand cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@Data", songData.Data); - - cmd.ExecuteNonQuery(); - } - } - } - catch(Exception ex) - { - var exMsg = ex.Message; - Console.WriteLine($"An error occurred: {exMsg}"); - } - } - public async Task SaveSongToFileSystem(IFormFile song) - { - try - { - Console.WriteLine("Saving song to the filesystem"); - var filePath = Path.Combine(_tempDirectoryRoot, song.FileName); - Console.WriteLine("Saving song to the filePath"); - await SaveSongToFileSystemTemp(song, filePath); - System.IO.File.Delete(filePath); - - - DirectoryManager dirMgr = new DirectoryManager(_config, _song); - dirMgr.CreateDirectory(); - filePath = dirMgr.SongDirectory; - if (!song.FileName.EndsWith(".mp3")) - filePath += $"{song.FileName}.mp3"; - else - filePath += $"{song.FileName}"; - - Console.WriteLine($"Full path {filePath}"); - - using (var fileStream = new FileStream(filePath, FileMode.Create)) - { - await song.CopyToAsync(fileStream); - _song.SongPath = filePath; - - Console.WriteLine($"Writing song to the directory: {filePath}"); - } - } - catch (Exception ex) - { - var exMsg = ex.Message; - Console.WriteLine($"An error occurred: {exMsg}"); - } - } - public async Task SaveSongToFileSystem(IFormFile songFile, SongRepository sStoreContext, - AlbumRepository alStoreContext, - ArtistRepository arStoreContext) - { - try - { - _logger.Info("Starting process to save song to the filesystem"); - var fileTempPath = Path.Combine(_tempDirectoryRoot, songFile.FileName); - var song = await SaveSongTemp(songFile, fileTempPath); - System.IO.File.Delete(fileTempPath); - - DirectoryManager dirMgr = new DirectoryManager(_config, song); - dirMgr.CreateDirectory(); - var filePath = dirMgr.SongDirectory; - if (!songFile.FileName.EndsWith(".mp3")) - filePath += $"{songFile.FileName}.mp3"; - else - filePath += $"{songFile.FileName}"; - - _logger.Info($"Absolute song path: {filePath}"); - - using (var fileStream = new FileStream(filePath, FileMode.Create)) - { - await (songFile.CopyToAsync(fileStream)); - song.SongPath = filePath; - - _logger.Info("Song Successfully saved"); - } - SaveSongToDatabase(song, sStoreContext, alStoreContext, arStoreContext); - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } - public async Task SaveSongToFileSystem(IFormFile songFile, SongRepository songStore, - AlbumRepository albumStore, ArtistRepository artistStore, - GenreRepository genreStore, YearRepository yearStore) - { - try - { - _logger.Info("Starting the process of saving the song to the filesystem"); - - var fileTempPath = Path.Combine(_tempDirectoryRoot, songFile.FileName); - var song = await SaveSongTemp(songFile, fileTempPath); - System.IO.File.Delete(fileTempPath); - - DirectoryManager dirMgr = new DirectoryManager(_config, song); - dirMgr.CreateDirectory(); - - var filePath = dirMgr.SongDirectory; - var songFilename = songFile.FileName; - - if (!songFilename.EndsWith(".mp3")) - filePath += $"{songFilename}.mp3"; - else - filePath += $"{songFilename}"; - - _logger.Info($"Absolute song path: {filePath}"); - - using (var fileStream = new FileStream(filePath, FileMode.Create)) - { - await (songFile.CopyToAsync(fileStream)); - song.SongPath = filePath; - - _logger.Info("Song successfully saved to filesystem"); - } - - SaveSongToDatabase(song, songStore, albumStore, artistStore, genreStore, - yearStore); - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } - - public async Task> RetrieveAllSongDetails() - { - try - { - InitializeResults(); - _songs = new List(); - _conn.Open(); - string query = "SELECT * FROM Songs"; - - _cmd = new MySqlCommand(query, _conn); - _cmd.ExecuteNonQuery(); - - _dataDump = new MySqlDataAdapter(_cmd); - _dataDump.Fill(_results); - _dataDump.Dispose(); - - await PopulateSongDetails(); - - - _conn.Close(); - - } - catch (Exception ex) - { - var exMsg = ex.Message; - Console.WriteLine($"An error ocurred: {exMsg}"); - } - - return _songs; - } - public Song RetrieveSongDetails(int id) - { - DataTable results = new DataTable(); - - try - { - using (MySqlConnection conn = new MySqlConnection(_connectionString)) - { - conn.Open(); - string query = "SELECT * FROM Songs WHERE Id=@Id"; - using (MySqlCommand cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@Id", id); - - cmd.ExecuteNonQuery(); - - using (MySqlDataAdapter dataDump = new MySqlDataAdapter(cmd)) - { - dataDump.Fill(results); - } - } - } - } - catch (Exception ex) - { - var exMsg = ex.Message; - Console.WriteLine($"An error occurred"); - } - - DataRow row = results.Rows[0]; - - return new Song - { - Id = Int32.Parse(row["Id"].ToString()), - Filename = row["Filename"].ToString(), - SongPath = row["SongPath"].ToString() - }; - } - public async Task RetrieveSong(int id) - { - SongData song = new SongData(); - try - { - _song = RetrieveSongDetails(id); - song = await RetrieveSongFromFileSystem(_song); - } - catch (Exception ex) - { - var exMsg = ex.Message; - Console.WriteLine($"An error occurred: {exMsg}"); - } - - return song; - } - public async Task RetrieveSong(Song songMetaData) - { - SongData song = new SongData(); - try - { - Console.WriteLine("Fetching song from filesystem"); - song = await RetrieveSongFromFileSystem(songMetaData); - } - catch (Exception ex) - { - var exMsg = ex.Message; - Console.WriteLine($"An error occurred: {exMsg}"); - } - - return song; - } - - - private Song RetrieveMetaData(string filePath) - { - Song newSong = new Song - { - Title = "Untitled", - Artist = "Untitled", - AlbumTitle = "Untitled", - Year = 0, - Genre = "Untitled", - Duration = 0, - SongPath = "" - }; - string title, artist, album, genre; - int year, duration; - - Console.WriteLine("Stripping song metadata"); - try - { - TagLib.File tfile = TagLib.File.Create(filePath); - - - using (var mp3 = new Mp3(filePath)) - { - Id3Tag tag = mp3.GetTag(Id3TagFamily.Version2X); - title = tag.Title; - Console.WriteLine("Title: {0}", title); - newSong.Title = title; - artist = tag.Artists; - Console.WriteLine("Artist: {0}", artist); - newSong.Artist = artist; - album = tag.Album; - Console.WriteLine("Album: {0}", album); - newSong.AlbumTitle = album; - genre = "Not Implemented"; - Console.WriteLine("Genre: {0}", genre); - newSong.Genre = genre; - year = (int)tag.Year; - Console.WriteLine("Year: {0}", year); - newSong.Year = year; - duration = (int)tfile.Properties.Duration.TotalSeconds; - Console.WriteLine("Duration: {0}", duration); - newSong.Duration = duration; - } - - _song = newSong; - } - catch (Exception ex) - { - var msg = ex.Message; - Console.WriteLine($"An error occurred when stripping metadata\n{msg}"); - _song = newSong; - } - - return newSong; - } - - private async Task RetrieveSongFromFileSystem(Song details) - { - byte[] uncompressedSong = System.IO.File.ReadAllBytes(details.SongPath); - - return new SongData - { - Data = uncompressedSong - }; - } - private async Task SaveSongTemp(IFormFile songFile, string filePath) - { - var song = new Song(); - - - using (var filestream = new FileStream(filePath, FileMode.Create)) - { - _logger.Info("Saving song to temporary directory"); - await songFile.CopyToAsync(filestream); - } - - MetadataRetriever meta = new MetadataRetriever(); - song = meta.RetrieveMetaData(filePath); - - _logger.Info("Assigning song filename"); - song.Filename = songFile.FileName; - - return song; - } - - private async Task SaveSongToFileSystemTemp(IFormFile song, string filePath) - { - using (var fileStream = new FileStream(filePath, FileMode.Create)) - { - Console.WriteLine("Retrieving song and storing it in memory"); - _logger.Info("Retrieving song and storing it in memory"); - await song.CopyToAsync(fileStream); - Console.WriteLine($"Retrieving metadata of song from filepath {filePath}"); - _logger.Info($"Retrieving metadata of song from filepath {filePath}"); - MetadataRetriever meta = new MetadataRetriever(); - _song = meta.RetrieveMetaData(filePath); - - Console.WriteLine("Assigning song filename"); - _song.Filename = song.FileName; - Console.WriteLine($"Song filename retrieved: {song.FileName}"); - } - } - - private bool SongRecordChanged(Song currentSong, Song songUpdates) - { - var currentTitle = currentSong.Title; - var currentArtist = currentSong.Artist; - var currentAlbum = currentSong.AlbumTitle; - var currentGenre = currentSong.Genre; - var currentYear = currentSong.Year; - - if (!currentTitle.Equals(songUpdates.Title) || !currentArtist.Equals(songUpdates.Artist) || - !currentAlbum.Equals(songUpdates.AlbumTitle) || - !currentGenre.Equals(songUpdates.Genre) || currentYear != songUpdates.Year) - { - return true; - } - - return false; - } - - private void DeleteEmptyDirectories(ref Song oldSong, ref Song updatedSong) - { - DirectoryManager mgr = new DirectoryManager(_config); - - _logger.Info("Checking to see if there are any directories to delete"); - mgr.DeleteEmptyDirectories(oldSong); - } - - private void Initialize() - { - try - { - _connectionString = _config.GetConnectionString("IcarusDev"); - } - catch (Exception ex) - { - Console.WriteLine($"Error Occurred: {ex.Message}"); - } - - } - private void InitializeConnection() - { - _conn = new MySqlConnection(_connectionString); - } - private void InitializeResults() - { - _results = new DataTable(); - } - - private void SaveSongToDatabase(Song song, SongRepository songStore, AlbumRepository albumStore, - ArtistRepository artistStore) - { - _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}"); - - songStore.SaveSong(song); - } - private void SaveSongToDatabase(Song song, SongRepository songStore, AlbumRepository albumStore, - ArtistRepository artistStore, GenreRepository genreStore, YearRepository yearStore) - { - _logger.Info("Starting process to save the song to the database"); - - SaveAlbumToDatabase(ref song, albumStore); - SaveArtistToDatabase(ref song, artistStore); - SaveGenreToDatabase(ref song, genreStore); - SaveYearToDatabase(ref song, yearStore); - - var info = "Saving Song to DB"; - Console.WriteLine(info); - _logger.Info(info); - songStore.SaveSong(song); - } - private void SaveAlbumToDatabase(ref Song song, AlbumRepository albumStore) - { - _logger.Info("Starting process to save the album record of the song to the database"); - - var album = new Album(); - - album.Title = song.AlbumTitle; - album.AlbumArtist = song.Artist; - - if (!albumStore.DoesAlbumExist(song)) - { - album.SongCount = 1; - albumStore.SaveAlbum(album); - album = albumStore.GetAlbum(song); - Console.WriteLine($"Album Id {album.AlbumId}"); - } - else - { - var albumRetrieved = albumStore.GetAlbum(song); - album.AlbumId = albumRetrieved.AlbumId; - album.SongCount = albumRetrieved.SongCount + 1; - - albumStore.UpdateAlbum(album); - } - - song.AlbumId = album.AlbumId; - } - private void SaveArtistToDatabase(ref Song song, ArtistRepository artistStore) - { - _logger.Info("Starting process to save the artist record of the song to the database"); - - var artist = new Artist(); - - artist.Name = song.Artist; - artist.SongCount = 1; - - if (!artistStore.DoesArtistExist(song)) - { - artist.SongCount = 1; - artistStore.SaveArtist(artist); - artist = artistStore.GetArtist(song); - } - else - { - var artistRetrieved = artistStore.GetArtist(song); - artist.ArtistId = artistRetrieved.ArtistId; - artist.SongCount = artistRetrieved.SongCount + 1; - - artistStore.UpdateArtist(artist); - } - - song.ArtistId = artist.ArtistId; - } - private void SaveGenreToDatabase(ref Song song, GenreRepository genreStore) - { - _logger.Info("Starting process to save the genre record of the song to the database"); - - var genre = new Genre - { - GenreName = song.Genre, - SongCount = 1 - }; - - if (!genreStore.DoesGenreExist(song)) - { - genreStore.SaveGenre(genre); - Console.WriteLine("Going to find genre"); - genre = genreStore.GetGenre(song); - var genreDump = $"Genre id {genre.GenreId} GenreName {genre.GenreName}" + - $" Genre song Count {genre.SongCount}"; - Console.WriteLine(genreDump); - _logger.Info(genreDump); - } - else - { - var genreRetrieved = genreStore.GetGenre(song); - genre.GenreId = genreRetrieved.GenreId; - genre.SongCount = genreRetrieved.SongCount + 1; - - genreStore.UpdateGenre(genre); - } - - song.GenreId = genre.GenreId; - } - private void SaveYearToDatabase(ref Song song, YearRepository yearStore) - { - _logger.Info("Starting process to save the year record of the song to the database"); - - var year = new Year - { - YearValue = song.Year.Value, - SongCount = 1 - }; - - if (!yearStore.DoesYearExist(song)) - { - yearStore.SaveYear(year); - year = yearStore.GetSongYear(song); - } - else - { - var yearRetrieved = yearStore.GetSongYear(song); - year.YearId = yearRetrieved.YearId; - year.SongCount = yearRetrieved.SongCount + 1; - - yearStore.UpdateYear(year); - } - - song.YearId = year.YearId; - } - - private bool DeleteSongFromFilesystem(Song song) - { - var songPath = song.SongPath; - - _logger.Info("Deleting song from the filesystem"); - - try - { - System.IO.File.Delete(songPath); - } - catch(Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred when attempting to delete the song from the filesystem"); - return false; - } - - var result = DoesSongExistOnFilesystem(song); - - return result; - } - private bool DoesSongExistOnFilesystem(Song song) - { - var songPath = song.SongPath; - - if (!System.IO.File.Exists(songPath)) - { - _logger.Info("Song does not exist on the filesystem"); - - return false; - } - - _logger.Info("Song exists on the filesystem"); - - return true; - } - - private Album UpdateAlbumInDatabase(Song oldSongRecord, Song newSongRecord, AlbumRepository albumStore) - { - var albumRecord = albumStore.GetAlbum(oldSongRecord, true); - var oldAlbumTitle = oldSongRecord.AlbumTitle; - var oldAlbumArtist = oldSongRecord.Artist; - var newAlbumTitle = newSongRecord.AlbumTitle; - var newAlbumArtist = newSongRecord.Artist; - - var info = string.Empty; - - if (string.IsNullOrEmpty(newAlbumArtist)) - { - newAlbumArtist = oldAlbumArtist; - } - if (string.IsNullOrEmpty(newAlbumTitle)) - { - newAlbumTitle = oldAlbumTitle; - } - - if ((string.IsNullOrEmpty(newAlbumTitle) && string.IsNullOrEmpty(newAlbumArtist) || - oldAlbumTitle.Equals(newAlbumTitle) && oldAlbumArtist.Equals(newAlbumArtist))) - { - _logger.Info("No change to the song's album"); - return albumRecord; - } - - info = "Change to the song's album"; - _logger.Info(info); - - if (!albumStore.DoesAlbumExist(newSongRecord)) - { - _logger.Info("Creating new album record"); - - var newAlbumRecord = new Album - { - Title = newAlbumTitle, - AlbumArtist = newAlbumArtist - }; - - albumStore.SaveAlbum(newAlbumRecord); - - return albumStore.GetAlbum(newSongRecord, true); - } - else - { - _logger.Info("Updating existing album record"); - - var existingAlbumRecord = albumStore.GetAlbum(newSongRecord); - existingAlbumRecord.AlbumArtist = newAlbumArtist; - - albumStore.UpdateAlbum(existingAlbumRecord); - - return existingAlbumRecord; - } - } - private Artist UpdateArtistInDatabase(Song oldSongRecord, Song newSongRecord, ArtistRepository artistStore) - { - var oldArtistRecord = artistStore.GetArtist(oldSongRecord, true); - var oldArtistName = oldArtistRecord.Name; - var newArtistName = newSongRecord.Artist; - - if (string.IsNullOrEmpty(newArtistName) || oldArtistName.Equals(newArtistName)) - { - _logger.Info("No change to the song's Artist"); - return oldArtistRecord; - } - - _logger.Info("Change to the song's record found"); - - if (oldArtistRecord.SongCount <= 1) - { - _logger.Info("Deleting artist record that no longer has any songs"); - - artistStore.DeleteArtist(oldArtistRecord); - } - - if (!artistStore.DoesArtistExist(newSongRecord)) - { - _logger.Info("Creating new artist record"); - - var newArtistRecord = new Artist - { - Name = newArtistName - }; - - artistStore.SaveArtist(newArtistRecord); - - return artistStore.GetArtist(newSongRecord, true); - } - else - { - _logger.Info("Updating existing artist record"); - - var existingArtistRecord = artistStore.GetArtist(newSongRecord); - - artistStore.UpdateArtist(existingArtistRecord); - - return existingArtistRecord; - } - } - private Genre UpdateGenreInDatabase(Song oldSongRecord, Song newSongRecord, GenreRepository genreStore) - { - var oldGenreRecord = genreStore.GetGenre(oldSongRecord, true); - var oldGenreName = oldGenreRecord.GenreName; - var newGenreName = newSongRecord.Genre; - - if (string.IsNullOrEmpty(newGenreName) || oldGenreName.Equals(newGenreName)) - { - _logger.Info("No change to the song's Genre"); - return oldGenreRecord; - } - - _logger.Info("Change to the song's genre found"); - - if (oldGenreRecord.SongCount <= 1) - { - _logger.Info("Deleting genre record"); - - genreStore.DeleteGenre(oldGenreRecord); - } - - if (!genreStore.DoesGenreExist(newSongRecord)) - { - _logger.Info("Creating new genre record"); - - var newGenreRecord = new Genre - { - GenreName = newGenreName - }; - - genreStore.SaveGenre(newGenreRecord); - - return genreStore.GetGenre(newSongRecord, true); - } - else - { - _logger.Info("Updating existing genre record"); - - var existingGenreRecord = genreStore.GetGenre(newSongRecord); - - genreStore.UpdateGenre(existingGenreRecord); - return genreStore.GetGenre(existingGenreRecord); - } - } - private Year UpdateYearInDatabase(Song oldSongRecord, Song newSongRecord, YearRepository yearStore) - { - var oldYearRecord = yearStore.GetSongYear(oldSongRecord, true); - var oldYearValue = oldYearRecord.YearValue; - var newYearValue = newSongRecord.Year; - - if (oldYearValue == newYearValue || newYearValue == 0 || newYearValue == null) - { - _logger.Info("No change to the song's Year"); - return oldYearRecord; - } - - _logger.Info("Change to the song's year found"); - - if (oldYearRecord.SongCount <= 1) - { - _logger.Info("Deleting year record"); - - yearStore.DeleteYear(oldYearRecord); - } - - if(!yearStore.DoesYearExist(newSongRecord)) - { - _logger.Info("Creating new year record"); - - var newYearRecord = new Year - { - YearValue = newYearValue.Value - }; - - yearStore.SaveYear(newYearRecord); - - return yearStore.GetSongYear(newSongRecord, true); - } - else - { - _logger.Info("Updating existing year record"); - - var existingYearRecord = yearStore.GetSongYear(newSongRecord); - - yearStore.UpdateYear(existingYearRecord); - - return existingYearRecord; - } - } - private void UpdateSongInDatabase(ref Song oldSongRecord, ref Song newSongRecord, SongRepository songStore, - ref SongResult result) - { - var updatedSongRecord = new Song - { - Id = oldSongRecord.Id, - Title = oldSongRecord.Title, - Artist = oldSongRecord.Artist, - AlbumTitle = oldSongRecord.AlbumTitle, - Genre = oldSongRecord.Genre, - Year = oldSongRecord.Year, - Filename = oldSongRecord.Filename, - SongPath = oldSongRecord.SongPath, - ArtistId = oldSongRecord.ArtistId, - AlbumId = oldSongRecord.AlbumId, - GenreId = oldSongRecord.GenreId, - YearId = oldSongRecord.YearId - - }; - var artistOrAlbumChanged = false; - - if (!SongRecordChanged(oldSongRecord, newSongRecord)) - { - _logger.Info("No change to the song record"); - return; - } - - _logger.Info("Changes to song record found"); - - if (!string.IsNullOrEmpty(newSongRecord.Title)) - { - updatedSongRecord.Title = newSongRecord.Title; - } - if (!string.IsNullOrEmpty(newSongRecord.AlbumTitle)) - { - updatedSongRecord.AlbumTitle = newSongRecord.AlbumTitle; - artistOrAlbumChanged = true; - } - if (!string.IsNullOrEmpty(newSongRecord.Artist)) - { - updatedSongRecord.Artist = newSongRecord.Artist; - artistOrAlbumChanged = true; - } - if (!string.IsNullOrEmpty(newSongRecord.Genre)) - { - updatedSongRecord.Genre = newSongRecord.Genre; - Console.WriteLine("Genre changed"); - Console.WriteLine($"{updatedSongRecord.Genre} {newSongRecord.Genre}"); - } - if (newSongRecord.Year != null || newSongRecord.Year > 0) - { - updatedSongRecord.Year = newSongRecord.Year; - } - - _logger.Info("Applied changes to song record"); - - if (artistOrAlbumChanged) - { - _logger.Info("Change to song's album or artist"); - - DirectoryManager dirMgr = new DirectoryManager(_config); - var oldSongPath = updatedSongRecord.SongPath; - var newSongPath = dirMgr.GenerateSongPath(updatedSongRecord); - var filename = updatedSongRecord.Filename; - - Console.WriteLine($"Old song path {oldSongPath}"); - Console.WriteLine($"New song path {newSongPath}"); - - _logger.Info("Copying song to the new path"); - - System.IO.File.Copy(oldSongPath, newSongPath + filename, true); - - _logger.Info("Checking to see if song successfully copied"); - - if (!System.IO.File.Exists(newSongPath + filename)) - { - _logger.Info("Song did not successfully copy"); - - Console.WriteLine("New path does not exist when it should"); - } - - updatedSongRecord.SongPath = newSongPath + filename; - - _logger.Info("Deleting old song path"); - - System.IO.File.Delete(oldSongPath); - - if (System.IO.File.Exists(oldSongPath)) - { - Console.WriteLine("Old path exists when it should not"); - } - } - - _logger.Info("Saving song metadata to the database"); - - if (songStore.DoesSongExist(newSongRecord)) - { - songStore.UpdateSong(updatedSongRecord); - } - else - { - songStore.SaveSong(updatedSongRecord); - } - - newSongRecord = updatedSongRecord; - - result.Message = "Successfully updated song"; - result.SongTitle = updatedSongRecord.Title; - } - - private void DeleteSongFromDatabase(Song song, SongRepository songStore, AlbumRepository albumStore, - ArtistRepository artistStore, GenreRepository genreStore, YearRepository yearStore) - { - _logger.Info("Starting process to delete records related to the song from the database"); - - DeleteAlbumFromDatabase(song, albumStore); - DeleteArtistFromDatabase(song, artistStore); - DeleteGenreFromDatabase(song, genreStore); - DeleteYearFromDatabase(song, yearStore); - - songStore.DeleteSong(song); - } - private void DeleteAlbumFromDatabase(Song song, AlbumRepository albumStore) - { - if (!albumStore.DoesAlbumExist(song)) - { - _logger.Info("Cannot delete the album record because it does not exist"); - return; - } - - var album = albumStore.GetAlbum(song, true); - - if (album.SongCount <= 1) - { - albumStore.DeleteAlbum(album); - } - } - private void DeleteArtistFromDatabase(Song song, ArtistRepository artistStore) - { - if (!artistStore.DoesArtistExist(song)) - { - _logger.Info("Cannot delete the artist record because it does not exist"); - return; - } - - var artist = artistStore.GetArtist(song, true); - - if (artist.SongCount <= 1) - { - artistStore.DeleteArtist(artist); - } - } - private void DeleteGenreFromDatabase(Song song, GenreRepository genreStore) - { - if (!genreStore.DoesGenreExist(song)) - { - _logger.Info("Cannot delete the genre record because it does not exist"); - return; - } - - var genre = genreStore.GetGenre(song, true); - - if (genre.SongCount <= 1) - { - genreStore.DeleteGenre(genre); - } - } - private void DeleteYearFromDatabase(Song song, YearRepository yearStore) - { - if (!yearStore.DoesYearExist(song)) - { - _logger.Info("Cannot delete the year record because it does not exist"); - return; - } - - var year = yearStore.GetSongYear(song, true); - - if (year.SongCount <= 1) - { - yearStore.DeleteYear(year); - } - } - - private async Task PopulateSongDetails() - { - foreach (DataRow row in _results.Rows) - { - Song song = new Song(); - foreach (DataColumn col in _results.Columns) - { - string colStr = col.ToString().ToUpper(); - switch (colStr) - { - case "ID": - song.Id = Int32.Parse(row[col].ToString()); - break; - case "TITLE": - song.Title = row[col].ToString(); - break; - case "ALBUM": - song.AlbumTitle = row[col].ToString(); - break; - case "ARTIST": - song.Artist = row[col].ToString(); - break; - case "YEAR": - song.Year = Int32.Parse(row[col].ToString()); - break; - case "GENRE": - song.Genre = row[col].ToString(); - break; - case "DURATION": - song.Duration = Int32.Parse(row[col].ToString()); - break; - case "FILENAME": - song.Filename = row[col].ToString(); - break; - case "SONGPATH": - song.SongPath = row[col].ToString(); - break; - } - } - _songs.Add(song); - } - } - #endregion - } + public class SongManager : BaseManager + { + #region Fields + private MySqlConnection _conn; + private MySqlCommand _cmd; + private MySqlDataAdapter _dataDump; + private DataTable _results; + private List _songs; + private Song _song; + private IConfiguration _config; + private string _connectionString; + private string _tempDirectoryRoot; + private string _archiveDirectoryRoot; + private string _compressedSongFilename; + private string _message; + #endregion + + + #region Properties + public Song SongDetails + { + get => _song; + set => _song = value; + } + + public string ArchiveDirectoryRoot + { + get => _archiveDirectoryRoot; + set => _archiveDirectoryRoot = value; + } + public string CompressedSongFilename + { + get => _compressedSongFilename; + set => _compressedSongFilename = value; + } + public string Message + { + get => _message; + set => _message = value; + } + #endregion + + + #region Constructors + public SongManager() + { + Initialize(); + InitializeConnection(); + } + + public SongManager(Song song) + { + Initialize(); + InitializeConnection(); + _song = song; + } + public SongManager(IConfiguration config) + { + _config = config; + Initialize(); + InitializeConnection(); + } + public SongManager(IConfiguration config, string tempDirectoryRoot) + { + _config = config; + _tempDirectoryRoot = tempDirectoryRoot; + Initialize(); + InitializeConnection(); + } + #endregion + + + #region Methods + public SongResult UpdateSong(Song song, SongRepository songStore, AlbumRepository albumStore, + ArtistRepository artistStore, GenreRepository genreStore, YearRepository yearStore) + { + var result = new SongResult(); + + try + { + var oldSongRecord = songStore.GetSong(song); + song.SongPath = oldSongRecord.SongPath; + + MetadataRetriever updateMetadata = new MetadataRetriever(); + updateMetadata.UpdateMetadata(song, oldSongRecord); + + var updatedSong = updateMetadata.UpdatedSongRecord; + + var updatedAlbum = UpdateAlbumInDatabase(oldSongRecord, updatedSong, albumStore); + oldSongRecord.AlbumId = updatedAlbum.AlbumId; + + var updatedArtist = UpdateArtistInDatabase(oldSongRecord, updatedSong, artistStore); + oldSongRecord.ArtistId = updatedArtist.ArtistId; + + var updatedGenre = UpdateGenreInDatabase(oldSongRecord, updatedSong, genreStore); + Console.WriteLine($"Old Genre Id {oldSongRecord.GenreId}"); + oldSongRecord.GenreId = updatedGenre.GenreId; + Console.WriteLine($"Updated Genre Id {updatedGenre.GenreId}"); + + var updatedYear = UpdateYearInDatabase(oldSongRecord, updatedSong, yearStore); + oldSongRecord.YearId = updatedYear.YearId; + + UpdateSongInDatabase(ref oldSongRecord, ref updatedSong, songStore, ref result); + + DeleteEmptyDirectories(ref oldSongRecord, ref updatedSong); + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + + result.Message = $"An error occurred: {msg}"; + result.SongTitle = song.Title; + } + + return result; + } + + public bool DeleteSongFromFileSystem(Song songMetaData) + { + bool successful = false; + try + { + var songPath = songMetaData.SongPath; + System.IO.File.Delete(songPath); + successful = true; + DirectoryManager dirMgr = new DirectoryManager(_config, songMetaData); + dirMgr.DeleteEmptyDirectories(); + Console.WriteLine("Song successfully deleted"); + } + catch (Exception ex) + { + var exMsg = ex.Message; + } + + return successful; + } + + public void DeleteSong(Song song, SongRepository songStore, AlbumRepository albumStore, + ArtistRepository artistStore, GenreRepository genreStore, YearRepository yearStore) + { + try + { + if (DeleteSongFromFilesystem(song)) + { + _logger.Info("Failed to delete the song"); + + throw new Exception("Failed to delete the song"); + } + + DeleteSongFromDatabase(song, songStore, albumStore, artistStore, + genreStore, yearStore); + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + + public void SaveSongDetails() + { + try + { + using (MySqlConnection conn = new MySqlConnection(_connectionString)) + { + conn.Open(); + string query = "INSERT INTO Songs(Title, AlbumTitle, Artist, Year, Genre, Duration, " + + "Filename, SongPath) VALUES(@Title, @AlbumTitle, @Artist, @Year, @Genre, " + + "@Duration, @Filename, @SongPath)"; + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Title", _song.Title); + cmd.Parameters.AddWithValue("@AlbumTitle", _song.AlbumTitle); + cmd.Parameters.AddWithValue("@Artist", _song.Artist); + cmd.Parameters.AddWithValue("@Year", _song.Year); + cmd.Parameters.AddWithValue("@Genre", _song.Genre); + cmd.Parameters.AddWithValue("@Duration", _song.Duration); + cmd.Parameters.AddWithValue("@Filename", _song.Filename); + cmd.Parameters.AddWithValue("@SongPath", _song.SongPath); + + cmd.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + var exMsg = ex.Message; + Console.WriteLine($"An Error Occurred: {exMsg}"); + } + } + public void SaveSongDetails(Song song) + { + try + { + using (MySqlConnection conn = new MySqlConnection(_connectionString)) + { + conn.Open(); + string query = "INSERT INTO Songs(Title, AlbumTitle, Artist, Year, Genre, Duration, " + + ", Filename, SongPath) VALUES(@Title, @AlbumTitle, @Artist, @Year, @Genre, " + + "@Duration, @Filename, @SongPath)"; + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Title", song.Title); + cmd.Parameters.AddWithValue("@AlbumTitle", song.AlbumTitle); + cmd.Parameters.AddWithValue("@Artist", song.Artist); + cmd.Parameters.AddWithValue("@Year", song.Year); + cmd.Parameters.AddWithValue("@Genre", song.Genre); + cmd.Parameters.AddWithValue("@Duration", song.Duration); + cmd.Parameters.AddWithValue("@Filename", song.Filename); + cmd.Parameters.AddWithValue("@SongPath", song.SongPath); + + cmd.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + var exMsg = ex.Message; + Console.WriteLine($"An Error Occurred: {exMsg}"); + } + } + + public void SaveSong(SongData songData) + { + try + { + using (MySqlConnection conn = new MySqlConnection(_connectionString)) + { + conn.Open(); + string query = "INSERT INTO SongData(Data) VALUES(@Data)"; + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Data", songData.Data); + + cmd.ExecuteNonQuery(); + } + } + } + catch(Exception ex) + { + var exMsg = ex.Message; + Console.WriteLine($"An error occurred: {exMsg}"); + } + } + public async Task SaveSongToFileSystem(IFormFile song) + { + try + { + Console.WriteLine("Saving song to the filesystem"); + var filePath = Path.Combine(_tempDirectoryRoot, song.FileName); + Console.WriteLine("Saving song to the filePath"); + await SaveSongToFileSystemTemp(song, filePath); + System.IO.File.Delete(filePath); + + + DirectoryManager dirMgr = new DirectoryManager(_config, _song); + dirMgr.CreateDirectory(); + filePath = dirMgr.SongDirectory; + + if (!song.FileName.EndsWith(".mp3")) + filePath += $"{song.FileName}.mp3"; + else + filePath += $"{song.FileName}"; + + Console.WriteLine($"Full path {filePath}"); + + using (var fileStream = new FileStream(filePath, FileMode.Create)) + { + await song.CopyToAsync(fileStream); + _song.SongPath = filePath; + + Console.WriteLine($"Writing song to the directory: {filePath}"); + } + } + catch (Exception ex) + { + var exMsg = ex.Message; + Console.WriteLine($"An error occurred: {exMsg}"); + } + } + public async Task SaveSongToFileSystem(IFormFile songFile, SongRepository sStoreContext, + AlbumRepository alStoreContext, ArtistRepository arStoreContext) + { + try + { + _logger.Info("Starting process to save song to the filesystem"); + var fileTempPath = Path.Combine(_tempDirectoryRoot, songFile.FileName); + var song = await SaveSongTemp(songFile, fileTempPath); + System.IO.File.Delete(fileTempPath); + + DirectoryManager dirMgr = new DirectoryManager(_config, song); + dirMgr.CreateDirectory(); + var filePath = dirMgr.SongDirectory; + + if (!songFile.FileName.EndsWith(".mp3")) + filePath += $"{songFile.FileName}.mp3"; + else + filePath += $"{songFile.FileName}"; + + _logger.Info($"Absolute song path: {filePath}"); + + using (var fileStream = new FileStream(filePath, FileMode.Create)) + { + await (songFile.CopyToAsync(fileStream)); + song.SongPath = filePath; + + _logger.Info("Song Successfully saved"); + } + SaveSongToDatabase(song, sStoreContext, alStoreContext, arStoreContext); + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + public async Task SaveSongToFileSystem(IFormFile songFile, SongRepository songStore, + AlbumRepository albumStore, ArtistRepository artistStore, + GenreRepository genreStore, YearRepository yearStore) + { + try + { + _logger.Info("Starting the process of saving the song to the filesystem"); + + var fileTempPath = Path.Combine(_tempDirectoryRoot, songFile.FileName); + var song = await SaveSongTemp(songFile, fileTempPath); + System.IO.File.Delete(fileTempPath); + + DirectoryManager dirMgr = new DirectoryManager(_config, song); + dirMgr.CreateDirectory(); + + var filePath = dirMgr.SongDirectory; + var songFilename = songFile.FileName; + + if (!songFilename.EndsWith(".mp3")) + filePath += $"{songFilename}.mp3"; + else + filePath += $"{songFilename}"; + + _logger.Info($"Absolute song path: {filePath}"); + + using (var fileStream = new FileStream(filePath, FileMode.Create)) + { + await (songFile.CopyToAsync(fileStream)); + song.SongPath = filePath; + + _logger.Info("Song successfully saved to filesystem"); + } + + SaveSongToDatabase(song, songStore, albumStore, artistStore, genreStore, + yearStore); + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + + public async Task> RetrieveAllSongDetails() + { + try + { + InitializeResults(); + _songs = new List(); + _conn.Open(); + string query = "SELECT * FROM Songs"; + + _cmd = new MySqlCommand(query, _conn); + _cmd.ExecuteNonQuery(); + + _dataDump = new MySqlDataAdapter(_cmd); + _dataDump.Fill(_results); + _dataDump.Dispose(); + + await PopulateSongDetails(); + + + _conn.Close(); + + } + catch (Exception ex) + { + var exMsg = ex.Message; + Console.WriteLine($"An error ocurred: {exMsg}"); + } + + return _songs; + } + public Song RetrieveSongDetails(int id) + { + DataTable results = new DataTable(); + + try + { + using (MySqlConnection conn = new MySqlConnection(_connectionString)) + { + conn.Open(); + string query = "SELECT * FROM Songs WHERE Id=@Id"; + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Id", id); + + cmd.ExecuteNonQuery(); + + using (MySqlDataAdapter dataDump = new MySqlDataAdapter(cmd)) + { + dataDump.Fill(results); + } + } + } + } + catch (Exception ex) + { + var exMsg = ex.Message; + Console.WriteLine($"An error occurred"); + } + + DataRow row = results.Rows[0]; + + return new Song + { + Id = Int32.Parse(row["Id"].ToString()), + Filename = row["Filename"].ToString(), + SongPath = row["SongPath"].ToString() + }; + } + public async Task RetrieveSong(int id) + { + SongData song = new SongData(); + try + { + _song = RetrieveSongDetails(id); + song = await RetrieveSongFromFileSystem(_song); + } + catch (Exception ex) + { + var exMsg = ex.Message; + Console.WriteLine($"An error occurred: {exMsg}"); + } + + return song; + } + public async Task RetrieveSong(Song songMetaData) + { + SongData song = new SongData(); + try + { + Console.WriteLine("Fetching song from filesystem"); + song = await RetrieveSongFromFileSystem(songMetaData); + } + catch (Exception ex) + { + var exMsg = ex.Message; + Console.WriteLine($"An error occurred: {exMsg}"); + } + + return song; + } + + + private Song RetrieveMetaData(string filePath) + { + Song newSong = new Song + { + Title = "Untitled", + Artist = "Untitled", + AlbumTitle = "Untitled", + Year = 0, + Genre = "Untitled", + Duration = 0, + SongPath = "" + }; + string title, artist, album, genre; + int year, duration; + + Console.WriteLine("Stripping song metadata"); + try + { + TagLib.File tfile = TagLib.File.Create(filePath); + + + using (var mp3 = new Mp3(filePath)) + { + Id3Tag tag = mp3.GetTag(Id3TagFamily.Version2X); + title = tag.Title; + Console.WriteLine("Title: {0}", title); + newSong.Title = title; + artist = tag.Artists; + Console.WriteLine("Artist: {0}", artist); + newSong.Artist = artist; + album = tag.Album; + Console.WriteLine("Album: {0}", album); + newSong.AlbumTitle = album; + genre = "Not Implemented"; + Console.WriteLine("Genre: {0}", genre); + newSong.Genre = genre; + year = (int)tag.Year; + Console.WriteLine("Year: {0}", year); + newSong.Year = year; + duration = (int)tfile.Properties.Duration.TotalSeconds; + Console.WriteLine("Duration: {0}", duration); + newSong.Duration = duration; + } + + _song = newSong; + } + catch (Exception ex) + { + var msg = ex.Message; + Console.WriteLine($"An error occurred when stripping metadata\n{msg}"); + _song = newSong; + } + + return newSong; + } + + private async Task RetrieveSongFromFileSystem(Song details) + { + byte[] uncompressedSong = System.IO.File.ReadAllBytes(details.SongPath); + + return new SongData + { + Data = uncompressedSong + }; + } + private async Task SaveSongTemp(IFormFile songFile, string filePath) + { + var song = new Song(); + + + using (var filestream = new FileStream(filePath, FileMode.Create)) + { + _logger.Info("Saving song to temporary directory"); + await songFile.CopyToAsync(filestream); + } + + MetadataRetriever meta = new MetadataRetriever(); + song = meta.RetrieveMetaData(filePath); + + _logger.Info("Assigning song filename"); + song.Filename = songFile.FileName; + + return song; + } + + private async Task SaveSongToFileSystemTemp(IFormFile song, string filePath) + { + using (var fileStream = new FileStream(filePath, FileMode.Create)) + { + Console.WriteLine("Retrieving song and storing it in memory"); + _logger.Info("Retrieving song and storing it in memory"); + await song.CopyToAsync(fileStream); + Console.WriteLine($"Retrieving metadata of song from filepath {filePath}"); + _logger.Info($"Retrieving metadata of song from filepath {filePath}"); + MetadataRetriever meta = new MetadataRetriever(); + _song = meta.RetrieveMetaData(filePath); + + Console.WriteLine("Assigning song filename"); + _song.Filename = song.FileName; + Console.WriteLine($"Song filename retrieved: {song.FileName}"); + } + } + + private bool SongRecordChanged(Song currentSong, Song songUpdates) + { + var currentTitle = currentSong.Title; + var currentArtist = currentSong.Artist; + var currentAlbum = currentSong.AlbumTitle; + var currentGenre = currentSong.Genre; + var currentYear = currentSong.Year; + + if (!currentTitle.Equals(songUpdates.Title) || !currentArtist.Equals(songUpdates.Artist) || + !currentAlbum.Equals(songUpdates.AlbumTitle) || + !currentGenre.Equals(songUpdates.Genre) || currentYear != songUpdates.Year) + return true; + + return false; + } + + private void DeleteEmptyDirectories(ref Song oldSong, ref Song updatedSong) + { + DirectoryManager mgr = new DirectoryManager(_config); + + _logger.Info("Checking to see if there are any directories to delete"); + mgr.DeleteEmptyDirectories(oldSong); + } + + private void Initialize() + { + try + { + _connectionString = _config.GetConnectionString("IcarusDev"); + } + catch (Exception ex) + { + Console.WriteLine($"Error Occurred: {ex.Message}"); + } + + } + private void InitializeConnection() + { + _conn = new MySqlConnection(_connectionString); + } + private void InitializeResults() + { + _results = new DataTable(); + } + + private void SaveSongToDatabase(Song song, SongRepository songStore, AlbumRepository albumStore, + ArtistRepository artistStore) + { + _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}"); + + songStore.SaveSong(song); + } + private void SaveSongToDatabase(Song song, SongRepository songStore, AlbumRepository albumStore, + ArtistRepository artistStore, GenreRepository genreStore, YearRepository yearStore) + { + _logger.Info("Starting process to save the song to the database"); + + SaveAlbumToDatabase(ref song, albumStore); + SaveArtistToDatabase(ref song, artistStore); + SaveGenreToDatabase(ref song, genreStore); + SaveYearToDatabase(ref song, yearStore); + + var info = "Saving Song to DB"; + Console.WriteLine(info); + _logger.Info(info); + songStore.SaveSong(song); + } + private void SaveAlbumToDatabase(ref Song song, AlbumRepository albumStore) + { + _logger.Info("Starting process to save the album record of the song to the database"); + + var album = new Album(); + + album.Title = song.AlbumTitle; + album.AlbumArtist = song.Artist; + + if (!albumStore.DoesAlbumExist(song)) + { + album.SongCount = 1; + albumStore.SaveAlbum(album); + album = albumStore.GetAlbum(song); + Console.WriteLine($"Album Id {album.AlbumId}"); + } + else + { + var albumRetrieved = albumStore.GetAlbum(song); + album.AlbumId = albumRetrieved.AlbumId; + album.SongCount = albumRetrieved.SongCount + 1; + + albumStore.UpdateAlbum(album); + } + + song.AlbumId = album.AlbumId; + } + private void SaveArtistToDatabase(ref Song song, ArtistRepository artistStore) + { + _logger.Info("Starting process to save the artist record of the song to the database"); + + var artist = new Artist(); + + artist.Name = song.Artist; + artist.SongCount = 1; + + if (!artistStore.DoesArtistExist(song)) + { + artist.SongCount = 1; + artistStore.SaveArtist(artist); + artist = artistStore.GetArtist(song); + } + else + { + var artistRetrieved = artistStore.GetArtist(song); + artist.ArtistId = artistRetrieved.ArtistId; + artist.SongCount = artistRetrieved.SongCount + 1; + + artistStore.UpdateArtist(artist); + } + + song.ArtistId = artist.ArtistId; + } + private void SaveGenreToDatabase(ref Song song, GenreRepository genreStore) + { + _logger.Info("Starting process to save the genre record of the song to the database"); + + var genre = new Genre + { + GenreName = song.Genre, + SongCount = 1 + }; + + if (!genreStore.DoesGenreExist(song)) + { + genreStore.SaveGenre(genre); + Console.WriteLine("Going to find genre"); + genre = genreStore.GetGenre(song); + var genreDump = $"Genre id {genre.GenreId} GenreName {genre.GenreName}" + + $" Genre song Count {genre.SongCount}"; + Console.WriteLine(genreDump); + _logger.Info(genreDump); + } + else + { + var genreRetrieved = genreStore.GetGenre(song); + genre.GenreId = genreRetrieved.GenreId; + genre.SongCount = genreRetrieved.SongCount + 1; + + genreStore.UpdateGenre(genre); + } + + song.GenreId = genre.GenreId; + } + private void SaveYearToDatabase(ref Song song, YearRepository yearStore) + { + _logger.Info("Starting process to save the year record of the song to the database"); + + var year = new Year + { + YearValue = song.Year.Value, + SongCount = 1 + }; + + if (!yearStore.DoesYearExist(song)) + { + yearStore.SaveYear(year); + year = yearStore.GetSongYear(song); + } + else + { + var yearRetrieved = yearStore.GetSongYear(song); + year.YearId = yearRetrieved.YearId; + year.SongCount = yearRetrieved.SongCount + 1; + + yearStore.UpdateYear(year); + } + + song.YearId = year.YearId; + } + + private bool DeleteSongFromFilesystem(Song song) + { + var songPath = song.SongPath; + + _logger.Info("Deleting song from the filesystem"); + + try + { + System.IO.File.Delete(songPath); + } + catch(Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred when attempting to delete the song from the filesystem"); + return false; + } + + var result = DoesSongExistOnFilesystem(song); + + return result; + } + private bool DoesSongExistOnFilesystem(Song song) + { + var songPath = song.SongPath; + + if (!System.IO.File.Exists(songPath)) + { + _logger.Info("Song does not exist on the filesystem"); + + return false; + } + + _logger.Info("Song exists on the filesystem"); + + return true; + } + + private Album UpdateAlbumInDatabase(Song oldSongRecord, Song newSongRecord, AlbumRepository albumStore) + { + var albumRecord = albumStore.GetAlbum(oldSongRecord, true); + var oldAlbumTitle = oldSongRecord.AlbumTitle; + var oldAlbumArtist = oldSongRecord.Artist; + var newAlbumTitle = newSongRecord.AlbumTitle; + var newAlbumArtist = newSongRecord.Artist; + + var info = string.Empty; + + if (string.IsNullOrEmpty(newAlbumArtist)) + newAlbumArtist = oldAlbumArtist; + if (string.IsNullOrEmpty(newAlbumTitle)) + newAlbumTitle = oldAlbumTitle; + + if ((string.IsNullOrEmpty(newAlbumTitle) && string.IsNullOrEmpty(newAlbumArtist) || + oldAlbumTitle.Equals(newAlbumTitle) && oldAlbumArtist.Equals(newAlbumArtist))) + { + _logger.Info("No change to the song's album"); + return albumRecord; + } + + info = "Change to the song's album"; + _logger.Info(info); + + if (!albumStore.DoesAlbumExist(newSongRecord)) + { + _logger.Info("Creating new album record"); + + var newAlbumRecord = new Album + { + Title = newAlbumTitle, + AlbumArtist = newAlbumArtist + }; + + albumStore.SaveAlbum(newAlbumRecord); + + return albumStore.GetAlbum(newSongRecord, true); + } + else + { + _logger.Info("Updating existing album record"); + + var existingAlbumRecord = albumStore.GetAlbum(newSongRecord); + existingAlbumRecord.AlbumArtist = newAlbumArtist; + + albumStore.UpdateAlbum(existingAlbumRecord); + + return existingAlbumRecord; + } + } + private Artist UpdateArtistInDatabase(Song oldSongRecord, Song newSongRecord, ArtistRepository artistStore) + { + var oldArtistRecord = artistStore.GetArtist(oldSongRecord, true); + var oldArtistName = oldArtistRecord.Name; + var newArtistName = newSongRecord.Artist; + + if (string.IsNullOrEmpty(newArtistName) || oldArtistName.Equals(newArtistName)) + { + _logger.Info("No change to the song's Artist"); + return oldArtistRecord; + } + + _logger.Info("Change to the song's record found"); + + if (oldArtistRecord.SongCount <= 1) + { + _logger.Info("Deleting artist record that no longer has any songs"); + + artistStore.DeleteArtist(oldArtistRecord); + } + + if (!artistStore.DoesArtistExist(newSongRecord)) + { + _logger.Info("Creating new artist record"); + + var newArtistRecord = new Artist + { + Name = newArtistName + }; + + artistStore.SaveArtist(newArtistRecord); + + return artistStore.GetArtist(newSongRecord, true); + } + else + { + _logger.Info("Updating existing artist record"); + + var existingArtistRecord = artistStore.GetArtist(newSongRecord); + + artistStore.UpdateArtist(existingArtistRecord); + + return existingArtistRecord; + } + } + private Genre UpdateGenreInDatabase(Song oldSongRecord, Song newSongRecord, GenreRepository genreStore) + { + var oldGenreRecord = genreStore.GetGenre(oldSongRecord, true); + var oldGenreName = oldGenreRecord.GenreName; + var newGenreName = newSongRecord.Genre; + + if (string.IsNullOrEmpty(newGenreName) || oldGenreName.Equals(newGenreName)) + { + _logger.Info("No change to the song's Genre"); + return oldGenreRecord; + } + + _logger.Info("Change to the song's genre found"); + + if (oldGenreRecord.SongCount <= 1) + { + _logger.Info("Deleting genre record"); + + genreStore.DeleteGenre(oldGenreRecord); + } + + if (!genreStore.DoesGenreExist(newSongRecord)) + { + _logger.Info("Creating new genre record"); + + var newGenreRecord = new Genre + { + GenreName = newGenreName + }; + + genreStore.SaveGenre(newGenreRecord); + + return genreStore.GetGenre(newSongRecord, true); + } + else + { + _logger.Info("Updating existing genre record"); + + var existingGenreRecord = genreStore.GetGenre(newSongRecord); + + genreStore.UpdateGenre(existingGenreRecord); + return genreStore.GetGenre(existingGenreRecord); + } + } + private Year UpdateYearInDatabase(Song oldSongRecord, Song newSongRecord, YearRepository yearStore) + { + var oldYearRecord = yearStore.GetSongYear(oldSongRecord, true); + var oldYearValue = oldYearRecord.YearValue; + var newYearValue = newSongRecord.Year; + + if (oldYearValue == newYearValue || newYearValue == 0 || newYearValue == null) + { + _logger.Info("No change to the song's Year"); + return oldYearRecord; + } + + _logger.Info("Change to the song's year found"); + + if (oldYearRecord.SongCount <= 1) + { + _logger.Info("Deleting year record"); + + yearStore.DeleteYear(oldYearRecord); + } + + if(!yearStore.DoesYearExist(newSongRecord)) + { + _logger.Info("Creating new year record"); + + var newYearRecord = new Year + { + YearValue = newYearValue.Value + }; + + yearStore.SaveYear(newYearRecord); + + return yearStore.GetSongYear(newSongRecord, true); + } + else + { + _logger.Info("Updating existing year record"); + + var existingYearRecord = yearStore.GetSongYear(newSongRecord); + + yearStore.UpdateYear(existingYearRecord); + + return existingYearRecord; + } + } + private void UpdateSongInDatabase(ref Song oldSongRecord, ref Song newSongRecord, SongRepository songStore, + ref SongResult result) + { + var updatedSongRecord = new Song + { + Id = oldSongRecord.Id, + Title = oldSongRecord.Title, + Artist = oldSongRecord.Artist, + AlbumTitle = oldSongRecord.AlbumTitle, + Genre = oldSongRecord.Genre, + Year = oldSongRecord.Year, + Filename = oldSongRecord.Filename, + SongPath = oldSongRecord.SongPath, + ArtistId = oldSongRecord.ArtistId, + AlbumId = oldSongRecord.AlbumId, + GenreId = oldSongRecord.GenreId, + YearId = oldSongRecord.YearId + + }; + var artistOrAlbumChanged = false; + + if (!SongRecordChanged(oldSongRecord, newSongRecord)) + { + _logger.Info("No change to the song record"); + return; + } + + _logger.Info("Changes to song record found"); + + if (!string.IsNullOrEmpty(newSongRecord.Title)) + updatedSongRecord.Title = newSongRecord.Title; + if (!string.IsNullOrEmpty(newSongRecord.AlbumTitle)) + { + updatedSongRecord.AlbumTitle = newSongRecord.AlbumTitle; + artistOrAlbumChanged = true; + } + if (!string.IsNullOrEmpty(newSongRecord.Artist)) + { + updatedSongRecord.Artist = newSongRecord.Artist; + artistOrAlbumChanged = true; + } + if (!string.IsNullOrEmpty(newSongRecord.Genre)) + { + updatedSongRecord.Genre = newSongRecord.Genre; + Console.WriteLine("Genre changed"); + Console.WriteLine($"{updatedSongRecord.Genre} {newSongRecord.Genre}"); + } + if (newSongRecord.Year != null || newSongRecord.Year > 0) + updatedSongRecord.Year = newSongRecord.Year; + + _logger.Info("Applied changes to song record"); + + if (artistOrAlbumChanged) + { + _logger.Info("Change to song's album or artist"); + + DirectoryManager dirMgr = new DirectoryManager(_config); + var oldSongPath = updatedSongRecord.SongPath; + var newSongPath = dirMgr.GenerateSongPath(updatedSongRecord); + var filename = updatedSongRecord.Filename; + + Console.WriteLine($"Old song path {oldSongPath}"); + Console.WriteLine($"New song path {newSongPath}"); + + _logger.Info("Copying song to the new path"); + + System.IO.File.Copy(oldSongPath, newSongPath + filename, true); + + _logger.Info("Checking to see if song successfully copied"); + + if (!System.IO.File.Exists(newSongPath + filename)) + { + _logger.Info("Song did not successfully copy"); + + Console.WriteLine("New path does not exist when it should"); + } + + updatedSongRecord.SongPath = newSongPath + filename; + + _logger.Info("Deleting old song path"); + + System.IO.File.Delete(oldSongPath); + + if (System.IO.File.Exists(oldSongPath)) + Console.WriteLine("Old path exists when it should not"); + } + + _logger.Info("Saving song metadata to the database"); + + if (songStore.DoesSongExist(newSongRecord)) + songStore.UpdateSong(updatedSongRecord); + else + songStore.SaveSong(updatedSongRecord); + + newSongRecord = updatedSongRecord; + + result.Message = "Successfully updated song"; + result.SongTitle = updatedSongRecord.Title; + } + + private void DeleteSongFromDatabase(Song song, SongRepository songStore, AlbumRepository albumStore, + ArtistRepository artistStore, GenreRepository genreStore, YearRepository yearStore) + { + _logger.Info("Starting process to delete records related to the song from the database"); + + DeleteAlbumFromDatabase(song, albumStore); + DeleteArtistFromDatabase(song, artistStore); + DeleteGenreFromDatabase(song, genreStore); + DeleteYearFromDatabase(song, yearStore); + + songStore.DeleteSong(song); + } + private void DeleteAlbumFromDatabase(Song song, AlbumRepository albumStore) + { + if (!albumStore.DoesAlbumExist(song)) + { + _logger.Info("Cannot delete the album record because it does not exist"); + return; + } + + var album = albumStore.GetAlbum(song, true); + + if (album.SongCount <= 1) + albumStore.DeleteAlbum(album); + } + private void DeleteArtistFromDatabase(Song song, ArtistRepository artistStore) + { + if (!artistStore.DoesArtistExist(song)) + { + _logger.Info("Cannot delete the artist record because it does not exist"); + return; + } + + var artist = artistStore.GetArtist(song, true); + + if (artist.SongCount <= 1) + artistStore.DeleteArtist(artist); + } + private void DeleteGenreFromDatabase(Song song, GenreRepository genreStore) + { + if (!genreStore.DoesGenreExist(song)) + { + _logger.Info("Cannot delete the genre record because it does not exist"); + return; + } + + var genre = genreStore.GetGenre(song, true); + + if (genre.SongCount <= 1) + genreStore.DeleteGenre(genre); + } + private void DeleteYearFromDatabase(Song song, YearRepository yearStore) + { + if (!yearStore.DoesYearExist(song)) + { + _logger.Info("Cannot delete the year record because it does not exist"); + return; + } + + var year = yearStore.GetSongYear(song, true); + + if (year.SongCount <= 1) + yearStore.DeleteYear(year); + } + + private async Task PopulateSongDetails() + { + foreach (DataRow row in _results.Rows) + { + Song song = new Song(); + foreach (DataColumn col in _results.Columns) + { + string colStr = col.ToString().ToUpper(); + switch (colStr) + { + case "ID": + song.Id = Int32.Parse(row[col].ToString()); + break; + case "TITLE": + song.Title = row[col].ToString(); + break; + case "ALBUM": + song.AlbumTitle = row[col].ToString(); + break; + case "ARTIST": + song.Artist = row[col].ToString(); + break; + case "YEAR": + song.Year = Int32.Parse(row[col].ToString()); + break; + case "GENRE": + song.Genre = row[col].ToString(); + break; + case "DURATION": + song.Duration = Int32.Parse(row[col].ToString()); + break; + case "FILENAME": + song.Filename = row[col].ToString(); + break; + case "SONGPATH": + song.SongPath = row[col].ToString(); + break; + } + } + _songs.Add(song); + } + } + #endregion + } } diff --git a/Controllers/Managers/TokenManager.cs b/Controllers/Managers/TokenManager.cs index 46f8b40..1f48d3b 100644 --- a/Controllers/Managers/TokenManager.cs +++ b/Controllers/Managers/TokenManager.cs @@ -10,132 +10,125 @@ using Icarus.Models; namespace Icarus.Controllers.Managers { - public class TokenManager : BaseManager - { - #region Fields - private IConfiguration _config; - private string _clientId; - private string _clientSecret; - private string _audience; - private string _grantType; - private string _url; - #endregion + public class TokenManager : BaseManager + { + #region Fields + private IConfiguration _config; + private string _clientId; + private string _clientSecret; + private string _audience; + private string _grantType; + private string _url; + #endregion - #region Properties - #endregion + #region Properties + #endregion - #region Constructors - public TokenManager(IConfiguration config) - { - _config = config; - InitializeValues(); - } - #endregion + #region Constructors + public TokenManager(IConfiguration config) + { + _config = config; + InitializeValues(); + } + #endregion - #region Methods - public LoginResult RetrieveLoginResult(User user) - { - _logger.Info("Preparing Auth0 API request"); + #region Methods + public LoginResult RetrieveLoginResult(User user) + { + _logger.Info("Preparing Auth0 API request"); - var client = new RestClient(_url); - var request = new RestRequest("oauth/token", Method.POST); - var tokenRequest = RetrieveTokenRequest(); + var client = new RestClient(_url); + var request = new RestRequest("oauth/token", Method.POST); + var tokenRequest = RetrieveTokenRequest(); - _logger.Info("Serializing token object into JSON"); - var tokenObject = JsonConvert.SerializeObject(tokenRequest); - Console.WriteLine(tokenObject); - request.AddParameter("application/json; charset=utf-8", - tokenObject, ParameterType.RequestBody); + _logger.Info("Serializing token object into JSON"); + var tokenObject = JsonConvert.SerializeObject(tokenRequest); - request.RequestFormat = DataFormat.Json; + request.AddParameter("application/json; charset=utf-8", + tokenObject, ParameterType.RequestBody); - _logger.Info("Sending request"); - IRestResponse response = client.Execute(request); - _logger.Info("Response received"); + request.RequestFormat = DataFormat.Json; + + _logger.Info("Sending request"); + IRestResponse response = client.Execute(request); + _logger.Info("Response received"); - _logger.Info("Deserializing response"); - var tokenResult = JsonConvert - .DeserializeObject(response.Content); - _logger.Info("Response deserialized"); - Console.WriteLine(response.Content); + _logger.Info("Deserializing response"); + var tokenResult = JsonConvert + .DeserializeObject(response.Content); + _logger.Info("Response deserialized"); - return new LoginResult - { - UserId = user.Id, - Username = user.Username, - Token = tokenResult.AccessToken, - TokenType = tokenResult.TokenType, - Expiration = tokenResult.Expiration, - Message = "Successfully retrieved token" - }; - } - - private TokenRequest RetrieveTokenRequest() - { - _logger.Info("Retrieving token object"); + return new LoginResult + { + UserId = user.Id, Username = user.Username, Token = tokenResult.AccessToken, + TokenType = tokenResult.TokenType, Expiration = tokenResult.Expiration, + Message = "Successfully retrieved token" + }; + } + + private TokenRequest RetrieveTokenRequest() + { + _logger.Info("Retrieving token object"); - return new TokenRequest - { - ClientId = _clientId, - ClientSecret = _clientSecret, - Audience = _audience, - GrantType = _grantType - }; - } + return new TokenRequest + { + ClientId = _clientId, ClientSecret = _clientSecret, + Audience = _audience, GrantType = _grantType + }; + } - private void InitializeValues() - { - _logger.Info("Analyzing Auth0 information"); + private void InitializeValues() + { + _logger.Info("Analyzing Auth0 information"); - _clientId = _config["Auth0:ClientId"]; - _clientSecret = _config["Auth0:ClientSecret"]; - _audience = _config["Auth0:ApiIdentifier"]; - _grantType = "client_credentials"; - _url = $"https://{_config["Auth0:Domain"]}"; + _clientId = _config["Auth0:ClientId"]; + _clientSecret = _config["Auth0:ClientSecret"]; + _audience = _config["Auth0:ApiIdentifier"]; + _grantType = "client_credentials"; + _url = $"https://{_config["Auth0:Domain"]}"; - PrintCredentials(); + PrintCredentials(); + } - } - - #region Testing Methods - // For testing purposes - private void PrintCredentials() - { - Console.WriteLine("Auth0 credentials:"); - Console.WriteLine($"Client Id: {_clientId}"); - Console.WriteLine($"Client Secret: {_clientSecret}"); - Console.WriteLine($"Audience: {_audience}"); - Console.WriteLine($"Url: {_url}"); - } - #endregion - #endregion + #region Testing Methods + // For testing purposes + private void PrintCredentials() + { + Console.WriteLine("Auth0 credentials:"); + Console.WriteLine($"Client Id: {_clientId}"); + Console.WriteLine($"Client Secret: {_clientSecret}"); + Console.WriteLine($"Audience: {_audience}"); + Console.WriteLine($"Url: {_url}"); + } + #endregion + #endregion - #region Classes - private class TokenRequest - { - [JsonProperty("client_id")] - public string ClientId { get; set; } - [JsonProperty("client_secret")] - public string ClientSecret { get; set; } - [JsonProperty("audience")] - public string Audience { get; set; } - [JsonProperty("grant_type")] - public string GrantType { get; set; } - } - private class Token - { - [JsonProperty("access_token")] - public string AccessToken { get; set; } - [JsonProperty("expires_in")] - public int Expiration { get; set; } - [JsonProperty("token_type")] - public string TokenType { get; set; } - } - #endregion - } + #region Classes + private class TokenRequest + { + [JsonProperty("client_id")] + public string ClientId { get; set; } + [JsonProperty("client_secret")] + public string ClientSecret { get; set; } + [JsonProperty("audience")] + public string Audience { get; set; } + [JsonProperty("grant_type")] + public string GrantType { get; set; } + } + private class Token + { + [JsonProperty("access_token")] + public string AccessToken { get; set; } + [JsonProperty("expires_in")] + public int Expiration { get; set; } + [JsonProperty("token_type")] + public string TokenType { get; set; } + } + #endregion + } } diff --git a/Controllers/Managers/YearManager.cs b/Controllers/Managers/YearManager.cs index e87ed92..7a77274 100644 --- a/Controllers/Managers/YearManager.cs +++ b/Controllers/Managers/YearManager.cs @@ -8,21 +8,21 @@ using Icarus.Database.Contexts; namespace Icarus.Controllers.Managers { - public class YearManager : BaseManager - { - #region Fields - #endregion + public class YearManager : BaseManager + { + #region Fields + #endregion - #region Properties - #endregion + #region Properties + #endregion - #region Constructors - #endregion + #region Constructors + #endregion - #region Methods - #endregion - } + #region Methods + #endregion + } } diff --git a/Controllers/Utilities/MetadataRetriever.cs b/Controllers/Utilities/MetadataRetriever.cs index 176521f..f3e484d 100644 --- a/Controllers/Utilities/MetadataRetriever.cs +++ b/Controllers/Utilities/MetadataRetriever.cs @@ -9,284 +9,278 @@ using Icarus.Models; namespace Icarus.Controllers.Utilities { - public class MetadataRetriever - { - #region Fields - private static NLog.Logger _logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger(); - private Song _updatedSong; - private string _message; - private string _title; - private string _artist; - private string _album; - private string _genre; - private int _year; - private int _duration; - #endregion + public class MetadataRetriever + { + #region Fields + private static NLog.Logger _logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger(); + private Song _updatedSong; + private string _message; + private string _title; + private string _artist; + private string _album; + private string _genre; + private int _year; + private int _duration; + #endregion - #region Properties - public Song UpdatedSongRecord - { - get => _updatedSong; - set => _updatedSong = value; - } - public string Message - { - get => _message; - set => _message = value; - } - #endregion + #region Properties + public Song UpdatedSongRecord + { + get => _updatedSong; + set => _updatedSong = value; + } + public string Message + { + get => _message; + set => _message = value; + } + #endregion - #region Constructors - #endregion + #region Constructors + #endregion - #region Methods - public static void PrintMetadata(Song song) - { - Console.WriteLine("\n\nMetadata of the song:"); - Console.WriteLine($"Id: {song.Id}"); - Console.WriteLine($"Title: {song.Title}"); - Console.WriteLine($"Artist: {song.Artist}"); - Console.WriteLine($"Album: {song.AlbumTitle}"); - Console.WriteLine($"Genre: {song.Genre}"); - Console.WriteLine($"Year: {song.Year}"); - Console.WriteLine($"Duration: {song.Duration}"); - Console.WriteLine($"AlbumId: {song.AlbumId}"); - Console.WriteLine($"ArtistId: {song.ArtistId}"); - Console.WriteLine($"GenreId: {song.GenreId}"); - Console.WriteLine($"YearId: {song.YearId}"); - Console.WriteLine($"Song Path: {song.SongPath}"); - Console.WriteLine($"Filename: {song.Filename}"); - Console.WriteLine("\n"); + #region Methods + public static void PrintMetadata(Song song) + { + Console.WriteLine("\n\nMetadata of the song:"); + Console.WriteLine($"Id: {song.Id}"); + Console.WriteLine($"Title: {song.Title}"); + Console.WriteLine($"Artist: {song.Artist}"); + Console.WriteLine($"Album: {song.AlbumTitle}"); + Console.WriteLine($"Genre: {song.Genre}"); + Console.WriteLine($"Year: {song.Year}"); + Console.WriteLine($"Duration: {song.Duration}"); + Console.WriteLine($"AlbumId: {song.AlbumId}"); + Console.WriteLine($"ArtistId: {song.ArtistId}"); + Console.WriteLine($"GenreId: {song.GenreId}"); + Console.WriteLine($"YearId: {song.YearId}"); + Console.WriteLine($"Song Path: {song.SongPath}"); + Console.WriteLine($"Filename: {song.Filename}"); + Console.WriteLine("\n"); - _logger.Info("Metadata of the song"); - _logger.Info($"Title: {song.Title}"); - _logger.Info($"Artist: {song.Artist}"); - _logger.Info($"Album: {song.AlbumTitle}"); - _logger.Info($"Genre: {song.Genre}"); - _logger.Info($"Year: {song.Year}"); - _logger.Info($"Duration: {song.Duration}"); - } - public Song RetrieveMetaData(string filePath) - { - Song song = new Song(); + _logger.Info("Metadata of the song"); + _logger.Info($"Title: {song.Title}"); + _logger.Info($"Artist: {song.Artist}"); + _logger.Info($"Album: {song.AlbumTitle}"); + _logger.Info($"Genre: {song.Genre}"); + _logger.Info($"Year: {song.Year}"); + _logger.Info($"Duration: {song.Duration}"); + } + public Song RetrieveMetaData(string filePath) + { + Song song = new Song(); - try - { - TagLib.File fileTag = TagLib.File.Create(filePath); - _title = fileTag.Tag.Title; - _artist = string.Join("", fileTag.Tag.Performers); - _album = fileTag.Tag.Album; - _genre = string.Join("", fileTag.Tag.Genres); - _year = (int)fileTag.Tag.Year; - _duration = (int)fileTag.Properties.Duration.TotalSeconds; + try + { + TagLib.File fileTag = TagLib.File.Create(filePath); + _title = fileTag.Tag.Title; + _artist = string.Join("", fileTag.Tag.Performers); + _album = fileTag.Tag.Album; + _genre = string.Join("", fileTag.Tag.Genres); + _year = (int)fileTag.Tag.Year; + _duration = (int)fileTag.Properties.Duration.TotalSeconds; - song.Title = _title; - song.Artist = _artist; - song.AlbumTitle = _album; - song.Genre = _genre; - song.Year = _year; - song.Duration = _duration; - } - catch (Exception ex) - { - var msg = ex.Message; - Console.WriteLine("An error occurred in MetadataRetriever"); - Console.WriteLine(msg); - _logger.Error(msg, "An error occurred in MetadataRetriever"); - } + song.Title = _title; + song.Artist = _artist; + song.AlbumTitle = _album; + song.Genre = _genre; + song.Year = _year; + song.Duration = _duration; + } + catch (Exception ex) + { + var msg = ex.Message; + Console.WriteLine("An error occurred in MetadataRetriever"); + Console.WriteLine(msg); + _logger.Error(msg, "An error occurred in MetadataRetriever"); + } - return song; - } + return song; + } - public void UpdateMetadata(Song song) - { - try - { - Console.WriteLine("Updating song metadata"); - _logger.Info("Updating song metadata"); - var filePath = song.SongPath; - TagLib.File fileTag = TagLib.File.Create(filePath); - fileTag.Tag.Title = song.Title; - fileTag.Tag.Genres = new []{song.Genre}; - fileTag.Save(); - Console.WriteLine("Song metadata updated"); - _logger.Info("Song metadata updated"); + public void UpdateMetadata(Song song) + { + try + { + Console.WriteLine("Updating song metadata"); + _logger.Info("Updating song metadata"); + var filePath = song.SongPath; + TagLib.File fileTag = TagLib.File.Create(filePath); + fileTag.Tag.Title = song.Title; + fileTag.Tag.Genres = new []{song.Genre}; + fileTag.Save(); + Console.WriteLine("Song metadata updated"); + _logger.Info("Song metadata updated"); - } - catch (Exception ex) - { - var msg = ex.Message; - Console.WriteLine($"An error occurred: \n{msg}"); - _logger.Error(msg, "An error occurred"); - } - } - public void UpdateMetadata(Song updatedSong, Song oldSong) - { - try - { - InitializeUpdatedSong(oldSong); - var songValues = CheckSongValues(updatedSong); - PerformUpdate(updatedSong, songValues); - Message = "Successfully updated metadata"; - } - catch (Exception ex) - { - var msg = ex.Message; - Console.WriteLine($"An error occurred: {msg}"); - _logger.Error(msg, "An error occurred"); - Message = "Failed to update metadata"; - } - } + } + catch (Exception ex) + { + var msg = ex.Message; + Console.WriteLine($"An error occurred: \n{msg}"); + _logger.Error(msg, "An error occurred"); + } + } + public void UpdateMetadata(Song updatedSong, Song oldSong) + { + try + { + InitializeUpdatedSong(oldSong); + var songValues = CheckSongValues(updatedSong); + PerformUpdate(updatedSong, songValues); + Message = "Successfully updated metadata"; + } + catch (Exception ex) + { + var msg = ex.Message; + Console.WriteLine($"An error occurred: {msg}"); + _logger.Error(msg, "An error occurred"); + Message = "Failed to update metadata"; + } + } - private void PerformUpdate(Song updatedSong, SortedDictionary checkedValues) - { - var filePath = updatedSong.SongPath; - var title = updatedSong.Title; - var artist = updatedSong.Artist; - var album = updatedSong.AlbumTitle; - var genre = updatedSong.Genre; - var year = updatedSong.Year; - TagLib.File fileTag = TagLib.File.Create(filePath); - try - { - Console.WriteLine($"Updating metadata of {title}"); - _logger.Info($"Updating metadata of {title}"); + private void PerformUpdate(Song updatedSong, SortedDictionary checkedValues) + { + var filePath = updatedSong.SongPath; + var title = updatedSong.Title; + var artist = updatedSong.Artist; + var album = updatedSong.AlbumTitle; + var genre = updatedSong.Genre; + var year = updatedSong.Year; + TagLib.File fileTag = TagLib.File.Create(filePath); + try + { + Console.WriteLine($"Updating metadata of {title}"); + _logger.Info($"Updating metadata of {title}"); - foreach (var key in checkedValues.Keys) - { - bool result = checkedValues[key]; + foreach (var key in checkedValues.Keys) + { + bool result = checkedValues[key]; - if (!result) - { - switch (key.ToLower()) - { - case "title": - _updatedSong.Title = title; - fileTag.Tag.Title = title; - break; - case "artists": - _updatedSong.Artist = artist; - fileTag.Tag.Performers = new []{artist}; - break; - case "album": - _updatedSong.AlbumTitle = album; - fileTag.Tag.Album = album; - break; - case "genre": - _updatedSong.Genre = genre; - fileTag.Tag.Genres = new []{genre}; - break; - case "year": - _updatedSong.Year = year; - fileTag.Tag.Year = (uint)year; - break; - } - } - } + if (!result) + switch (key.ToLower()) + { + case "title": + _updatedSong.Title = title; + fileTag.Tag.Title = title; + break; + case "artists": + _updatedSong.Artist = artist; + fileTag.Tag.Performers = new []{artist}; + break; + case "album": + _updatedSong.AlbumTitle = album; + fileTag.Tag.Album = album; + break; + case "genre": + _updatedSong.Genre = genre; + fileTag.Tag.Genres = new []{genre}; + break; + case "year": + _updatedSong.Year = year; + fileTag.Tag.Year = (uint)year; + break; + } + } - fileTag.Save(); + fileTag.Save(); - Console.WriteLine("Successfully updated metadata"); - _logger.Info("Successfully updated metadata"); - } - catch (Exception ex) - { - var msg = ex.Message; - Console.WriteLine($"An error occurred:\n{msg}"); - _logger.Error(msg, "An error occurred"); - } - } - private void InitializeUpdatedSong(Song song) - { - _updatedSong = new Song - { - Id = song.Id, - Title = song.Title, - AlbumTitle = song.AlbumTitle, - Artist = song.Artist, - Genre = song.Genre, - Year = song.Year, - Duration = song.Duration, - Filename = song.Filename, - SongPath = song.SongPath - }; - } - private void PrintMetadata() - { - Console.WriteLine("\n\nMetadata of the song:"); - Console.WriteLine($"Title: {_title}"); - Console.WriteLine($"Artist: {_artist}"); - Console.WriteLine($"Album: {_album}"); - Console.WriteLine($"Genre: {_genre}"); - Console.WriteLine($"Year: {_year}"); - Console.WriteLine($"Duration: {_duration}\n\n"); + Console.WriteLine("Successfully updated metadata"); + _logger.Info("Successfully updated metadata"); + } + catch (Exception ex) + { + var msg = ex.Message; + Console.WriteLine($"An error occurred:\n{msg}"); + _logger.Error(msg, "An error occurred"); + } + } + private void InitializeUpdatedSong(Song song) + { + _updatedSong = new Song + { + Id = song.Id, + Title = song.Title, + AlbumTitle = song.AlbumTitle, + Artist = song.Artist, + Genre = song.Genre, + Year = song.Year, + Duration = song.Duration, + Filename = song.Filename, + SongPath = song.SongPath + }; + } + private void PrintMetadata() + { + Console.WriteLine("\n\nMetadata of the song:"); + Console.WriteLine($"Title: {_title}"); + Console.WriteLine($"Artist: {_artist}"); + Console.WriteLine($"Album: {_album}"); + Console.WriteLine($"Genre: {_genre}"); + Console.WriteLine($"Year: {_year}"); + Console.WriteLine($"Duration: {_duration}\n\n"); - _logger.Info("Metadata of the song"); - _logger.Info($"Title: {_title}"); - _logger.Info($"Artist: {_artist}"); - _logger.Info($"Album: {_album}"); - _logger.Info($"Genre: {_genre}"); - _logger.Info($"Year: {_year}"); - _logger.Info($"Duration: {_duration}"); - } - private void PrintMetadata(Song song, string message) - { - Console.WriteLine($"\n\n{message}"); - Console.WriteLine($"Title: {song.Title}"); - Console.WriteLine($"Artist: {song.Artist}"); - Console.WriteLine($"Album: {song.Album}"); - Console.WriteLine($"Genre: {song.Genre}"); - Console.WriteLine($"Year: {song.Year}"); - Console.WriteLine($"Duration: {song.Duration}\n\n"); + _logger.Info("Metadata of the song"); + _logger.Info($"Title: {_title}"); + _logger.Info($"Artist: {_artist}"); + _logger.Info($"Album: {_album}"); + _logger.Info($"Genre: {_genre}"); + _logger.Info($"Year: {_year}"); + _logger.Info($"Duration: {_duration}"); + } + private void PrintMetadata(Song song, string message) + { + Console.WriteLine($"\n\n{message}"); + Console.WriteLine($"Title: {song.Title}"); + Console.WriteLine($"Artist: {song.Artist}"); + Console.WriteLine($"Album: {song.Album}"); + Console.WriteLine($"Genre: {song.Genre}"); + Console.WriteLine($"Year: {song.Year}"); + Console.WriteLine($"Duration: {song.Duration}\n\n"); - _logger.Info(message); - _logger.Info($"Title: {_title}"); - _logger.Info($"Artist: {_artist}"); - _logger.Info($"Album: {_album}"); - _logger.Info($"Genre: {_genre}"); - _logger.Info($"Year: {_year}"); - _logger.Info($"Duration: {_duration}"); - } + _logger.Info(message); + _logger.Info($"Title: {_title}"); + _logger.Info($"Artist: {_artist}"); + _logger.Info($"Album: {_album}"); + _logger.Info($"Genre: {_genre}"); + _logger.Info($"Year: {_year}"); + _logger.Info($"Duration: {_duration}"); + } - private SortedDictionary CheckSongValues(Song song) - { - var songValues = new SortedDictionary(); - Console.WriteLine("Checking for null data"); - _logger.Info("Checking for null data"); - try - { - songValues["Title"] = String.IsNullOrEmpty(song.Title); - songValues["Artists"] = String.IsNullOrEmpty(song.Artist); - songValues["Album"] = String.IsNullOrEmpty(song.AlbumTitle); - songValues["Genre"] = String.IsNullOrEmpty(song.Genre); - if (song.Year == null) - { - songValues["Year"] = true; - } - else if (song.Year==0) - { - songValues["Year"] = true; - } - else - { - songValues["Year"] = false; - } - Console.WriteLine("Checking for null data completed"); - _logger.Info("Checking for null data completed"); - } - catch (Exception ex) - { - var msg = ex.Message; - Console.WriteLine($"An error occurred: \n{msg}"); - _logger.Error(msg, "An error occurred"); - } + private SortedDictionary CheckSongValues(Song song) + { + var songValues = new SortedDictionary(); + Console.WriteLine("Checking for null data"); + _logger.Info("Checking for null data"); + try + { + songValues["Title"] = String.IsNullOrEmpty(song.Title); + songValues["Artists"] = String.IsNullOrEmpty(song.Artist); + songValues["Album"] = String.IsNullOrEmpty(song.AlbumTitle); + songValues["Genre"] = String.IsNullOrEmpty(song.Genre); - return songValues; - } - #endregion - } + if (song.Year == null) + songValues["Year"] = true; + else if (song.Year==0) + songValues["Year"] = true; + else + songValues["Year"] = false; + + Console.WriteLine("Checking for null data completed"); + _logger.Info("Checking for null data completed"); + } + catch (Exception ex) + { + var msg = ex.Message; + Console.WriteLine($"An error occurred: \n{msg}"); + _logger.Error(msg, "An error occurred"); + } + + return songValues; + } + #endregion + } } diff --git a/Controllers/Utilities/PasswordEncryption.cs b/Controllers/Utilities/PasswordEncryption.cs index 0551250..53825e8 100644 --- a/Controllers/Utilities/PasswordEncryption.cs +++ b/Controllers/Utilities/PasswordEncryption.cs @@ -9,85 +9,82 @@ using Icarus.Models; namespace Icarus.Controllers.Utilities { - public class PasswordEncryption - { - #region Fields - private static Logger _logger = NLog.LogManager.GetCurrentClassLogger(); - #endregion + public class PasswordEncryption + { + #region Fields + private static Logger _logger = NLog.LogManager.GetCurrentClassLogger(); + #endregion - #region Properties - #endregion + #region Properties + #endregion - #region Constructor - #endregion + #region Constructor + #endregion - #region Methods - public bool VerifyPassword(User user, string password) - { - try - { - var result = BCrypt.Net.BCrypt.Verify(password, user.Password); + #region Methods + public bool VerifyPassword(User user, string password) + { + try + { + var result = BCrypt.Net.BCrypt.Verify(password, user.Password); - return result; - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } + return result; + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } - return false; - } + return false; + } - public string HashPassword(User user) - { - try - { - string hashedPassword = string.Empty; - hashedPassword = BCrypt.Net.BCrypt.HashPassword(user.Password); + public string HashPassword(User user) + { + try + { + string hashedPassword = string.Empty; + hashedPassword = BCrypt.Net.BCrypt.HashPassword(user.Password); - _logger.Info("Successfully hashed password"); + _logger.Info("Successfully hashed password"); - return hashedPassword; + return hashedPassword; - } - catch (Exception ex) - { - var exMsg = ex.Message; - _logger.Error(exMsg, "An error occurred"); - } + } + catch (Exception ex) + { + var exMsg = ex.Message; + _logger.Error(exMsg, "An error occurred"); + } - return null; - } + return null; + } - string GenerateHash(string password, byte[] salt) - { + string GenerateHash(string password, byte[] salt) + { - string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2( - password: password, - salt: salt, - prf: KeyDerivationPrf.HMACSHA1, - iterationCount: 10000, - numBytesRequested: 256/8)); + string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2( + password: password, salt: salt, + prf: KeyDerivationPrf.HMACSHA1, + iterationCount: 10000, + numBytesRequested: 256/8)); - return hashed; - } + return hashed; + } - byte[] GenerateSalt() - { - byte[] salt = new byte[128/8]; + byte[] GenerateSalt() + { + byte[] salt = new byte[128/8]; - using (var rng = RandomNumberGenerator.Create()) - { - rng.GetBytes(salt); - } + using (var rng = RandomNumberGenerator.Create()) + rng.GetBytes(salt); - return salt; - } - #endregion - } + return salt; + } + #endregion + } } diff --git a/Controllers/v1/AlbumController.cs b/Controllers/v1/AlbumController.cs index abbecaf..0c518cb 100644 --- a/Controllers/v1/AlbumController.cs +++ b/Controllers/v1/AlbumController.cs @@ -12,74 +12,66 @@ using Icarus.Database.Repositories; namespace Icarus.Controllers.V1 { - [Route("api/v1/album")] - [ApiController] - public class AlbumController : ControllerBase - { - #region Fields - private readonly ILogger _logger; - #endregion + [Route("api/v1/album")] + [ApiController] + public class AlbumController : ControllerBase + { + #region Fields + private readonly ILogger _logger; + #endregion - #region Properties - #endregion + #region Properties + #endregion - #region Constructors - public AlbumController(ILogger logger) - { - _logger = logger; - } - #endregion + #region Constructors + public AlbumController(ILogger logger) + { + _logger = logger; + } + #endregion - #region HTTP Routes - [HttpGet] - [Authorize("read:albums")] - public IActionResult Get() - { - List albums = new List(); + #region HTTP Routes + [HttpGet] + [Authorize("read:albums")] + public IActionResult Get() + { + List albums = new List(); - AlbumRepository albumStoreContext = HttpContext - .RequestServices - .GetService(typeof(AlbumRepository)) as AlbumRepository; + AlbumRepository albumStoreContext = HttpContext.RequestServices + .GetService(typeof(AlbumRepository)) as AlbumRepository; - albums = albumStoreContext.GetAlbums(); + albums = albumStoreContext.GetAlbums(); - if (albums.Count > 0) - { - return Ok(albums); - } - else - { - return NotFound(); - } - } + if (albums.Count > 0) + return Ok(albums); + else + return NotFound(); + } - [HttpGet("{id}")] - [Authorize("read:albums")] - public IActionResult Get(int id) - { - Album album = new Album - { - AlbumId = id - }; + [HttpGet("{id}")] + [Authorize("read:albums")] + public IActionResult Get(int id) + { + Album album = new Album + { + AlbumId = id + }; - AlbumRepository albumStoreContext = HttpContext - .RequestServices - .GetService(typeof(AlbumRepository)) as AlbumRepository; + AlbumRepository albumStoreContext = HttpContext.RequestServices + .GetService(typeof(AlbumRepository)) as AlbumRepository; - if (albumStoreContext.DoesAlbumExist(album)) - { - album = albumStoreContext.GetAlbum(album); + if (albumStoreContext.DoesAlbumExist(album)) + { + album = albumStoreContext.GetAlbum(album); - return Ok(album); - } - else - { - return NotFound(); - } - } - #endregion - } + return Ok(album); + } + else + return NotFound(); + } + #endregion + } } diff --git a/Controllers/v1/ArtistController.cs b/Controllers/v1/ArtistController.cs index fc2f52d..19d21ba 100644 --- a/Controllers/v1/ArtistController.cs +++ b/Controllers/v1/ArtistController.cs @@ -13,73 +13,64 @@ using Icarus.Database.Repositories; namespace Icarus.Controllers.V1 { - [Route("api/v1/artist")] - [ApiController] - public class ArtistController : ControllerBase - { - #region Fields - private readonly ILogger _logger; - #endregion + [Route("api/v1/artist")] + [ApiController] + public class ArtistController : ControllerBase + { + #region Fields + private readonly ILogger _logger; + #endregion - #region Properties - #endregion + #region Properties + #endregion - #region Constructors - public ArtistController(ILogger logger) - { - _logger = logger; - } - #endregion + #region Constructors + public ArtistController(ILogger logger) + { + _logger = logger; + } + #endregion - #region HTTP Routes - [HttpGet] - [Authorize("read:artists")] - public IActionResult Get() - { - ArtistRepository artistStoreContext = HttpContext - .RequestServices - .GetService(typeof(ArtistRepository)) as ArtistRepository; + #region HTTP Routes + [HttpGet] + [Authorize("read:artists")] + public IActionResult Get() + { + ArtistRepository artistStoreContext = HttpContext.RequestServices + .GetService(typeof(ArtistRepository)) as ArtistRepository; - var artists = artistStoreContext.GetArtists(); + var artists = artistStoreContext.GetArtists(); - if (artists.Count > 0) - { - return Ok(artists); - } - else - { - return NotFound(); - } - } + if (artists.Count > 0) + return Ok(artists); + else + return NotFound(); + } - [HttpGet("{id}")] - [Authorize("read:artists")] - public IActionResult Get(int id) - { - Artist artist = new Artist - { - ArtistId = id - }; - - ArtistRepository artistStoreContext = HttpContext - .RequestServices - .GetService(typeof(ArtistRepository)) as ArtistRepository; + [HttpGet("{id}")] + [Authorize("read:artists")] + public IActionResult Get(int id) + { + Artist artist = new Artist + { + ArtistId = id + }; + + ArtistRepository artistStoreContext = HttpContext.RequestServices + .GetService(typeof(ArtistRepository)) as ArtistRepository; - if (artistStoreContext.DoesArtistExist(artist)) - { - artist = artistStoreContext.GetArtist(artist); + if (artistStoreContext.DoesArtistExist(artist)) + { + artist = artistStoreContext.GetArtist(artist); - - return Ok(artist); - } - else - { - return NotFound(); - } - } - #endregion - } + return Ok(artist); + } + else + return NotFound(); + } + #endregion + } } diff --git a/Controllers/v1/GenreController.cs b/Controllers/v1/GenreController.cs index dd335d0..fe50694 100644 --- a/Controllers/v1/GenreController.cs +++ b/Controllers/v1/GenreController.cs @@ -11,74 +11,66 @@ using Icarus.Database.Repositories; namespace Icarus.Controllers.V1 { - [Route("api/v1/genre")] - [ApiController] - public class GenreController : ControllerBase - { - #region Fields - private readonly ILogger _logger; - #endregion + [Route("api/v1/genre")] + [ApiController] + public class GenreController : ControllerBase + { + #region Fields + private readonly ILogger _logger; + #endregion - #region Properties - #endregion + #region Properties + #endregion - #region Constructors - public GenreController(ILogger logger) - { - _logger = logger; - } - #endregion + #region Constructors + public GenreController(ILogger logger) + { + _logger = logger; + } + #endregion - #region HTTP Routes - [HttpGet] - [Authorize("read:genre")] - public IActionResult Get() - { - var genres = new List(); + #region HTTP Routes + [HttpGet] + [Authorize("read:genre")] + public IActionResult Get() + { + var genres = new List(); - var genreStore = HttpContext - .RequestServices - .GetService(typeof(GenreRepository)) as GenreRepository; + var genreStore = HttpContext.RequestServices + .GetService(typeof(GenreRepository)) as GenreRepository; - genres = genreStore.GetGenres(); + genres = genreStore.GetGenres(); - if (genres.Count > 0) - { - return Ok(genres); - } - else - { - return NotFound(new List()); - } - } + if (genres.Count > 0) + return Ok(genres); + else + return NotFound(new List()); + } - [HttpGet("{id}")] - [Authorize("read:genre")] - public IActionResult Get(int id) - { - var genre = new Genre - { - GenreId = id - }; + [HttpGet("{id}")] + [Authorize("read:genre")] + public IActionResult Get(int id) + { + var genre = new Genre + { + GenreId = id + }; - var genreStore = HttpContext - .RequestServices - .GetService(typeof(GenreRepository)) as GenreRepository; + var genreStore = HttpContext.RequestServices + .GetService(typeof(GenreRepository)) as GenreRepository; - if (genreStore.DoesGenreExist(genre)) - { - genre = genreStore.GetGenre(genre); + if (genreStore.DoesGenreExist(genre)) + { + genre = genreStore.GetGenre(genre); - return Ok(genre); - } - else - { - return NotFound(new Genre()); - } - } - #endregion - } + return Ok(genre); + } + else + return NotFound(new Genre()); + } + #endregion + } } diff --git a/Controllers/v1/LoginController.cs b/Controllers/v1/LoginController.cs index 7e31153..4fd898c 100644 --- a/Controllers/v1/LoginController.cs +++ b/Controllers/v1/LoginController.cs @@ -15,75 +15,74 @@ using Icarus.Database.Repositories; namespace Icarus.Controllers.V1 { - [Route("api/v1/login")] - [ApiController] - public class LoginController : ControllerBase - { - #region Fields - private IConfiguration _config; - private ILogger _logger; - #endregion + [Route("api/v1/login")] + [ApiController] + public class LoginController : ControllerBase + { + #region Fields + private IConfiguration _config; + private ILogger _logger; + #endregion - #region Properties - #endregion + #region Properties + #endregion - #region Contructors - public LoginController(IConfiguration config, ILogger logger) - { - _config = config; - _logger = logger; - } - #endregion + #region Contructors + public LoginController(IConfiguration config, ILogger logger) + { + _config = config; + _logger = logger; + } + #endregion - #region HTTP endpoints - public IActionResult Post([FromBody] User user) - { - UserRepository context = HttpContext - .RequestServices - .GetService(typeof(UserRepository)) as UserRepository; + #region HTTP endpoints + public IActionResult Post([FromBody] User user) + { + UserRepository context = HttpContext.RequestServices + .GetService(typeof(UserRepository)) as UserRepository; - _logger.LogInformation("Starting process of validating credentials"); - - var message = "Invalid credentials"; - var password = user.Password; + _logger.LogInformation("Starting process of validating credentials"); + + var message = "Invalid credentials"; + var password = user.Password; - var loginRes = new LoginResult - { - Username = user.Username - }; + var loginRes = new LoginResult + { + Username = user.Username + }; - if (context.DoesUserExist(user)) - { - user = context.RetrieveUser(user); + if (context.DoesUserExist(user)) + { + user = context.RetrieveUser(user); - var validatePass = new PasswordEncryption(); - var validated = validatePass.VerifyPassword(user, password); - if (!validated) - { - loginRes.Message = message; - _logger.LogInformation(message); + var validatePass = new PasswordEncryption(); + var validated = validatePass.VerifyPassword(user, password); + if (!validated) + { + loginRes.Message = message; + _logger.LogInformation(message); - return Ok(loginRes); - } + return Ok(loginRes); + } - _logger.LogInformation("Successfully validated user credentials"); + _logger.LogInformation("Successfully validated user credentials"); - TokenManager tk = new TokenManager(_config); + TokenManager tk = new TokenManager(_config); - loginRes = tk.RetrieveLoginResult(user); + loginRes = tk.RetrieveLoginResult(user); - return Ok(loginRes); - } - else - { - loginRes.Message = message; + return Ok(loginRes); + } + else + { + loginRes.Message = message; - return NotFound(loginRes); - } - } - #endregion - } + return NotFound(loginRes); + } + } + #endregion + } } diff --git a/Controllers/v1/RegisterController.cs b/Controllers/v1/RegisterController.cs index fa32738..7fad923 100644 --- a/Controllers/v1/RegisterController.cs +++ b/Controllers/v1/RegisterController.cs @@ -14,58 +14,57 @@ using Icarus.Database.Repositories; namespace Icarus.Controllers.V1 { - [Route("api/v1/register")] - [ApiController] - public class RegisterController : ControllerBase - { - #region Fields - private IConfiguration _config; - #endregion + [Route("api/v1/register")] + [ApiController] + public class RegisterController : ControllerBase + { + #region Fields + private IConfiguration _config; + #endregion - #region Properties - #endregion + #region Properties + #endregion - #region Constructor - public RegisterController(IConfiguration config) - { - _config = config; - } - #endregion + #region Constructor + public RegisterController(IConfiguration config) + { + _config = config; + } + #endregion - [HttpPost] - public IActionResult Post([FromBody] User user) - { - PasswordEncryption pe = new PasswordEncryption(); - user.Password = pe.HashPassword(user); - user.EmailVerified = false; + [HttpPost] + public IActionResult Post([FromBody] User user) + { + PasswordEncryption pe = new PasswordEncryption(); + user.Password = pe.HashPassword(user); + user.EmailVerified = false; - UserRepository context = HttpContext - .RequestServices - .GetService(typeof(UserRepository)) as UserRepository; + UserRepository context = HttpContext.RequestServices + .GetService(typeof(UserRepository)) as UserRepository; - context.SaveUser(user); + context.SaveUser(user); - var registerResult = new RegisterResult - { - Username = user.Username - }; + var registerResult = new RegisterResult + { + Username = user.Username + }; - if (context.DoesUserExist(user)) - { - registerResult.Message = "Successful registration"; - registerResult.SuccessfullyRegistered = true; + if (context.DoesUserExist(user)) + { + registerResult.Message = "Successful registration"; + registerResult.SuccessfullyRegistered = true; - return Ok(registerResult); - } - else - { - registerResult.Message = "Registration failed"; - registerResult.SuccessfullyRegistered = false; + return Ok(registerResult); + } + else + { + registerResult.Message = "Registration failed"; + registerResult.SuccessfullyRegistered = false; - return Ok(registerResult); - } - } - } + return Ok(registerResult); + } + } + } } diff --git a/Controllers/v1/SongCompressedDataControllers.cs b/Controllers/v1/SongCompressedDataControllers.cs index 47e9e13..e2a3324 100644 --- a/Controllers/v1/SongCompressedDataControllers.cs +++ b/Controllers/v1/SongCompressedDataControllers.cs @@ -17,49 +17,48 @@ using Icarus.Database.Repositories; namespace Icarus.Controllers.V1 { - [Route("api/v1/song/compressed/data")] - [ApiController] - public class SongCompressedDataController : ControllerBase - { - #region Fields - private IConfiguration _config; - private string _songTempDir; - private string _archiveDir; - #endregion + [Route("api/v1/song/compressed/data")] + [ApiController] + public class SongCompressedDataController : ControllerBase + { + #region Fields + private IConfiguration _config; + private string _songTempDir; + private string _archiveDir; + #endregion - #region Properties - #endregion + #region Properties + #endregion - #region Constructor - public SongCompressedDataController(IConfiguration config) - { - _config = config; - _songTempDir = _config.GetValue("TemporaryMusicPath"); - _archiveDir = _config.GetValue("ArchivePath"); - } - #endregion + #region Constructor + public SongCompressedDataController(IConfiguration config) + { + _config = config; + _songTempDir = _config.GetValue("TemporaryMusicPath"); + _archiveDir = _config.GetValue("ArchivePath"); + } + #endregion - #region API Routes - [HttpGet("{id}")] - [Authorize("download:songs")] - public async Task Get(int id) - { - SongRepository context = HttpContext - .RequestServices - .GetService(typeof(SongRepository)) as SongRepository; + #region API Routes + [HttpGet("{id}")] + [Authorize("download:songs")] + public async Task Get(int id) + { + SongRepository context = HttpContext.RequestServices + .GetService(typeof(SongRepository)) as SongRepository; - SongCompression cmp = new SongCompression(_archiveDir); - - Console.WriteLine($"Archive directory root: {_archiveDir}"); + SongCompression cmp = new SongCompression(_archiveDir); + + Console.WriteLine($"Archive directory root: {_archiveDir}"); - Console.WriteLine("Starting process of retrieving comrpessed song"); - SongData song = await cmp.RetrieveCompressedSong(context.GetSong(id)); + Console.WriteLine("Starting process of retrieving comrpessed song"); + SongData song = await cmp.RetrieveCompressedSong(context.GetSong(id)); - return File(song.Data, "application/x-msdownload", cmp.CompressedSongFilename); - } - #endregion - } + return File(song.Data, "application/x-msdownload", cmp.CompressedSongFilename); + } + #endregion + } } diff --git a/Controllers/v1/SongController.cs b/Controllers/v1/SongController.cs index e92c154..8ab7569 100644 --- a/Controllers/v1/SongController.cs +++ b/Controllers/v1/SongController.cs @@ -16,118 +16,101 @@ using Icarus.Database.Repositories; namespace Icarus.Controllers.V1 { - [Route("api/v1/song")] - [ApiController] - public class SongController : ControllerBase - { - #region Fields - private readonly ILogger _logger; - private IConfiguration _config; - private SongManager _songMgr; - #endregion + [Route("api/v1/song")] + [ApiController] + public class SongController : ControllerBase + { + #region Fields + private readonly ILogger _logger; + private IConfiguration _config; + private SongManager _songMgr; + #endregion - #region Properties - #endregion + #region Properties + #endregion - #region Constructor - public SongController(IConfiguration config, ILogger logger) - { - _config = config; - _logger = logger; - _songMgr = new SongManager(config); - } - #endregion + #region Constructor + public SongController(IConfiguration config, ILogger logger) + { + _config = config; + _logger = logger; + _songMgr = new SongManager(config); + } + #endregion - [HttpGet] - [Authorize("read:song_details")] - public IActionResult Get() - { - List songs = new List(); - Console.WriteLine("Attemtping to retrieve songs"); - _logger.LogInformation("Attempting to retrieve songs"); - - SongRepository context = HttpContext - .RequestServices - .GetService(typeof(SongRepository)) as SongRepository; + [HttpGet] + [Authorize("read:song_details")] + public IActionResult Get() + { + List songs = new List(); + Console.WriteLine("Attemtping to retrieve songs"); + _logger.LogInformation("Attempting to retrieve songs"); + + SongRepository context = HttpContext.RequestServices + .GetService(typeof(SongRepository)) as SongRepository; - songs = context.GetAllSongs(); + songs = context.GetAllSongs(); - if (songs.Count > 0) - { - return Ok(songs); - } - else - { - return NotFound(); - } - } + if (songs.Count > 0) + return Ok(songs); + else + return NotFound(); + } - [HttpGet("{id}")] - [Authorize("read:song_details")] - public IActionResult Get(int id) - { - SongRepository context = HttpContext - .RequestServices - .GetService(typeof(SongRepository)) as SongRepository; - - Song song = new Song { Id = id }; - song = context.GetSong(song); + [HttpGet("{id}")] + [Authorize("read:song_details")] + public IActionResult Get(int id) + { + SongRepository context = HttpContext.RequestServices + .GetService(typeof(SongRepository)) as SongRepository; + + Song song = new Song { Id = id }; + song = context.GetSong(song); - Console.WriteLine("Here"); + Console.WriteLine("Here"); - if (song.Id != 0) - { - return Ok(song); - } - else - { - return NotFound(); - } - } + if (song.Id != 0) + return Ok(song); + else + return NotFound(); + } - [Authorize("update:songs")] - [HttpPut("{id}")] - public IActionResult Put(int id, [FromBody] Song song) - { - SongRepository context = HttpContext - .RequestServices - .GetService(typeof(SongRepository)) as SongRepository; + [Authorize("update:songs")] + [HttpPut("{id}")] + public IActionResult Put(int id, [FromBody] Song song) + { + SongRepository context = HttpContext.RequestServices + .GetService(typeof(SongRepository)) as SongRepository; - ArtistRepository artistStore = HttpContext - .RequestServices - .GetService(typeof(ArtistRepository)) as ArtistRepository; + ArtistRepository artistStore = HttpContext.RequestServices + .GetService(typeof(ArtistRepository)) as ArtistRepository; - AlbumRepository albumStore = HttpContext - .RequestServices - .GetService(typeof(AlbumRepository)) as AlbumRepository; - - GenreRepository genreStore = HttpContext - .RequestServices - .GetService(typeof(GenreRepository)) as GenreRepository; + AlbumRepository albumStore = HttpContext.RequestServices + .GetService(typeof(AlbumRepository)) as AlbumRepository; + + GenreRepository genreStore = HttpContext.RequestServices + .GetService(typeof(GenreRepository)) as GenreRepository; - YearRepository yearStore = HttpContext - .RequestServices - .GetService(typeof(YearRepository)) as YearRepository; + YearRepository yearStore = HttpContext.RequestServices + .GetService(typeof(YearRepository)) as YearRepository; - song.Id = id; - Console.WriteLine("Retrieving filepath of song"); - _logger.LogInformation("Retrieving filepath of song"); + song.Id = id; + Console.WriteLine("Retrieving filepath of song"); + _logger.LogInformation("Retrieving filepath of song"); - if (!context.DoesSongExist(song)) - { - return NotFound(new SongResult - { - Message = "Song does not exist" - }); - } + if (!context.DoesSongExist(song)) + return NotFound(new SongResult + { + Message = "Song does not exist" + }); - var songRes = _songMgr.UpdateSong(song, context, albumStore, artistStore, genreStore, - yearStore); + var songRes = _songMgr.UpdateSong(song, context, albumStore, artistStore, genreStore, + yearStore); - return Ok(songRes); - } - } + return Ok(songRes); + } + } } diff --git a/Controllers/v1/SongDataController.cs b/Controllers/v1/SongDataController.cs index cae4129..155adb9 100644 --- a/Controllers/v1/SongDataController.cs +++ b/Controllers/v1/SongDataController.cs @@ -17,133 +17,128 @@ using Icarus.Database.Repositories; namespace Icarus.Controllers.V1 { - [Route("api/v1/song/data")] - [ApiController] - public class SongDataController : ControllerBase - { - #region Fields - private IConfiguration _config; - private ILogger _logger; - private SongManager _songMgr; - private string _songTempDir; - #endregion + [Route("api/v1/song/data")] + [ApiController] + public class SongDataController : ControllerBase + { + #region Fields + private IConfiguration _config; + private ILogger _logger; + private SongManager _songMgr; + private string _songTempDir; + #endregion - #region Properties - #endregion + #region Properties + #endregion - #region Constructor - public SongDataController(IConfiguration config, ILogger logger) - { - _config = config; - _logger = logger; - _songTempDir = _config.GetValue("TemporaryMusicPath"); - _songMgr = new SongManager(config, _songTempDir); - } - #endregion + #region Constructor + public SongDataController(IConfiguration config, ILogger logger) + { + _config = config; + _logger = logger; + _songTempDir = _config.GetValue("TemporaryMusicPath"); + _songMgr = new SongManager(config, _songTempDir); + } + #endregion - [HttpGet("{id}")] - [Route("private-scoped")] - [Authorize("download:songs")] - public async Task Get(int id) - { - SongRepository context = HttpContext - .RequestServices - .GetService(typeof(SongRepository)) as SongRepository; - var songMetaData = context.GetSong(id); - - SongData song = await _songMgr.RetrieveSong(songMetaData); - - return File(song.Data, "application/x-msdownload", songMetaData.Filename); - } + [HttpGet("{id}")] + [Route("private-scoped")] + [Authorize("download:songs")] + public async Task Get(int id) + { + SongRepository context = HttpContext.RequestServices + .GetService(typeof(SongRepository)) as SongRepository; + var songMetaData = context.GetSong(id); + + SongData song = await _songMgr.RetrieveSong(songMetaData); + + return File(song.Data, "application/x-msdownload", songMetaData.Filename); + } - [HttpPost] - [Authorize("upload:songs")] - public async Task Post([FromForm(Name = "file")] List songData) - { - try - { - SongRepository songRepository = HttpContext - .RequestServices - .GetService(typeof(SongRepository)) as SongRepository; - AlbumRepository albumStoreContext = HttpContext - .RequestServices - .GetService(typeof(AlbumRepository)) as AlbumRepository; - ArtistRepository artistStoreContext = HttpContext - .RequestServices - .GetService(typeof(ArtistRepository)) as ArtistRepository; - GenreRepository genreStore = HttpContext - .RequestServices - .GetService(typeof(GenreRepository)) as GenreRepository; - YearRepository yearStore = HttpContext - .RequestServices - .GetService(typeof(YearRepository)) as YearRepository; + [HttpPost] + [Authorize("upload:songs")] + public async Task Post([FromForm(Name = "file")] List songData) + { + try + { + SongRepository songRepository = HttpContext.RequestServices + .GetService(typeof(SongRepository)) as SongRepository; - Console.WriteLine("Uploading song..."); - _logger.LogInformation("Uploading song..."); + AlbumRepository albumStoreContext = HttpContext.RequestServices + .GetService(typeof(AlbumRepository)) as AlbumRepository; - var uploads = _songTempDir; - Console.WriteLine($"Song Root Path {uploads}"); - _logger.LogInformation($"Song root path {uploads}"); - foreach (var sng in songData) - { - if (sng.Length > 0) { - Console.WriteLine($"Song filename {sng.FileName}"); - _logger.LogInformation($"Song filename {sng.FileName}"); + ArtistRepository artistStoreContext = HttpContext.RequestServices + .GetService(typeof(ArtistRepository)) as ArtistRepository; - await _songMgr.SaveSongToFileSystem(sng, songRepository, - albumStoreContext, artistStoreContext, - genreStore, yearStore); - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.LogError(msg, "An error occurred"); - } - } + GenreRepository genreStore = HttpContext.RequestServices + .GetService(typeof(GenreRepository)) as GenreRepository; - [HttpDelete("{id}")] - [Authorize("delete:songs")] - public IActionResult Delete(int id) - { - SongRepository context = HttpContext - .RequestServices - .GetService(typeof(SongRepository)) as SongRepository; - AlbumRepository albumStore = HttpContext - .RequestServices - .GetService(typeof(AlbumRepository)) as AlbumRepository; - ArtistRepository artistStore = HttpContext - .RequestServices - .GetService(typeof(ArtistRepository)) as ArtistRepository; - GenreRepository genreStore = HttpContext - .RequestServices - .GetService(typeof(GenreRepository)) as GenreRepository; - YearRepository yearStore = HttpContext - .RequestServices - .GetService(typeof(YearRepository)) as YearRepository; - - var songMetaData = new Song{ Id = id }; - Console.WriteLine($"Id {songMetaData.Id}"); - songMetaData = context.GetSong(songMetaData); + YearRepository yearStore = HttpContext.RequestServices + .GetService(typeof(YearRepository)) as YearRepository; - if (string.IsNullOrEmpty(songMetaData.Title)) - { - _logger.LogInformation("Song does not exist"); - return NotFound("Song does not exist"); - } - else - { - _logger.LogInformation("Starting process of deleting song from the filesystem and database"); + Console.WriteLine("Uploading song..."); + _logger.LogInformation("Uploading song..."); - _songMgr.DeleteSong(songMetaData, context, albumStore, - artistStore, genreStore, yearStore); + var uploads = _songTempDir; + Console.WriteLine($"Song Root Path {uploads}"); + _logger.LogInformation($"Song root path {uploads}"); + foreach (var sng in songData) + if (sng.Length > 0) { + Console.WriteLine($"Song filename {sng.FileName}"); + _logger.LogInformation($"Song filename {sng.FileName}"); - return Ok(); - } - } - } + await _songMgr.SaveSongToFileSystem(sng, songRepository, + albumStoreContext, artistStoreContext, + genreStore, yearStore); + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.LogError(msg, "An error occurred"); + } + } + + [HttpDelete("{id}")] + [Authorize("delete:songs")] + public IActionResult Delete(int id) + { + SongRepository context = HttpContext.RequestServices + .GetService(typeof(SongRepository)) as SongRepository; + + AlbumRepository albumStore = HttpContext.RequestServices + .GetService(typeof(AlbumRepository)) as AlbumRepository; + + ArtistRepository artistStore = HttpContext.RequestServices + .GetService(typeof(ArtistRepository)) as ArtistRepository; + + GenreRepository genreStore = HttpContext.RequestServices + .GetService(typeof(GenreRepository)) as GenreRepository; + + YearRepository yearStore = HttpContext.RequestServices + .GetService(typeof(YearRepository)) as YearRepository; + + var songMetaData = new Song{ Id = id }; + Console.WriteLine($"Id {songMetaData.Id}"); + songMetaData = context.GetSong(songMetaData); + + if (string.IsNullOrEmpty(songMetaData.Title)) + { + _logger.LogInformation("Song does not exist"); + return NotFound("Song does not exist"); + } + else + { + _logger.LogInformation("Starting process of deleting song from the filesystem and database"); + + _songMgr.DeleteSong(songMetaData, context, albumStore, + artistStore, genreStore, yearStore); + + return Ok(); + } + } + } } diff --git a/Controllers/v1/SongStreamController.cs b/Controllers/v1/SongStreamController.cs index d4ed08b..c741f52 100644 --- a/Controllers/v1/SongStreamController.cs +++ b/Controllers/v1/SongStreamController.cs @@ -16,52 +16,49 @@ using Icarus.Database.Repositories; namespace Icarus.Controllers.V1 { - [Route("api/v1/song/stream")] - [ApiController] - public class SongStreamController : ControllerBase - { - #region Fields - private ILogger _logger; - #endregion + [Route("api/v1/song/stream")] + [ApiController] + public class SongStreamController : ControllerBase + { + #region Fields + private ILogger _logger; + #endregion - #region Properties - #endregion + #region Properties + #endregion - #region Constructor - public SongStreamController(ILogger logger) - { - _logger = logger; - } - #endregion + #region Constructor + public SongStreamController(ILogger logger) + { + _logger = logger; + } + #endregion - #region HTTP endpoints - [HttpGet("{id}")] - [Authorize("stream:songs")] - public async Task Get(int id) - { - var songStore= HttpContext - .RequestServices - .GetService(typeof(SongRepository)) as SongRepository; + #region HTTP endpoints + [HttpGet("{id}")] + [Authorize("stream:songs")] + public async Task Get(int id) + { + var songStore= HttpContext.RequestServices + .GetService(typeof(SongRepository)) as SongRepository; - var song = songStore.GetSong(new Song { Id = id }); + var song = songStore.GetSong(new Song { Id = id }); - var mem = new MemoryStream(); + var mem = new MemoryStream(); - using (var stream = new FileStream(song.SongPath, FileMode.Open, FileAccess.Read)) - { - await stream.CopyToAsync(mem); - } + using (var stream = new FileStream(song.SongPath, FileMode.Open, FileAccess.Read)) + await stream.CopyToAsync(mem); - mem.Position = 0; + mem.Position = 0; - _logger.LogInformation("Starting to stream song...>"); - Console.WriteLine("Starting to streamsong..."); + _logger.LogInformation("Starting to stream song...>"); + Console.WriteLine("Starting to streamsong..."); - return File(mem, "application/octet-stream", Path.GetFileName(song.SongPath)); - } - #endregion - } + return File(mem, "application/octet-stream", Path.GetFileName(song.SongPath)); + } + #endregion + } } diff --git a/Controllers/v1/YearController.cs b/Controllers/v1/YearController.cs index fe7ccc1..65e7de8 100644 --- a/Controllers/v1/YearController.cs +++ b/Controllers/v1/YearController.cs @@ -11,74 +11,66 @@ using Icarus.Database.Repositories; namespace Icarus.Controller.V1 { - [Route("api/v1/year")] - [ApiController] - public class YearController : ControllerBase - { - #region Fields - private readonly ILogger _logger; - #endregion + [Route("api/v1/year")] + [ApiController] + public class YearController : ControllerBase + { + #region Fields + private readonly ILogger _logger; + #endregion - #region Properties - #endregion + #region Properties + #endregion - #region Constructors - public YearController(ILogger logger) - { - _logger = logger; - } - #endregion + #region Constructors + public YearController(ILogger logger) + { + _logger = logger; + } + #endregion - #region HTTP Routes - [HttpGet] - [Authorize("read:year")] - public IActionResult Get() - { - var yearValues = new List(); + #region HTTP Routes + [HttpGet] + [Authorize("read:year")] + public IActionResult Get() + { + var yearValues = new List(); - var yearStore = HttpContext - .RequestServices - .GetService(typeof(YearRepository)) as YearRepository; + var yearStore = HttpContext.RequestServices + .GetService(typeof(YearRepository)) as YearRepository; - yearValues = yearStore.GetSongYears(); + yearValues = yearStore.GetSongYears(); - if (yearValues.Count > 0) - { - return Ok(yearValues); - } - else - { - return NotFound(new List()); - } - } + if (yearValues.Count > 0) + return Ok(yearValues); + else + return NotFound(new List()); + } - [HttpGet("{id}")] - [Authorize("read:year")] - public IActionResult Get(int id) - { - var year = new Year - { - YearId = id - }; + [HttpGet("{id}")] + [Authorize("read:year")] + public IActionResult Get(int id) + { + var year = new Year + { + YearId = id + }; - var yearStore = HttpContext - .RequestServices - .GetService(typeof(YearRepository)) as YearRepository; + var yearStore = HttpContext.RequestServices + .GetService(typeof(YearRepository)) as YearRepository; - if (yearStore.DoesYearExist(year)) - { - year = yearStore.GetSongYear(year); + if (yearStore.DoesYearExist(year)) + { + year = yearStore.GetSongYear(year); - return Ok(year); - } - else - { - return NotFound(new Year()); - } - } - #endregion - } + return Ok(year); + } + else + return NotFound(new Year()); + } + #endregion + } } diff --git a/Database/Repositories/AlbumRepository.cs b/Database/Repositories/AlbumRepository.cs index d25c56f..5d67305 100644 --- a/Database/Repositories/AlbumRepository.cs +++ b/Database/Repositories/AlbumRepository.cs @@ -8,404 +8,378 @@ using Icarus.Models; namespace Icarus.Database.Repositories { - public class AlbumRepository : BaseRepository + public class AlbumRepository : BaseRepository + { + #region Fields + #endregion + + + #region Properties + #endregion + + + #region Constructors + public AlbumRepository(string connectionString) { - #region Fields - #endregion - - - #region Properties - #endregion - - - #region Constructors - public AlbumRepository(string connectionString) - { - _connectionString = connectionString; - } - #endregion - - - #region Methods - public List GetAlbumWithoutCount() - { - var albums = new List(); - - if (AnyAlbums()) - { - try - { - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); - var query = "SELECT * FROM Album"; - using (MySqlCommand cmd = new MySqlCommand(query, conn)) - { - using (var reader = cmd.ExecuteReader()) - { - albums = ParseData(reader); - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } - - return albums; - } - public List GetAlbums() - { - List albums = new List(); - - try - { - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); - 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()) - { - albums = ParseData(reader); - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - - return albums; - } - - public Album GetAlbum(Album album) - { - - try - { - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); - 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); - - using (var reader = cmd.ExecuteReader()) - { - album = ParseSingleData(reader); - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - - return album; - } - public Album GetAlbum(Song song) - { - var album = new Album(); - - try - { - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); - var query = "SELECT alb.*, 0 AS SongCount FROM Album alb " + - "WHERE alb.Title=@Title LIMIT 1"; - - using (MySqlCommand cmd = new MySqlCommand(query, conn)) - { - Console.WriteLine($"Album title {song.AlbumTitle}"); - cmd.Parameters.AddWithValue("@Title", song.AlbumTitle); - - using (var reader = cmd.ExecuteReader()) - { - album = ParseSingleData(reader); - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - - return album; - } - public Album GetAlbum(Song song, bool retrieveCount) - { - var album = new Album(); - - try - { - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); - var query = string.Empty; - if (retrieveCount) - { - query = "SELECT alb.*, COUNT(*) AS SongCount FROM Album alb " + - "LEFT JOIN Song sng ON alb.AlbumId=sng.AlbumId WHERE " + - "alb.Title=@Title GROUP BY alb.AlbumId LIMIT 1"; - } - else - { - query = "SELECT alb.*, 0 AS SongCount FROM Album alb WHERE " + - "alb.Title=@Title LIMIT 1"; - } - - using (MySqlCommand cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@Title", song.AlbumTitle); - - using (var reader = cmd.ExecuteReader()) - { - album = ParseSingleData(reader); - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - - return album; - } - - public bool DoesAlbumExist(Album album) - { - try - { - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); - - var query = "SELECT alb.*, 0 AS SongCount FROM Album alb WHERE alb.AlbumId=@AlbumId"; - using (MySqlCommand cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@AlbumId", album.AlbumId); - - using (var reader = cmd.ExecuteReader()) - { - album = ParseSingleData(reader); - - if (album.Title != null) - { - _logger.Info($"Album {album.Title} exists"); - return true; - } - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - return false; - } - public bool DoesAlbumExist(Song song) - { - try - { - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); - - var query = "SELECT alb.*, 0 AS SongCount FROM Album alb WHERE alb.Title=@Title"; - using (MySqlCommand cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@Title", song.AlbumTitle); - - using (var reader = cmd.ExecuteReader()) - { - var album = ParseSingleData(reader); - - if (!String.IsNullOrEmpty(album.Title)) - { - _logger.Info($"Album {album.Title} exists"); - return true; - } - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - return false; - } - - public void SaveAlbum(Album album) - { - try - { - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); - 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.ExecuteNonQuery(); - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } - public void UpdateAlbum(Album album) - { - try - { - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); - var query = "UPDATE Album SET Title=@Title, AlbumArtist=" + - "@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("@AlbumId", album.AlbumId); - - cmd.ExecuteNonQuery(); - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } - public void DeleteAlbum(Album album) - { - try - { - using (var conn = GetConnection()) - { - conn.Open(); - var query = "DELETE FROM Album WHERE AlbumId=@AlbumId"; - - using (var cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@AlbumId", album.AlbumId); - - cmd.ExecuteNonQuery(); - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } - - private List ParseData(MySqlDataReader reader) - { - List albums = new List(); - _logger.Info("Retrieving album records"); - - while (reader.Read()) - { - var id = Convert.ToInt32(reader["AlbumId"]); - var title = reader["Title"].ToString(); - var albumArtist = reader["AlbumArtist"].ToString(); - var songCount = Convert.ToInt32(reader["SongCount"]); - albums.Add(new Album - { - AlbumId = id, - Title = title, - AlbumArtist = albumArtist, - SongCount = songCount - }); - } - - _logger.Info("Album records retrieved"); - - return albums; - } - private Album ParseSingleData(MySqlDataReader reader) - { - Album album = new Album(); - _logger.Info("Retrieving single album record"); - - while (reader.Read()) - { - var id = Convert.ToInt32(reader["AlbumId"]); - var title = reader["Title"].ToString(); - var albumArtist = reader["AlbumArtist"].ToString(); - var songCount = Convert.ToInt32(reader["SongCount"]); - album = new Album - { - AlbumId = id, - Title = title, - AlbumArtist = albumArtist, - SongCount = songCount - }; - } - _logger.Info("Single ablum retreived"); - - return album; - } - - private bool AnyAlbums() - { - var albums = new List(); - - using (var conn = GetConnection()) - { - conn.Open(); - - var query = "SELECT * FROM Album"; - - using (var cmd = new MySqlCommand(query, conn)) - { - using (var reader = cmd.ExecuteReader()) - { - albums = ParseData(reader); - } - } - } - - if (albums.Count > 0) - { - return true; - } - - return false; - } - #endregion + _connectionString = connectionString; } + #endregion + + + #region Methods + public List GetAlbumWithoutCount() + { + var albums = new List(); + + if (AnyAlbums()) + try + { + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + var query = "SELECT * FROM Album"; + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + using (var reader = cmd.ExecuteReader()) + albums = ParseData(reader); + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + return albums; + } + public List GetAlbums() + { + List albums = new List(); + + try + { + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + 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()) + albums = ParseData(reader); + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + return albums; + } + + public Album GetAlbum(Album album) + { + + try + { + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + 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); + + using (var reader = cmd.ExecuteReader()) + album = ParseSingleData(reader); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + return album; + } + public Album GetAlbum(Song song) + { + var album = new Album(); + + try + { + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + var query = "SELECT alb.*, 0 AS SongCount FROM Album alb " + + "WHERE alb.Title=@Title LIMIT 1"; + + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + Console.WriteLine($"Album title {song.AlbumTitle}"); + cmd.Parameters.AddWithValue("@Title", song.AlbumTitle); + + using (var reader = cmd.ExecuteReader()) + album = ParseSingleData(reader); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + return album; + } + public Album GetAlbum(Song song, bool retrieveCount) + { + var album = new Album(); + + try + { + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + var query = string.Empty; + if (retrieveCount) + query = "SELECT alb.*, COUNT(*) AS SongCount FROM Album alb " + + "LEFT JOIN Song sng ON alb.AlbumId=sng.AlbumId WHERE " + + "alb.Title=@Title GROUP BY alb.AlbumId LIMIT 1"; + else + query = "SELECT alb.*, 0 AS SongCount FROM Album alb WHERE " + + "alb.Title=@Title LIMIT 1"; + + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Title", song.AlbumTitle); + + using (var reader = cmd.ExecuteReader()) + album = ParseSingleData(reader); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + return album; + } + + public bool DoesAlbumExist(Album album) + { + try + { + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT alb.*, 0 AS SongCount FROM Album alb WHERE alb.AlbumId=@AlbumId"; + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@AlbumId", album.AlbumId); + + using (var reader = cmd.ExecuteReader()) + { + album = ParseSingleData(reader); + + if (album.Title != null) + { + _logger.Info($"Album {album.Title} exists"); + return true; + } + } + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + return false; + } + public bool DoesAlbumExist(Song song) + { + try + { + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT alb.*, 0 AS SongCount FROM Album alb WHERE alb.Title=@Title"; + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Title", song.AlbumTitle); + + using (var reader = cmd.ExecuteReader()) + { + var album = ParseSingleData(reader); + + if (!String.IsNullOrEmpty(album.Title)) + { + _logger.Info($"Album {album.Title} exists"); + return true; + } + } + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + return false; + } + + public void SaveAlbum(Album album) + { + try + { + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + 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.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + public void UpdateAlbum(Album album) + { + try + { + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + var query = "UPDATE Album SET Title=@Title, AlbumArtist=" + + "@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("@AlbumId", album.AlbumId); + + cmd.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + public void DeleteAlbum(Album album) + { + try + { + using (var conn = GetConnection()) + { + conn.Open(); + var query = "DELETE FROM Album WHERE AlbumId=@AlbumId"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@AlbumId", album.AlbumId); + + cmd.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + + private List ParseData(MySqlDataReader reader) + { + List albums = new List(); + _logger.Info("Retrieving album records"); + + while (reader.Read()) + { + var id = Convert.ToInt32(reader["AlbumId"]); + var title = reader["Title"].ToString(); + var albumArtist = reader["AlbumArtist"].ToString(); + var songCount = Convert.ToInt32(reader["SongCount"]); + albums.Add(new Album + { + AlbumId = id, + Title = title, + AlbumArtist = albumArtist, + SongCount = songCount + }); + } + + _logger.Info("Album records retrieved"); + + return albums; + } + private Album ParseSingleData(MySqlDataReader reader) + { + Album album = new Album(); + _logger.Info("Retrieving single album record"); + + while (reader.Read()) + { + var id = Convert.ToInt32(reader["AlbumId"]); + var title = reader["Title"].ToString(); + var albumArtist = reader["AlbumArtist"].ToString(); + var songCount = Convert.ToInt32(reader["SongCount"]); + album = new Album + { + AlbumId = id, + Title = title, + AlbumArtist = albumArtist, + SongCount = songCount + }; + } + _logger.Info("Single ablum retreived"); + + return album; + } + + private bool AnyAlbums() + { + var albums = new List(); + + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT * FROM Album"; + + using (var cmd = new MySqlCommand(query, conn)) + using (var reader = cmd.ExecuteReader()) + albums = ParseData(reader); + } + + if (albums.Count > 0) + return true; + + return false; + } + #endregion + } } diff --git a/Database/Repositories/ArtistRepository.cs b/Database/Repositories/ArtistRepository.cs index 526932b..e71d993 100644 --- a/Database/Repositories/ArtistRepository.cs +++ b/Database/Repositories/ArtistRepository.cs @@ -10,361 +10,346 @@ using Icarus.Models; namespace Icarus.Database.Repositories { - public class ArtistRepository : BaseRepository - { - #region Fields - #endregion + public class ArtistRepository : BaseRepository + { + #region Fields + #endregion - #region Properties - #endregion + #region Properties + #endregion - #region Constructors - public ArtistRepository(string connectionString) - { - _connectionString = connectionString; - } - #endregion + #region Constructors + public ArtistRepository(string connectionString) + { + _connectionString = connectionString; + } + #endregion - #region Methods - public List GetArtists() - { - List artists = new List(); - try - { - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); - var query = "SELECT art.*, COUNT(*) AS SongCount FROM Artist " + - "art LEFT JOIN Song sng ON art.ArtistId=sng.ArtistId " + - "GROUP BY art.ArtistId"; + #region Methods + public List GetArtists() + { + List artists = new List(); + try + { + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + var query = "SELECT art.*, COUNT(*) AS SongCount FROM Artist " + + "art LEFT JOIN Song sng ON art.ArtistId=sng.ArtistId " + + "GROUP BY art.ArtistId"; - using (MySqlCommand cmd = new MySqlCommand(query, conn)) - { - using (var reader = cmd.ExecuteReader()) - { + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + using (var reader = cmd.ExecuteReader()) + artists = ParseData(reader); + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } - artists = ParseData(reader); - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } + return artists; + } - return artists; - } + public Artist GetArtist(Artist artist) + { + try + { + _logger.Info("Retrieving artist record from the database"); + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); - public Artist GetArtist(Artist artist) - { - try - { - _logger.Info("Retrieving artist record from the database"); - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); + var query = "SELECT art.*, COUNT(*) AS SongCount FROM Artist " + + "art LEFT JOIN Song sng ON art.ArtistId=sng.ArtistId " + + "WHERE art.ArtistId=@ArtistId"; - var query = "SELECT art.*, COUNT(*) AS SongCount FROM Artist " + - "art LEFT JOIN Song sng ON art.ArtistId=sng.ArtistId " + - "WHERE art.ArtistId=@ArtistId"; + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@ArtistId", artist.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"); + } - 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 + { + _logger.Info("Retrieving artist record from the database"); + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); - return artist; - } - public Artist GetArtist(Song song) - { - Artist artist = new Artist(); - try - { - _logger.Info("Retrieving artist record from the database"); - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); + var query = "SELECT art.*, 0 AS SongCount FROM Artist " + + "art WHERE art.Name=@Name"; + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Name", song.Artist); - var query = "SELECT art.*, 0 AS SongCount FROM Artist " + - "art WHERE art.Name=@Name"; - using (MySqlCommand cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@Name", song.Artist); + using (var reader = cmd.ExecuteReader()) + artist = ParseSingleData(reader); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } - 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, bool retrieveCount) + { + var artist = new Artist(); - return artist; - } - public Artist GetArtist(Song song, bool retrieveCount) - { - var artist = new Artist(); + try + { + _logger.Info("Retrieving artist record from the database"); + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); - try - { - _logger.Info("Retrieving artist record from the database"); - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); + var query = string.Empty; - var query = string.Empty; + if (retrieveCount) + query = "SELECT art.*, COUNT(*) AS SongCount FROM Artist " + + "art LEFT JOIN Song sng ON art.ArtistId=sng.ArtistId " + + "WHERE art.Name=@Name GROUP BY art.ArtistId LIMIT 1"; + else + query = "SELECT art.*, 0 AS SongCount FROM Artist art " + + "WHERE art.Name=@Name LIMIT 1"; - if (retrieveCount) - { - query = "SELECT art.*, COUNT(*) AS SongCount FROM Artist " + - "art LEFT JOIN Song sng ON art.ArtistId=sng.ArtistId " + - "WHERE art.Name=@Name GROUP BY art.ArtistId LIMIT 1"; - } - else - { - query = "SELECT art.*, 0 AS SongCount FROM Artist art " + - "WHERE art.Name=@Name LIMIT 1"; - } + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Name", song.Artist); - using (MySqlCommand cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@Name", song.Artist); + using (var reader = cmd.ExecuteReader()) + artist = ParseSingleData(reader); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } - using (var reader = cmd.ExecuteReader()) - { - artist = ParseSingleData(reader); - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } + return artist; + } - return artist; - } + public bool DoesArtistExist(Artist artist) + { + try + { + _logger.Info("Checking to see if Artist exists"); + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); - public bool DoesArtistExist(Artist artist) - { - try - { - _logger.Info("Checking to see if Artist exists"); - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); + var query = "SELECT art.*, 0 AS SongCount FROM Artist art WHERE art.ArtistId=@ArtistId"; - var query = "SELECT art.*, 0 AS SongCount FROM Artist art WHERE art.ArtistId=@ArtistId"; + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@ArtistId", artist.ArtistId); + + using (var reader = cmd.ExecuteReader()) + { + artist = ParseSingleData(reader); - using (MySqlCommand cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@ArtistId", 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"); + } + + _logger.Info("Could not successfully retrieve Artist"); - 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"); - } - - _logger.Info("Could not successfully retrieve Artist"); + return false; + } + public bool DoesArtistExist(Song song) + { + try + { + _logger.Info("Checking to see if Artist exists"); + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); - return false; - } - public bool DoesArtistExist(Song song) - { - try - { - _logger.Info("Checking to see if Artist exists"); - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); + var query = "SELECT art.*, 0 AS SongCount FROM Artist art WHERE art.Name=@Name"; + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Name", song.Artist); + + using (var reader = cmd.ExecuteReader()) + { + var artist = ParseSingleData(reader); - var query = "SELECT art.*, 0 AS SongCount FROM Artist art WHERE art.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"); + } - 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"); - } + _logger.Info("Could not successfully retrieve Artist"); - _logger.Info("Could not successfully retrieve Artist"); - - return false; - } + return false; + } - public void SaveArtist(Artist artist) - { - try - { - _logger.Info("Saving artist record"); - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); - var query = "INSERT INTO Artist(Name) VALUES(@Name)"; + public void SaveArtist(Artist artist) + { + try + { + _logger.Info("Saving artist record"); + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + var query = "INSERT INTO Artist(Name) VALUES(@Name)"; - using (MySqlCommand cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@Name", artist.Name); + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Name", artist.Name); - cmd.ExecuteNonQuery(); - } - } + cmd.ExecuteNonQuery(); + } + } - _logger.Info("Artist record has successfully been saved"); - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } - public void UpdateArtist(Artist artist) - { - try - { - _logger.Info("Updating artist record"); - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); - var query = "UPDATE Artist SET Name=@Name WHERE ArtistId=@ArtistId"; + _logger.Info("Artist record has successfully been saved"); + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + public void UpdateArtist(Artist artist) + { + try + { + _logger.Info("Updating artist record"); + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + 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("@ArtistId", artist.ArtistId); + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Name", artist.Name); + cmd.Parameters.AddWithValue("@ArtistId", artist.ArtistId); - cmd.ExecuteNonQuery(); - } - } + cmd.ExecuteNonQuery(); + } + } - _logger.Info("Artist record has successfully been saved"); - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } - public void DeleteArtist(Artist artist) - { - try - { - _logger.Info("Deleting artist record"); + _logger.Info("Artist record has successfully been saved"); + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + public void DeleteArtist(Artist artist) + { + try + { + _logger.Info("Deleting artist record"); - using (var conn = GetConnection()) - { - conn.Open(); + using (var conn = GetConnection()) + { + conn.Open(); - var query = "DELETE FROM Artist WHERE ArtistId=@ArtistId"; + var query = "DELETE FROM Artist WHERE ArtistId=@ArtistId"; - using (var cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@ArtistId", artist.ArtistId); + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@ArtistId", artist.ArtistId); - cmd.ExecuteNonQuery(); - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } + cmd.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } - private List ParseData(MySqlDataReader reader) - { - List artists = new List(); + private List ParseData(MySqlDataReader reader) + { + List artists = new List(); - 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 - }); - } + 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 + }); + } - _logger.Info("Artist records retrieved"); + _logger.Info("Artist records retrieved"); - return artists; - } + return artists; + } - private Artist ParseSingleData(MySqlDataReader reader) - { - Artist artist = new Artist(); + 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; - } + 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; + } - _logger.Info("Single artist record retrieved"); + _logger.Info("Single artist record retrieved"); - return artist; - } - #endregion - } + return artist; + } + #endregion + } } diff --git a/Database/Repositories/BaseRepository.cs b/Database/Repositories/BaseRepository.cs index aeb6cc5..687a73f 100644 --- a/Database/Repositories/BaseRepository.cs +++ b/Database/Repositories/BaseRepository.cs @@ -5,19 +5,19 @@ using NLog; namespace Icarus.Database.Repositories { - public class BaseRepository - { - #region Fields - protected string _connectionString; - protected static Logger _logger = NLog.LogManager.GetCurrentClassLogger(); - #endregion + public class BaseRepository + { + #region Fields + protected string _connectionString; + protected static Logger _logger = NLog.LogManager.GetCurrentClassLogger(); + #endregion - #region Methods - protected MySqlConnection GetConnection() - { - return new MySqlConnection(_connectionString); - } - #endregion - } + #region Methods + protected MySqlConnection GetConnection() + { + return new MySqlConnection(_connectionString); + } + #endregion + } } diff --git a/Database/Repositories/GenreRepository.cs b/Database/Repositories/GenreRepository.cs index d92aca0..d3e4749 100644 --- a/Database/Repositories/GenreRepository.cs +++ b/Database/Repositories/GenreRepository.cs @@ -8,462 +8,440 @@ using Icarus.Models; namespace Icarus.Database.Repositories { - public class GenreRepository : BaseRepository - { - #region Fields - #endregion - - - #region Properties - #endregion - - - #region Constructors - public GenreRepository(string connectionString) - { - _connectionString = connectionString; - } - #endregion - - - #region Methods - public List GetGenresWithoutCount() - { - _logger.Info("Retrieving all genre records without song counts"); - - var genres = new List(); - - if (AnyGenre()) - { - - try - { - using (var conn = GetConnection()) - { - conn.Open(); - - var query = "SELECT * FROM Genre"; - - using (var cmd = new MySqlCommand(query, conn)) - { - using (var reader = cmd.ExecuteReader()) - { - genres = ParseData(reader); - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } - - return genres; - } - public List GetGenres() - { - _logger.Info("Retrieving Genre records"); - - var genres = new List(); - - if (AnyGenre()) - { - - try - { - using (var conn = GetConnection()) - { - conn.Open(); - - var query = "SELECT gnr.*, COUNT(*) AS SongCount FROM Genre " + - "gnr LEFT JOIN Song sng ON gnr.GenreId=sng.GenreId " + - "GROUP BY gnr.GenreId"; - - using (var cmd = new MySqlCommand(query, conn)) - { - using (var reader = cmd.ExecuteReader()) - { - genres = ParseData(reader); - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } - - return genres; - } - - public Genre GetGenre(Genre genre) - { - _logger.Info("Retrieving Genre record"); - - if (DoesGenreExist(genre)) - { - try - { - using (var conn = GetConnection()) - { - conn.Open(); - - var query = "SELECT gnr.*, COUNT(*) AS SongCount FROM Genre " + - "gnr LEFT JOIN Song sng ON gnr.GenreId=sng.GenreId " + - "WHERE gnr.GenreId=@GenreId"; - - using (var cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@GenreId", genre.GenreId); - - using (var reader = cmd.ExecuteReader()) - { - genre = ParseSingleData(reader); - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } - - return genre; - } - public Genre GetGenre(Song song) - { - _logger.Info("Retrieving Genre record"); - - var genre = new Genre(); - - if (DoesGenreExist(song)) - { - try - { - using (var conn = GetConnection()) - { - conn.Open(); - - var query = "SELECT gnr.*, 0 AS SongCount FROM Genre " + - "gnr WHERE gnr.GenreName=@GenreName"; - - using (var cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@GenreName", song.Genre); - _logger.Info($"Song genre:\n\n\n {song.Genre}"); - - using (var reader = cmd.ExecuteReader()) - { - genre = ParseSingleData(reader); - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } - - return genre; - } - public Genre GetGenre(Song song, bool retrieveCount) - { - _logger.Info("Retrieving Genre record"); - - var genre = new Genre(); - - if (DoesGenreExist(song)) - { - try - { - using (var conn = GetConnection()) - { - conn.Open(); - - var query = string.Empty; - - if (retrieveCount) - { - query = "SELECT gnr.*, COUNT(*) AS SongCount FROM Genre gnr " + - "LEFT JOIN Song sng ON gnr.GenreId=sng.GenreId " + - "WHERE gnr.GenreName=@GenreName GROUP BY gnr.GenreId " + - "LIMIT 1"; - } - else - { - query = "SELECT gnr.*, 0 AS SongCount FROM Genre gnr " + - "WHERE gnr.GenreName=@GenreName LIMIT 1"; - } - - using (var cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@GenreName", song.Genre); - _logger.Info($"Song genre:\n\n\n {song.Genre}"); - - using (var reader = cmd.ExecuteReader()) - { - genre = ParseSingleData(reader); - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } - - return genre; - } - - public bool DoesGenreExist(Genre genre) - { - _logger.Info("Checking to see if Genre record exists"); - - try - { - using (var conn = GetConnection()) - { - conn.Open(); - - var query = "SELECT gnr.*, 0 AS SongCount FROM Genre gnr WHERE " + - "gnr.GenreId=@GenreId"; - - using (var cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@GenreId", genre.GenreId); - - using (var reader = cmd.ExecuteReader()) - { - genre = ParseSingleData(reader); - var genreName = genre.GenreName; - - if (!string.IsNullOrEmpty(genreName)) - { - _logger.Info("Genre exists"); - - return true; - } - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - - _logger.Info("Genre does not exist"); - - return false; - } - public bool DoesGenreExist(Song song) - { - _logger.Info("Checking to see if Genre record exists"); - - try - { - using (var conn = GetConnection()) - { - conn.Open(); - - var query = "SELECT gnr.*, 0 AS SongCount FROM Genre gnr WHERE " + - "gnr.GenreName=@GenreName"; - - using (var cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@GenreName", song.Genre); - - using (var reader = cmd.ExecuteReader()) - { - var genre = ParseSingleData(reader); - var genreName = genre.GenreName; - - if (!string.IsNullOrEmpty(genreName)) - { - _logger.Info("Genre exists"); - - return true; - } - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - - _logger.Info("Genre does not exist"); - - return false; - } - - public void SaveGenre(Genre genre) - { - _logger.Info("Saving Genre record"); - - try - { - using (var conn = GetConnection()) - { - conn.Open(); - - var query = "INSERT INTO Genre(GenreName) VALUES(@GenreName)"; - - using (var cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@GenreName", genre.GenreName); - - cmd.ExecuteNonQuery(); - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } - public void UpdateGenre(Genre genre) - { - _logger.Info("Updating Genre record"); - - try - { - using (var conn = GetConnection()) - { - conn.Open(); - - 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("@GenreId", genre.GenreId); - - cmd.ExecuteNonQuery(); - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } - public void DeleteGenre(Genre genre) - { - _logger.Info("Deleting Genre record"); - - try - { - using (var conn = GetConnection()) - { - conn.Open(); - - var query = "DELETE FROM Genre WHERE GenreId=@GenreId"; - - using (var cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@GenreId", genre.GenreId); - - cmd.ExecuteNonQuery(); - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } - - private List ParseData(MySqlDataReader reader) - { - var genres = new List(); - _logger.Info("Retrieving genre records"); - - while (reader.Read()) - { - var id = Convert.ToInt32(reader["GenreId"].ToString()); - var genreName = reader["GenreName"].ToString(); - var songCount = Convert.ToInt32(reader["SongCount"].ToString()); - - genres.Add(new Genre - { - GenreId = id, - GenreName = genreName, - SongCount = songCount - }); - } - - _logger.Info("Genre records retrieved"); - - return genres; - } - - private Genre ParseSingleData(MySqlDataReader reader) - { - var genre = new Genre(); - _logger.Info("Retrieving single genre record"); - - while (reader.Read()) - { - var id = Convert.ToInt32(reader["GenreId"].ToString()); - var genreName = reader["GenreName"].ToString(); - var songCount = Convert.ToInt32(reader["SongCount"].ToString()); - genre.GenreId = id; - genre.GenreName = genreName; - genre.SongCount = songCount; - } - - _logger.Info("Single genre record retrieved"); - - return genre; - } - - private bool AnyGenre() - { - try - { - using (var conn = GetConnection()) - { - conn.Open(); - - var query = "SELECT * FROM Genre"; - - using (var cmd = new MySqlCommand(query, conn)) - { - using (var reader = cmd.ExecuteReader()) - { - return reader.HasRows; - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - - _logger.Info("No genre records found"); - - return false; - } - #endregion - } + public class GenreRepository : BaseRepository + { + #region Fields + #endregion + + + #region Properties + #endregion + + + #region Constructors + public GenreRepository(string connectionString) + { + _connectionString = connectionString; + } + #endregion + + + #region Methods + public List GetGenresWithoutCount() + { + _logger.Info("Retrieving all genre records without song counts"); + + var genres = new List(); + + if (AnyGenre()) + { + + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT * FROM Genre"; + + using (var cmd = new MySqlCommand(query, conn)) + using (var reader = cmd.ExecuteReader()) + genres = ParseData(reader); + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + + return genres; + } + public List GetGenres() + { + _logger.Info("Retrieving Genre records"); + + var genres = new List(); + + if (AnyGenre()) + { + + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT gnr.*, COUNT(*) AS SongCount FROM Genre " + + "gnr LEFT JOIN Song sng ON gnr.GenreId=sng.GenreId " + + "GROUP BY gnr.GenreId"; + + using (var cmd = new MySqlCommand(query, conn)) + using (var reader = cmd.ExecuteReader()) + genres = ParseData(reader); + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + + return genres; + } + + public Genre GetGenre(Genre genre) + { + _logger.Info("Retrieving Genre record"); + + if (DoesGenreExist(genre)) + { + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT gnr.*, COUNT(*) AS SongCount FROM Genre " + + "gnr LEFT JOIN Song sng ON gnr.GenreId=sng.GenreId " + + "WHERE gnr.GenreId=@GenreId"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@GenreId", genre.GenreId); + + using (var reader = cmd.ExecuteReader()) + genre = ParseSingleData(reader); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + + return genre; + } + public Genre GetGenre(Song song) + { + _logger.Info("Retrieving Genre record"); + + var genre = new Genre(); + + if (DoesGenreExist(song)) + { + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT gnr.*, 0 AS SongCount FROM Genre " + + "gnr WHERE gnr.GenreName=@GenreName"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@GenreName", song.Genre); + _logger.Info($"Song genre:\n\n\n {song.Genre}"); + + using (var reader = cmd.ExecuteReader()) + genre = ParseSingleData(reader); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + + return genre; + } + public Genre GetGenre(Song song, bool retrieveCount) + { + _logger.Info("Retrieving Genre record"); + + var genre = new Genre(); + + if (DoesGenreExist(song)) + { + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = string.Empty; + + if (retrieveCount) + query = "SELECT gnr.*, COUNT(*) AS SongCount FROM Genre gnr " + + "LEFT JOIN Song sng ON gnr.GenreId=sng.GenreId " + + "WHERE gnr.GenreName=@GenreName GROUP BY gnr.GenreId " + + "LIMIT 1"; + else + query = "SELECT gnr.*, 0 AS SongCount FROM Genre gnr " + + "WHERE gnr.GenreName=@GenreName LIMIT 1"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@GenreName", song.Genre); + _logger.Info($"Song genre:\n\n\n {song.Genre}"); + + using (var reader = cmd.ExecuteReader()) + genre = ParseSingleData(reader); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + + return genre; + } + + public bool DoesGenreExist(Genre genre) + { + _logger.Info("Checking to see if Genre record exists"); + + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT gnr.*, 0 AS SongCount FROM Genre gnr WHERE " + + "gnr.GenreId=@GenreId"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@GenreId", genre.GenreId); + + using (var reader = cmd.ExecuteReader()) + { + genre = ParseSingleData(reader); + var genreName = genre.GenreName; + + if (!string.IsNullOrEmpty(genreName)) + { + _logger.Info("Genre exists"); + + return true; + } + } + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + _logger.Info("Genre does not exist"); + + return false; + } + public bool DoesGenreExist(Song song) + { + _logger.Info("Checking to see if Genre record exists"); + + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT gnr.*, 0 AS SongCount FROM Genre gnr WHERE " + + "gnr.GenreName=@GenreName"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@GenreName", song.Genre); + + using (var reader = cmd.ExecuteReader()) + { + var genre = ParseSingleData(reader); + var genreName = genre.GenreName; + + if (!string.IsNullOrEmpty(genreName)) + { + _logger.Info("Genre exists"); + + return true; + } + } + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + _logger.Info("Genre does not exist"); + + return false; + } + + public void SaveGenre(Genre genre) + { + _logger.Info("Saving Genre record"); + + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "INSERT INTO Genre(GenreName) VALUES(@GenreName)"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@GenreName", genre.GenreName); + + cmd.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + public void UpdateGenre(Genre genre) + { + _logger.Info("Updating Genre record"); + + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + 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("@GenreId", genre.GenreId); + + cmd.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + public void DeleteGenre(Genre genre) + { + _logger.Info("Deleting Genre record"); + + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "DELETE FROM Genre WHERE GenreId=@GenreId"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@GenreId", genre.GenreId); + + cmd.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + + private List ParseData(MySqlDataReader reader) + { + var genres = new List(); + _logger.Info("Retrieving genre records"); + + while (reader.Read()) + { + var id = Convert.ToInt32(reader["GenreId"].ToString()); + var genreName = reader["GenreName"].ToString(); + var songCount = Convert.ToInt32(reader["SongCount"].ToString()); + + genres.Add(new Genre + { + GenreId = id, + GenreName = genreName, + SongCount = songCount + }); + } + + _logger.Info("Genre records retrieved"); + + return genres; + } + + private Genre ParseSingleData(MySqlDataReader reader) + { + var genre = new Genre(); + _logger.Info("Retrieving single genre record"); + + while (reader.Read()) + { + var id = Convert.ToInt32(reader["GenreId"].ToString()); + var genreName = reader["GenreName"].ToString(); + var songCount = Convert.ToInt32(reader["SongCount"].ToString()); + genre.GenreId = id; + genre.GenreName = genreName; + genre.SongCount = songCount; + } + + _logger.Info("Single genre record retrieved"); + + return genre; + } + + private bool AnyGenre() + { + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT * FROM Genre"; + + using (var cmd = new MySqlCommand(query, conn)) + using (var reader = cmd.ExecuteReader()) + return reader.HasRows; + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + _logger.Info("No genre records found"); + + return false; + } + #endregion + } } diff --git a/Database/Repositories/SongRepository.cs b/Database/Repositories/SongRepository.cs index 74cc0b1..00d3164 100644 --- a/Database/Repositories/SongRepository.cs +++ b/Database/Repositories/SongRepository.cs @@ -7,320 +7,314 @@ using Icarus.Models; namespace Icarus.Database.Repositories { - public class SongRepository : BaseRepository - { - #region Fields - #endregion + public class SongRepository : BaseRepository + { + #region Fields + #endregion - #region Properties - #endregion + #region Properties + #endregion - #region Constructors - public SongRepository(string connectionString) - { - _connectionString = connectionString; - } - #endregion + #region Constructors + public SongRepository(string connectionString) + { + _connectionString = connectionString; + } + #endregion - #region Methods - public void SaveSong(Song song) - { - try - { - _logger.Info("Saving song to the database"); - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); - string query = "INSERT INTO Song(Title, AlbumTitle, Artist," + - " Year, Genre, Duration, Filename, SongPath, AlbumId, " + - "ArtistId, GenreId, YearId) VALUES(@Title, @AlbumTitle, " + - "@Artist, @Year, @Genre, @Duration, @Filename, @SongPath, " + - "@AlbumId, @ArtistId, @GenreId, @YearId)"; - using (MySqlCommand cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@Title", song.Title); - cmd.Parameters.AddWithValue("@AlbumTitle", song.AlbumTitle); - cmd.Parameters.AddWithValue("@Artist", song.Artist); - cmd.Parameters.AddWithValue("@Year", song.Year); - cmd.Parameters.AddWithValue("@Genre", song.Genre); - cmd.Parameters.AddWithValue("@Duration", song.Duration); - cmd.Parameters.AddWithValue("@Filename", song.Filename); - cmd.Parameters.AddWithValue("@SongPath", song.SongPath); - cmd.Parameters.AddWithValue("@AlbumId", song.AlbumId); - cmd.Parameters.AddWithValue("@ArtistId", song.ArtistId); - cmd.Parameters.AddWithValue("@GenreId", song.GenreId); - cmd.Parameters.AddWithValue("@YearId", song.YearId); + #region Methods + public void SaveSong(Song song) + { + try + { + _logger.Info("Saving song to the database"); + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + string query = "INSERT INTO Song(Title, AlbumTitle, Artist," + + " Year, Genre, Duration, Filename, SongPath, AlbumId, " + + "ArtistId, GenreId, YearId) VALUES(@Title, @AlbumTitle, " + + "@Artist, @Year, @Genre, @Duration, @Filename, @SongPath, " + + "@AlbumId, @ArtistId, @GenreId, @YearId)"; + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Title", song.Title); + cmd.Parameters.AddWithValue("@AlbumTitle", song.AlbumTitle); + cmd.Parameters.AddWithValue("@Artist", song.Artist); + cmd.Parameters.AddWithValue("@Year", song.Year); + cmd.Parameters.AddWithValue("@Genre", song.Genre); + cmd.Parameters.AddWithValue("@Duration", song.Duration); + cmd.Parameters.AddWithValue("@Filename", song.Filename); + cmd.Parameters.AddWithValue("@SongPath", song.SongPath); + cmd.Parameters.AddWithValue("@AlbumId", song.AlbumId); + cmd.Parameters.AddWithValue("@ArtistId", song.ArtistId); + cmd.Parameters.AddWithValue("@GenreId", song.GenreId); + cmd.Parameters.AddWithValue("@YearId", song.YearId); - cmd.ExecuteNonQuery(); - } - } - _logger.Info("Successfully saved song to the database"); - } - catch(Exception ex) - { - var exMsg = ex.Message; - Console.WriteLine($"An error occurred:\n{exMsg}"); - _logger.Error(exMsg, "An error occurred"); - } - } - public void UpdateSong(Song song) - { - try - { - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); + cmd.ExecuteNonQuery(); + } + } + _logger.Info("Successfully saved song to the database"); + } + catch(Exception ex) + { + var exMsg = ex.Message; + Console.WriteLine($"An error occurred:\n{exMsg}"); + _logger.Error(exMsg, "An error occurred"); + } + } + public void UpdateSong(Song song) + { + try + { + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); - string query = "UPDATE Song SET Title=@Title, AlbumTitle=@AlbumTitle, " + - "Artist=@Artist, Year=@Year, Genre=@Genre, Duration=@Duration, " + - "Filename=@Filename, SongPath=@SongPath, AlbumId=@AlbumId, " + - "ArtistId=@ArtistId, GenreId=@GenreId, YearId=@YearId WHERE Id=@Id"; + string query = "UPDATE Song SET Title=@Title, AlbumTitle=@AlbumTitle, " + + "Artist=@Artist, Year=@Year, Genre=@Genre, Duration=@Duration, " + + "Filename=@Filename, SongPath=@SongPath, AlbumId=@AlbumId, " + + "ArtistId=@ArtistId, GenreId=@GenreId, YearId=@YearId WHERE Id=@Id"; - using (MySqlCommand cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@Title", song.Title); - cmd.Parameters.AddWithValue("@AlbumTitle", song.AlbumTitle); - cmd.Parameters.AddWithValue("@Artist", song.Artist); - cmd.Parameters.AddWithValue("@Year", song.Year); - cmd.Parameters.AddWithValue("@Genre", song.Genre); - cmd.Parameters.AddWithValue("@Duration", song.Duration); - cmd.Parameters.AddWithValue("@Filename", song.Filename); - cmd.Parameters.AddWithValue("@SongPath", song.SongPath); - cmd.Parameters.AddWithValue("@Id", song.Id); - cmd.Parameters.AddWithValue("@AlbumId", song.AlbumId); - cmd.Parameters.AddWithValue("@ArtistId", song.ArtistId); - cmd.Parameters.AddWithValue("@GenreId", song.GenreId); - cmd.Parameters.AddWithValue("@YearId", song.YearId); + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Title", song.Title); + cmd.Parameters.AddWithValue("@AlbumTitle", song.AlbumTitle); + cmd.Parameters.AddWithValue("@Artist", song.Artist); + cmd.Parameters.AddWithValue("@Year", song.Year); + cmd.Parameters.AddWithValue("@Genre", song.Genre); + cmd.Parameters.AddWithValue("@Duration", song.Duration); + cmd.Parameters.AddWithValue("@Filename", song.Filename); + cmd.Parameters.AddWithValue("@SongPath", song.SongPath); + cmd.Parameters.AddWithValue("@Id", song.Id); + cmd.Parameters.AddWithValue("@AlbumId", song.AlbumId); + cmd.Parameters.AddWithValue("@ArtistId", song.ArtistId); + cmd.Parameters.AddWithValue("@GenreId", song.GenreId); + cmd.Parameters.AddWithValue("@YearId", song.YearId); - cmd.ExecuteNonQuery(); - } - } - _logger.Info("Updated song"); - } - catch (Exception ex) - { - var msg = ex.Message; - Console.WriteLine("An error occurred in SongRepository:"); - Console.WriteLine(msg); - _logger.Error(msg, "An error occurred"); - } - } - public void DeleteSong(Song song) - { - try - { - _logger.Info("Deleting song record"); + cmd.ExecuteNonQuery(); + } + } + _logger.Info("Updated song"); + } + catch (Exception ex) + { + var msg = ex.Message; + Console.WriteLine("An error occurred in SongRepository:"); + Console.WriteLine(msg); + _logger.Error(msg, "An error occurred"); + } + } + public void DeleteSong(Song song) + { + try + { + _logger.Info("Deleting song record"); - using (var conn = GetConnection()) - { - conn.Open(); + using (var conn = GetConnection()) + { + conn.Open(); - var query = "Delete FROM Song WHERE Id=@Id"; + var query = "Delete FROM Song WHERE Id=@Id"; - using (var cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@Id", song.Id); + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Id", song.Id); - cmd.ExecuteNonQuery(); - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } - public void DeleteSong(int id) - { - try - { - _logger.Info("Deleting song record"); + cmd.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + public void DeleteSong(int id) + { + try + { + _logger.Info("Deleting song record"); - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); - string query = "DELETE FROM Song WHERE Id=@Id"; - - using (MySqlCommand cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@Id", id); + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + string query = "DELETE FROM Song WHERE Id=@Id"; + + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Id", id); - cmd.ExecuteNonQuery(); - } - } - } - catch (Exception ex) - { - var exMsg = ex.Message; - Console.WriteLine($"An error occurred:\n{exMsg}"); - _logger.Error(exMsg, "An error occurred"); - } - } + cmd.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + var exMsg = ex.Message; + Console.WriteLine($"An error occurred:\n{exMsg}"); + _logger.Error(exMsg, "An error occurred"); + } + } - public List GetAllSongs() - { - List songs = new List(); + public List GetAllSongs() + { + List songs = new List(); - try - { - _logger.Info("Retrieving songs from the database"); - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); - var query = "SELECT * FROM Song"; - Console.WriteLine("ffff"); - MySqlCommand cmd = new MySqlCommand(query, conn); - using (var reader = cmd.ExecuteReader()) - { - songs = ParseData(reader); - } - } - } - catch (Exception ex) - { - var exMsg = ex.Message; - Console.WriteLine($"An error ocurred:\n{exMsg}"); - songs.Clear(); - _logger.Error(exMsg, "An error occurred"); - } + try + { + _logger.Info("Retrieving songs from the database"); + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + var query = "SELECT * FROM Song"; + Console.WriteLine("ffff"); + MySqlCommand cmd = new MySqlCommand(query, conn); + using (var reader = cmd.ExecuteReader()) + songs = ParseData(reader); + } + } + catch (Exception ex) + { + var exMsg = ex.Message; + Console.WriteLine($"An error ocurred:\n{exMsg}"); + songs.Clear(); + _logger.Error(exMsg, "An error occurred"); + } - return songs; - } + return songs; + } - public Song GetSong(Song song) - { - try - { - _logger.Info("Retrieving song from database"); + public Song GetSong(Song song) + { + try + { + _logger.Info("Retrieving song from database"); - using (var conn = GetConnection()) - { - conn.Open(); - var query = "SELECT * FROM Song WHERE Id=@Id"; + using (var conn = GetConnection()) + { + conn.Open(); + var query = "SELECT * FROM Song WHERE Id=@Id"; - using (var cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@Id", song.Id); + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Id", song.Id); - using (var reader = cmd.ExecuteReader()) - { - song = ParseSingleData(reader); - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } + using (var reader = cmd.ExecuteReader()) + song = ParseSingleData(reader); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } - return song; - } - public Song GetSong(int id) - { - Song song = new Song(); + return song; + } + public Song GetSong(int id) + { + Song song = new Song(); - try - { - _logger.Info("Retrieving song from database"); - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); - var query = "SELECT * FROM Song WHERE Id=@Id"; + try + { + _logger.Info("Retrieving song from database"); + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + var query = "SELECT * FROM Song WHERE Id=@Id"; - MySqlCommand cmd = new MySqlCommand(query, conn); - cmd.Parameters.AddWithValue("@Id", id); + MySqlCommand cmd = new MySqlCommand(query, conn); + cmd.Parameters.AddWithValue("@Id", id); - using (var reader = cmd.ExecuteReader()) - { - song = ParseSingleData(reader); - } - } - _logger.Info("Song found"); - } - catch(Exception ex) - { - var exMsg = ex.Message; - Console.WriteLine($"An error ocurred: {exMsg}"); - _logger.Error(exMsg, "An error occurred"); - } + using (var reader = cmd.ExecuteReader()) + song = ParseSingleData(reader); + } + _logger.Info("Song found"); + } + catch(Exception ex) + { + var exMsg = ex.Message; + Console.WriteLine($"An error ocurred: {exMsg}"); + _logger.Error(exMsg, "An error occurred"); + } - return song; - } + return song; + } - public bool DoesSongExist(Song song) - { - _logger.Info("Checking to see if the song exists"); - var songInDatabase = GetSong(song); - var title = songInDatabase.Title; + public bool DoesSongExist(Song song) + { + _logger.Info("Checking to see if the song exists"); + var songInDatabase = GetSong(song); + var title = songInDatabase.Title; - if (!string.IsNullOrEmpty(title)) - { - _logger.Info("Song exists"); - return true; - } + if (!string.IsNullOrEmpty(title)) + { + _logger.Info("Song exists"); + return true; + } - _logger.Info("Song does not exists"); + _logger.Info("Song does not exists"); - return false; - } + return false; + } - private List ParseData(MySqlDataReader reader) - { + private List ParseData(MySqlDataReader reader) + { - List songs = new List(); - while (reader.Read()) - { - songs.Add(new Song - { - Id = Convert.ToInt32(reader["Id"]), - Title = reader["Title"].ToString(), - AlbumTitle = reader["AlbumTitle"].ToString(), - Artist = reader["Artist"].ToString(), - Year = Convert.ToInt32(reader["Year"]), - Genre = reader["Genre"].ToString(), - Duration = Convert.ToInt32(reader["Duration"]), - Filename = reader["Filename"].ToString(), - SongPath = reader["SongPath"].ToString(), - AlbumId = Convert.ToInt32(reader["AlbumId"].ToString()), - ArtistId = Convert.ToInt32(reader["ArtistId"].ToString()), - GenreId = Convert.ToInt32(reader["GenreId"].ToString()), - YearId = Convert.ToInt32(reader["YearId"].ToString()) - }); - } + List songs = new List(); + while (reader.Read()) + { + songs.Add(new Song + { + Id = Convert.ToInt32(reader["Id"]), + Title = reader["Title"].ToString(), + AlbumTitle = reader["AlbumTitle"].ToString(), + Artist = reader["Artist"].ToString(), + Year = Convert.ToInt32(reader["Year"]), + Genre = reader["Genre"].ToString(), + Duration = Convert.ToInt32(reader["Duration"]), + Filename = reader["Filename"].ToString(), + SongPath = reader["SongPath"].ToString(), + AlbumId = Convert.ToInt32(reader["AlbumId"].ToString()), + ArtistId = Convert.ToInt32(reader["ArtistId"].ToString()), + GenreId = Convert.ToInt32(reader["GenreId"].ToString()), + YearId = Convert.ToInt32(reader["YearId"].ToString()) + }); + } - return songs; - } + return songs; + } - private Song ParseSingleData(MySqlDataReader reader) - { - Song song = new Song(); + private Song ParseSingleData(MySqlDataReader reader) + { + Song song = new Song(); - while (reader.Read()) - { - song.Id = Convert.ToInt32(reader["Id"]); - song.Title = reader["Title"].ToString(); - song.AlbumTitle = reader["AlbumTitle"].ToString(); - song.Artist = reader["Artist"].ToString(); - song.Year = Convert.ToInt32(reader["Year"].ToString()); - song.Genre = reader["Genre"].ToString(); - song.Duration = Convert.ToInt32(reader["Duration"]); - song.Filename = reader["Filename"].ToString(); - song.SongPath = reader["SongPath"].ToString(); - song.AlbumId = Convert.ToInt32(reader["AlbumId"].ToString()); - song.ArtistId = Convert.ToInt32(reader["ArtistId"].ToString()); - song.GenreId = Convert.ToInt32(reader["GenreId"].ToString()); - song.YearId = Convert.ToInt32(reader["YearId"].ToString()); - } + while (reader.Read()) + { + song.Id = Convert.ToInt32(reader["Id"]); + song.Title = reader["Title"].ToString(); + song.AlbumTitle = reader["AlbumTitle"].ToString(); + song.Artist = reader["Artist"].ToString(); + song.Year = Convert.ToInt32(reader["Year"].ToString()); + song.Genre = reader["Genre"].ToString(); + song.Duration = Convert.ToInt32(reader["Duration"]); + song.Filename = reader["Filename"].ToString(); + song.SongPath = reader["SongPath"].ToString(); + song.AlbumId = Convert.ToInt32(reader["AlbumId"].ToString()); + song.ArtistId = Convert.ToInt32(reader["ArtistId"].ToString()); + song.GenreId = Convert.ToInt32(reader["GenreId"].ToString()); + song.YearId = Convert.ToInt32(reader["YearId"].ToString()); + } - return song; - } + return song; + } - #endregion - } + #endregion + } } diff --git a/Database/Repositories/UserRepository.cs b/Database/Repositories/UserRepository.cs index 937b8f4..52e778b 100644 --- a/Database/Repositories/UserRepository.cs +++ b/Database/Repositories/UserRepository.cs @@ -8,224 +8,222 @@ using Icarus.Models; namespace Icarus.Database.Repositories { - public class UserRepository: BaseRepository - { - #region Fields - #endregion + public class UserRepository: BaseRepository + { + #region Fields + #endregion - #region Properties - #endregion + #region Properties + #endregion - #region Constructor - public UserRepository(string connectionString) - { - _connectionString = connectionString; - } - #endregion + #region Constructor + public UserRepository(string connectionString) + { + _connectionString = connectionString; + } + #endregion - #region Methods - public void SaveUser(User user) - { - try - { - _logger.Info("Saving user"); + #region Methods + public void SaveUser(User user) + { + try + { + _logger.Info("Saving user"); - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); - string query = "INSERT INTO User(Username, Password, Nickname, Email" + - ", PhoneNumber, Firstname, Lastname, EmailVerified) " + - "VALUES(@Username, @Password, @Nickname, @Email, @PhoneNumber," + - " @Firstname, @Lastname, @EmailVerified)"; + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + string query = "INSERT INTO User(Username, Password, Nickname, Email" + + ", PhoneNumber, Firstname, Lastname, EmailVerified) " + + "VALUES(@Username, @Password, @Nickname, @Email, @PhoneNumber," + + " @Firstname, @Lastname, @EmailVerified)"; - using (MySqlCommand cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@Username", user.Username); - cmd.Parameters.AddWithValue("@Password", user.Password); - cmd.Parameters.AddWithValue("@Nickname", user.Nickname); - cmd.Parameters.AddWithValue("@Email", user.Email); - cmd.Parameters.AddWithValue("@PhoneNumber", user.PhoneNumber); - cmd.Parameters.AddWithValue("@Firstname", user.Firstname); - cmd.Parameters.AddWithValue("@Lastname", user.Lastname); - cmd.Parameters.AddWithValue("@EmailVerified", user.EmailVerified); + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Username", user.Username); + cmd.Parameters.AddWithValue("@Password", user.Password); + cmd.Parameters.AddWithValue("@Nickname", user.Nickname); + cmd.Parameters.AddWithValue("@Email", user.Email); + cmd.Parameters.AddWithValue("@PhoneNumber", user.PhoneNumber); + cmd.Parameters.AddWithValue("@Firstname", user.Firstname); + cmd.Parameters.AddWithValue("@Lastname", user.Lastname); + cmd.Parameters.AddWithValue("@EmailVerified", user.EmailVerified); - cmd.ExecuteNonQuery(); - } - } + cmd.ExecuteNonQuery(); + } + } - _logger.Info("Successfully saved user"); - } - catch (Exception ex) - { - var exMsg = ex.Message; - Console.WriteLine($"An error occurred:\n{exMsg}"); - _logger.Error(exMsg, "An error occurred"); - } - } + _logger.Info("Successfully saved user"); + } + catch (Exception ex) + { + var exMsg = ex.Message; + Console.WriteLine($"An error occurred:\n{exMsg}"); + _logger.Error(exMsg, "An error occurred"); + } + } - public User RetrieveUser(User user) - { - try - { - _logger.Info("Retrieving user"); + public User RetrieveUser(User user) + { + try + { + _logger.Info("Retrieving user"); - using (MySqlConnection conn = GetConnection()) - { - conn.Open(); - var query = "SELECT * FROM User WHERE Username=@Username"; + using (MySqlConnection conn = GetConnection()) + { + conn.Open(); + var query = "SELECT * FROM User WHERE Username=@Username"; - using (MySqlCommand cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@Username", user.Username); + using (MySqlCommand cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Username", user.Username); - using (var reader = cmd.ExecuteReader()) - { - user = ParseSingleData(reader); - } - } - } + using (var reader = cmd.ExecuteReader()) + user = ParseSingleData(reader); + } + } - _logger.Info("Successfully retrieved user"); + _logger.Info("Successfully retrieved user"); - return user; - } - catch (Exception ex) - { - var exMsg = ex.Message; - Console.WriteLine($"An error occurred:\n{exMsg}"); - _logger.Error(exMsg, "An error occurred"); - } + return user; + } + catch (Exception ex) + { + var exMsg = ex.Message; + Console.WriteLine($"An error occurred:\n{exMsg}"); + _logger.Error(exMsg, "An error occurred"); + } - return null; - } + return null; + } - public bool DoesUserExist(User user) - { - var username = user.Username; - try - { - _logger.Info($"Checking to see if {user.Username} exists"); + public bool DoesUserExist(User user) + { + var username = user.Username; + try + { + _logger.Info($"Checking to see if {user.Username} exists"); - using (var conn = GetConnection()) - { - conn.Open(); - var query = "SELECT * FROM User WHERE Username=@Username"; + using (var conn = GetConnection()) + { + conn.Open(); + var query = "SELECT * FROM User WHERE Username=@Username"; - using (var cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@Username", user.Username); - - using (var reader = cmd.ExecuteReader()) - { - user = ParseSingleData(reader, true); - username = user.Username; + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@Username", user.Username); + + using (var reader = cmd.ExecuteReader()) + { + user = ParseSingleData(reader, true); + username = user.Username; - if (!string.IsNullOrEmpty(username)) - { - _logger.Info($"The user {username} exists"); + if (!string.IsNullOrEmpty(username)) + { + _logger.Info($"The user {username} exists"); - return true; - } - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } + return true; + } + } + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } - _logger.Info($"The user {username} does not exists"); + _logger.Info($"The user {username} does not exists"); - return false; - } + return false; + } - private User ParseSingleData(MySqlDataReader reader) - { - var user = new User(); + private User ParseSingleData(MySqlDataReader reader) + { + var user = new User(); - while (reader.Read()) - { - var id = Convert.ToInt32(reader["Id"].ToString()); - var username = reader["Username"].ToString(); - var password = reader["Password"].ToString(); - var nickname = reader["Nickname"].ToString(); - var email = reader["Email"].ToString(); - var phoneNumber = reader["PhoneNumber"].ToString(); - var emailVerified = reader["EmailVerified"].ToString() == "1"; - var firstname = reader["Firstname"].ToString(); - var lastname = reader["Lastname"].ToString(); - var rawLastLogin = reader["LastLogin"].ToString(); + while (reader.Read()) + { + var id = Convert.ToInt32(reader["Id"].ToString()); + var username = reader["Username"].ToString(); + var password = reader["Password"].ToString(); + var nickname = reader["Nickname"].ToString(); + var email = reader["Email"].ToString(); + var phoneNumber = reader["PhoneNumber"].ToString(); + var emailVerified = reader["EmailVerified"].ToString() == "1"; + var firstname = reader["Firstname"].ToString(); + var lastname = reader["Lastname"].ToString(); + var rawLastLogin = reader["LastLogin"].ToString(); - var parsedDateCreated = DateTime.Parse(reader["DateCreated"].ToString()); + var parsedDateCreated = DateTime.Parse(reader["DateCreated"].ToString()); - var dateCreated = DateTime.Parse(parsedDateCreated.ToString("yyyy-MM-dd HH:mm:ss")); + var dateCreated = DateTime.Parse(parsedDateCreated.ToString("yyyy-MM-dd HH:mm:ss")); - if (!string.IsNullOrEmpty(rawLastLogin)) - { - var parsedLastLogin = DateTime.Parse(rawLastLogin); - var lastLogin = DateTime.Parse(parsedLastLogin.ToString("yyyy-MM-dd HH:mm:ss")); - user.LastLogin = lastLogin; - } + if (!string.IsNullOrEmpty(rawLastLogin)) + { + var parsedLastLogin = DateTime.Parse(rawLastLogin); + var lastLogin = DateTime.Parse(parsedLastLogin.ToString("yyyy-MM-dd HH:mm:ss")); + user.LastLogin = lastLogin; + } - user.Id = id; - user.Username = username; - user.Password = password; - user.Nickname = nickname; - user.Email = email; - user.PhoneNumber = phoneNumber; - user.EmailVerified = emailVerified; - user.Firstname = firstname; - user.Lastname = lastname; - user.DateCreated = dateCreated; - } + user.Id = id; + user.Username = username; + user.Password = password; + user.Nickname = nickname; + user.Email = email; + user.PhoneNumber = phoneNumber; + user.EmailVerified = emailVerified; + user.Firstname = firstname; + user.Lastname = lastname; + user.DateCreated = dateCreated; + } - return user; - } - private User ParseSingleData(MySqlDataReader reader, bool ignoreLastLogin) - { - var user = new User(); + return user; + } + private User ParseSingleData(MySqlDataReader reader, bool ignoreLastLogin) + { + var user = new User(); - while (reader.Read()) - { - var id = Convert.ToInt32(reader["Id"].ToString()); - var username = reader["Username"].ToString(); - var nickname = reader["Nickname"].ToString(); - var email = reader["Email"].ToString(); - var phoneNumber = reader["PhoneNumber"].ToString(); - var emailVerified = reader["EmailVerified"].ToString() == "1"; - var firstname = reader["Firstname"].ToString(); - var lastname = reader["Lastname"].ToString(); + while (reader.Read()) + { + var id = Convert.ToInt32(reader["Id"].ToString()); + var username = reader["Username"].ToString(); + var nickname = reader["Nickname"].ToString(); + var email = reader["Email"].ToString(); + var phoneNumber = reader["PhoneNumber"].ToString(); + var emailVerified = reader["EmailVerified"].ToString() == "1"; + var firstname = reader["Firstname"].ToString(); + var lastname = reader["Lastname"].ToString(); - var parsedDateCreated = DateTime.Parse(reader["DateCreated"].ToString()); + var parsedDateCreated = DateTime.Parse(reader["DateCreated"].ToString()); - var dateCreated = DateTime.Parse(parsedDateCreated.ToString("yyyy-MM-dd HH:mm:ss")); + var dateCreated = DateTime.Parse(parsedDateCreated.ToString("yyyy-MM-dd HH:mm:ss")); - if (!ignoreLastLogin) - { - var parsedLastLogin = DateTime.Parse(reader["LastLogin"].ToString()); - var lastLogin = DateTime.Parse(parsedLastLogin.ToString("yyyy-MM-dd HH:mm:ss")); - user.LastLogin = lastLogin; - } + if (!ignoreLastLogin) + { + var parsedLastLogin = DateTime.Parse(reader["LastLogin"].ToString()); + var lastLogin = DateTime.Parse(parsedLastLogin.ToString("yyyy-MM-dd HH:mm:ss")); + user.LastLogin = lastLogin; + } - user.Id = id; - user.Username = username; - user.Nickname = nickname; - user.Email = email; - user.PhoneNumber = phoneNumber; - user.EmailVerified = emailVerified; - user.Firstname = firstname; - user.Lastname = lastname; - user.DateCreated = dateCreated; - } + user.Id = id; + user.Username = username; + user.Nickname = nickname; + user.Email = email; + user.PhoneNumber = phoneNumber; + user.EmailVerified = emailVerified; + user.Firstname = firstname; + user.Lastname = lastname; + user.DateCreated = dateCreated; + } - return user; - } - #endregion - } + return user; + } + #endregion + } } diff --git a/Database/Repositories/YearRepository.cs b/Database/Repositories/YearRepository.cs index 2bf1c26..e44cde0 100644 --- a/Database/Repositories/YearRepository.cs +++ b/Database/Repositories/YearRepository.cs @@ -8,374 +8,360 @@ using Icarus.Models; namespace Icarus.Database.Repositories { - public class YearRepository : BaseRepository - { - #region Fields - #endregion - - - #region Properties - #endregion - - - #region Constructors - public YearRepository(string connectionString) - { - _connectionString = connectionString; - } - #endregion - - - #region Methods - public List GetSongYears() - { - _logger.Info("Retrieving Year records"); - - var yearValues = new List(); - - try - { - using (var conn = GetConnection()) - { - conn.Open(); - - var query = "SELECT yr.*, COUNT(*) AS SongCount FROM Year " + - "yr LEFT JOIN Song sng ON yr.YearId=sng.YearId " + - "GROUP BY yr.YearId"; - - using (var cmd = new MySqlCommand(query, conn)) - { - using (var reader = cmd.ExecuteReader()) - { - yearValues = ParseData(reader); - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - - return yearValues; - } - - public Year GetSongYear(Year year) - { - _logger.Info("Retrieving Year record"); - - try - { - using (var conn = GetConnection()) - { - conn.Open(); - - var query = "SELECT yr.*, COUNT(*) AS SongCount FROM Year " + - "yr LEFT JOIN Song sng ON yr.YearId=sng.YearId WHERE " + - "YearId=@YearId GROUP BY yr.YearId"; - - using (var cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@YearId", year.YearId); - - using (var reader = cmd.ExecuteReader()) - { - year = ParseSingleData(reader); - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - - return year; - } - public Year GetSongYear(Song song) - { - var year = new Year(); - - _logger.Info("Retrieving Year record"); - - try - { - using (var conn = GetConnection()) - { - conn.Open(); - - var query = "SELECT yr.*, 0 AS SongCount FROM Year " + - "yr WHERE yr.YearValue=@YearValue"; - - using(var cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@YearValue", song.Year); - - using (var reader = cmd.ExecuteReader()) - { - year = ParseSingleData(reader); - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - - return year; - } - public Year GetSongYear(Song song, bool retrieveCount) - { - var year = new Year(); - - _logger.Info("Retrieving year record"); - - try - { - using (var conn = GetConnection()) - { - conn.Open(); - - var query = string.Empty; - - if (retrieveCount) - { - query = "SELECT yr.*, COUNT(*) AS SongCount FROM Year yr " + - "LEFT JOIN Song sng ON yr.YearValue=sng.Year WHERE " + - "yr.YearValue=@YearValue GROUP BY yr.YearId LIMIT 1"; - } - else - { - query = "SELECT yr.*, 0 AS SongCount FROM Year yr " + - "WHERE yr.YearValue=@YearValue LIMIT 1"; - } - - using(var cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@YearValue", song.Year); - - using (var reader = cmd.ExecuteReader()) - { - year = ParseSingleData(reader); - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - - return year; - } - - public bool DoesYearExist(Year year) - { - _logger.Info("Checking to see if Year record exists"); - - try - { - using (var conn = GetConnection()) - { - conn.Open(); - - var query = "SELECT yr.*, 0 AS SongCount FROM Year yr WHERE " + - "yr.YearId=@YearId"; - - using (var cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@YearId", year.YearId); - - using (var reader = cmd.ExecuteReader()) - { - year = ParseSingleData(reader); - - if (year.YearValue > 0) - { - _logger.Info("Year record exists"); - - return true; - } - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - - _logger.Info("Year record does not exist"); - - return false; - } - public bool DoesYearExist(Song song) - { - _logger.Info("Checking to see if Year record exists"); - - try - { - using (var conn = GetConnection()) - { - conn.Open(); - - var query = "SELECT yr.*, 0 AS SongCount FROM Year yr WHERE " + - "yr.YearValue=@YearValue"; - - using (var cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@YearValue", song.Year); - - using (var reader = cmd.ExecuteReader()) - { - var year = ParseSingleData(reader); - - if (year.YearValue > 0) - { - _logger.Info("Year record exists"); - - return true; - } - } - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - - _logger.Info("Year record does not exist"); - - return false; - } - - public void SaveYear(Year year) - { - _logger.Info("Saving Year record"); - - try - { - using (var conn = GetConnection()) - { - conn.Open(); - - var query = "INSERT INTO Year(YearValue) VALUES(@YearValue)"; - - using (var cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@YearValue", year.YearValue); - - cmd.ExecuteNonQuery(); - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } - public void UpdateYear(Year year) - { - _logger.Info("Deleting Year record"); - - try - { - using (var conn = GetConnection()) - { - conn.Open(); - - 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.ExecuteNonQuery(); - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } - public void DeleteYear(Year year) - { - _logger.Info("Deleting Year record"); - - try - { - using (var conn = GetConnection()) - { - conn.Open(); - - var query = "DELETE FROM Year WHERE YearId=@YearId"; - - using (var cmd = new MySqlCommand(query, conn)) - { - cmd.Parameters.AddWithValue("@YearId", year.YearId); - - cmd.ExecuteNonQuery(); - } - } - } - catch (Exception ex) - { - var msg = ex.Message; - _logger.Error(msg, "An error occurred"); - } - } - - private List ParseData(MySqlDataReader reader) - { - var yearValues = new List(); - - while (reader.Read()) - { - var id = Convert.ToInt32(reader["YearId"].ToString()); - var year = Convert.ToInt32(reader["YearValue"].ToString()); - var songCount = Convert.ToInt32(reader["SongCount"].ToString()); - - yearValues.Add(new Year - { - YearId = id, - YearValue = year, - SongCount = songCount - }); - } - - - return yearValues; - } - - private Year ParseSingleData(MySqlDataReader reader) - { - var yearValue = new Year(); - - while (reader.Read()) - { - var id = Convert.ToInt32(reader["YearId"].ToString()); - var year = Convert.ToInt32(reader["YearValue"].ToString()); - var songCount = Convert.ToInt32(reader["SongCount"].ToString()); - - yearValue.YearId = id; - yearValue.YearValue = year; - yearValue.SongCount = songCount; - } - - return yearValue; - } - #endregion - } + public class YearRepository : BaseRepository + { + #region Fields + #endregion + + + #region Properties + #endregion + + + #region Constructors + public YearRepository(string connectionString) + { + _connectionString = connectionString; + } + #endregion + + + #region Methods + public List GetSongYears() + { + _logger.Info("Retrieving Year records"); + + var yearValues = new List(); + + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT yr.*, COUNT(*) AS SongCount FROM Year " + + "yr LEFT JOIN Song sng ON yr.YearId=sng.YearId " + + "GROUP BY yr.YearId"; + + using (var cmd = new MySqlCommand(query, conn)) + using (var reader = cmd.ExecuteReader()) + yearValues = ParseData(reader); + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + return yearValues; + } + + public Year GetSongYear(Year year) + { + _logger.Info("Retrieving Year record"); + + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT yr.*, COUNT(*) AS SongCount FROM Year " + + "yr LEFT JOIN Song sng ON yr.YearId=sng.YearId WHERE " + + "YearId=@YearId GROUP BY yr.YearId"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@YearId", year.YearId); + + using (var reader = cmd.ExecuteReader()) + year = ParseSingleData(reader); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + return year; + } + public Year GetSongYear(Song song) + { + var year = new Year(); + + _logger.Info("Retrieving Year record"); + + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT yr.*, 0 AS SongCount FROM Year " + + "yr WHERE yr.YearValue=@YearValue"; + + using(var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@YearValue", song.Year); + + using (var reader = cmd.ExecuteReader()) + year = ParseSingleData(reader); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + return year; + } + public Year GetSongYear(Song song, bool retrieveCount) + { + var year = new Year(); + + _logger.Info("Retrieving year record"); + + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = string.Empty; + + if (retrieveCount) + query = "SELECT yr.*, COUNT(*) AS SongCount FROM Year yr " + + "LEFT JOIN Song sng ON yr.YearValue=sng.Year WHERE " + + "yr.YearValue=@YearValue GROUP BY yr.YearId LIMIT 1"; + else + query = "SELECT yr.*, 0 AS SongCount FROM Year yr " + + "WHERE yr.YearValue=@YearValue LIMIT 1"; + + using(var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@YearValue", song.Year); + + using (var reader = cmd.ExecuteReader()) + year = ParseSingleData(reader); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + return year; + } + + public bool DoesYearExist(Year year) + { + _logger.Info("Checking to see if Year record exists"); + + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT yr.*, 0 AS SongCount FROM Year yr WHERE " + + "yr.YearId=@YearId"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@YearId", year.YearId); + + using (var reader = cmd.ExecuteReader()) + { + year = ParseSingleData(reader); + + if (year.YearValue > 0) + { + _logger.Info("Year record exists"); + + return true; + } + } + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + _logger.Info("Year record does not exist"); + + return false; + } + public bool DoesYearExist(Song song) + { + _logger.Info("Checking to see if Year record exists"); + + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "SELECT yr.*, 0 AS SongCount FROM Year yr WHERE " + + "yr.YearValue=@YearValue"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@YearValue", song.Year); + + using (var reader = cmd.ExecuteReader()) + { + var year = ParseSingleData(reader); + + if (year.YearValue > 0) + { + _logger.Info("Year record exists"); + + return true; + } + } + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + + _logger.Info("Year record does not exist"); + + return false; + } + + public void SaveYear(Year year) + { + _logger.Info("Saving Year record"); + + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "INSERT INTO Year(YearValue) VALUES(@YearValue)"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@YearValue", year.YearValue); + + cmd.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + public void UpdateYear(Year year) + { + _logger.Info("Deleting Year record"); + + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + 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.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + public void DeleteYear(Year year) + { + _logger.Info("Deleting Year record"); + + try + { + using (var conn = GetConnection()) + { + conn.Open(); + + var query = "DELETE FROM Year WHERE YearId=@YearId"; + + using (var cmd = new MySqlCommand(query, conn)) + { + cmd.Parameters.AddWithValue("@YearId", year.YearId); + + cmd.ExecuteNonQuery(); + } + } + } + catch (Exception ex) + { + var msg = ex.Message; + _logger.Error(msg, "An error occurred"); + } + } + + private List ParseData(MySqlDataReader reader) + { + var yearValues = new List(); + + while (reader.Read()) + { + var id = Convert.ToInt32(reader["YearId"].ToString()); + var year = Convert.ToInt32(reader["YearValue"].ToString()); + var songCount = Convert.ToInt32(reader["SongCount"].ToString()); + + yearValues.Add(new Year + { + YearId = id, + YearValue = year, + SongCount = songCount + }); + } + + + return yearValues; + } + + private Year ParseSingleData(MySqlDataReader reader) + { + var yearValue = new Year(); + + while (reader.Read()) + { + var id = Convert.ToInt32(reader["YearId"].ToString()); + var year = Convert.ToInt32(reader["YearValue"].ToString()); + var songCount = Convert.ToInt32(reader["SongCount"].ToString()); + + yearValue.YearId = id; + yearValue.YearValue = year; + yearValue.SongCount = songCount; + } + + return yearValue; + } + #endregion + } } diff --git a/Startup.cs b/Startup.cs index d7851ae..64a6f26 100644 --- a/Startup.cs +++ b/Startup.cs @@ -134,15 +134,11 @@ namespace Icarus public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) - { app.UseDeveloperExceptionPage(); - } else - { // The default HSTS value is 30 days. // You may want to change this for production scenarios app.UseHsts(); - } app.UseAuthentication();