diff --git a/Controllers/Managers/BaseManagers.cs b/Controllers/Managers/BaseManagers.cs index 125457d..fcc8d5d 100644 --- a/Controllers/Managers/BaseManagers.cs +++ b/Controllers/Managers/BaseManagers.cs @@ -1,5 +1,6 @@ using System; +using Microsoft.Extensions.Configuration; using NLog; namespace Icarus.Controllers.Managers @@ -8,6 +9,8 @@ namespace Icarus.Controllers.Managers { #region Fields protected static Logger _logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger(); + protected IConfiguration _config; + protected string _connectionString; #endregion } } diff --git a/Controllers/Managers/CoverArtManager.cs b/Controllers/Managers/CoverArtManager.cs index fa1be6b..58655dd 100644 --- a/Controllers/Managers/CoverArtManager.cs +++ b/Controllers/Managers/CoverArtManager.cs @@ -1,9 +1,12 @@ using System; using System.Collections.Generic; +using System.Linq; +using Microsoft.Extensions.Configuration; using System.IO; using Icarus.Constants; using Icarus.Controllers.Utilities; +using Icarus.Database.Contexts; using Icarus.Models; using Icarus.Types; @@ -13,36 +16,39 @@ namespace Icarus.Controllers.Managers { #region Fields private string _rootCoverArtPath; + private CoverArtContext _coverArtContext; private byte[] _stockCoverArt = null; #endregion #region Constructors - public CoverArtManager(string rootPath) + public CoverArtManager(IConfiguration config) { - _rootCoverArtPath = rootPath; + _config = config; + _connectionString = _config.GetConnectionString("DefaultConnection"); + _rootCoverArtPath = _config.GetValue("CoverArtPath"); Initialize(); } #endregion #region Methods - public void SaveCoverArtToDatabase(ref Song song, ref CoverArt coverArt, - CoverArtRepository coverArtRepository) + public void SaveCoverArtToDatabase(ref Song song, ref CoverArt coverArt) { _logger.Info("Saving cover art record to the database"); - coverArtRepository.SaveCoverArt(coverArt); + _coverArtContext.Add(coverArt); + var songTitle = coverArt.SongTitle; - coverArt = coverArtRepository.GetCoverArt(CoverArtField.SongTitle, - coverArt); + coverArt = _coverArtContext.CoverArtImages.FirstOrDefault(cov => cov.SongTitle.Equals(songTitle)); - song.CoverArtId = coverArt.CoverArtId; + song.CoverArtID = coverArt.CoverArtID; } - public void DeleteCoverArtFromDatabase(CoverArt coverArt, - CoverArtRepository coverArtRepository) + public void DeleteCoverArtFromDatabase(CoverArt coverArt) { _logger.Info("Attempting to delete cover art from the database"); - coverArtRepository.DeleteCoverArt(coverArt); + + _coverArtContext.Remove(coverArt); + _coverArtContext.SaveChanges(); } public void DeleteCoverArt(CoverArt coverArt) { @@ -109,8 +115,15 @@ namespace Icarus.Controllers.Managers return null; } + public CoverArt GetCoverArt(Song song) + { + return _coverArtContext.CoverArtImages.FirstOrDefault(cov => cov.SongTitle.Equals(song.Title)); + } + private void Initialize() { + _coverArtContext = new CoverArtContext(_connectionString); + if (System.IO.File.Exists(DirectoryPaths.CoverArtPath)) _stockCoverArt = File.ReadAllBytes(DirectoryPaths.CoverArtPath); diff --git a/Controllers/Managers/DirectoryManager.cs b/Controllers/Managers/DirectoryManager.cs index 55880d2..10c1c5f 100644 --- a/Controllers/Managers/DirectoryManager.cs +++ b/Controllers/Managers/DirectoryManager.cs @@ -12,7 +12,6 @@ namespace Icarus.Controllers.Managers public class DirectoryManager : BaseManager { #region Fields - private IConfiguration _config; private Song _song; private string _rootSongDirectory; private string _songDirectory; diff --git a/Controllers/Managers/SongManager.cs b/Controllers/Managers/SongManager.cs index ec76637..88bf6ba 100644 --- a/Controllers/Managers/SongManager.cs +++ b/Controllers/Managers/SongManager.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Configuration; +using System.Linq; using System.Data; using System.IO; using System.Threading.Tasks; @@ -19,12 +20,11 @@ namespace Icarus.Controllers.Managers public class SongManager : BaseManager { #region Fields - private IConfiguration _config; - private string _connectionString; private string _tempDirectoryRoot; private string _archiveDirectoryRoot; private string _compressedSongFilename; private string _message; + private SongContext _songContext; #endregion @@ -78,7 +78,7 @@ namespace Icarus.Controllers.Managers try { - var oldSongRecord = songStore.GetSong(song); + var oldSongRecord = _songContext.RetrieveRecord(song); song.SongPath = oldSongRecord.SongPath; MetadataRetriever updateMetadata = new MetadataRetriever(); @@ -86,16 +86,16 @@ namespace Icarus.Controllers.Managers var updatedSong = updateMetadata.UpdatedSongRecord; - var updatedAlbum = UpdateAlbumInDatabase(oldSongRecord, updatedSong) - oldSongRecord.AlbumId = updatedAlbum.AlbumId; + var updatedAlbum = UpdateAlbumInDatabase(oldSongRecord, updatedSong); + oldSongRecord.AlbumID = updatedAlbum.AlbumID; var updatedArtist = UpdateArtistInDatabase(oldSongRecord, updatedSong); - oldSongRecord.ArtistId = updatedArtist.ArtistId; + oldSongRecord.ArtistID = updatedArtist.ArtistID; var updatedGenre = UpdateGenreInDatabase(oldSongRecord, updatedSong); - Console.WriteLine($"Old Genre Id {oldSongRecord.GenreId}"); - oldSongRecord.GenreId = updatedGenre.GenreId; - Console.WriteLine($"Updated Genre Id {updatedGenre.GenreId}"); + Console.WriteLine($"Old Genre Id {oldSongRecord.GenreID}"); + oldSongRecord.GenreID = updatedGenre.GenreID; + Console.WriteLine($"Updated Genre ID {updatedGenre.GenreID}"); UpdateSongInDatabase(ref oldSongRecord, ref updatedSong, ref result); @@ -148,9 +148,9 @@ namespace Icarus.Controllers.Managers } _logger.Info("Song deleted from the filesystem"); - var coverMgr = new CoverArtManager(_config.GetValue( - "CoverArtPath")); - var coverArt = coverStore.GetCoverArt(song); + var coverMgr = new CoverArtManager(_config); + // var coverArt = coverStore.GetCoverArt(song); + var coverArt = coverMgr.GetCoverArt(song); coverMgr.DeleteCoverArt(coverArt); coverMgr.DeleteCoverArtFromDatabase(coverArt); @@ -205,7 +205,7 @@ namespace Icarus.Controllers.Managers _logger.Info("Song successfully saved to filesystem"); } - var coverMgr = new CoverArtManager(_config.GetValue("CoverArtPath")); + var coverMgr = new CoverArtManager(_config); var coverArt = coverMgr.SaveCoverArt(song); coverMgr.SaveCoverArtToDatabase(ref song, ref coverArt);//, @@ -298,13 +298,13 @@ namespace Icarus.Controllers.Managers { try { - _connectionString = _config.GetConnectionString("IcarusDev"); + _connectionString = _config.GetConnectionString("DefaultConnection"); + _songContext = new SongContext(_connectionString); } catch (Exception ex) { Console.WriteLine($"Error Occurred: {ex.Message}"); } - } @@ -321,7 +321,7 @@ namespace Icarus.Controllers.Managers var info = "Saving Song to DB"; Console.WriteLine(info); _logger.Info(info); - songStore.SaveSong(song); + _songContext.Add(song); } private void SaveAlbumToDatabase(ref Song song)//, AlbumRepository albumStore) { @@ -331,24 +331,26 @@ namespace Icarus.Controllers.Managers album.Title = song.AlbumTitle; album.AlbumArtist = song.Artist; + var albumTitle = song.AlbumTitle; + AlbumContext albumContext = new AlbumContext(_connectionString); - if (!albumStore.DoesAlbumExist(song)) + if (!(albumContext.Albums.FirstOrDefault(alb => alb.Title.Equals(albumTitle)) != null)) { album.SongCount = 1; - albumStore.SaveAlbum(album); - album = albumStore.GetAlbum(song); - Console.WriteLine($"Album Id {album.AlbumId}"); + albumContext.Add(album); + album = albumContext.Albums.FirstOrDefault(alb => alb.Title.Equals(albumTitle)); + Console.WriteLine($"Album Id {album.AlbumID}"); } else { - var albumRetrieved = albumStore.GetAlbum(song); - album.AlbumId = albumRetrieved.AlbumId; + var albumRetrieved = albumContext.Albums.FirstOrDefault(alb => alb.Title.Equals(albumTitle)); + album.AlbumID = albumRetrieved.AlbumID; album.SongCount = albumRetrieved.SongCount + 1; - albumStore.UpdateAlbum(album); + albumContext.Update(album); } - song.AlbumId = album.AlbumId; + song.AlbumID = album.AlbumID; } private void SaveArtistToDatabase(ref Song song)//, ArtistRepository artistStore) { @@ -358,23 +360,26 @@ namespace Icarus.Controllers.Managers artist.Name = song.Artist; artist.SongCount = 1; + var artistTitle = artist.Name; + ArtistContext artistContext = new ArtistContext(_connectionString); - if (!artistStore.DoesArtistExist(song)) + if (!(artistContext.Artists.FirstOrDefault(art => art.Name.Equals(artistTitle)) != null)) { artist.SongCount = 1; - artistStore.SaveArtist(artist); - artist = artistStore.GetArtist(song); + artistContext.Add(artist); + artist = artistContext.Artists.FirstOrDefault(art => art.Name.Equals(artistTitle)); } else { - var artistRetrieved = artistStore.GetArtist(song); - artist.ArtistId = artistRetrieved.ArtistId; + var artistRetrieved = artistContext.Artists.FirstOrDefault(art => art.Name.Equals(artistTitle)); + artist.ArtistID = artistRetrieved.ArtistID; artist.SongCount = artistRetrieved.SongCount + 1; - artistStore.UpdateArtist(artist); + artistContext.Update(artist); + artistContext.SaveChanges(); } - song.ArtistId = artist.ArtistId; + song.ArtistID = artist.ArtistID; } private void SaveGenreToDatabase(ref Song song)//, GenreRepository genreStore) { @@ -386,26 +391,30 @@ namespace Icarus.Controllers.Managers SongCount = 1 }; - if (!genreStore.DoesGenreExist(song)) + var genreName = song.Genre; + var genreContext = new GenreContext(_connectionString); + + if (! (genreContext.Genres.FirstOrDefault(gnr => gnr.GenreName.Equals(genreName)) != null)) { - genreStore.SaveGenre(genre); + genreContext.Add(genre); Console.WriteLine("Going to find genre"); - genre = genreStore.GetGenre(song); - var genreDump = $"Genre id {genre.GenreId} GenreName {genre.GenreName}" + + genre = genreContext.Genres.FirstOrDefault(gnr => gnr.GenreName.Equals(genreName)); + 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; + var genreRetrieved = genreContext.Genres.FirstOrDefault(gnr => gnr.GenreName.Equals(genreName)); + genre.GenreID = genreRetrieved.GenreID; genre.SongCount = genreRetrieved.SongCount + 1; - genreStore.UpdateGenre(genre); + genreContext.Update(genre); + genreContext.SaveChanges(); } - song.GenreId = genre.GenreId; + song.GenreID = genre.GenreID; } @@ -446,7 +455,9 @@ namespace Icarus.Controllers.Managers private Album UpdateAlbumInDatabase(Song oldSongRecord, Song newSongRecord)//, AlbumRepository albumStore) { - var albumRecord = albumStore.GetAlbum(oldSongRecord, true); + var albumContext = new AlbumContext(_connectionString); + + var albumRecord = albumContext.Albums.FirstOrDefault(alb => alb.Title.Equals(oldSongRecord.AlbumTitle)); var oldAlbumTitle = oldSongRecord.AlbumTitle; var oldAlbumArtist = oldSongRecord.Artist; var newAlbumTitle = newSongRecord.AlbumTitle; @@ -469,7 +480,7 @@ namespace Icarus.Controllers.Managers info = "Change to the song's album"; _logger.Info(info); - if (!albumStore.DoesAlbumExist(newSongRecord)) + if (!(albumContext.Albums.FirstOrDefault(alb => alb.Title.Equals(newSongRecord.AlbumTitle)) != null)) { _logger.Info("Creating new album record"); @@ -479,25 +490,28 @@ namespace Icarus.Controllers.Managers AlbumArtist = newAlbumArtist }; - albumStore.SaveAlbum(newAlbumRecord); + albumContext.Add(newAlbumRecord); - return albumStore.GetAlbum(newSongRecord, true); + return albumContext.Albums.FirstOrDefault(alb => alb.Title.Equals(oldSongRecord.AlbumTitle)); } else { _logger.Info("Updating existing album record"); - var existingAlbumRecord = albumStore.GetAlbum(newSongRecord); + var existingAlbumRecord = albumContext.Albums.FirstOrDefault(alb => alb.Title.Equals(newSongRecord.AlbumTitle)); existingAlbumRecord.AlbumArtist = newAlbumArtist; - albumStore.UpdateAlbum(existingAlbumRecord); + albumContext.Update(existingAlbumRecord); + albumContext.SaveChanges(); return existingAlbumRecord; } } private Artist UpdateArtistInDatabase(Song oldSongRecord, Song newSongRecord)//, ArtistRepository artistStore) { - var oldArtistRecord = artistStore.GetArtist(oldSongRecord, true); + var artistContext = new ArtistContext(_connectionString); + + var oldArtistRecord = artistContext.Artists.FirstOrDefault(art => art.Name.Equals(oldSongRecord.AlbumTitle)); var oldArtistName = oldArtistRecord.Name; var newArtistName = newSongRecord.Artist; @@ -513,10 +527,11 @@ namespace Icarus.Controllers.Managers { _logger.Info("Deleting artist record that no longer has any songs"); - artistStore.DeleteArtist(oldArtistRecord); + artistContext.Remove(oldArtistRecord); + artistContext.SaveChanges(); } - if (!artistStore.DoesArtistExist(newSongRecord)) + if (!(artistContext.Artists.FirstOrDefault(art => art.Name.Equals(oldSongRecord.AlbumTitle)) != null)) { _logger.Info("Creating new artist record"); @@ -525,24 +540,26 @@ namespace Icarus.Controllers.Managers Name = newArtistName }; - artistStore.SaveArtist(newArtistRecord); + artistContext.Add(newArtistRecord); - return artistStore.GetArtist(newSongRecord, true); + return artistContext.Artists.FirstOrDefault(art => art.Name.Equals(newSongRecord.AlbumTitle)); } else { _logger.Info("Updating existing artist record"); - var existingArtistRecord = artistStore.GetArtist(newSongRecord); + var existingArtistRecord = artistContext.Artists.FirstOrDefault(art => art.Name.Equals(newSongRecord.AlbumTitle)); - artistStore.UpdateArtist(existingArtistRecord); + artistContext.Update(existingArtistRecord); + artistContext.SaveChanges(); return existingArtistRecord; } } private Genre UpdateGenreInDatabase(Song oldSongRecord, Song newSongRecord)//, GenreRepository genreStore) { - var oldGenreRecord = genreStore.GetGenre(oldSongRecord, true); + var genreContext = new GenreContext(_connectionString); + var oldGenreRecord = genreContext.Genres.FirstOrDefault(gnr => gnr.GenreName.Equals(oldSongRecord.Genre)); var oldGenreName = oldGenreRecord.GenreName; var newGenreName = newSongRecord.Genre; @@ -558,10 +575,11 @@ namespace Icarus.Controllers.Managers { _logger.Info("Deleting genre record"); - genreStore.DeleteGenre(oldGenreRecord); + genreContext.Remove(oldGenreRecord); + genreContext.SaveChanges(); } - if (!genreStore.DoesGenreExist(newSongRecord)) + if (!(genreContext.Genres.FirstOrDefault(gnr => gnr.GenreName.Equals(oldSongRecord.Genre)) != null)) { _logger.Info("Creating new genre record"); @@ -570,18 +588,19 @@ namespace Icarus.Controllers.Managers GenreName = newGenreName }; - genreStore.SaveGenre(newGenreRecord); + genreContext.Add(newGenreRecord); - return genreStore.GetGenre(newSongRecord, true); + return genreContext.Genres.FirstOrDefault(gnr => gnr.GenreName.Equals(newGenreRecord.GenreName)); } else { _logger.Info("Updating existing genre record"); - var existingGenreRecord = genreStore.GetGenre(newSongRecord); + var existingGenreRecord = genreContext.Genres.FirstOrDefault(gnr => gnr.GenreName.Equals(oldGenreRecord.GenreName)); - genreStore.UpdateGenre(existingGenreRecord); - return genreStore.GetGenre(existingGenreRecord); + genreContext.Update(existingGenreRecord); + genreContext.SaveChanges(); + return genreContext.Genres.FirstOrDefault(gnr => gnr.GenreName.Equals(existingGenreRecord.GenreName)); } } @@ -598,14 +617,15 @@ namespace Icarus.Controllers.Managers Year = oldSongRecord.Year, Filename = oldSongRecord.Filename, SongPath = oldSongRecord.SongPath, - ArtistId = oldSongRecord.ArtistId, - AlbumId = oldSongRecord.AlbumId, - GenreId = oldSongRecord.GenreId, - YearId = oldSongRecord.YearId + ArtistID = oldSongRecord.ArtistID, + AlbumID = oldSongRecord.AlbumID, + GenreID = oldSongRecord.GenreID }; var artistOrAlbumChanged = false; + var songContext = new SongContext(_connectionString); + if (!SongRecordChanged(oldSongRecord, newSongRecord)) { _logger.Info("No change to the song record"); @@ -674,10 +694,13 @@ namespace Icarus.Controllers.Managers _logger.Info("Saving song metadata to the database"); - if (songStore.DoesSongExist(newSongRecord)) - songStore.UpdateSong(updatedSongRecord); + if (songContext.Songs.FirstOrDefault(sng => sng.Title.Equals(updatedSongRecord.Title)) != null) + { + songContext.Update(updatedSongRecord); + songContext.SaveChanges(); + } else - songStore.SaveSong(updatedSongRecord); + songContext.Add(updatedSongRecord); newSongRecord = updatedSongRecord; @@ -700,42 +723,57 @@ namespace Icarus.Controllers.Managers } private void DeleteAlbumFromDatabase(Song song)// AlbumRepository albumStore) { - if (!albumStore.DoesAlbumExist(song)) + var albumContext = new AlbumContext(_connectionString); + + if (!(albumContext.Albums.FirstOrDefault(alb => alb.Title.Equals(song.AlbumTitle)) != null)) { _logger.Info("Cannot delete the album record because it does not exist"); return; } - var album = albumStore.GetAlbum(song, true); + var album = albumContext.Albums.FirstOrDefault(alb => alb.Title.Equals(song.AlbumTitle)); if (album.SongCount <= 1) - albumStore.DeleteAlbum(album); + { + albumContext.Remove(album); + albumContext.SaveChanges(); + } } private void DeleteArtistFromDatabase(Song song)//, ArtistRepository artistStore) { - if (!artistStore.DoesArtistExist(song)) + var artistContext = new ArtistContext(_connectionString); + + if (!(artistContext.Artists.FirstOrDefault(art => art.Name.Equals(song.Artist)) != null)) { _logger.Info("Cannot delete the artist record because it does not exist"); return; } - var artist = artistStore.GetArtist(song, true); + var artist = artistContext.Artists.FirstOrDefault(art => art.Name.Equals(song.Artist)); if (artist.SongCount <= 1) - artistStore.DeleteArtist(artist); + { + artistContext.Remove(artist); + artistContext.SaveChanges(); + } } private void DeleteGenreFromDatabase(Song song)//, GenreRepository genreStore) { - if (!genreStore.DoesGenreExist(song)) + var genreContext = new GenreContext(_connectionString); + + if (!(genreContext.Genres.FirstOrDefault(gnr => gnr.GenreName.Equals(song.Genre)) != null)) { _logger.Info("Cannot delete the genre record because it does not exist"); return; } - var genre = genreStore.GetGenre(song, true); + var genre = genreContext.Genres.FirstOrDefault(gnr => gnr.GenreName.Equals(song.Genre)); if (genre.SongCount <= 1) - genreStore.DeleteGenre(genre); + { + genreContext.Remove(genre); + genreContext.SaveChanges(); + } } diff --git a/Controllers/Managers/TokenManager.cs b/Controllers/Managers/TokenManager.cs index 1f48d3b..4dbd878 100644 --- a/Controllers/Managers/TokenManager.cs +++ b/Controllers/Managers/TokenManager.cs @@ -13,7 +13,6 @@ namespace Icarus.Controllers.Managers public class TokenManager : BaseManager { #region Fields - private IConfiguration _config; private string _clientId; private string _clientSecret; private string _audience; @@ -64,7 +63,7 @@ namespace Icarus.Controllers.Managers return new LoginResult { - UserId = user.Id, Username = user.Username, Token = tokenResult.AccessToken, + UserID = user.UserID, Username = user.Username, Token = tokenResult.AccessToken, TokenType = tokenResult.TokenType, Expiration = tokenResult.Expiration, Message = "Successfully retrieved token" }; diff --git a/Controllers/Utilities/MetadataRetriever.cs b/Controllers/Utilities/MetadataRetriever.cs index 392c5c3..5b3ec33 100644 --- a/Controllers/Utilities/MetadataRetriever.cs +++ b/Controllers/Utilities/MetadataRetriever.cs @@ -46,17 +46,16 @@ namespace Icarus.Controllers.Utilities public static void PrintMetadata(Song song) { Console.WriteLine("\n\nMetadata of the song:"); - Console.WriteLine($"Id: {song.Id}"); + Console.WriteLine($"ID: {song.SongID}"); 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($"AlbumID: {song.AlbumID}"); + Console.WriteLine($"ArtistID: {song.ArtistID}"); + Console.WriteLine($"GenreID: {song.GenreID}"); Console.WriteLine($"Song Path: {song.SongPath}"); Console.WriteLine($"Filename: {song.Filename}"); Console.WriteLine("\n"); @@ -237,7 +236,7 @@ namespace Icarus.Controllers.Utilities { _updatedSong = new Song { - Id = song.Id, + SongID = song.SongID, Title = song.Title, AlbumTitle = song.AlbumTitle, Artist = song.Artist, @@ -271,7 +270,7 @@ namespace Icarus.Controllers.Utilities Console.WriteLine($"\n\n{message}"); Console.WriteLine($"Title: {song.Title}"); Console.WriteLine($"Artist: {song.Artist}"); - Console.WriteLine($"Album: {song.Album}"); + Console.WriteLine($"Album: {song.AlbumTitle}"); Console.WriteLine($"Genre: {song.Genre}"); Console.WriteLine($"Year: {song.Year}"); Console.WriteLine($"Duration: {song.Duration}\n\n"); diff --git a/Controllers/v1/AlbumController.cs b/Controllers/v1/AlbumController.cs index 09088ca..cdb6502 100644 --- a/Controllers/v1/AlbumController.cs +++ b/Controllers/v1/AlbumController.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Configuration; +using System.Linq; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; @@ -19,6 +20,8 @@ namespace Icarus.Controllers.V1 { #region Fields private readonly ILogger _logger; + private string _connectionString; + private IConfiguration _config; #endregion @@ -27,9 +30,11 @@ namespace Icarus.Controllers.V1 #region Constructors - public AlbumController(ILogger logger) + public AlbumController(ILogger logger, IConfiguration config) { _logger = logger; + _config = config; + _connectionString = _config.GetConnectionString("DefaultConnection"); } #endregion @@ -41,10 +46,9 @@ namespace Icarus.Controllers.V1 { List albums = new List(); - AlbumRepository albumStoreContext = HttpContext.RequestServices - .GetService(typeof(AlbumRepository)) as AlbumRepository; + var albumContext = new AlbumContext(_connectionString); - albums = albumStoreContext.GetAlbums(); + albums = albumContext.Albums.ToList(); if (albums.Count > 0) return Ok(albums); @@ -58,15 +62,14 @@ namespace Icarus.Controllers.V1 { Album album = new Album { - AlbumId = id + AlbumID = id }; - AlbumRepository albumStoreContext = HttpContext.RequestServices - .GetService(typeof(AlbumRepository)) as AlbumRepository; + var albumContext = new AlbumContext(_connectionString); - if (albumStoreContext.DoesAlbumExist(album)) + if (albumContext.DoesRecordExist(album)) { - album = albumStoreContext.GetAlbum(album); + album = albumContext.RetrieveRecord(album); return Ok(album); } diff --git a/Controllers/v1/ArtistController.cs b/Controllers/v1/ArtistController.cs index 19d21ba..0531149 100644 --- a/Controllers/v1/ArtistController.cs +++ b/Controllers/v1/ArtistController.cs @@ -9,7 +9,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Icarus.Models; -using Icarus.Database.Repositories; +using Icarus.Database.Contexts; namespace Icarus.Controllers.V1 { @@ -19,6 +19,8 @@ namespace Icarus.Controllers.V1 { #region Fields private readonly ILogger _logger; + private string _connectionString; + private IConfiguration _config; #endregion @@ -27,9 +29,11 @@ namespace Icarus.Controllers.V1 #region Constructors - public ArtistController(ILogger logger) + public ArtistController(ILogger logger, IConfiguration config) { _logger = logger; + _config = config; + _connectionString = _config.GetConnectionString("DefaultConnection"); } #endregion @@ -39,10 +43,9 @@ namespace Icarus.Controllers.V1 [Authorize("read:artists")] public IActionResult Get() { - ArtistRepository artistStoreContext = HttpContext.RequestServices - .GetService(typeof(ArtistRepository)) as ArtistRepository; + var artistContext = new ArtistContext(_connectionString); - var artists = artistStoreContext.GetArtists(); + var artists = artistContext.Artists.ToList(); if (artists.Count > 0) return Ok(artists); @@ -56,15 +59,14 @@ namespace Icarus.Controllers.V1 { Artist artist = new Artist { - ArtistId = id + ArtistID = id }; - ArtistRepository artistStoreContext = HttpContext.RequestServices - .GetService(typeof(ArtistRepository)) as ArtistRepository; + var artistContext = new ArtistContext(_connectionString); - if (artistStoreContext.DoesArtistExist(artist)) + if (artistContext.DoesRecordExist(artist)) { - artist = artistStoreContext.GetArtist(artist); + artist = artistContext.RetrieveRecord(artist); return Ok(artist); } diff --git a/Controllers/v1/CoverArtController.cs b/Controllers/v1/CoverArtController.cs index f469384..103d1c3 100644 --- a/Controllers/v1/CoverArtController.cs +++ b/Controllers/v1/CoverArtController.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; @@ -9,7 +10,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Icarus.Controllers.Managers; -using Icarus.Database.Repositories; +using Icarus.Database.Contexts; using Icarus.Models; namespace Icarus.Controllers.V1 @@ -20,26 +21,27 @@ namespace Icarus.Controllers.V1 { #region Fields private readonly ILogger _logger; + private string _connectionString; + private IConfiguration _config; #endregion #region Constructors - public CoverArtController(ILogger logger) + public CoverArtController(ILogger logger, IConfiguration config) { _logger = logger; + _config = config; + _connectionString = _config.GetConnectionString("DefaultConnection"); } #endregion #region HTTP Routes - public async Task Get() + public IActionResult Get() { - var coverArtRepository = HttpContext - .RequestServices - .GetService( - typeof(CoverArtRepository)) as CoverArtRepository; + var coverArtContext = new CoverArtContext(_connectionString); - var coverArtRecords = coverArtRepository.GetCoverArtRecords(); + var coverArtRecords = coverArtContext.CoverArtImages.ToList(); if (coverArtRecords == null) { @@ -51,26 +53,22 @@ namespace Icarus.Controllers.V1 _logger.LogInformation("Found cover art records"); return Ok(coverArtRecords); } - } [HttpGet("{id}")] [Authorize("download:cover_art")] public async Task Get(int id) { - var coverArt = new CoverArt { CoverArtId = id }; + var coverArt = new CoverArt { CoverArtID = id }; - var coverArtRepository = HttpContext - .RequestServices - .GetService( - typeof(CoverArtRepository)) as CoverArtRepository; + var coverArtContext = new CoverArtContext(_connectionString); - coverArt = coverArtRepository.GetCoverArt(coverArt); + coverArt = coverArtContext.RetrieveRecord(coverArt); if (coverArt != null) { _logger.LogInformation("Found cover art record"); - var coverArtBytes = System.IO.File.ReadAllBytes( + var coverArtBytes = await System.IO.File.ReadAllBytesAsync( coverArt.ImagePath); return File(coverArtBytes, "application/x-msdownload", diff --git a/Controllers/v1/GenreController.cs b/Controllers/v1/GenreController.cs index fe50694..a53bc4e 100644 --- a/Controllers/v1/GenreController.cs +++ b/Controllers/v1/GenreController.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; @@ -7,7 +8,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Icarus.Models; -using Icarus.Database.Repositories; +using Icarus.Database.Contexts; namespace Icarus.Controllers.V1 { @@ -17,6 +18,8 @@ namespace Icarus.Controllers.V1 { #region Fields private readonly ILogger _logger; + private string _connectionString; + private IConfiguration _config; #endregion @@ -25,9 +28,11 @@ namespace Icarus.Controllers.V1 #region Constructors - public GenreController(ILogger logger) + public GenreController(ILogger logger, IConfiguration config) { _logger = logger; + _config = config; + _connectionString = _config.GetConnectionString("DefaultConnection"); } #endregion @@ -39,10 +44,9 @@ namespace Icarus.Controllers.V1 { var genres = new List(); - var genreStore = HttpContext.RequestServices - .GetService(typeof(GenreRepository)) as GenreRepository; + var genreStore = new GenreContext(_connectionString); - genres = genreStore.GetGenres(); + genres = genreStore.Genres.ToList(); if (genres.Count > 0) return Ok(genres); @@ -56,15 +60,14 @@ namespace Icarus.Controllers.V1 { var genre = new Genre { - GenreId = id + GenreID = id }; - var genreStore = HttpContext.RequestServices - .GetService(typeof(GenreRepository)) as GenreRepository; + var genreStore = new GenreContext(_connectionString); - if (genreStore.DoesGenreExist(genre)) + if (genreStore.DoesRecordExist(genre)) { - genre = genreStore.GetGenre(genre); + genre = genreStore.RetrieveRecord(genre); return Ok(genre); } diff --git a/Controllers/v1/LoginController.cs b/Controllers/v1/LoginController.cs index 4fd898c..9510a98 100644 --- a/Controllers/v1/LoginController.cs +++ b/Controllers/v1/LoginController.cs @@ -11,7 +11,7 @@ using Microsoft.Extensions.Logging; using Icarus.Controllers.Managers; using Icarus.Controllers.Utilities; using Icarus.Models; -using Icarus.Database.Repositories; +using Icarus.Database.Contexts; namespace Icarus.Controllers.V1 { @@ -20,6 +20,7 @@ namespace Icarus.Controllers.V1 public class LoginController : ControllerBase { #region Fields + private string _connectionString; private IConfiguration _config; private ILogger _logger; #endregion @@ -32,8 +33,9 @@ namespace Icarus.Controllers.V1 #region Contructors public LoginController(IConfiguration config, ILogger logger) { - _config = config; _logger = logger; + _config = config; + _connectionString = _config.GetConnectionString("DefaultConnection"); } #endregion @@ -41,8 +43,7 @@ namespace Icarus.Controllers.V1 #region HTTP endpoints public IActionResult Post([FromBody] User user) { - UserRepository context = HttpContext.RequestServices - .GetService(typeof(UserRepository)) as UserRepository; + var context = new UserContext(_connectionString); _logger.LogInformation("Starting process of validating credentials"); @@ -54,9 +55,9 @@ namespace Icarus.Controllers.V1 Username = user.Username }; - if (context.DoesUserExist(user)) + if (context.Users.FirstOrDefault(usr => usr.Username.Equals(user.Username)) != null) { - user = context.RetrieveUser(user); + user = context.Users.FirstOrDefault(usr => usr.Username.Equals(user.Username)); var validatePass = new PasswordEncryption(); var validated = validatePass.VerifyPassword(user, password); diff --git a/Controllers/v1/RegisterController.cs b/Controllers/v1/RegisterController.cs index 4aea1b6..e1352d8 100644 --- a/Controllers/v1/RegisterController.cs +++ b/Controllers/v1/RegisterController.cs @@ -19,6 +19,7 @@ namespace Icarus.Controllers.V1 public class RegisterController : ControllerBase { #region Fields + private string _connectionString; private IConfiguration _config; #endregion @@ -31,6 +32,7 @@ namespace Icarus.Controllers.V1 public RegisterController(IConfiguration config) { _config = config; + _connectionString = _config.GetConnectionString("DefaultConnection"); } #endregion @@ -40,11 +42,14 @@ namespace Icarus.Controllers.V1 PasswordEncryption pe = new PasswordEncryption(); user.Password = pe.HashPassword(user); user.EmailVerified = false; + user.Status = "Registered"; + user.DateCreated = DateTime.Now; - var context = new UserContext(_config.GetConnectionString("DefaultConnection")); + UserContext context = null; try { + context = new UserContext(_config.GetConnectionString("DefaultConnection")); context.Add(user); context.SaveChanges(); } diff --git a/Controllers/v1/SongCompressedDataControllers.cs b/Controllers/v1/SongCompressedDataControllers.cs index e2a3324..97f36c8 100644 --- a/Controllers/v1/SongCompressedDataControllers.cs +++ b/Controllers/v1/SongCompressedDataControllers.cs @@ -13,7 +13,7 @@ using Microsoft.Extensions.Configuration; using Icarus.Controllers.Managers; using Icarus.Controllers.Utilities; using Icarus.Models; -using Icarus.Database.Repositories; +using Icarus.Database.Contexts; namespace Icarus.Controllers.V1 { @@ -22,6 +22,7 @@ namespace Icarus.Controllers.V1 public class SongCompressedDataController : ControllerBase { #region Fields + private string _connectionString; private IConfiguration _config; private string _songTempDir; private string _archiveDir; @@ -35,9 +36,10 @@ namespace Icarus.Controllers.V1 #region Constructor public SongCompressedDataController(IConfiguration config) { - _config = config; _songTempDir = _config.GetValue("TemporaryMusicPath"); _archiveDir = _config.GetValue("ArchivePath"); + _config = config; + _connectionString = _config.GetConnectionString("DefaultConnection"); } #endregion @@ -47,15 +49,14 @@ namespace Icarus.Controllers.V1 [Authorize("download:songs")] public async Task Get(int id) { - SongRepository context = HttpContext.RequestServices - .GetService(typeof(SongRepository)) as SongRepository; + var context = new SongContext(_connectionString); 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)); + SongData song = await cmp.RetrieveCompressedSong(context.RetrieveRecord(new Song{ SongID = id })); return File(song.Data, "application/x-msdownload", cmp.CompressedSongFilename); } diff --git a/Controllers/v1/SongController.cs b/Controllers/v1/SongController.cs index 8ab7569..1ef6e77 100644 --- a/Controllers/v1/SongController.cs +++ b/Controllers/v1/SongController.cs @@ -12,7 +12,7 @@ using Microsoft.Extensions.Logging; using Icarus.Controllers.Managers; using Icarus.Controllers.Utilities; using Icarus.Models; -using Icarus.Database.Repositories; +using Icarus.Database.Contexts; namespace Icarus.Controllers.V1 { @@ -22,6 +22,7 @@ namespace Icarus.Controllers.V1 { #region Fields private readonly ILogger _logger; + private string _connectionString; private IConfiguration _config; private SongManager _songMgr; #endregion @@ -35,6 +36,7 @@ namespace Icarus.Controllers.V1 public SongController(IConfiguration config, ILogger logger) { _config = config; + _connectionString = _config.GetConnectionString("DefaultConnection"); _logger = logger; _songMgr = new SongManager(config); } @@ -49,10 +51,9 @@ namespace Icarus.Controllers.V1 Console.WriteLine("Attemtping to retrieve songs"); _logger.LogInformation("Attempting to retrieve songs"); - SongRepository context = HttpContext.RequestServices - .GetService(typeof(SongRepository)) as SongRepository; + var context = new SongContext(_connectionString); - songs = context.GetAllSongs(); + songs = context.Songs.ToList(); if (songs.Count > 0) return Ok(songs); @@ -64,15 +65,14 @@ namespace Icarus.Controllers.V1 [Authorize("read:song_details")] public IActionResult Get(int id) { - SongRepository context = HttpContext.RequestServices - .GetService(typeof(SongRepository)) as SongRepository; + var context = new SongContext(_connectionString); - Song song = new Song { Id = id }; - song = context.GetSong(song); + Song song = new Song { SongID = id }; + song = context.RetrieveRecord(song); Console.WriteLine("Here"); - if (song.Id != 0) + if (song.SongID != 0) return Ok(song); else return NotFound(); @@ -82,33 +82,19 @@ namespace Icarus.Controllers.V1 [HttpPut("{id}")] public IActionResult Put(int id, [FromBody] Song song) { - SongRepository context = HttpContext.RequestServices - .GetService(typeof(SongRepository)) as SongRepository; + var context = new SongContext(_connectionString); - 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; - - YearRepository yearStore = HttpContext.RequestServices - .GetService(typeof(YearRepository)) as YearRepository; - - song.Id = id; + song.SongID = id; Console.WriteLine("Retrieving filepath of song"); _logger.LogInformation("Retrieving filepath of song"); - if (!context.DoesSongExist(song)) + if (!context.DoesRecordExist(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); return Ok(songRes); } diff --git a/Controllers/v1/SongDataController.cs b/Controllers/v1/SongDataController.cs index 681d2ac..af7d54a 100644 --- a/Controllers/v1/SongDataController.cs +++ b/Controllers/v1/SongDataController.cs @@ -22,6 +22,7 @@ namespace Icarus.Controllers.V1 public class SongDataController : ControllerBase { #region Fields + private string _connectionString; private IConfiguration _config; private ILogger _logger; private SongManager _songMgr; @@ -37,6 +38,7 @@ namespace Icarus.Controllers.V1 public SongDataController(IConfiguration config, ILogger logger) { _config = config; + _connectionString = _config.GetConnectionString("DefaultConnection"); _logger = logger; _songTempDir = _config.GetValue("TemporaryMusicPath"); _songMgr = new SongManager(config, _songTempDir); @@ -50,7 +52,8 @@ namespace Icarus.Controllers.V1 [Authorize("download:songs")] public async Task Get(int id) { - var songMetaData = _songRepository.GetSong(id); + var songContext = new SongContext(_connectionString); + var songMetaData = songContext.RetrieveRecord(new Song { SongID = id}); SongData song = await _songMgr.RetrieveSong(songMetaData); @@ -69,14 +72,13 @@ namespace Icarus.Controllers.V1 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}"); - await _songMgr.SaveSongToFileSystem(sng, _songRepository, - _albumRepository, _artistRepository, - _genreRepository, _yearRepository, _coverArtRepository); + await _songMgr.SaveSongToFileSystem(sng); } } catch (Exception ex) @@ -90,9 +92,12 @@ namespace Icarus.Controllers.V1 [Authorize("delete:songs")] public IActionResult Delete(int id) { + var songContext = new SongContext(_connectionString); + var songMetaData = new Song{ SongID = id }; Console.WriteLine($"Id {songMetaData.SongID}"); - songMetaData = _songRepository.GetSong(songMetaData); + + songMetaData = songContext.RetrieveRecord(songMetaData); if (string.IsNullOrEmpty(songMetaData.Title)) { @@ -103,10 +108,7 @@ namespace Icarus.Controllers.V1 { _logger.LogInformation("Starting process of deleting song from the filesystem and database"); - _songMgr.DeleteSong(songMetaData, _songRepository, - _albumRepository, _artistRepository, - _genreRepository, _yearRepository, - _coverArtRepository); + _songMgr.DeleteSong(songMetaData); return Ok(); } diff --git a/Controllers/v1/SongStreamController.cs b/Controllers/v1/SongStreamController.cs index d25c661..e8f6d73 100644 --- a/Controllers/v1/SongStreamController.cs +++ b/Controllers/v1/SongStreamController.cs @@ -23,6 +23,7 @@ namespace Icarus.Controllers.V1 { #region Fields private ILogger _logger; + private string _connectionString; private IConfiguration _config; #endregion @@ -36,6 +37,7 @@ namespace Icarus.Controllers.V1 { _logger = logger; _config = config; + _connectionString = _config.GetConnectionString("DefaultConnection"); } #endregion @@ -56,7 +58,11 @@ namespace Icarus.Controllers.V1 _logger.LogInformation("Starting to stream song...>"); Console.WriteLine("Starting to streamsong..."); - return File(stream, "application/octet-stream", filename); + var file = await Task.Run(() => { + return File(stream, "application/octet-stream", filename); + }); + + return file; } #endregion } diff --git a/Database/Contexts/AlbumContext.cs b/Database/Contexts/AlbumContext.cs index ca47555..50702de 100644 --- a/Database/Contexts/AlbumContext.cs +++ b/Database/Contexts/AlbumContext.cs @@ -3,9 +3,6 @@ using System.Collections.Generic; using System.Linq; using Microsoft.EntityFrameworkCore; -using MySql.Data; -using MySql.Data.EntityFrameworkCore.Extensions; -using MySql.Data.MySqlClient; using Icarus.Models; @@ -27,9 +24,14 @@ namespace Icarus.Database.Contexts .ToTable("Album"); } + public Album RetrieveRecord(Album album) + { + return Albums.FirstOrDefault(alb => alb.AlbumID == album.AlbumID); + } + public bool DoesRecordExist(Album album) { - return Albums.FirstOrDefault(alb => alb.AlbumId == album.AlbumId) != null ? true : false; + return Albums.FirstOrDefault(alb => alb.AlbumID == album.AlbumID) != null ? true : false; } } } diff --git a/Database/Contexts/ArtistContext.cs b/Database/Contexts/ArtistContext.cs index 31c7796..b4b5b39 100644 --- a/Database/Contexts/ArtistContext.cs +++ b/Database/Contexts/ArtistContext.cs @@ -3,9 +3,6 @@ using System.Collections.Generic; using System.Linq; using Microsoft.EntityFrameworkCore; -using MySql.Data; -using MySql.Data.EntityFrameworkCore; -using MySql.Data.MySqlClient; using Icarus.Models; @@ -27,10 +24,16 @@ namespace Icarus.Database.Contexts .ToTable("Artist"); } + public Artist RetrieveRecord(Artist artist) + { + + return Artists.FirstOrDefault(arst => arst.ArtistID == artist.ArtistID); + } + public bool DoesRecordExist(Artist artist) { - return Artists.FirstOrDefault(arst => arst.ArtistId == artist.ArtistId) != null ? true : false; + return Artists.FirstOrDefault(arst => arst.ArtistID == artist.ArtistID) != null ? true : false; } } } diff --git a/Database/Contexts/CoverArtContext.cs b/Database/Contexts/CoverArtContext.cs index 87c4c00..953c5fd 100644 --- a/Database/Contexts/CoverArtContext.cs +++ b/Database/Contexts/CoverArtContext.cs @@ -3,9 +3,6 @@ using System.Collections.Generic; using System.Linq; using Microsoft.EntityFrameworkCore; -using MySql.Data; -using MySql.Data.EntityFrameworkCore.Extensions; -using MySql.Data.MySqlClient; using Icarus.Models; @@ -27,10 +24,14 @@ namespace Icarus.Database.Contexts .ToTable("CoverArt"); } + public CoverArt RetrieveRecord(CoverArt cover) + { + return CoverArtImages.FirstOrDefault(cov => cov.CoverArtID == cover.CoverArtID); + } public bool DoesRecordExist(CoverArt cover) { - return CoverArtImages.FirstOrDefault(cov => cov.CoverArtId == cover.CoverArtId) != null ? true : false; + return CoverArtImages.FirstOrDefault(cov => cov.CoverArtID == cover.CoverArtID) != null ? true : false; } } } diff --git a/Database/Contexts/GenreContext.cs b/Database/Contexts/GenreContext.cs index a459ba5..0161b59 100644 --- a/Database/Contexts/GenreContext.cs +++ b/Database/Contexts/GenreContext.cs @@ -3,9 +3,6 @@ using System.Collections.Generic; using System.Linq; using Microsoft.EntityFrameworkCore; -using MySql.Data; -using MySql.Data.EntityFrameworkCore.Extensions; -using MySql.Data.MySqlClient; using Icarus.Models; @@ -27,9 +24,14 @@ namespace Icarus.Database.Contexts } + public Genre RetrieveRecord(Genre genre) + { + return Genres.FirstOrDefault(gnr => gnr.GenreID == genre.GenreID); + } + public bool DoesRecordExist(Genre genre) { - return Genres.FirstOrDefault(gnr => gnr.GenreId == genre.GenreId) != null ? true : false; + return Genres.FirstOrDefault(gnr => gnr.GenreID == genre.GenreID) != null ? true : false; } } } diff --git a/Database/Contexts/SongContext.cs b/Database/Contexts/SongContext.cs index edcbbe1..c727188 100644 --- a/Database/Contexts/SongContext.cs +++ b/Database/Contexts/SongContext.cs @@ -3,9 +3,6 @@ using System.Collections.Generic; using System.Linq; using Microsoft.EntityFrameworkCore; -using MySql.Data; -using MySql.Data.EntityFrameworkCore.Extensions; -using MySql.Data.MySqlClient; using Icarus.Models; @@ -28,57 +25,62 @@ namespace Icarus.Database.Contexts modelBuilder.Entity() .ToTable("Song"); + /** modelBuilder.Entity() .HasOne(s => s.Album) .WithMany(al => al.Songs) - .HasForeignKey(s => s.AlbumId) + .HasForeignKey(s => s.AlbumID) .OnDelete(DeleteBehavior.SetNull); modelBuilder.Entity() .HasOne(sa => sa.SongArtist) .WithMany(ar => ar.Songs) - .HasForeignKey(s => s.ArtistId) + .HasForeignKey(s => s.ArtistID) .OnDelete(DeleteBehavior.SetNull); modelBuilder.Entity() .HasOne(s => s.SongGenre) .WithMany(gnr => gnr.Songs) - .HasForeignKey(s => s.GenreId) + .HasForeignKey(s => s.GenreID) .OnDelete(DeleteBehavior.SetNull); modelBuilder.Entity() .HasOne(s => s.SongYear) .WithMany(yr => yr.Songs) - .HasForeignKey(s => s.YearId) + .HasForeignKey(s => s.YearID) .OnDelete(DeleteBehavior.SetNull); modelBuilder.Entity() .HasOne(s => s.SongCoverArt) .WithMany(ca => ca.Songs) - .HasForeignKey(s => s.CoverArtId) + .HasForeignKey(s => s.CoverArtID) .OnDelete(DeleteBehavior.SetNull); + */ modelBuilder.Entity() .Property(s => s.Year) .IsRequired(false); modelBuilder.Entity() - .Property(s => s.YearId) + .Property(s => s.GenreID) .IsRequired(false); modelBuilder.Entity() - .Property(s => s.GenreId) + .Property(s => s.ArtistID) .IsRequired(false); modelBuilder.Entity() - .Property(s => s.ArtistId) + .Property(s => s.AlbumID) .IsRequired(false); modelBuilder.Entity() - .Property(s => s.AlbumId) - .IsRequired(false); - modelBuilder.Entity() - .Property(s => s.CoverArtId) + .Property(s => s.CoverArtID) .IsRequired(false); } + public Song RetrieveRecord(Song song) + { + return Songs.FirstOrDefault(sng => sng.SongID == song.SongID); + } + + public bool DoesRecordExist(Song song) { return Songs.FirstOrDefault(sng => sng.SongID == song.SongID) != null ? true : false; diff --git a/Database/Contexts/UserContext.cs b/Database/Contexts/UserContext.cs index ebf4098..030b538 100644 --- a/Database/Contexts/UserContext.cs +++ b/Database/Contexts/UserContext.cs @@ -2,10 +2,12 @@ using System; using System.Collections.Generic; using System.Linq; +// using MySql.Data.EntityFrameworkCore; +// using MySql.Data; +// using MySql.Data.EntityFrameworkCore.Extensions; +// using MySql.Data.Entity; +// using MySql.Data.MySqlClient; using Microsoft.EntityFrameworkCore; -using MySql.Data; -using MySql.Data.EntityFrameworkCore.Extensions; -using MySql.Data.MySqlClient; using Icarus.Models; @@ -32,6 +34,11 @@ namespace Icarus.Database.Contexts .Property(u => u.DateCreated).HasDefaultValue(DateTime.Now); } + + public User RetrieveRecord(User user) + { + return Users.FirstOrDefault(usr => usr.UserID == user.UserID); + } public bool DoesRecordExist(User user) { diff --git a/Icarus.csproj b/Icarus.csproj index da0c98a..adfa6c0 100644 --- a/Icarus.csproj +++ b/Icarus.csproj @@ -6,26 +6,24 @@ - + - + - + + runtime; build; native; contentfiles; analyzers all - - - - - - - + + + + - + diff --git a/Icarus.sln b/Icarus.sln index f4826b6..b936964 100644 --- a/Icarus.sln +++ b/Icarus.sln @@ -1,34 +1,14 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26124.0 -MinimumVisualStudioVersion = 15.0.26124.0 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Icarus", "Icarus.csproj", "{3BEBAB33-17BF-4183-9664-3D537A684138}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {3BEBAB33-17BF-4183-9664-3D537A684138}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3BEBAB33-17BF-4183-9664-3D537A684138}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3BEBAB33-17BF-4183-9664-3D537A684138}.Debug|x64.ActiveCfg = Debug|Any CPU - {3BEBAB33-17BF-4183-9664-3D537A684138}.Debug|x64.Build.0 = Debug|Any CPU - {3BEBAB33-17BF-4183-9664-3D537A684138}.Debug|x86.ActiveCfg = Debug|Any CPU - {3BEBAB33-17BF-4183-9664-3D537A684138}.Debug|x86.Build.0 = Debug|Any CPU - {3BEBAB33-17BF-4183-9664-3D537A684138}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3BEBAB33-17BF-4183-9664-3D537A684138}.Release|Any CPU.Build.0 = Release|Any CPU - {3BEBAB33-17BF-4183-9664-3D537A684138}.Release|x64.ActiveCfg = Release|Any CPU - {3BEBAB33-17BF-4183-9664-3D537A684138}.Release|x64.Build.0 = Release|Any CPU - {3BEBAB33-17BF-4183-9664-3D537A684138}.Release|x86.ActiveCfg = Release|Any CPU - {3BEBAB33-17BF-4183-9664-3D537A684138}.Release|x86.Build.0 = Release|Any CPU - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30114.105 +MinimumVisualStudioVersion = 10.0.40219.1 +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Models/Album.cs b/Models/Album.cs index 990519a..60fdb3f 100644 --- a/Models/Album.cs +++ b/Models/Album.cs @@ -8,8 +8,8 @@ namespace Icarus.Models { public class Album { - [JsonProperty("id")] - public int AlbumId { get; set; } + [JsonProperty("album_id")] + public int AlbumID { get; set; } [JsonProperty("title")] public string Title { get; set; } [JsonProperty("album_artist")] @@ -19,6 +19,7 @@ namespace Icarus.Models public int SongCount { get; set; } [JsonIgnore] + [NotMapped] public List Songs { get; set; } } } diff --git a/Models/Artist.cs b/Models/Artist.cs index a9cae35..a9995ac 100644 --- a/Models/Artist.cs +++ b/Models/Artist.cs @@ -8,8 +8,8 @@ namespace Icarus.Models { public class Artist { - [JsonProperty("id")] - public int ArtistId { get; set; } + [JsonProperty("artist_id")] + public int ArtistID { get; set; } [JsonProperty("name")] public string Name { get; set; } [JsonProperty("song_count")] @@ -17,6 +17,7 @@ namespace Icarus.Models public int SongCount { get; set; } [JsonIgnore] + [NotMapped] public List Songs { get; set; } } } diff --git a/Models/CoverArt.cs b/Models/CoverArt.cs index 4a696e6..a11ebf3 100644 --- a/Models/CoverArt.cs +++ b/Models/CoverArt.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; using System.Text; using Newtonsoft.Json; @@ -8,8 +9,8 @@ namespace Icarus.Models { public class CoverArt { - [JsonProperty("id")] - public int CoverArtId { get; set; } + [JsonProperty("cover_art_id")] + public int CoverArtID { get; set; } [JsonProperty("title")] public string SongTitle { get; set; } [JsonIgnore] @@ -17,6 +18,7 @@ namespace Icarus.Models [JsonProperty("song_id")] public int SongId { get; set; } [JsonIgnore] + [NotMapped] public List Songs { get; set; } } } diff --git a/Models/Genre.cs b/Models/Genre.cs index 4c3b5e8..deddac1 100644 --- a/Models/Genre.cs +++ b/Models/Genre.cs @@ -8,8 +8,8 @@ namespace Icarus.Models { public class Genre { - [JsonProperty("id")] - public int GenreId { get; set; } + [JsonProperty("genre_id")] + public int GenreID { get; set; } [JsonProperty("genre")] public string GenreName { get; set; } [JsonProperty("song_count")] @@ -17,6 +17,7 @@ namespace Icarus.Models public int SongCount { get; set; } [JsonIgnore] + [NotMapped] public List Songs { get; set; } } } diff --git a/Models/LoginResult.cs b/Models/LoginResult.cs index ad19ee8..5ede1b1 100644 --- a/Models/LoginResult.cs +++ b/Models/LoginResult.cs @@ -6,8 +6,8 @@ namespace Icarus.Models { public class LoginResult : BaseResult { - [JsonProperty("id")] - public int UserId { get; set; } + [JsonProperty("user_id")] + public int UserID { get; set; } [JsonProperty("username")] public string Username { get; set; } [JsonProperty("token")] diff --git a/Models/Song.cs b/Models/Song.cs index 6a58577..b6866eb 100644 --- a/Models/Song.cs +++ b/Models/Song.cs @@ -26,29 +26,36 @@ namespace Icarus.Models [JsonProperty("song_path")] public string SongPath { get; set; } + // [JsonIgnore] + // public Album Album { get; set; } [JsonIgnore] - public Album Album { get; set; } - [JsonIgnore] - public int? AlbumId { get; set; } + public int? AlbumID { get; set; } + /** [JsonIgnore] public Artist SongArtist { get; set; } + */ [JsonIgnore] - public int? ArtistId { get; set; } - + public int? ArtistID { get; set; } + /** [JsonIgnore] public Genre SongGenre { get; set; } + */ [JsonIgnore] - public int? GenreId { get; set; } + public int? GenreID { get; set; } - [JsonIgnore] - public Year SongYear { get; set; } - [JsonIgnore] - public int? YearId { get; set; } + // [JsonIgnore] + // public Year SongYear { get; set; } + // [JsonIgnore] + // public int? YearId { get; set; } + /** [JsonIgnore] public CoverArt SongCoverArt { get; set; } + */ [JsonIgnore] - public int? CoverArtId { get; set; } + public int? CoverArtID { get; set; } + [JsonProperty("date_created")] + public DateTime DateCreated { get; set; } } } diff --git a/Models/SongData.cs b/Models/SongData.cs index cb00d0f..a9c9145 100644 --- a/Models/SongData.cs +++ b/Models/SongData.cs @@ -5,8 +5,8 @@ namespace Icarus.Models { public class SongData { - public int Id { get; set; } + public int ID { get; set; } public byte[] Data { get; set; } - public int SongId { get; set; } + public int SongID { get; set; } } } diff --git a/Models/User.cs b/Models/User.cs index 95bcf39..652dd04 100644 --- a/Models/User.cs +++ b/Models/User.cs @@ -31,6 +31,8 @@ namespace Icarus.Models public bool EmailVerified { get; set; } [JsonProperty("date_created")] public DateTime DateCreated { get; set; } + [JsonProperty("status")] + public string Status { get; set; } [JsonProperty("last_login")] public DateTime? LastLogin { get; set; } } diff --git a/Startup.cs b/Startup.cs index f72df96..c83f009 100644 --- a/Startup.cs +++ b/Startup.cs @@ -15,9 +15,6 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Microsoft.EntityFrameworkCore; -using MySql.Data; -using MySql.Data.EntityFrameworkCore.Extensions; -using MySql.Data.MySqlClient; using NLog; using NLog.Web; using NLog.Web.AspNetCore; @@ -135,12 +132,12 @@ namespace Icarus services.AddDbContext(options => options.UseMySQL(connString)); services.AddDbContext(options => options.UseMySQL(connString)); services.AddDbContext(options => options.UseMySQL(connString)); - services.AddDbContext(options => options.UseMySQL(connString)); + // services.AddDbContext(options => options.UseMySQL(connString)); services.AddDbContext(options => options.UseMySQL(connString)); } // Called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IHostingEnvironment env) + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // NOTE: Dev-related configuration can be done when env.IsDevelopment() evaluated to true