Created artist and album contexts, created artist and album store contexts, and implemented logging to other regions of the codebase beside the APIControllers #16, #21, #22, #25, #26

This commit is contained in:
amazing-username
2019-05-05 21:33:00 -04:00
parent 4a385af3b5
commit 6b4b762207
11 changed files with 315 additions and 34 deletions
+21 -6
View File
@@ -3,6 +3,8 @@ using System.Collections.Generic;
using System.Configuration; using System.Configuration;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Icarus.Models; using Icarus.Models;
@@ -12,6 +14,24 @@ namespace Icarus.Controllers
[ApiController] [ApiController]
public class AlbumController : ControllerBase public class AlbumController : ControllerBase
{ {
#region Fields
private readonly ILogger<AlbumController> _logger;
#endregion
#region Properties
#endregion
#region Constructors
public AlbumController(ILogger<AlbumController> logger)
{
_logger = logger;
}
#endregion
#region HTTP Routes
[HttpGet] [HttpGet]
public IActionResult Get() public IActionResult Get()
{ {
@@ -27,11 +47,6 @@ namespace Icarus.Controllers
return Ok(album); return Ok(album);
} }
#endregion
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
return Ok();
}
} }
} }
+20 -6
View File
@@ -5,6 +5,7 @@ using System.Linq;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Icarus.Models; using Icarus.Models;
@@ -14,6 +15,24 @@ namespace Icarus.Controllers
[ApiController] [ApiController]
public class ArtistController : ControllerBase public class ArtistController : ControllerBase
{ {
#region Fields
private readonly ILogger<ArtistController> _logger;
#endregion
#region Properties
#endregion
#region Constructors
public ArtistController(ILogger<ArtistController> logger)
{
_logger = logger;
}
#endregion
#region HTTP Routes
[HttpGet] [HttpGet]
public IActionResult Get() public IActionResult Get()
{ {
@@ -29,11 +48,6 @@ namespace Icarus.Controllers
return Ok(artist); return Ok(artist);
} }
#endregion
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
return Ok();
}
} }
} }
+14 -12
View File
@@ -38,7 +38,6 @@ namespace Icarus.Controllers
_config = config; _config = config;
_logger = logger; _logger = logger;
_songMgr = new SongManager(config); _songMgr = new SongManager(config);
_logger.LogInformation("Logging is working!");
} }
#endregion #endregion
@@ -49,11 +48,11 @@ namespace Icarus.Controllers
{ {
List<Song> songs = new List<Song>(); List<Song> songs = new List<Song>();
Console.WriteLine("Attemtping to retrieve songs"); Console.WriteLine("Attemtping to retrieve songs");
_logger.LogInformation("Attempting to retrieve songs");
MusicStoreContext context = HttpContext MusicStoreContext context = HttpContext
.RequestServices .RequestServices
.GetService(typeof(MusicStoreContext)) .GetService(typeof(MusicStoreContext)) as MusicStoreContext;
as MusicStoreContext;
songs = context.GetAllSongs(); songs = context.GetAllSongs();
@@ -64,9 +63,8 @@ namespace Icarus.Controllers
public ActionResult<Song> Get(int id) public ActionResult<Song> Get(int id)
{ {
MusicStoreContext context = HttpContext MusicStoreContext context = HttpContext
.RequestServices .RequestServices
.GetService(typeof(MusicStoreContext)) .GetService(typeof(MusicStoreContext)) as MusicStoreContext;
as MusicStoreContext;
Song song = context.GetSong(id); Song song = context.GetSong(id);
@@ -77,10 +75,13 @@ namespace Icarus.Controllers
[HttpPut("{id}")] [HttpPut("{id}")]
public IActionResult Put(int id, [FromBody] Song song) public IActionResult Put(int id, [FromBody] Song song)
{ {
MusicStoreContext context = HttpContext.RequestServices MusicStoreContext context = HttpContext
.RequestServices
.GetService(typeof(MusicStoreContext)) as MusicStoreContext; .GetService(typeof(MusicStoreContext)) as MusicStoreContext;
song.Id = id; song.Id = id;
Console.WriteLine("Retrieving filepath of song"); Console.WriteLine("Retrieving filepath of song");
_logger.LogInformation("Retrieving filepath of song");
var oldSongRecord = context.GetSong(id); var oldSongRecord = context.GetSong(id);
song.SongPath = oldSongRecord.SongPath; song.SongPath = oldSongRecord.SongPath;
@@ -100,14 +101,15 @@ namespace Icarus.Controllers
} }
[HttpDelete("{id}")] [HttpDelete("{id}")]
public void Delete(int id) public IActionResult Delete(int id)
{ {
MusicStoreContext context = HttpContext MusicStoreContext context = HttpContext
.RequestServices .RequestServices
.GetService(typeof(MusicStoreContext)) .GetService(typeof(MusicStoreContext)) as MusicStoreContext;
as MusicStoreContext;
context.DeleteSong(id); context.DeleteSong(id);
return Ok();
} }
} }
} }
@@ -1,6 +1,8 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.Extensions.Logging;
using NLog;
using TagLib; using TagLib;
using Icarus.Models; using Icarus.Models;
@@ -10,6 +12,7 @@ namespace Icarus.Controllers.Utilities
public class MetadataRetriever public class MetadataRetriever
{ {
#region Fields #region Fields
private static NLog.Logger _logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
private Song _updatedSong; private Song _updatedSong;
private string _message; private string _message;
private string _title; private string _title;
@@ -66,6 +69,7 @@ namespace Icarus.Controllers.Utilities
var msg = ex.Message; var msg = ex.Message;
Console.WriteLine("An error occurred in MetadataRetriever"); Console.WriteLine("An error occurred in MetadataRetriever");
Console.WriteLine(msg); Console.WriteLine(msg);
_logger.Error(msg, "An error occurred in MetadataRetriever");
} }
return song; return song;
@@ -76,18 +80,21 @@ namespace Icarus.Controllers.Utilities
try try
{ {
Console.WriteLine("Updating song metadata"); Console.WriteLine("Updating song metadata");
_logger.Info("Updating song metadata");
var filePath = song.SongPath; var filePath = song.SongPath;
TagLib.File fileTag = TagLib.File.Create(filePath); TagLib.File fileTag = TagLib.File.Create(filePath);
fileTag.Tag.Title = song.Title; fileTag.Tag.Title = song.Title;
fileTag.Tag.Genres = new []{song.Genre}; fileTag.Tag.Genres = new []{song.Genre};
fileTag.Save(); fileTag.Save();
Console.WriteLine("Song metadata updated"); Console.WriteLine("Song metadata updated");
_logger.Info("Song metadata updated");
} }
catch (Exception ex) catch (Exception ex)
{ {
var msg = ex.Message; var msg = ex.Message;
Console.WriteLine($"An error occurred: \n{msg}"); Console.WriteLine($"An error occurred: \n{msg}");
_logger.Error(msg, "An error occurred");
} }
} }
public void UpdateMetadata(Song updatedSong, Song oldSong) public void UpdateMetadata(Song updatedSong, Song oldSong)
@@ -103,6 +110,7 @@ namespace Icarus.Controllers.Utilities
{ {
var msg = ex.Message; var msg = ex.Message;
Console.WriteLine($"An error occurred: {msg}"); Console.WriteLine($"An error occurred: {msg}");
_logger.Error(msg, "An error occurred");
Message = "Failed to update metadata"; Message = "Failed to update metadata";
} }
} }
@@ -119,6 +127,7 @@ namespace Icarus.Controllers.Utilities
try try
{ {
Console.WriteLine($"Updating metadata of {title}"); Console.WriteLine($"Updating metadata of {title}");
_logger.Info($"Updating metadata of {title}");
foreach (var key in checkedValues.Keys) foreach (var key in checkedValues.Keys)
{ {
bool result = checkedValues[key]; bool result = checkedValues[key];
@@ -151,11 +160,13 @@ namespace Icarus.Controllers.Utilities
} }
fileTag.Save(); fileTag.Save();
Console.WriteLine("Successfully updated metadata"); Console.WriteLine("Successfully updated metadata");
_logger.Info("Successfully updated metadata");
} }
catch (Exception ex) catch (Exception ex)
{ {
var msg = ex.Message; var msg = ex.Message;
Console.WriteLine($"An error occurred:\n{msg}"); Console.WriteLine($"An error occurred:\n{msg}");
_logger.Error(msg, "An error occurred");
} }
} }
private void InitializeUpdatedSong(Song song) private void InitializeUpdatedSong(Song song)
@@ -182,6 +193,14 @@ namespace Icarus.Controllers.Utilities
Console.WriteLine($"Genre: {_genre}"); Console.WriteLine($"Genre: {_genre}");
Console.WriteLine($"Year: {_year}"); Console.WriteLine($"Year: {_year}");
Console.WriteLine($"Duration: {_duration}\n\n"); 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) private void PrintMetadata(Song song, string message)
{ {
@@ -192,12 +211,21 @@ namespace Icarus.Controllers.Utilities
Console.WriteLine($"Genre: {song.Genre}"); Console.WriteLine($"Genre: {song.Genre}");
Console.WriteLine($"Year: {song.Year}"); Console.WriteLine($"Year: {song.Year}");
Console.WriteLine($"Duration: {song.Duration}\n\n"); 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}");
} }
private SortedDictionary<string, bool> CheckSongValues(Song song) private SortedDictionary<string, bool> CheckSongValues(Song song)
{ {
var songValues = new SortedDictionary<string, bool>(); var songValues = new SortedDictionary<string, bool>();
Console.WriteLine("Checking for null data"); Console.WriteLine("Checking for null data");
_logger.Info("Checking for null data");
try try
{ {
songValues["Title"] = String.IsNullOrEmpty(song.Title); songValues["Title"] = String.IsNullOrEmpty(song.Title);
@@ -213,11 +241,13 @@ namespace Icarus.Controllers.Utilities
songValues["Year"] = false; songValues["Year"] = false;
} }
Console.WriteLine("Checking for null data completed"); Console.WriteLine("Checking for null data completed");
_logger.Info("Checking for null data completed");
} }
catch (Exception ex) catch (Exception ex)
{ {
var msg = ex.Message; var msg = ex.Message;
Console.WriteLine($"An error occurred: \n{msg}"); Console.WriteLine($"An error occurred: \n{msg}");
_logger.Error(msg, "An error occurred");
} }
return songValues; return songValues;
+26
View File
@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
using MySql.Data;
using MySql.Data.EntityFrameworkCore.Extensions;
using MySql.Data.MySqlClient;
using Icarus.Models;
namespace Icarus.Models.Context
{
public class AlbumContext : DbContext
{
public DbSet<Album> Albums { get; set; }
public AlbumContext(DbContextOptions<AlbumContext> options)
: base(options)
{ }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Album>();
}
}
}
+74
View File
@@ -0,0 +1,74 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using MySql.Data.MySqlClient;
using NLog;
using Icarus.Models;
namespace Icarus.Models.Context
{
public class AlbumStoreContext : BaseStoreContext
{
#region Fields
private static Logger _logger = NLog.LogManager.GetCurrentClassLogger();
#endregion
#region Properties
#endregion
#region Constructors
public AlbumStoreContext(string connectionString)
{
_connectionString = connectionString;
}
#endregion
#region Methods
public List<Album> GetAlbums()
{
List<Album> albums = new List<Album>();
try
{
using (MySqlConnection conn = GetConnection())
{
conn.Open();
var query = "SELECT * FROM Album";
using (MySqlCommand cmd = new MySqlCommand(query, conn))
{
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
var id = Convert.ToInt32(reader["Id"]);
var title = reader["Title"].ToString();
var albumArtist = reader["AlbumArtist"].ToString();
var songCount = Convert.ToInt32(reader["SongCount"]);
albums.Add(new Album
{
Id = id,
Title = title,
AlbumArtist = albumArtist,
SongCount = songCount
});
}
}
}
}
}
catch (Exception ex)
{
var msg = ex.Message;
_logger.Error(msg, "An error occurred");
}
return albums;
}
#endregion
}
}
+26
View File
@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
using MySql.Data;
using MySql.Data.EntityFrameworkCore;
using MySql.Data.MySqlClient;
using Icarus.Models;
namespace Icarus.Models.Context
{
public class ArtistContext : DbContext
{
public DbSet<Artist> Artist { get; set; }
public ArtistContext(DbContextOptions<ArtistContext> options)
: base (options)
{ }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Artist>();
}
}
}
+72
View File
@@ -0,0 +1,72 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using Microsoft.Extensions.Logging;
using MySql.Data.MySqlClient;
using NLog;
using Icarus.Models;
namespace Icarus.Models.Context
{
public class ArtistStoreContext : BaseStoreContext
{
#region Fields
private static Logger _logger = NLog.LogManager.GetCurrentClassLogger();
#endregion
#region Properties
#endregion
#region Constructors
public ArtistStoreContext(string connectionString)
{
_connectionString = connectionString;
}
#endregion
#region Methods
public List<Artist> GetArtists()
{
List<Artist> artists = new List<Artist>();
try
{
using (MySqlConnection conn = GetConnection())
{
conn.Open();
var query = "SELECT * FROM Artist";
using (MySqlCommand cmd = new MySqlCommand(query, conn))
{
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
var id = Convert.ToInt32(reader["Id"].ToString());
var name = reader["Name"].ToString();
var songCount = Convert.ToInt32(reader["SongCount"].ToString());
artists.Add(new Artist
{
Id = id,
Name = name,
SongCount = songCount
});
}
}
}
}
}
catch (Exception ex)
{
var msg = ex.Message;
_logger.Error(msg, "An error occurred");
}
return artists;
}
#endregion
}
}
+14
View File
@@ -2,19 +2,31 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using MySql.Data.MySqlClient; using MySql.Data.MySqlClient;
using NLog;
namespace Icarus.Models.Context namespace Icarus.Models.Context
{ {
public class MusicStoreContext public class MusicStoreContext
{ {
#region Fields
private static Logger _logger = NLog.LogManager.GetCurrentClassLogger();
#endregion
#region Properties
public string ConnectionString { get; set; } public string ConnectionString { get; set; }
#endregion
#region Constructors
public MusicStoreContext(string connectionString) public MusicStoreContext(string connectionString)
{ {
this.ConnectionString = connectionString; this.ConnectionString = connectionString;
} }
#endregion
#region Methods
public void SaveSong(Song song) public void SaveSong(Song song)
{ {
try try
@@ -179,6 +191,7 @@ namespace Icarus.Models.Context
} }
} }
} }
_logger.Info("Song found");
} }
catch(Exception ex) catch(Exception ex)
{ {
@@ -193,5 +206,6 @@ namespace Icarus.Models.Context
{ {
return new MySqlConnection(ConnectionString); return new MySqlConnection(ConnectionString);
} }
#endregion
} }
} }
+10 -10
View File
@@ -10,18 +10,18 @@ using Icarus.Models;
namespace Icarus.Models.Context namespace Icarus.Models.Context
{ {
public class SongContext : DbContext public class SongContext : DbContext
{ {
public DbSet<Song> Songs { get; set; } public DbSet<Song> Songs { get; set; }
public SongContext(DbContextOptions<SongContext> options) public SongContext(DbContextOptions<SongContext> options)
: base(options) : base(options)
{ } { }
protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnModelCreating(ModelBuilder modelBuilder)
{ {
modelBuilder.Entity<Song>(); modelBuilder.Entity<Song>();
} }
} }
} }
+8
View File
@@ -87,6 +87,14 @@ namespace Icarus
new MusicStoreContext(Configuration new MusicStoreContext(Configuration
.GetConnectionString("DefaultConnection")))); .GetConnectionString("DefaultConnection"))));
services.Add(new ServiceDescriptor(typeof(AlbumStoreContext),
new AlbumStoreContext(Configuration
.GetConnectionString("DefaultConnection"))));
services.Add(new ServiceDescriptor(typeof(ArtistStoreContext),
new ArtistStoreContext(Configuration
.GetConnectionString("DefaultConnection"))));
services.Add(new ServiceDescriptor(typeof(UserStoreContext), services.Add(new ServiceDescriptor(typeof(UserStoreContext),
new UserStoreContext(Configuration new UserStoreContext(Configuration
.GetConnectionString("DefaultConnection")))); .GetConnectionString("DefaultConnection"))));