namespace MyOffice.Web.Identity.Repositories; using Data.Models.Users; using Data.Repositories.Users; using Domain; using Microsoft.AspNetCore.Identity; public class UserStore : IUserStore>, IUserPasswordStore>, IUserEmailStore> { private readonly IUserRepository _userRepository; public UserStore( IUserRepository userRepository ) { _userRepository = userRepository; } public void Dispose() { } public Task GetUserIdAsync(ApplicationUser user, CancellationToken cancellationToken) { return Task.FromResult(user.Id.ToString()); } public Task GetUserNameAsync(ApplicationUser user, CancellationToken cancellationToken) { return Task.FromResult(user.UserName); } public Task SetUserNameAsync(ApplicationUser user, string userName, CancellationToken cancellationToken) { throw new NotImplementedException(); } public Task GetNormalizedUserNameAsync(ApplicationUser user, CancellationToken cancellationToken) { throw new NotImplementedException(); } public Task SetNormalizedUserNameAsync(ApplicationUser user, string normalizedName, CancellationToken cancellationToken) { user.UserName = normalizedName; return Task.FromResult(0); } public async Task CreateAsync(ApplicationUser user, CancellationToken cancellationToken) { var result = await _userRepository.AddUserAsync(new User { Id = user.Id, UserName = user.UserName, Email = user.Email, PasswordHash = user.PasswordHash, FirstName = user.FirstName, LastName = user.LastName, FullName = user.FullName, IsEmailConfirmed = user.IsEmailConfirmed }); return result == 1 ? IdentityResult.Success : IdentityResult.Failed(); } public async Task UpdateAsync(ApplicationUser user, CancellationToken cancellationToken) { var userDb = new User { Id = user.Id, UserName = user.UserName, Email = user.Email, PasswordHash = user.PasswordHash, FirstName = user.FirstName, LastName = user.LastName, FullName = user.FullName, IsEmailConfirmed = user.IsEmailConfirmed }; var result = await _userRepository.UpdateUserAsync(userDb); return result == 1 ? IdentityResult.Success : IdentityResult.Failed(); } public Task DeleteAsync(ApplicationUser user, CancellationToken cancellationToken) { throw new NotImplementedException(); } public async Task> FindByIdAsync(string userId, CancellationToken cancellationToken) { var user = await _userRepository.GetUserAsync(Guid.Parse(userId)); if (user == null) { #pragma warning disable CS8603 // Possible null reference return. return null; #pragma warning restore CS8603 // Possible null reference return. } return new ApplicationUser { Id = user.Id, UserName = user.UserName, Email = user.Email, PasswordHash = user.PasswordHash, FirstName = user.FirstName, LastName = user.LastName, FullName = user.FullName, IsEmailConfirmed = user.IsEmailConfirmed }; } public async Task> FindByNameAsync(string normalizedUserName, CancellationToken cancellationToken) { var user = await _userRepository.GetByUserUserNameAsync(normalizedUserName); if (user == null) { #pragma warning disable CS8603 // Possible null reference return. return null; #pragma warning restore CS8603 // Possible null reference return. } return new ApplicationUser { Id = user.Id, UserName = user.UserName, Email = user.Email, PasswordHash = user.PasswordHash, FirstName = user.FirstName, LastName = user.LastName, FullName = user.FullName, IsEmailConfirmed = user.IsEmailConfirmed }; } public Task SetPasswordHashAsync(ApplicationUser user, string passwordHash, CancellationToken cancellationToken) { user.PasswordHash = passwordHash; return Task.FromResult(0); } public Task GetPasswordHashAsync(ApplicationUser user, CancellationToken cancellationToken) { return Task.FromResult(user.PasswordHash); } public Task HasPasswordAsync(ApplicationUser user, CancellationToken cancellationToken) { throw new NotImplementedException(); } public Task SetEmailAsync(ApplicationUser user, string email, CancellationToken cancellationToken) { throw new NotImplementedException(); } public Task GetEmailAsync(ApplicationUser user, CancellationToken cancellationToken) { return Task.FromResult(user.Email); } public Task GetEmailConfirmedAsync(ApplicationUser user, CancellationToken cancellationToken) { throw new NotImplementedException(); } public Task SetEmailConfirmedAsync(ApplicationUser user, bool confirmed, CancellationToken cancellationToken) { throw new NotImplementedException(); } public Task> FindByEmailAsync(string normalizedEmail, CancellationToken cancellationToken) { return FindByNameAsync(normalizedEmail, cancellationToken); } public Task GetNormalizedEmailAsync(ApplicationUser user, CancellationToken cancellationToken) { return Task.FromResult(user?.Email); } public Task SetNormalizedEmailAsync(ApplicationUser user, string normalizedEmail, CancellationToken cancellationToken) { return Task.FromResult(0); } }