Functional

This commit is contained in:
kdeng00
2021-12-23 21:10:13 -05:00
parent 8600d9b6bc
commit edaea68296
33 changed files with 362 additions and 298 deletions
+3
View File
@@ -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
}
}
+24 -11
View File
@@ -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<string>("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);
-1
View File
@@ -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;
+114 -76
View File
@@ -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<string>(
"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<string>("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();
}
}
+1 -2
View File
@@ -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"
};
+6 -7
View File
@@ -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");
+12 -9
View File
@@ -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<AlbumController> _logger;
private string _connectionString;
private IConfiguration _config;
#endregion
@@ -27,9 +30,11 @@ namespace Icarus.Controllers.V1
#region Constructors
public AlbumController(ILogger<AlbumController> logger)
public AlbumController(ILogger<AlbumController> logger, IConfiguration config)
{
_logger = logger;
_config = config;
_connectionString = _config.GetConnectionString("DefaultConnection");
}
#endregion
@@ -41,10 +46,9 @@ namespace Icarus.Controllers.V1
{
List<Album> albums = new List<Album>();
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);
}
+12 -10
View File
@@ -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<ArtistController> _logger;
private string _connectionString;
private IConfiguration _config;
#endregion
@@ -27,9 +29,11 @@ namespace Icarus.Controllers.V1
#region Constructors
public ArtistController(ILogger<ArtistController> logger)
public ArtistController(ILogger<ArtistController> 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);
}
+14 -16
View File
@@ -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<CoverArtController> _logger;
private string _connectionString;
private IConfiguration _config;
#endregion
#region Constructors
public CoverArtController(ILogger<CoverArtController> logger)
public CoverArtController(ILogger<CoverArtController> logger, IConfiguration config)
{
_logger = logger;
_config = config;
_connectionString = _config.GetConnectionString("DefaultConnection");
}
#endregion
#region HTTP Routes
public async Task<IActionResult> 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<IActionResult> 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",
+13 -10
View File
@@ -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<GenreController> _logger;
private string _connectionString;
private IConfiguration _config;
#endregion
@@ -25,9 +28,11 @@ namespace Icarus.Controllers.V1
#region Constructors
public GenreController(ILogger<GenreController> logger)
public GenreController(ILogger<GenreController> logger, IConfiguration config)
{
_logger = logger;
_config = config;
_connectionString = _config.GetConnectionString("DefaultConnection");
}
#endregion
@@ -39,10 +44,9 @@ namespace Icarus.Controllers.V1
{
var genres = new List<Genre>();
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);
}
+7 -6
View File
@@ -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<LoginController> _logger;
#endregion
@@ -32,8 +33,9 @@ namespace Icarus.Controllers.V1
#region Contructors
public LoginController(IConfiguration config, ILogger<LoginController> 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);
+6 -1
View File
@@ -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();
}
@@ -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<string>("TemporaryMusicPath");
_archiveDir = _config.GetValue<string>("ArchivePath");
_config = config;
_connectionString = _config.GetConnectionString("DefaultConnection");
}
#endregion
@@ -47,15 +49,14 @@ namespace Icarus.Controllers.V1
[Authorize("download:songs")]
public async Task<IActionResult> 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);
}
+13 -27
View File
@@ -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<SongController> _logger;
private string _connectionString;
private IConfiguration _config;
private SongManager _songMgr;
#endregion
@@ -35,6 +36,7 @@ namespace Icarus.Controllers.V1
public SongController(IConfiguration config, ILogger<SongController> 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);
}
+11 -9
View File
@@ -22,6 +22,7 @@ namespace Icarus.Controllers.V1
public class SongDataController : ControllerBase
{
#region Fields
private string _connectionString;
private IConfiguration _config;
private ILogger<SongDataController> _logger;
private SongManager _songMgr;
@@ -37,6 +38,7 @@ namespace Icarus.Controllers.V1
public SongDataController(IConfiguration config, ILogger<SongDataController> logger)
{
_config = config;
_connectionString = _config.GetConnectionString("DefaultConnection");
_logger = logger;
_songTempDir = _config.GetValue<string>("TemporaryMusicPath");
_songMgr = new SongManager(config, _songTempDir);
@@ -50,7 +52,8 @@ namespace Icarus.Controllers.V1
[Authorize("download:songs")]
public async Task<IActionResult> 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();
}
+7 -1
View File
@@ -23,6 +23,7 @@ namespace Icarus.Controllers.V1
{
#region Fields
private ILogger<SongStreamController> _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
}