AyCode.Core/AyCode.Database/DbSets/Users/AcUserDbSetExtensions.cs

76 lines
2.8 KiB
C#

using AyCode.Core.Extensions;
using AyCode.Core.Logger;
using AyCode.Entities.Users;
using AyCode.Interfaces.Entities;
using AyCode.Interfaces.Profiles;
using AyCode.Interfaces.Users;
namespace AyCode.Database.DbSets.Users;
public static class AcUserDbSetExtensions
{
public static TUser? GetUserById<TUser>(this IAcUserDbSetBase<TUser> ctx, Guid userId) where TUser : class, IAcUserBase
=> ctx.GetUsersById(userId).FirstOrDefault();
public static TUser? GetUserByEmail<TUser>(this IAcUserDbSetBase<TUser> ctx, string? email) where TUser : class, IAcUserBase
{
return string.IsNullOrWhiteSpace(email) ? null : ctx.GetUsersByEmail(email).FirstOrDefault();
}
public static IQueryable<TUser> GetUsersById<TUser>(this IAcUserDbSetBase<TUser> ctx, Guid userId) where TUser : class, IAcUserBase
=> ctx.Users.Where(u => u.Id == userId);
public static IQueryable<TUser> GetUsersByEmail<TUser>(this IAcUserDbSetBase<TUser> ctx, string email) where TUser : class, IAcUserBase
{
Logger.Info($"GetUserByEmail: {email}");
var emailLower = email.ToLower();
return ctx.Users.Where(u => u.EmailAddress == emailLower);
}
public static bool AddUser<TUser>(this IAcUserDbSetBase<TUser> ctx, TUser user) where TUser : class, IAcUserBase
{
var emailLower = user.EmailAddress.ToLower();
Logger.Info($"GetUserByEmail: {emailLower}");
return ctx.Users.Add(user).State == Microsoft.EntityFrameworkCore.EntityState.Added;
}
public static bool RemoveUser<TUser>(this IAcUserDbSetBase<TUser> ctx, TUser user) where TUser : class, IAcUserBase
=> ctx.Users.Remove(user).State == Microsoft.EntityFrameworkCore.EntityState.Deleted;
public static bool RemoveUser<TUser>(this IAcUserDbSetBase<TUser> ctx, Guid userId) where TUser : class, IAcUserBase
{
var user = ctx.GetUserById(userId);
if (user == null) return false;
return ctx.RemoveUser(user);
}
public static bool UpdateJwtRefreshToken<TUser>(this IAcUserDbSetBase<TUser> ctx, TUser user, string refreshToken) where TUser : class, IAcUserBase
{
if (string.IsNullOrWhiteSpace(refreshToken)) return false;
user.RefreshToken = refreshToken;
ctx.Users.Update(user);
return true;
}
public static TUser? UpdateJwtRefreshToken<TUser>(this IAcUserDbSetBase<TUser> ctx, string email, string refreshToken) where TUser : class, IAcUserBase
{
Console.WriteLine(@"UserDal Update refresh token");
if (string.IsNullOrWhiteSpace(refreshToken)) return null;
var existingUser = ctx.GetUserByEmail(email);
if (existingUser == null) return null;
existingUser.RefreshToken = refreshToken;
ctx.Users.Update(existingUser);
return existingUser;
}
}