diff --git a/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Interfaces/IEmployeeServiceProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Interfaces/IEmployeeServiceProvider.cs index 0675a74..bab06bf 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Interfaces/IEmployeeServiceProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Interfaces/IEmployeeServiceProvider.cs @@ -4,7 +4,7 @@ namespace DamageAssesment.Api.UsersAccess.Interfaces { public interface IEmployeeServiceProvider { - Task> getEmployeesAsync(); - Task getEmployeeAsync(int employeeId); + Task> getEmployeesAsync(string token); + Task getEmployeeAsync(int employeeId, string token); } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Interfaces/IHttpUtil.cs b/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Interfaces/IHttpUtil.cs index 6fc4710..f67ec56 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Interfaces/IHttpUtil.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Interfaces/IHttpUtil.cs @@ -4,6 +4,6 @@ using DamageAssesment.Api.UsersAccess.Models; { public interface IHttpUtil { - Task SendAsync(HttpMethod method, string url, string JsonInput); + Task SendAsync(HttpMethod method, string url, string JsonInput, string token); } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Interfaces/IUsersAccessProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Interfaces/IUsersAccessProvider.cs index 6a70a5b..92d531c 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Interfaces/IUsersAccessProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Interfaces/IUsersAccessProvider.cs @@ -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 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); diff --git a/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Program.cs b/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Program.cs index a7d12a5..0e29e53 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Program.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Program.cs @@ -66,6 +66,7 @@ builder.Services.AddAuthorization(options => var _jwtsettings = builder.Configuration.GetSection("JwtSettings"); builder.Services.Configure(_jwtsettings); +builder.Services.AddHttpContextAccessor(); builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle diff --git a/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Providers/UserAccessProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Providers/UserAccessProvider.cs index b3b5267..4e31356 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Providers/UserAccessProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Providers/UserAccessProvider.cs @@ -2,10 +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 System.IdentityModel.Tokens.Jwt; using System.Security.Claims; @@ -18,21 +20,23 @@ namespace DamageAssesment.Api.UsersAccess.Providers private readonly UsersAccessDbContext userAccessDbContext; private readonly ILogger 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 options, ITokenServiceProvider tokenServiceProvider, UsersAccessDbContext userAccessDbContext, IEmployeeServiceProvider employeeServiceProvider, ILogger logger, IMapper mapper) + public UsersAccessProvider(IConfiguration configuration,IOptions options, ITokenServiceProvider tokenServiceProvider, IHttpContextAccessor httpContextAccessor, UsersAccessDbContext userAccessDbContext, IEmployeeServiceProvider employeeServiceProvider, ILogger 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 +59,47 @@ namespace DamageAssesment.Api.UsersAccess.Providers userAccessDbContext.SaveChanges(); } } - - public async Task<(bool IsSuccess, IEnumerable 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 Users, string ErrorMessage)> GetUsersAsync() { try { logger?.LogInformation("Gell all Users from DB"); var users = await userAccessDbContext.Users.ToListAsync(); + List userslist= new List(); 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>(users); - return (true, result, null); + // var result = mapper.Map, IEnumerable>(users); + return (true, userslist, null); } return (false, null, "Not found"); } @@ -76,18 +109,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(user); - return (true, result, null); + return (true, data, null); } return (false, null, "Not found"); } diff --git a/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Services/EmployeeServiceProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Services/EmployeeServiceProvider.cs index ba97947..e388851 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Services/EmployeeServiceProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Services/EmployeeServiceProvider.cs @@ -10,11 +10,11 @@ namespace DamageAssesment.Api.UsersAccess.Services { } - public async Task> getEmployeesAsync() + public async Task> 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>(responseJsonString); if (employees == null || !employees.Any()) @@ -28,12 +28,12 @@ namespace DamageAssesment.Api.UsersAccess.Services } } - public async Task getEmployeeAsync(int employeeId) + public async Task getEmployeeAsync(int employeeId, string token) { try { url = urlBase + string.Format(configuration.GetValue("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(responseJsonString); if (employee == null) diff --git a/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Services/HttpUtil.cs b/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Services/HttpUtil.cs index a8b5c9f..071a048 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Services/HttpUtil.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.UsersAccess/Services/HttpUtil.cs @@ -14,7 +14,7 @@ namespace DamageAssesment.Api.UsersAccess.Services this.httpClient = httpClient; this.logger = logger; } - public async Task SendAsync(HttpMethod method, string url, string JsonInput) + public async Task 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");