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(this IAcUserDbSetBase ctx, Guid userId) where TUser : class, IAcUserBase => ctx.GetUsersById(userId).FirstOrDefault(); public static TUser? GetUserByEmail(this IAcUserDbSetBase ctx, string? email) where TUser : class, IAcUserBase { return string.IsNullOrWhiteSpace(email) ? null : ctx.GetUsersByEmail(email).FirstOrDefault(); } public static IQueryable GetUsersById(this IAcUserDbSetBase ctx, Guid userId) where TUser : class, IAcUserBase => ctx.Users.Where(u => u.Id == userId); public static IQueryable GetUsersByEmail(this IAcUserDbSetBase 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(this IAcUserDbSetBase 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(this IAcUserDbSetBase ctx, TUser user) where TUser : class, IAcUserBase => ctx.Users.Remove(user).State == Microsoft.EntityFrameworkCore.EntityState.Deleted; public static bool RemoveUser(this IAcUserDbSetBase 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(this IAcUserDbSetBase 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(this IAcUserDbSetBase 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; } }