From 3b941e9c7176b8ab40abd45485687283b4fd133c Mon Sep 17 00:00:00 2001
From: "jozsef.b@aycode.com" <9Rj@D}fVwBaN>
Date: Tue, 12 Dec 2023 08:16:22 +0100
Subject: [PATCH] Add Logger; AcUserDal fix; AcUserDalTests improvements,
etc...
---
AyCode.Core/AyCode.Core.csproj | 4 -
AyCode.Core/Enums/AppType.cs | 14 ++++
AyCode.Core/Logger/LogLevel.cs | 17 +++++
AyCode.Core/Logger/Logger.cs | 73 ++++++++++++++++---
.../Users/AcUserDalTestBase.cs | 6 +-
.../DataLayers/Users/AcUserDalBase.cs | 5 +-
.../DbSets/Users/AcUserDbSetExtensions.cs | 5 +-
7 files changed, 102 insertions(+), 22 deletions(-)
create mode 100644 AyCode.Core/Enums/AppType.cs
create mode 100644 AyCode.Core/Logger/LogLevel.cs
diff --git a/AyCode.Core/AyCode.Core.csproj b/AyCode.Core/AyCode.Core.csproj
index a79a53c..46fad1b 100644
--- a/AyCode.Core/AyCode.Core.csproj
+++ b/AyCode.Core/AyCode.Core.csproj
@@ -10,8 +10,4 @@
-
-
-
-
diff --git a/AyCode.Core/Enums/AppType.cs b/AyCode.Core/Enums/AppType.cs
new file mode 100644
index 0000000..fab6d0b
--- /dev/null
+++ b/AyCode.Core/Enums/AppType.cs
@@ -0,0 +1,14 @@
+namespace AyCode.Core.Enums
+{
+ public enum AppType : byte
+ {
+ None = 0,
+ Server = 1,
+ Relay = 5,
+ Game = 10,
+ Web = 15,
+ Mobile = 20,
+ Dissonance = 25,
+ UnitTest = 255,
+ }
+}
diff --git a/AyCode.Core/Logger/LogLevel.cs b/AyCode.Core/Logger/LogLevel.cs
new file mode 100644
index 0000000..ac80d8a
--- /dev/null
+++ b/AyCode.Core/Logger/LogLevel.cs
@@ -0,0 +1,17 @@
+namespace AyCode.Core.Logger
+{
+ ///
+ /// Az adatbásisban van egy LogLevel tábla, ha változtatunk az enum-ok értékén, akkor ott is igazítsuk hozzá!
+ ///
+ public enum LogLevel : byte
+ {
+ Detail = 0,
+ Trace = 5,
+ Debug = 10,
+ Info = 15,
+ Suggest = 17,
+ Warning = 20,
+ Error = 25,
+ Disabled = 255,
+ }
+}
\ No newline at end of file
diff --git a/AyCode.Core/Logger/Logger.cs b/AyCode.Core/Logger/Logger.cs
index 7d6ce6d..12a1483 100644
--- a/AyCode.Core/Logger/Logger.cs
+++ b/AyCode.Core/Logger/Logger.cs
@@ -1,32 +1,85 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using AyCode.Core.Consts;
+using AyCode.Core.Enums;
namespace AyCode.Core.Logger
{
public static class Logger
{
- public static void Info(string text)
+ public static LogLevel LogLevel { get; set; } = LogLevel.Detail;
+ public static AppType AppType { get; set; } = AppType.Server;
+
+ public static void Detail(string text, [CallerMemberName] string? memberName = null)
+ => WriteToConsole(LogLevel.Detail, GetDiagnosticText(LogLevel.Detail, text, memberName, null));
+
+ public static void Debug(string text, [CallerMemberName] string? memberName = null)
+ => WriteToConsole(LogLevel.Debug, GetDiagnosticText(LogLevel.Debug, text, memberName, null));
+
+ public static void Info(string text, [CallerMemberName] string? memberName = null)
+ => WriteToConsole(LogLevel.Info, GetDiagnosticText(LogLevel.Info, text, memberName, null));
+
+ public static void Warning(string text, [CallerMemberName] string? memberName = null)
+ => WriteToConsole(LogLevel.Warning, GetDiagnosticText(LogLevel.Warning, text, memberName, null));
+
+ public static void Suggest(string text, [CallerMemberName] string? memberName = null)
+ => WriteToConsole(LogLevel.Suggest, GetDiagnosticText(LogLevel.Suggest, text, memberName, null));
+
+ public static void Error(string text, [CallerMemberName] string? memberName = null)
+ => WriteToConsole(LogLevel.Error, GetDiagnosticText(LogLevel.Error, text, memberName, null));
+
+ public static void Error(string text, Exception ex, [CallerMemberName] string? memberName = null)
+ => WriteToConsole(LogLevel.Error, GetDiagnosticText(LogLevel.Error, text, memberName, ex));
+
+ private static void WriteToConsole(LogLevel logLevel, string text)
{
- Console.WriteLine(text);
+ if (logLevel < LogLevel) return;
+
+ //lock (ForWriterLock)
+ {
+ //if (logLevel > LogLevel.Trace && logLevel < LogLevel.Suggest)
+ {
+ Console.WriteLine(text);
+ return;
+ }
+
+ if (logLevel <= LogLevel.Trace)
+ {
+ Console.ForegroundColor = ConsoleColor.Gray;
+ Console.WriteLine(text);
+ }
+ else if (logLevel == LogLevel.Suggest)
+ {
+ Console.ForegroundColor = ConsoleColor.Cyan;
+ Console.WriteLine(text);
+ }
+ else
+ {
+ Console.ForegroundColor = logLevel == LogLevel.Warning ? ConsoleColor.Yellow : ConsoleColor.Red;
+ Console.WriteLine($"{AcEnv.NL}{text}{AcEnv.NL}");
+ }
+
+ Console.ForegroundColor = ConsoleColor.White;
+ }
}
- public static void Warning(string text)
+ private static string GetDiagnosticText(LogLevel logLevel, string logText, string? callerName, Exception? ex)
{
- Console.WriteLine(text);
+ var threadId = Environment.CurrentManagedThreadId;
+
+ return $"[{DateTime.Now:HH:mm:ss.fff}] [{AppType.ToString()[0]}] {"[" + logLevel + "]",-9} {"[...->" + callerName + "]",-54} {"[" + threadId + "]",5} {logText}{ErrorText(ex)}";
}
- public static void Error(string text)
+ private static string ErrorText(Exception? ex)
{
- Console.WriteLine(text);
- }
+ if (ex == null) return string.Empty;
- public static void Error(string text, Exception ex)
- {
- Console.WriteLine($"{text}{AcEnv.NL}{ex.Message}{AcEnv.NL}{ex}");
+ var errorType = ex.GetType().Name;
+ return string.IsNullOrWhiteSpace(errorType) ? string.Empty : $"{Environment.NewLine}[{errorType.ToUpper()}]: {ex}";
}
}
}
diff --git a/AyCode.Database.Tests/Users/AcUserDalTestBase.cs b/AyCode.Database.Tests/Users/AcUserDalTestBase.cs
index 4542468..69a8536 100644
--- a/AyCode.Database.Tests/Users/AcUserDalTestBase.cs
+++ b/AyCode.Database.Tests/Users/AcUserDalTestBase.cs
@@ -14,7 +14,7 @@ namespace AyCode.Database.Tests.Users
{
[TestMethod]
[DataRow("540271F6-C604-4C16-8160-D5A7CAFEDF00")]
- public void GetUserById_ReturnsUser_WhenUserExists(string userIdString)
+ public virtual void GetUserById_ReturnsUser_WhenUserExists(string userIdString)
{
var userId = Guid.Parse(userIdString);
var user = Dal.GetUserById(userId);
@@ -25,7 +25,7 @@ namespace AyCode.Database.Tests.Users
[TestMethod]
[DataRow("test@tiam.hu")]
- public void GetUserByEmail_ReturnsUser_WhenUserExists(string email)
+ public virtual void GetUserByEmail_ReturnsUser_WhenUserExists(string email)
{
var user = Dal.GetUserByEmail(email);
@@ -35,7 +35,7 @@ namespace AyCode.Database.Tests.Users
[TestMethod]
[DataRow("test@tiam.hu")]
- public async Task GetUserByEmailAsync_ReturnsUser_WhenUserExists(string email)
+ public virtual async Task GetUserByEmailAsync_ReturnsUser_WhenUserExists(string email)
{
TUser? user = null;
diff --git a/AyCode.Database/DataLayers/Users/AcUserDalBase.cs b/AyCode.Database/DataLayers/Users/AcUserDalBase.cs
index 0a11093..b5d6ef1 100644
--- a/AyCode.Database/DataLayers/Users/AcUserDalBase.cs
+++ b/AyCode.Database/DataLayers/Users/AcUserDalBase.cs
@@ -14,14 +14,11 @@ using AyCode.Database.DbSets.Users;
namespace AyCode.Database.DataLayers.Users
{
- public abstract class AcUserDalBase : AcDalBase, IAcUserDbContextBase
+ public abstract class AcUserDalBase : AcDalBase
where TDbContext : AcDbContextBase, IAcUserDbContextBase
where TUser : class, IUserBase
where TUserToken : class, IUserTokenBase
{
- public DbSet Users { get; set; }
- public DbSet UserTokens { get; set; }
-
public TUser? GetUserById(Guid userId) => Session(x => x.GetUserById(userId));
public Task GetUserByIdAsync(Guid userId) => SessionAsync(x => x.GetUserById(userId));
diff --git a/AyCode.Database/DbSets/Users/AcUserDbSetExtensions.cs b/AyCode.Database/DbSets/Users/AcUserDbSetExtensions.cs
index 8910c9b..73697a3 100644
--- a/AyCode.Database/DbSets/Users/AcUserDbSetExtensions.cs
+++ b/AyCode.Database/DbSets/Users/AcUserDbSetExtensions.cs
@@ -1,4 +1,5 @@
-using AyCode.Interfaces.Users;
+using AyCode.Core.Logger;
+using AyCode.Interfaces.Users;
namespace AyCode.Database.DbSets.Users;
@@ -11,6 +12,8 @@ public static class AcUserDbSetExtensions
public static TUser? GetUserByEmail(this IAcUserDbSet ctx, string email) where TUser : class, IUserBase
{
+ Logger.Info($"GetUserByEmail: {email}");
+
var emailLower = email.ToLower();
return ctx.Users.FirstOrDefault(u => u.EmailAddress == emailLower);
}