forked from MDCPS/DamageAssessment_Backend
		
	user access module changes for populating employee Information
This commit is contained in:
		@ -4,7 +4,7 @@ namespace DamageAssesment.Api.UsersAccess.Interfaces
 | 
			
		||||
{
 | 
			
		||||
    public interface IEmployeeServiceProvider
 | 
			
		||||
    {
 | 
			
		||||
        Task<List<Employee>> getEmployeesAsync();
 | 
			
		||||
        Task<Employee> getEmployeeAsync(int employeeId);
 | 
			
		||||
        Task<List<Employee>> getEmployeesAsync(string token);
 | 
			
		||||
        Task<Employee> getEmployeeAsync(int employeeId, string token);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -4,8 +4,8 @@ namespace DamageAssesment.Api.UsersAccess.Interfaces
 | 
			
		||||
{
 | 
			
		||||
    public interface IUsersAccessProvider
 | 
			
		||||
    {
 | 
			
		||||
       public Task<(bool IsSuccess, IEnumerable< Models.User> Users, string ErrorMessage)> GetUsersAsync();
 | 
			
		||||
        public Task<(bool IsSuccess, Models.User User, string ErrorMessage)> GetUsersAsync(int Id);
 | 
			
		||||
       public Task<(bool IsSuccess, IEnumerable<object> Users, string ErrorMessage)> GetUsersAsync();
 | 
			
		||||
        public Task<(bool IsSuccess, object User, string ErrorMessage)> GetUsersAsync(int Id);
 | 
			
		||||
        public Task<(bool IsSuccess, Models.User User, string ErrorMessage)> PostUserAsync(Models.User User);
 | 
			
		||||
        public Task<(bool IsSuccess, Models.User User, string ErrorMessage)> PutUserAsync(int Id,Models.User User);
 | 
			
		||||
        public Task<(bool IsSuccess, Models.User User, string ErrorMessage)> DeleteUserAsync(int Id);
 | 
			
		||||
 | 
			
		||||
@ -2,6 +2,6 @@
 | 
			
		||||
{
 | 
			
		||||
    public interface IHttpUtil
 | 
			
		||||
    {
 | 
			
		||||
        Task<string> SendAsync(HttpMethod method, string url, string JsonInput);
 | 
			
		||||
        Task<string> SendAsync(HttpMethod method, string url, string JsonInput, string token);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -68,6 +68,7 @@ builder.Services.AddAuthorization(options =>
 | 
			
		||||
 | 
			
		||||
var _jwtsettings = builder.Configuration.GetSection("JwtSettings");
 | 
			
		||||
builder.Services.Configure<JwtSettings>(_jwtsettings);
 | 
			
		||||
builder.Services.AddHttpContextAccessor();
 | 
			
		||||
 | 
			
		||||
builder.Services.AddControllers();
 | 
			
		||||
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
 | 
			
		||||
 | 
			
		||||
@ -2,9 +2,12 @@
 | 
			
		||||
using DamageAssesment.Api.UsersAccess.Db;
 | 
			
		||||
using DamageAssesment.Api.UsersAccess.Interfaces;
 | 
			
		||||
using DamageAssesment.Api.UsersAccess.Models;
 | 
			
		||||
using Microsoft.AspNetCore.Http;
 | 
			
		||||
using Microsoft.EntityFrameworkCore;
 | 
			
		||||
using Microsoft.Extensions.Options;
 | 
			
		||||
using Microsoft.IdentityModel.Tokens;
 | 
			
		||||
using Newtonsoft.Json;
 | 
			
		||||
using Newtonsoft.Json.Linq;
 | 
			
		||||
using System.Data;
 | 
			
		||||
using Newtonsoft.Json;
 | 
			
		||||
using System.IdentityModel.Tokens.Jwt;
 | 
			
		||||
@ -18,21 +21,23 @@ namespace DamageAssesment.Api.UsersAccess.Providers
 | 
			
		||||
        private readonly UsersAccessDbContext userAccessDbContext;
 | 
			
		||||
        private readonly ILogger<UsersAccessProvider> logger;
 | 
			
		||||
        private readonly IMapper mapper;
 | 
			
		||||
        //private readonly IEmployeeServiceProvider employeeServiceProvider;
 | 
			
		||||
        private readonly IEmployeeServiceProvider employeeServiceProvider;
 | 
			
		||||
        private readonly JwtSettings jwtSettings;
 | 
			
		||||
        private readonly ITokenServiceProvider tokenServiceProvider; 
 | 
			
		||||
        private readonly IConfiguration configuration;
 | 
			
		||||
        private readonly IHttpContextAccessor httpContextAccessor;
 | 
			
		||||
 | 
			
		||||
        public UsersAccessProvider(IConfiguration configuration,IOptions<JwtSettings> options, ITokenServiceProvider tokenServiceProvider, UsersAccessDbContext userAccessDbContext, IEmployeeServiceProvider employeeServiceProvider, ILogger<UsersAccessProvider> logger, IMapper mapper)
 | 
			
		||||
        public UsersAccessProvider(IConfiguration configuration,IOptions<JwtSettings> options, ITokenServiceProvider tokenServiceProvider, IHttpContextAccessor httpContextAccessor, UsersAccessDbContext userAccessDbContext, IEmployeeServiceProvider employeeServiceProvider, ILogger<UsersAccessProvider> logger, IMapper mapper)
 | 
			
		||||
        {
 | 
			
		||||
            this.userAccessDbContext = userAccessDbContext;
 | 
			
		||||
            //this.employeeServiceProvider = employeeServiceProvider;
 | 
			
		||||
            this.employeeServiceProvider = employeeServiceProvider;
 | 
			
		||||
            this.logger = logger;
 | 
			
		||||
            this.mapper = mapper;
 | 
			
		||||
            jwtSettings = options.Value;
 | 
			
		||||
            this.tokenServiceProvider = tokenServiceProvider;
 | 
			
		||||
            this.httpContextAccessor = httpContextAccessor;
 | 
			
		||||
            this.configuration = configuration;
 | 
			
		||||
            // seedData();
 | 
			
		||||
            seedData();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void seedData()
 | 
			
		||||
@ -55,18 +60,47 @@ namespace DamageAssesment.Api.UsersAccess.Providers
 | 
			
		||||
                userAccessDbContext.SaveChanges();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task<(bool IsSuccess, IEnumerable<Models.User> Users, string ErrorMessage)> GetUsersAsync()
 | 
			
		||||
        private string GetToken()
 | 
			
		||||
        {
 | 
			
		||||
            string token = httpContextAccessor.HttpContext.Request.Headers.Authorization;
 | 
			
		||||
            if (token != null)
 | 
			
		||||
            {
 | 
			
		||||
                token = token.Replace("Bearer ", string.Empty);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                token = "";
 | 
			
		||||
            }
 | 
			
		||||
            return token;
 | 
			
		||||
        }
 | 
			
		||||
        public async Task<(bool IsSuccess, IEnumerable<object> Users, string ErrorMessage)> GetUsersAsync()
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                logger?.LogInformation("Gell all Users from DB");
 | 
			
		||||
                var users = await userAccessDbContext.Users.ToListAsync();
 | 
			
		||||
                List<object> userslist= new List<object>();
 | 
			
		||||
                if (users != null)
 | 
			
		||||
                {
 | 
			
		||||
                    var employees = await employeeServiceProvider.getEmployeesAsync( GetToken());
 | 
			
		||||
                    var roles = await userAccessDbContext.Roles.ToListAsync();
 | 
			
		||||
                    foreach (Db.User user in users)
 | 
			
		||||
                    {
 | 
			
		||||
                        var employee = employees.SingleOrDefault(a=>a.Id==user.EmployeeId);
 | 
			
		||||
                        var role = roles.SingleOrDefault(s => s.Id == user.RoleId);
 | 
			
		||||
                        userslist.Add(new
 | 
			
		||||
                        {
 | 
			
		||||
                            Id = user.Id,
 | 
			
		||||
                            EmployeeId = user.EmployeeId,
 | 
			
		||||
                            EmployeeCode = user.EmployeeCode,
 | 
			
		||||
                            EmployeeName = (employee != null) ? employee.Name : null,
 | 
			
		||||
                            RoleId = user.RoleId,
 | 
			
		||||
                            RoleName = (role != null) ? role.Name : null
 | 
			
		||||
                        });
 | 
			
		||||
                    }
 | 
			
		||||
                    logger?.LogInformation($"{users.Count} Items(s) found");
 | 
			
		||||
                    var result = mapper.Map<IEnumerable<Db.User>, IEnumerable<Models.User>>(users);
 | 
			
		||||
                    return (true, result, null);
 | 
			
		||||
                   // var result = mapper.Map<IEnumerable<Db.User>, IEnumerable<Models.User>>(users);
 | 
			
		||||
                    return (true, userslist, null);
 | 
			
		||||
                }
 | 
			
		||||
                return (false, null, "Not found");
 | 
			
		||||
            }
 | 
			
		||||
@ -76,18 +110,29 @@ namespace DamageAssesment.Api.UsersAccess.Providers
 | 
			
		||||
                return (false, null, ex.Message);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task<(bool IsSuccess, Models.User User, string ErrorMessage)> GetUsersAsync(int Id)
 | 
			
		||||
        public async Task<(bool IsSuccess, object User, string ErrorMessage)> GetUsersAsync(int Id)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                logger?.LogInformation("Querying Users table");
 | 
			
		||||
                
 | 
			
		||||
                var user = await userAccessDbContext.Users.SingleOrDefaultAsync(s => s.Id == Id);
 | 
			
		||||
                if (user != null)
 | 
			
		||||
                {
 | 
			
		||||
                    var employee = await employeeServiceProvider.getEmployeeAsync(user.EmployeeId,GetToken());
 | 
			
		||||
                    var role = await userAccessDbContext.Roles.SingleOrDefaultAsync(s => s.Id == user.RoleId);
 | 
			
		||||
                    var data = new
 | 
			
		||||
                    {
 | 
			
		||||
                        Id = user.Id,
 | 
			
		||||
                        EmployeeId = user.EmployeeId,
 | 
			
		||||
                        EmployeeCode=user.EmployeeCode,
 | 
			
		||||
                        EmployeeName = (employee != null) ? employee.Name : null,
 | 
			
		||||
                        RoleId = user.RoleId,
 | 
			
		||||
                        RoleName = (role!=null)?role.Name:null
 | 
			
		||||
                    };
 | 
			
		||||
                    logger?.LogInformation($"User Id: {Id} found");
 | 
			
		||||
                    var result = mapper.Map<Db.User, Models.User>(user);
 | 
			
		||||
                    return (true, result, null);
 | 
			
		||||
                    return (true, data, null);
 | 
			
		||||
                }
 | 
			
		||||
                return (false, null, "Not found");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -10,11 +10,11 @@ namespace DamageAssesment.Api.UsersAccess.Services
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task<List<Employee>> getEmployeesAsync()
 | 
			
		||||
        public async Task<List<Employee>> getEmployeesAsync(string token)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null);
 | 
			
		||||
                var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null,token);
 | 
			
		||||
                var employees = JsonConvert.DeserializeObject<List<Employee>>(responseJsonString);
 | 
			
		||||
 | 
			
		||||
                if (employees == null || !employees.Any())
 | 
			
		||||
@ -28,12 +28,12 @@ namespace DamageAssesment.Api.UsersAccess.Services
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task<Employee> getEmployeeAsync(int employeeId)
 | 
			
		||||
        public async Task<Employee> getEmployeeAsync(int employeeId, string token)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                url = urlBase + string.Format(configuration.GetValue<string>("RessourceSettings:EmployeeById"), employeeId);
 | 
			
		||||
                var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null);
 | 
			
		||||
                var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null,token);
 | 
			
		||||
                var employee = JsonConvert.DeserializeObject<Employee>(responseJsonString);
 | 
			
		||||
 | 
			
		||||
                if (employee == null)
 | 
			
		||||
 | 
			
		||||
@ -14,7 +14,7 @@ namespace DamageAssesment.Api.UsersAccess.Services
 | 
			
		||||
            this.httpClient = httpClient;
 | 
			
		||||
            this.logger = logger;
 | 
			
		||||
        }
 | 
			
		||||
        public async Task<string> SendAsync(HttpMethod method, string url, string JsonInput)
 | 
			
		||||
        public async Task<string> SendAsync(HttpMethod method, string url, string JsonInput,string token)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
@ -22,7 +22,7 @@ namespace DamageAssesment.Api.UsersAccess.Services
 | 
			
		||||
                request.Headers.Accept.Clear();
 | 
			
		||||
                request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
 | 
			
		||||
 | 
			
		||||
                //request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
 | 
			
		||||
                request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
 | 
			
		||||
                if (method == HttpMethod.Post)
 | 
			
		||||
                {
 | 
			
		||||
                    request.Content = new StringContent(JsonInput, Encoding.UTF8, "application/json");
 | 
			
		||||
 | 
			
		||||
@ -8,8 +8,11 @@
 | 
			
		||||
      "Microsoft.AspNetCore": "Warning"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  //"EndPointSettings": {
 | 
			
		||||
  //  "EmployeeUrlBase": "http://localhost:5135"
 | 
			
		||||
  //},
 | 
			
		||||
  "EndPointSettings": {
 | 
			
		||||
    "EmployeeUrlBase": "http://localhost:5135"
 | 
			
		||||
    "EmployeeUrlBase": "http://damageassesment.api.employees:80"
 | 
			
		||||
  },
 | 
			
		||||
  "RessourceSettings": {
 | 
			
		||||
    "Employee": "/Employees",
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user