75 lines
2.5 KiB
C#

using Marco.Pms.DataAccess.Data;
using Marco.Pms.Model.Dtos.Employees;
using Marco.Pms.Model.Employees;
using Marco.Pms.Model.Entitlements;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using System.Security.Claims;
namespace MarcoBMS.Services.Helpers
{
public class UserHelper
{
private readonly UserManager<IdentityUser> _userManager;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly ApplicationDbContext _context;
public UserHelper(UserManager<IdentityUser> userManager, IHttpContextAccessor httpContextAccessor,ApplicationDbContext context)
{
_userManager = userManager;
_httpContextAccessor = httpContextAccessor;
_context = context;
}
public int GetTenantId()
{
var tenant = _httpContextAccessor.HttpContext?.User.FindFirst("TenantId")?.Value;
return (tenant != null ? Convert.ToInt32(tenant) : 1);
}
public async Task<IdentityUser?> GetCurrentUserAsync()
{
var userId = _httpContextAccessor.HttpContext?.User.FindFirstValue(ClaimTypes.NameIdentifier);
if (string.IsNullOrEmpty(userId))
return null;
var user = await _userManager.FindByEmailAsync(userId);
return user; //await _userManager.FindByIdAsync(userId);
}
public async Task<Employee> GetCurrentEmployeeAsync()
{
var user = await GetCurrentUserAsync();
var Employee = await _context.Employees.FirstOrDefaultAsync(e => e.ApplicationUserId == user.Id);
return Employee;
}
public async Task<object?> GetCurrentUserProfileAsync()
{
var user = await GetCurrentUserAsync();
return user == null ? null : new
{
user.Id,
user.UserName,
user.Email,
user.PhoneNumber
};
}
public async Task<IdentityUser?> GetRegisteredUser(string email)
{
//IdentityUser? user = await _userManager.Users
// .FirstOrDefaultAsync(u => u.Email == model.Email || u.PhoneNumber == model.PhoneNumber);
IdentityUser? user = await _userManager.FindByEmailAsync(email);
//if (user == null)
//{
// user = await _userManager.Find(model.Email);
//}
return user;
}
}
}