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 => 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 RemoveUserAsync(this IAcUserDbSetBase ctx, TUser user) where TUser : class, IAcUserBase => ctx.Users.Remove(user).State == Microsoft.EntityFrameworkCore.EntityState.Deleted; public static bool RemoveUserAsync(this IAcUserDbSetBase ctx, Guid userId) where TUser : class, IAcUserBase { var user = ctx.GetUserById(userId); if (user == null) return false; return ctx.RemoveUserAsync(user); } }