diff --git a/DamageAssesmentApi/DamageAssesment.Api.Answers/Controllers/AnswersController.cs b/DamageAssesmentApi/DamageAssesment.Api.Answers/Controllers/AnswersController.cs index bbfc323..a86cbf1 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Answers/Controllers/AnswersController.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Answers/Controllers/AnswersController.cs @@ -5,7 +5,6 @@ using Microsoft.OpenApi.Any; namespace DamageAssesment.Api.Answers.Controllers { - [Route("api")] [ApiController] public class AnswersController: ControllerBase { @@ -49,10 +48,10 @@ namespace DamageAssesment.Api.Answers.Controllers /// /// Get all answers based on responseId. /// - [HttpGet("AnswersByResponse/{ResponseId}")] - public async Task GetAnswersByResponseId(int ResponseId) + [HttpGet("Answers/ByResponse/{responseid}")] + public async Task GetAnswersByResponseId(int responseid) { - var result = await this.answerProvider.GetAnswersAsync(ResponseId); + var result = await this.answerProvider.GetAnswersAsync(responseid); if(result.IsSuccess) { return Ok(result.Answers); @@ -63,10 +62,10 @@ namespace DamageAssesment.Api.Answers.Controllers /// Get all answers based on questionId. /// - [HttpGet("AnswersByQuestion/{QuestionId}")] - public async Task AnswersByQuestionId(int QuestionId) + [HttpGet("Answers/ByQuestion/{questionid}")] + public async Task AnswersByQuestionId(int questionid) { - var result = await this.answerProvider.GetAnswersByQuestionAsync(QuestionId); + var result = await this.answerProvider.GetAnswersByQuestionAsync(questionid); if (result.IsSuccess) { return Ok(result.Answers); diff --git a/DamageAssesmentApi/DamageAssesment.Api.Attachments/Controllers/AttachmentsController.cs b/DamageAssesmentApi/DamageAssesment.Api.Attachments/Controllers/AttachmentsController.cs index 8050515..0fcec65 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Attachments/Controllers/AttachmentsController.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Attachments/Controllers/AttachmentsController.cs @@ -7,7 +7,6 @@ using System.Net.Http.Headers; namespace DamageAssesment.Api.Attachments.Controllers { - [Route("api")] [ApiController] public class AttachmentsController : ControllerBase { @@ -139,11 +138,11 @@ namespace DamageAssesment.Api.Attachments.Controllers /// /// Delete an existing attachment. /// - [HttpDelete("Delete")] - public async Task DeleteAttachment(int Id) + [HttpDelete("Attachments/{id}")] + public async Task DeleteAttachment(int id) { // database soft delete - var result = await this.AttachmentProvider.DeleteAttachmentAsync(Id); + var result = await this.AttachmentProvider.DeleteAttachmentAsync(id); if (result.IsSuccess) { // deleting file from folder diff --git a/DamageAssesmentApi/DamageAssesment.Api.Employees.Test/EmployeeServiceTest.cs b/DamageAssesmentApi/DamageAssesment.Api.Employees.Test/EmployeeServiceTest.cs index aa30faf..4fcecad 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Employees.Test/EmployeeServiceTest.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Employees.Test/EmployeeServiceTest.cs @@ -43,11 +43,11 @@ namespace DamageAssesment.Api.Employees.Test public async Task GetEmployeeAsync_ShouldReturnStatusCode200() { var mockEmployeeService = new Mock(); - var mockResponse = await MockData.getOkResponse("Emp1"); - mockEmployeeService.Setup(service => service.GetEmployeeByIdAsync("Emp1")).ReturnsAsync(mockResponse); + var mockResponse = await MockData.getOkResponse(1); + mockEmployeeService.Setup(service => service.GetEmployeeByIdAsync(1)).ReturnsAsync(mockResponse); var EmployeeProvider = new EmployeesController(mockEmployeeService.Object); - var result = (OkObjectResult)await EmployeeProvider.GetEmployeeByIdAsync("Emp1"); + var result = (OkObjectResult)await EmployeeProvider.GetEmployeeByIdAsync(1); Assert.Equal(200, result.StatusCode); } @@ -57,10 +57,10 @@ namespace DamageAssesment.Api.Employees.Test { var mockEmployeeService = new Mock(); var mockResponse = await MockData.getNotFoundResponse(); - mockEmployeeService.Setup(service => service.GetEmployeeByIdAsync("Emp99")).ReturnsAsync(mockResponse); + mockEmployeeService.Setup(service => service.GetEmployeeByIdAsync(99999)).ReturnsAsync(mockResponse); var EmployeeProvider = new EmployeesController(mockEmployeeService.Object); - var result = (NotFoundResult)await EmployeeProvider.GetEmployeeByIdAsync("Emp99"); + var result = (NotFoundResult)await EmployeeProvider.GetEmployeeByIdAsync(99999); Assert.Equal(404, result.StatusCode); } @@ -68,7 +68,7 @@ namespace DamageAssesment.Api.Employees.Test public async Task PostEmployeeAsync_ShouldReturnStatusCode200() { var mockEmployeeService = new Mock(); - var mockResponse = await MockData.getOkResponse("Emp1"); + var mockResponse = await MockData.getOkResponse(1); var mockInputEmployee = await MockData.getInputEmployeeData(); mockEmployeeService.Setup(service => service.PostEmployeeAsync(mockInputEmployee)).ReturnsAsync(mockResponse); @@ -96,12 +96,12 @@ namespace DamageAssesment.Api.Employees.Test public async Task PutEmployeeAsync_ShouldReturnStatusCode200() { var mockEmployeeService = new Mock(); - var mockResponse = await MockData.getOkResponse("Emp1"); + var mockResponse = await MockData.getOkResponse(1); var mockInputEmployee = await MockData.getInputEmployeeData(); - mockEmployeeService.Setup(service => service.UpdateEmployeeAsync("Emp1",mockInputEmployee)).ReturnsAsync(mockResponse); + mockEmployeeService.Setup(service => service.UpdateEmployeeAsync(1,mockInputEmployee)).ReturnsAsync(mockResponse); var EmployeeProvider = new EmployeesController(mockEmployeeService.Object); - var result = (OkObjectResult)await EmployeeProvider.UpdateEmployee("Emp1",mockInputEmployee); + var result = (OkObjectResult)await EmployeeProvider.UpdateEmployee(1,mockInputEmployee); Assert.Equal(200, result.StatusCode); } @@ -112,10 +112,10 @@ namespace DamageAssesment.Api.Employees.Test var mockEmployeeService = new Mock(); var mockResponse = await MockData.getNotFoundResponse(); var mockInputEmployee = await MockData.getInputEmployeeData(); - mockEmployeeService.Setup(service => service.UpdateEmployeeAsync("Emp1", mockInputEmployee)).ReturnsAsync(mockResponse); + mockEmployeeService.Setup(service => service.UpdateEmployeeAsync(1, mockInputEmployee)).ReturnsAsync(mockResponse); var EmployeeProvider = new EmployeesController(mockEmployeeService.Object); - var result = (NotFoundObjectResult)await EmployeeProvider.UpdateEmployee("Emp1", mockInputEmployee); + var result = (NotFoundObjectResult)await EmployeeProvider.UpdateEmployee(1, mockInputEmployee); Assert.Equal(404, result.StatusCode); } @@ -126,10 +126,10 @@ namespace DamageAssesment.Api.Employees.Test var mockEmployeeService = new Mock(); var mockResponse = await MockData.getBadRequestResponse(); var mockInputEmployee = await MockData.getInputEmployeeData(); - mockEmployeeService.Setup(service => service.UpdateEmployeeAsync("Emp1", mockInputEmployee)).ReturnsAsync(mockResponse); + mockEmployeeService.Setup(service => service.UpdateEmployeeAsync(1, mockInputEmployee)).ReturnsAsync(mockResponse); var EmployeeProvider = new EmployeesController(mockEmployeeService.Object); - var result = (BadRequestObjectResult)await EmployeeProvider.UpdateEmployee("Emp1", mockInputEmployee); + var result = (BadRequestObjectResult)await EmployeeProvider.UpdateEmployee(1, mockInputEmployee); Assert.Equal(400, result.StatusCode); } @@ -138,12 +138,12 @@ namespace DamageAssesment.Api.Employees.Test public async Task DeleteEmployeeAsync_ShouldReturnStatusCode200() { var mockEmployeeService = new Mock(); - var mockResponse = await MockData.getOkResponse("Emp1"); + var mockResponse = await MockData.getOkResponse(1); - mockEmployeeService.Setup(service => service.DeleteEmployeeAsync("Emp1")).ReturnsAsync(mockResponse); + mockEmployeeService.Setup(service => service.DeleteEmployeeAsync(1)).ReturnsAsync(mockResponse); var EmployeeProvider = new EmployeesController(mockEmployeeService.Object); - var result = (OkObjectResult)await EmployeeProvider.DeleteEmployee("Emp1"); + var result = (OkObjectResult)await EmployeeProvider.DeleteEmployee(1); Assert.Equal(200, result.StatusCode); } @@ -153,10 +153,10 @@ namespace DamageAssesment.Api.Employees.Test { var mockEmployeeService = new Mock(); var mockResponse = await MockData.getNotFoundResponse(); - mockEmployeeService.Setup(service => service.DeleteEmployeeAsync("Emp1")).ReturnsAsync(mockResponse); + mockEmployeeService.Setup(service => service.DeleteEmployeeAsync(1)).ReturnsAsync(mockResponse); var EmployeeProvider = new EmployeesController(mockEmployeeService.Object); - var result = (NotFoundResult)await EmployeeProvider.DeleteEmployee("Emp1"); + var result = (NotFoundResult)await EmployeeProvider.DeleteEmployee(1); Assert.Equal(404, result.StatusCode); } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Employees.Test/MockData.cs b/DamageAssesmentApi/DamageAssesment.Api.Employees.Test/MockData.cs index 91c8b84..19768fc 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Employees.Test/MockData.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Employees.Test/MockData.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Text; namespace DamageAssesment.Api.Employees.Test { @@ -15,13 +11,13 @@ namespace DamageAssesment.Api.Employees.Test for (int i = 0; i < 10; i++) { - list.Append(new Employees.Models.Employee { Id = "Emp"+i, Name = "Emoployee"+i, Email = "abc"+i+"@gmail.com", OfficePhoneNumber = "12345678", BirthDate = DateTime.Now.AddYears(-18-i), IsActive = true, PreferredLanguage = "en" }); + list.Append(new Employees.Models.Employee { Id = i, Name = "Emoployee"+i, Email = "abc"+i+"@gmail.com", OfficePhoneNumber = "12345678", BirthDate = DateTime.Now.AddYears(-18-i), IsActive = true, PreferredLanguage = "en" }); } return (true, list, null); } - public static async Task<(bool, Employees.Models.Employee, string)> getOkResponse(string Id) + public static async Task<(bool, Employees.Models.Employee, string)> getOkResponse(int Id) { var Employees = await getOkResponse(); var Employee = Employees.Item2.FirstOrDefault(s => s.Id == Id); @@ -45,7 +41,7 @@ namespace DamageAssesment.Api.Employees.Test public static async Task getInputEmployeeData() { - return new Models.Employee { Id = "Emp1", Name = "ABC1", Email = "abc1@gmail.com", OfficePhoneNumber = "12345678", BirthDate = DateTime.Now.AddYears(-18), IsActive = true, PreferredLanguage = "en" }; + return new Models.Employee { Id = 1, Name = "ABC1", Email = "abc1@gmail.com", OfficePhoneNumber = "12345678", BirthDate = DateTime.Now.AddYears(-18), IsActive = true, PreferredLanguage = "en" }; } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Employees/Controllers/EmployeesController.cs b/DamageAssesmentApi/DamageAssesment.Api.Employees/Controllers/EmployeesController.cs index 8d004e6..f5e0d88 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Employees/Controllers/EmployeesController.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Employees/Controllers/EmployeesController.cs @@ -4,7 +4,6 @@ using Microsoft.AspNetCore.Mvc; namespace DamageAssesment.Api.Employees.Controllers { - [Route("api")] [ApiController] public class EmployeesController : ControllerBase { @@ -37,11 +36,11 @@ namespace DamageAssesment.Api.Employees.Controllers /// GET request for retrieving an employee by ID. /// - [HttpGet("Employees/{Id}")] - public async Task GetEmployeeByIdAsync(string Id) + [HttpGet("Employees/{id}")] + public async Task GetEmployeeByIdAsync(int id) { - var result = await EmployeeProvider.GetEmployeeByIdAsync(Id); + var result = await EmployeeProvider.GetEmployeeByIdAsync(id); if (result.IsSuccess) { return Ok(result.Employee); @@ -54,12 +53,12 @@ namespace DamageAssesment.Api.Employees.Controllers /// PUT request for updating an existing employee. /// /// The updated employee object. - [HttpPut("Employees")] - public async Task UpdateEmployee(string Id, Models.Employee Employee) + [HttpPut("Employees/{id}")] + public async Task UpdateEmployee(int id, Models.Employee Employee) { if (Employee != null) { - var result = await this.EmployeeProvider.UpdateEmployeeAsync(Id,Employee); + var result = await this.EmployeeProvider.UpdateEmployeeAsync(id,Employee); if (result.IsSuccess) { return Ok(result.Employee); @@ -88,14 +87,14 @@ namespace DamageAssesment.Api.Employees.Controllers } return BadRequest(result.ErrorMessage); } - return CreatedAtRoute("DefaultApi", new { id = Employee.Id }, Employee); + return CreatedAtRoute("DefaultApi", new { Id = Employee.Id }, Employee); } /// /// DELETE request for deleting an existing employee. /// /// The ID of the employee to be deleted. [HttpDelete("Employees/{id}")] - public async Task DeleteEmployee(string id) + public async Task DeleteEmployee(int id) { var result = await this.EmployeeProvider.DeleteEmployeeAsync(id); if (result.IsSuccess) diff --git a/DamageAssesmentApi/DamageAssesment.Api.Employees/Db/Employee.cs b/DamageAssesmentApi/DamageAssesment.Api.Employees/Db/Employee.cs index 2b3202a..45ab57e 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Employees/Db/Employee.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Employees/Db/Employee.cs @@ -5,7 +5,9 @@ namespace DamageAssesment.Api.Employees.Db public class Employee { [Key] - public string Id { get; set; } + public int Id { get; set; } + [StringLength(50)] + public string EmployeeCode { get; set; } [StringLength(50)] public string Name { get; set; } @@ -17,7 +19,7 @@ namespace DamageAssesment.Api.Employees.Db [StringLength(50)] public string Email { get; set; } - public bool IsActive {get;set;} + public bool IsActive { get; set; } public string? PreferredLanguage { get; set; } = "en"; } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Employees/Db/EmployeeDbContext.cs b/DamageAssesmentApi/DamageAssesment.Api.Employees/Db/EmployeeDbContext.cs index 0d7bc5e..ec7b0f0 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Employees/Db/EmployeeDbContext.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Employees/Db/EmployeeDbContext.cs @@ -8,5 +8,14 @@ namespace DamageAssesment.Api.Employees.Db public EmployeeDbContext(DbContextOptions options) : base(options) { } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity() + .Property(item => item.Id) + .ValueGeneratedOnAdd(); + } } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Employees/Interfaces/IEmployeesProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.Employees/Interfaces/IEmployeesProvider.cs index 8083d2c..91da039 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Employees/Interfaces/IEmployeesProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Employees/Interfaces/IEmployeesProvider.cs @@ -3,10 +3,10 @@ public interface IEmployeesProvider { Task<(bool IsSuccess, IEnumerable Employees, string ErrorMessage)> GetEmployeesAsync(); - Task<(bool IsSuccess, Models.Employee Employee, string ErrorMessage)> GetEmployeeByIdAsync(string Id); + Task<(bool IsSuccess, Models.Employee Employee, string ErrorMessage)> GetEmployeeByIdAsync(int Id); Task<(bool IsSuccess, Models.Employee Employee, string ErrorMessage)> PostEmployeeAsync(Models.Employee Employee); - Task<(bool IsSuccess, Models.Employee Employee, string ErrorMessage)> UpdateEmployeeAsync(string Id, Models.Employee Employee); - Task<(bool IsSuccess, Models.Employee Employee, string ErrorMessage)> DeleteEmployeeAsync(string Id); + Task<(bool IsSuccess, Models.Employee Employee, string ErrorMessage)> UpdateEmployeeAsync(int Id, Models.Employee Employee); + Task<(bool IsSuccess, Models.Employee Employee, string ErrorMessage)> DeleteEmployeeAsync(int Id); void SeedData(); } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Employees/Models/Employee.cs b/DamageAssesmentApi/DamageAssesment.Api.Employees/Models/Employee.cs index 5defc90..0d5638c 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Employees/Models/Employee.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Employees/Models/Employee.cs @@ -4,7 +4,8 @@ namespace DamageAssesment.Api.Employees.Models { public class Employee { - public string Id { get; set; } + public int Id { get; set; } + public string EmployeeCode { get; set; } public string Name { get; set; } public DateTime BirthDate { get; set; } public string OfficePhoneNumber { get; set; } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Employees/Profiles/EmployeesProfile.cs b/DamageAssesmentApi/DamageAssesment.Api.Employees/Profiles/EmployeesProfile.cs index 444752b..e46d15f 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Employees/Profiles/EmployeesProfile.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Employees/Profiles/EmployeesProfile.cs @@ -7,6 +7,7 @@ namespace DamageAssesment.Api.Employees.Profiles public EmployeesProfile() { CreateMap(); + CreateMap(); } } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Employees/Providers/EmployeesProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.Employees/Providers/EmployeesProvider.cs index 533763f..75cefed 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Employees/Providers/EmployeesProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Employees/Providers/EmployeesProvider.cs @@ -19,7 +19,7 @@ namespace DamageAssesment.Api.Employees.Providers this.EmployeeDbContext = EmployeeDbContext; this.logger = logger; this.mapper = mapper; - // SeedData(); + // SeedData(); } public async Task<(bool IsSuccess, IEnumerable Employees, string ErrorMessage)> GetEmployeesAsync() @@ -45,12 +45,12 @@ namespace DamageAssesment.Api.Employees.Providers } - public async Task<(bool IsSuccess, Models.Employee Employee, string ErrorMessage)> GetEmployeeByIdAsync(string Id) + public async Task<(bool IsSuccess, Models.Employee Employee, string ErrorMessage)> GetEmployeeByIdAsync(int Id) { try { logger?.LogInformation("Query Employee"); - var Employee = await EmployeeDbContext.Employees.AsNoTracking().FirstOrDefaultAsync(q => q.Id.ToLower() == Id.ToLower()); + var Employee = await EmployeeDbContext.Employees.AsNoTracking().FirstOrDefaultAsync(q => q.Id == Id); if (Employee != null) { logger?.LogInformation($"{Employee} customer(s) found"); @@ -72,13 +72,14 @@ namespace DamageAssesment.Api.Employees.Providers Db.Employee _employee = mapper.Map(Employee); logger?.LogInformation("Query Employee"); - if (!EmployeeExists(Employee.Id)) + if (!EmployeeCodeExists(Employee.EmployeeCode)) { EmployeeDbContext.Employees.Add(_employee); + Employee.Id = _employee.Id; EmployeeDbContext.SaveChanges(); return (true, Employee, null); } - return (false, null, "Employee is already exits"); + return (false, null, "Employee code is already exits"); } catch (Exception ex) { @@ -86,19 +87,20 @@ namespace DamageAssesment.Api.Employees.Providers return (false, null, ex.Message); } } - public async Task<(bool IsSuccess, Models.Employee Employee, string ErrorMessage)> UpdateEmployeeAsync(string Id , Models.Employee Employee) + public async Task<(bool IsSuccess, Models.Employee Employee, string ErrorMessage)> UpdateEmployeeAsync(int Id, Models.Employee Employee) { try { if (Employee != null) { - var _employee = await EmployeeDbContext.Employees.AsNoTracking().Where(s => s.Id.ToLower() == Id.ToLower()).FirstOrDefaultAsync(); + var _employee = await EmployeeDbContext.Employees.AsNoTracking().Where(s => s.Id == Id).FirstOrDefaultAsync(); if (_employee != null) { Db.Employee vEmployee = mapper.Map(Employee); EmployeeDbContext.Employees.Update(vEmployee); EmployeeDbContext.SaveChanges(); + Employee.Id = Id; return (true, Employee, "Successful"); } else @@ -120,11 +122,11 @@ namespace DamageAssesment.Api.Employees.Providers return (false, null, ex.Message); } } - public async Task<(bool IsSuccess, Models.Employee Employee, string ErrorMessage)> DeleteEmployeeAsync(string Id) + public async Task<(bool IsSuccess, Models.Employee Employee, string ErrorMessage)> DeleteEmployeeAsync(int Id) { try { - Db.Employee Employee = EmployeeDbContext.Employees.AsNoTracking().Where(a => a.Id.ToLower() == Id.ToLower()).FirstOrDefault(); + Db.Employee Employee = EmployeeDbContext.Employees.AsNoTracking().Where(a => a.Id == Id).FirstOrDefault(); if (Employee == null) { return (false, null, "Not Found"); @@ -137,24 +139,29 @@ namespace DamageAssesment.Api.Employees.Providers { logger?.LogError(ex.ToString()); - return (false,null, ex.Message); + return (false, null, ex.Message); } } - private bool EmployeeExists(string id) + private bool EmployeeExists(int id) { - return EmployeeDbContext.Employees.AsNoTracking().Count(e => e.Id.ToLower() == id.ToLower()) > 0; + return EmployeeDbContext.Employees.AsNoTracking().Count(e => e.Id == id) > 0; + } + + private bool EmployeeCodeExists(string employeeCode) + { + return EmployeeDbContext.Employees.AsNoTracking().Count(e => e.EmployeeCode.ToLower() == employeeCode.ToLower()) > 0; } public void SeedData() { if (!EmployeeDbContext.Employees.Any()) { - EmployeeDbContext.Employees.Add(new Db.Employee() { Id = "Emp1", Name = "ABC1", Email = "abc1@gmail.com", OfficePhoneNumber = "12345678",BirthDate=DateTime.Now.AddYears(-18), IsActive = true,PreferredLanguage="en" }); - EmployeeDbContext.Employees.Add(new Db.Employee() { Id = "Emp2", Name = "ABC2", Email = "abc2@gmail.com", OfficePhoneNumber = "12345678", BirthDate = DateTime.Now.AddYears(-22), IsActive = true, PreferredLanguage = "fr" }); - EmployeeDbContext.Employees.Add(new Db.Employee() { Id = "Emp3", Name = "ABC3", Email = "abc3@gmail.com", OfficePhoneNumber = "12345678", BirthDate = DateTime.Now.AddYears(-30) ,IsActive = true, PreferredLanguage = "fr" }); - EmployeeDbContext.Employees.Add(new Db.Employee() { Id = "Emp4", Name = "ABC4", Email = "abc4@gmail.com", OfficePhoneNumber = "12345678", BirthDate = DateTime.Now.AddYears(-20) ,IsActive = true, PreferredLanguage = "en" }); - EmployeeDbContext.Employees.Add(new Db.Employee() { Id = "Emp5", Name = "ABC5", Email = "abc5@gmail.com", OfficePhoneNumber = "12345678", BirthDate = DateTime.Now.AddYears(-23) ,IsActive = true, PreferredLanguage = "es" }); - EmployeeDbContext.Employees.Add(new Db.Employee() { Id = "Emp6", Name = "ABC6", Email = "abc6@gmail.com", OfficePhoneNumber = "12345678", BirthDate = DateTime.Now.AddYears(-32) ,IsActive = true, PreferredLanguage = "es" }); + EmployeeDbContext.Employees.Add(new Db.Employee() { Id = 1, EmployeeCode = "Emp1", Name = "ABC1", Email = "abc1@gmail.com", OfficePhoneNumber = "12345678", BirthDate = DateTime.Now.AddYears(-18), IsActive = true, PreferredLanguage = "en" }); + EmployeeDbContext.Employees.Add(new Db.Employee() { Id = 2, EmployeeCode = "Emp2", Name = "ABC2", Email = "abc2@gmail.com", OfficePhoneNumber = "12345678", BirthDate = DateTime.Now.AddYears(-22), IsActive = true, PreferredLanguage = "fr" }); + EmployeeDbContext.Employees.Add(new Db.Employee() { Id = 3, EmployeeCode = "Emp3", Name = "ABC3", Email = "abc3@gmail.com", OfficePhoneNumber = "12345678", BirthDate = DateTime.Now.AddYears(-30), IsActive = true, PreferredLanguage = "fr" }); + EmployeeDbContext.Employees.Add(new Db.Employee() { Id = 4, EmployeeCode = "Emp4", Name = "ABC4", Email = "abc4@gmail.com", OfficePhoneNumber = "12345678", BirthDate = DateTime.Now.AddYears(-20), IsActive = true, PreferredLanguage = "en" }); + EmployeeDbContext.Employees.Add(new Db.Employee() { Id = 5, EmployeeCode = "Emp5", Name = "ABC5", Email = "abc5@gmail.com", OfficePhoneNumber = "12345678", BirthDate = DateTime.Now.AddYears(-23), IsActive = true, PreferredLanguage = "es" }); + EmployeeDbContext.Employees.Add(new Db.Employee() { Id = 6, EmployeeCode = "Emp6", Name = "ABC6", Email = "abc6@gmail.com", OfficePhoneNumber = "12345678", BirthDate = DateTime.Now.AddYears(-32), IsActive = true, PreferredLanguage = "es" }); EmployeeDbContext.SaveChanges(); } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Locations.Test/LocationsServiceTest.cs b/DamageAssesmentApi/DamageAssesment.Api.Locations.Test/LocationsServiceTest.cs index 94e518d..cc0ad45 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Locations.Test/LocationsServiceTest.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Locations.Test/LocationsServiceTest.cs @@ -40,11 +40,11 @@ namespace DamageAssesment.Api.Locations.Test public async Task GetLocationsByIdAsync_ShouldReturnStatusCode200() { var mockLocationService = new Mock(); - var mockResponse = await MockData.getOkResponseLocation("Loc1"); - mockLocationService.Setup(service => service.GetLocationByIdAsync("Loc1")).ReturnsAsync(mockResponse); + var mockResponse = await MockData.getOkResponseLocation(1); + mockLocationService.Setup(service => service.GetLocationByIdAsync(1)).ReturnsAsync(mockResponse); var locationProvider = new LocationsController(mockLocationService.Object); - var result = (OkObjectResult)await locationProvider.GetLocationByIdAsync("Loc1"); + var result = (OkObjectResult)await locationProvider.GetLocationByIdAsync(1); Assert.Equal(200, result.StatusCode); } @@ -55,10 +55,10 @@ namespace DamageAssesment.Api.Locations.Test { var mockLocationService = new Mock(); var mockResponse = await MockData.getLocationNotFoundResponse(); - mockLocationService.Setup(service => service.GetLocationByIdAsync("Loc1")).ReturnsAsync(mockResponse); + mockLocationService.Setup(service => service.GetLocationByIdAsync(1)).ReturnsAsync(mockResponse); var locationProvider = new LocationsController(mockLocationService.Object); - var result = (NotFoundResult)await locationProvider.GetLocationByIdAsync("Loc1"); + var result = (NotFoundResult)await locationProvider.GetLocationByIdAsync(1); Assert.Equal(404, result.StatusCode); } @@ -68,8 +68,8 @@ namespace DamageAssesment.Api.Locations.Test public async Task PostLocationAsync_ShouldReturnStatusCode200() { var mockLocationService = new Mock(); - var mockResponse = await MockData.getOkResponseLocation("Loc1"); - var mockInputLocation = new Models.Location { Id = "Loc1", RegionId = "R1", Name = "Location 1", SchoolType = "US", MaintenanceCenter = "1" }; + var mockResponse = await MockData.getOkResponseLocation(1); + var mockInputLocation = new Models.Location { Id = 1, RegionId = 1, Name = "Location 1", SchoolType = "US", MaintenanceCenter = "1" }; mockLocationService.Setup(service => service.PostLocationAsync(mockInputLocation)).ReturnsAsync(mockResponse); var locationProvider = new LocationsController(mockLocationService.Object); @@ -83,11 +83,11 @@ namespace DamageAssesment.Api.Locations.Test { var mockLocationService = new Mock(); var mockResponse = await MockData.getLocationNotFoundResponse(); - var mockInputLocation = new Models.Location { Id = "Loc1", RegionId = "R1", Name = "Location 1", SchoolType = "US", MaintenanceCenter = "1" }; + var mockInputLocation = new Models.Location { Id = 1, RegionId = 1, Name = "Location 1", SchoolType = "US", MaintenanceCenter = "1" }; mockLocationService.Setup(service => service.PostLocationAsync(mockInputLocation)).ReturnsAsync(mockResponse); var locationProvider = new LocationsController(mockLocationService.Object); - var result = (BadRequestResult)await locationProvider.CreateLocation(mockInputLocation); + var result = (BadRequestObjectResult)await locationProvider.CreateLocation(mockInputLocation); Assert.Equal(400, result.StatusCode); } @@ -98,11 +98,11 @@ namespace DamageAssesment.Api.Locations.Test { var mockLocationService = new Mock(); var mockResponse = await MockData.getLocation(true, "update success"); - var mockInputLocation = new Models.Location { Id = "Loc1", RegionId = "R1", Name = "Location 1", SchoolType = "US", MaintenanceCenter = "1" }; - mockLocationService.Setup(service => service.UpdateLocationAsync(mockInputLocation)).ReturnsAsync(mockResponse); + var mockInputLocation = new Models.Location { Id = 1, LocationCode ="Loc1", RegionId = 1, Name = "Location 1", SchoolType = "US", MaintenanceCenter = "1" }; + mockLocationService.Setup(service => service.UpdateLocationAsync(1,mockInputLocation)).ReturnsAsync(mockResponse); var locationProvider = new LocationsController(mockLocationService.Object); - var result = (OkObjectResult)await locationProvider.UpdateLocation(mockInputLocation); + var result = (OkObjectResult)await locationProvider.UpdateLocation(1,mockInputLocation); Assert.Equal(200, result.StatusCode); } @@ -112,11 +112,11 @@ namespace DamageAssesment.Api.Locations.Test { var mockLocationService = new Mock(); var mockResponse = await MockData.getLocation(false, null); - var mockInputLocation = new Models.Location { Id = "Loc1", RegionId = "R1", Name = "Location 1", SchoolType = "US", MaintenanceCenter = "1" }; - mockLocationService.Setup(service => service.UpdateLocationAsync(mockInputLocation)).ReturnsAsync(mockResponse); + var mockInputLocation = new Models.Location { Id = 1, RegionId = 1, Name = "Location 1", SchoolType = "US", MaintenanceCenter = "1" }; + mockLocationService.Setup(service => service.UpdateLocationAsync(1,mockInputLocation)).ReturnsAsync(mockResponse); var locationProvider = new LocationsController(mockLocationService.Object); - var result = (NotFoundResult)await locationProvider.UpdateLocation(mockInputLocation); + var result = (NotFoundResult)await locationProvider.UpdateLocation(1,mockInputLocation); Assert.Equal(404, result.StatusCode); } @@ -127,10 +127,10 @@ namespace DamageAssesment.Api.Locations.Test { var mockLocationService = new Mock(); var mockResponse = await MockData.getLocation(true, "delete success"); - mockLocationService.Setup(service => service.DeleteLocationAsync("Loc1")).ReturnsAsync(mockResponse); + mockLocationService.Setup(service => service.DeleteLocationAsync(1)).ReturnsAsync(mockResponse); var locationProvider = new LocationsController(mockLocationService.Object); - var result = (OkObjectResult)await locationProvider.DeleteLocation("Loc1"); + var result = (OkObjectResult)await locationProvider.DeleteLocation(1); Assert.Equal(200, result.StatusCode); } @@ -140,10 +140,10 @@ namespace DamageAssesment.Api.Locations.Test { var mockLocationService = new Mock(); var mockResponse = await MockData.getLocation(false, null); - mockLocationService.Setup(service => service.DeleteLocationAsync("Loc1")).ReturnsAsync(mockResponse); + mockLocationService.Setup(service => service.DeleteLocationAsync(1)).ReturnsAsync(mockResponse); var locationProvider = new LocationsController(mockLocationService.Object); - var result = (NotFoundResult)await locationProvider.DeleteLocation("Loc1"); + var result = (NotFoundResult)await locationProvider.DeleteLocation(1); Assert.Equal(404, result.StatusCode); } @@ -180,11 +180,11 @@ namespace DamageAssesment.Api.Locations.Test public async Task GetRegionAsync_ShouldReturnStatusCode200() { var mockRegionService = new Mock(); - var mockResponse = await MockData.getOkResponse("1"); - mockRegionService.Setup(service => service.GetRegionByIdAsync("1")).ReturnsAsync(mockResponse); + var mockResponse = await MockData.getOkResponse(1); + mockRegionService.Setup(service => service.GetRegionByIdAsync(1)).ReturnsAsync(mockResponse); var regionProvider = new RegionsController(mockRegionService.Object); - var result = (OkObjectResult)await regionProvider.GetRegionAsync("1"); + var result = (OkObjectResult)await regionProvider.GetRegionAsync(1); Assert.Equal(200, result.StatusCode); } @@ -194,10 +194,10 @@ namespace DamageAssesment.Api.Locations.Test { var mockRegionService = new Mock(); var mockResponse = await MockData.getNotFoundResponse(); - mockRegionService.Setup(service => service.GetRegionByIdAsync("99")).ReturnsAsync(mockResponse); + mockRegionService.Setup(service => service.GetRegionByIdAsync(99999)).ReturnsAsync(mockResponse); var regionProvider = new RegionsController(mockRegionService.Object); - var result = (NotFoundResult)await regionProvider.GetRegionAsync("99"); + var result = (NotFoundResult)await regionProvider.GetRegionAsync(99); Assert.Equal(404, result.StatusCode); } @@ -205,7 +205,7 @@ namespace DamageAssesment.Api.Locations.Test public async Task PostRegionAsync_ShouldReturnStatusCode200() { var mockRegionService = new Mock(); - var mockResponse = await MockData.getOkResponse("1"); + var mockResponse = await MockData.getOkResponse(1); var mockInputRegion = await MockData.getInputRegionData(); mockRegionService.Setup(service => service.PostRegionAsync(mockInputRegion)).ReturnsAsync(mockResponse); @@ -233,12 +233,12 @@ namespace DamageAssesment.Api.Locations.Test public async Task PutRegionAsync_ShouldReturnStatusCode200() { var mockRegionService = new Mock(); - var mockResponse = await MockData.getOkResponse("1"); + var mockResponse = await MockData.getOkResponse(1); var mockInputRegion = await MockData.getInputRegionData(); - mockRegionService.Setup(service => service.PutRegionAsync(mockInputRegion)).ReturnsAsync(mockResponse); + mockRegionService.Setup(service => service.PutRegionAsync(1,mockInputRegion)).ReturnsAsync(mockResponse); var regionProvider = new RegionsController(mockRegionService.Object); - var result = (OkObjectResult)await regionProvider.PutRegionAsync(mockInputRegion); + var result = (OkObjectResult)await regionProvider.PutRegionAsync(1,mockInputRegion); Assert.Equal(200, result.StatusCode); } @@ -249,10 +249,10 @@ namespace DamageAssesment.Api.Locations.Test var mockRegionService = new Mock(); var mockResponse = await MockData.getNotFoundResponse(); var mockInputRegion = await MockData.getInputRegionData(); - mockRegionService.Setup(service => service.PutRegionAsync(mockInputRegion)).ReturnsAsync(mockResponse); + mockRegionService.Setup(service => service.PutRegionAsync(1, mockInputRegion)).ReturnsAsync(mockResponse); var regionProvider = new RegionsController(mockRegionService.Object); - var result = (NotFoundObjectResult)await regionProvider.PutRegionAsync(mockInputRegion); + var result = (NotFoundObjectResult)await regionProvider.PutRegionAsync(1,mockInputRegion); Assert.Equal(404, result.StatusCode); } @@ -263,10 +263,10 @@ namespace DamageAssesment.Api.Locations.Test var mockRegionService = new Mock(); var mockResponse = await MockData.getBadRequestResponse(); var mockInputRegion = await MockData.getInputRegionData(); - mockRegionService.Setup(service => service.PutRegionAsync(mockInputRegion)).ReturnsAsync(mockResponse); + mockRegionService.Setup(service => service.PutRegionAsync(1, mockInputRegion)).ReturnsAsync(mockResponse); var regionProvider = new RegionsController(mockRegionService.Object); - var result = (BadRequestObjectResult)await regionProvider.PutRegionAsync(mockInputRegion); + var result = (BadRequestObjectResult)await regionProvider.PutRegionAsync(1, mockInputRegion); Assert.Equal(400, result.StatusCode); } @@ -275,12 +275,12 @@ namespace DamageAssesment.Api.Locations.Test public async Task DeleteRegionAsync_ShouldReturnStatusCode200() { var mockRegionService = new Mock(); - var mockResponse = await MockData.getOkResponse("1"); + var mockResponse = await MockData.getOkResponse(1); - mockRegionService.Setup(service => service.DeleteRegionAsync("1")).ReturnsAsync(mockResponse); + mockRegionService.Setup(service => service.DeleteRegionAsync(1)).ReturnsAsync(mockResponse); var regionProvider = new RegionsController(mockRegionService.Object); - var result = (OkObjectResult)await regionProvider.DeleteRegionAsync("1"); + var result = (OkObjectResult)await regionProvider.DeleteRegionAsync(1); Assert.Equal(200, result.StatusCode); } @@ -291,10 +291,10 @@ namespace DamageAssesment.Api.Locations.Test var mockRegionService = new Mock(); var mockResponse = await MockData.getNotFoundResponse(); - mockRegionService.Setup(service => service.DeleteRegionAsync("1")).ReturnsAsync(mockResponse); + mockRegionService.Setup(service => service.DeleteRegionAsync(1)).ReturnsAsync(mockResponse); var regionProvider = new RegionsController(mockRegionService.Object); - var result = (NotFoundResult)await regionProvider.DeleteRegionAsync("1"); + var result = (NotFoundResult)await regionProvider.DeleteRegionAsync(1); Assert.Equal(404, result.StatusCode); } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Locations.Test/MockData.cs b/DamageAssesmentApi/DamageAssesment.Api.Locations.Test/MockData.cs index dec67b8..50d1c8c 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Locations.Test/MockData.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Locations.Test/MockData.cs @@ -9,13 +9,13 @@ namespace DamageAssesment.Api.Locations.Test for (int i = 0; i < 10; i++) { - list.Append(new Locations.Models.Region { Id = "R" + i, Abbreviation = "AB" + i, Name = "Region " + i }); + list.Append(new Locations.Models.Region { Id = i, Abbreviation = "AB" + i, Name = "Region " + i }); } return (true, list, null); } - public static async Task<(bool, Locations.Models.Region, string)> getOkResponse(string Id) + public static async Task<(bool, Locations.Models.Region, string)> getOkResponse(int Id) { var regions = await getOkResponse(); var region = regions.Item2.FirstOrDefault(s => s.Id == Id); @@ -29,7 +29,7 @@ namespace DamageAssesment.Api.Locations.Test for (int i = 0; i < 10; i++) { - list.Append(new Locations.Models.Location { Id = "Loc"+ i, RegionId = "R"+i, Name ="Location"}); + list.Append(new Locations.Models.Location { Id = i, RegionId = i, Name = "Location" }); } return (true, list, null); } @@ -39,16 +39,17 @@ namespace DamageAssesment.Api.Locations.Test return (false, null, null); } - public static async Task<(bool, Models.Location, string)> getOkResponseLocation(string Id) + public static async Task<(bool, Models.Location, string)> getOkResponseLocation(int Id) { var locations = await getOkResponseLocation(); var location = locations.Item2.FirstOrDefault(s => s.Id == Id); return (true, location, null); } - public static async Task<(bool, string)> getLocation(bool value,string message) + public static async Task<(bool, Models.Location, string)> getLocation(bool value, string message) { - return (value,message); + var location = new Models.Location { Id = 1, LocationCode = "Loc1", RegionId = 1, Name = "Location 1", SchoolType = "US", MaintenanceCenter = "1" }; + return (value, location, message); } public static async Task<(bool, Locations.Models.Location, string)> getLocationNotFoundResponse() @@ -73,7 +74,7 @@ namespace DamageAssesment.Api.Locations.Test public static async Task getInputRegionData() { - return new Locations.Models.Region { Id = "R99", Name = "Region 99", Abbreviation = "A99" }; + return new Locations.Models.Region { Id = 99999, Name = "Region 99", Abbreviation = "A99" }; } } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Locations/Controllers/LocationsController.cs b/DamageAssesmentApi/DamageAssesment.Api.Locations/Controllers/LocationsController.cs index d919c07..d9bbea3 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Locations/Controllers/LocationsController.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Locations/Controllers/LocationsController.cs @@ -4,12 +4,10 @@ using Microsoft.AspNetCore.Mvc; namespace DamageAssesment.Api.Locations.Controllers { - [Route("api")] [ApiController] public class LocationsController : ControllerBase { private ILocationsProvider LocationProvider; - public LocationsController(ILocationsProvider LocationsProvider) { this.LocationProvider = LocationsProvider; @@ -25,7 +23,7 @@ namespace DamageAssesment.Api.Locations.Controllers var result = await LocationProvider.GetLocationsAsync(); if (result.IsSuccess) { - return Ok(result.locations); + return Ok(result.Locations); } return NoContent(); @@ -35,7 +33,7 @@ namespace DamageAssesment.Api.Locations.Controllers /// [HttpGet("Locations/{id}")] - public async Task GetLocationByIdAsync(string id) + public async Task GetLocationByIdAsync(int id) { var result = await LocationProvider.GetLocationByIdAsync(id); @@ -50,15 +48,15 @@ namespace DamageAssesment.Api.Locations.Controllers /// Update a Location. /// - [HttpPut("Locations")] - public async Task UpdateLocation(Models.Location Location) + [HttpPut("Locations/{id}")] + public async Task UpdateLocation(int id, Models.Location Location) { if (Location != null) { - var result = await this.LocationProvider.UpdateLocationAsync(Location); + var result = await this.LocationProvider.UpdateLocationAsync(id, Location); if (result.IsSuccess) { - return Ok(result.ErrorMessage); + return Ok(result.Location); } return NotFound(); } @@ -76,9 +74,9 @@ namespace DamageAssesment.Api.Locations.Controllers var result = await this.LocationProvider.PostLocationAsync(Location); if (result.IsSuccess) { - return Ok(result.Question); + return Ok(result.Location); } - return BadRequest(); + return BadRequest(result.ErrorMessage); } return BadRequest(); } @@ -87,12 +85,12 @@ namespace DamageAssesment.Api.Locations.Controllers /// [HttpDelete("Locations/{id}")] - public async Task DeleteLocation(string id) + public async Task DeleteLocation(int id) { var result = await this.LocationProvider.DeleteLocationAsync(id); if (result.IsSuccess) { - return Ok(result.ErrorMessage); + return Ok(result.Location); } return NotFound(); } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Locations/Controllers/RegionsController.cs b/DamageAssesmentApi/DamageAssesment.Api.Locations/Controllers/RegionsController.cs index f69e7ce..172043c 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Locations/Controllers/RegionsController.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Locations/Controllers/RegionsController.cs @@ -3,7 +3,6 @@ using Microsoft.AspNetCore.Mvc; namespace DamageAssesment.Api.Locations.Controllers { - [Route("api/[controller]")] [ApiController] public class RegionsController : ControllerBase { @@ -17,13 +16,13 @@ namespace DamageAssesment.Api.Locations.Controllers /// Get all regions.2 /// - [HttpGet] + [HttpGet("regions")] public async Task GetRegionsAsync() { var result = await regionProvider.GetRegionsAsync(); if (result.IsSuccess) { - return Ok(result.regions); + return Ok(result.Regions); } return NoContent(); } @@ -31,10 +30,10 @@ namespace DamageAssesment.Api.Locations.Controllers /// GET request for retrieving a region by its ID. /// - [HttpGet("{Id}")] - public async Task GetRegionAsync(string Id) + [HttpGet("regions/{id}")] + public async Task GetRegionAsync(int id) { - var result = await this.regionProvider.GetRegionByIdAsync(Id); + var result = await this.regionProvider.GetRegionByIdAsync(id); if (result.IsSuccess) { return Ok(result.Region); @@ -45,7 +44,7 @@ namespace DamageAssesment.Api.Locations.Controllers /// POST request for creating a new region. /// - [HttpPost] + [HttpPost("regions")] public async Task PostRegionAsync(Models.Region region) { var result = await this.regionProvider.PostRegionAsync(region); @@ -59,10 +58,10 @@ namespace DamageAssesment.Api.Locations.Controllers /// PUT request for updating an existing region. /// - [HttpPut] - public async Task PutRegionAsync(Models.Region region) + [HttpPut("regions/{id}")] + public async Task PutRegionAsync(int id, Models.Region region) { - var result = await this.regionProvider.PutRegionAsync(region); + var result = await this.regionProvider.PutRegionAsync(id,region); if (result.IsSuccess) { return Ok(result.Region); @@ -77,10 +76,10 @@ namespace DamageAssesment.Api.Locations.Controllers /// - [HttpDelete("{Id}")] - public async Task DeleteRegionAsync(string Id) + [HttpDelete("regions/{id}")] + public async Task DeleteRegionAsync(int id) { - var result = await this.regionProvider.DeleteRegionAsync(Id); + var result = await this.regionProvider.DeleteRegionAsync(id); if (result.IsSuccess) { return Ok(result.Region); diff --git a/DamageAssesmentApi/DamageAssesment.Api.Locations/Db/Location.cs b/DamageAssesmentApi/DamageAssesment.Api.Locations/Db/Location.cs index 98afcf2..1774c9f 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Locations/Db/Location.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Locations/Db/Location.cs @@ -6,18 +6,20 @@ namespace DamageAssesment.Api.Locations.Db public class Location { [Key] + public int Id { get; set; } + [ForeignKey("Region")] + public int RegionId { get; set; } [StringLength(4)] - public string Id { get; set; } + public string LocationCode { get; set; } [StringLength(50)] public string Name { get; set; } - [StringLength(1)] + [StringLength(4)] public string MaintenanceCenter { get; set; } [StringLength(2)] public string SchoolType { get; set; } - [ForeignKey("Region")] - public string RegionId { get; set; } + } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Locations/Db/LocationDbContext.cs b/DamageAssesmentApi/DamageAssesment.Api.Locations/Db/LocationDbContext.cs index 407faca..48f0543 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Locations/Db/LocationDbContext.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Locations/Db/LocationDbContext.cs @@ -2,7 +2,7 @@ namespace DamageAssesment.Api.Locations.Db { - public class LocationDbContext:DbContext + public class LocationDbContext : DbContext { public DbSet Locations { get; set; } public DbSet Regions { get; set; } @@ -10,5 +10,17 @@ namespace DamageAssesment.Api.Locations.Db { } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + modelBuilder.Entity() + .Property(item => item.Id) + .ValueGeneratedOnAdd(); + modelBuilder.Entity() + .Property(item => item.Id) + .ValueGeneratedOnAdd(); + + } } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Locations/Db/Region.cs b/DamageAssesmentApi/DamageAssesment.Api.Locations/Db/Region.cs index 7c03858..c0b64bb 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Locations/Db/Region.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Locations/Db/Region.cs @@ -5,15 +5,12 @@ namespace DamageAssesment.Api.Locations.Db public class Region { [Key] - [StringLength(2)] - public string Id { get; set; } - + public int Id { get; set; } + [StringLength(50)] public string Name { get; set; } [StringLength(5)] public string Abbreviation { get; set; } - - // public ICollection Locations { get; set; } } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Locations/Interfaces/ILocationsProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.Locations/Interfaces/ILocationsProvider.cs index 55b847b..cd1de0c 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Locations/Interfaces/ILocationsProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Locations/Interfaces/ILocationsProvider.cs @@ -4,11 +4,11 @@ namespace DamageAssesment.Api.Locations.Interfaces { public interface ILocationsProvider { - Task<(bool IsSuccess, IEnumerable locations, string ErrorMessage)> GetLocationsAsync(); - Task<(bool IsSuccess, Models.Location Location, string ErrorMessage)> GetLocationByIdAsync(string Id); - Task<(bool IsSuccess, Models.Location Question, string ErrorMessage)> PostLocationAsync(Models.Location Location); - Task<(bool IsSuccess, string ErrorMessage)> UpdateLocationAsync(Models.Location Location); - Task<(bool IsSuccess, string ErrorMessage)> DeleteLocationAsync(string Id); + Task<(bool IsSuccess, IEnumerable Locations, string ErrorMessage)> GetLocationsAsync(); + Task<(bool IsSuccess, Models.Location Location, string ErrorMessage)> GetLocationByIdAsync(int Id); + Task<(bool IsSuccess, Models.Location Location, string ErrorMessage)> PostLocationAsync(Models.Location Location); + Task<(bool IsSuccess, Models.Location Location, string ErrorMessage)> UpdateLocationAsync(int Id, Models.Location Location); + Task<(bool IsSuccess, Models.Location Location, string ErrorMessage)> DeleteLocationAsync(int Id); void SeedData(); } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Locations/Interfaces/IRegionsProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.Locations/Interfaces/IRegionsProvider.cs index 65f8d0b..22ef8b8 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Locations/Interfaces/IRegionsProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Locations/Interfaces/IRegionsProvider.cs @@ -2,11 +2,11 @@ { public interface IRegionsProvider { - Task<(bool IsSuccess, IEnumerable regions, string ErrorMessage)> GetRegionsAsync(); - Task<(bool IsSuccess, Models.Region Region, string ErrorMessage)> GetRegionByIdAsync(string Id); + Task<(bool IsSuccess, IEnumerable Regions, string ErrorMessage)> GetRegionsAsync(); + Task<(bool IsSuccess, Models.Region Region, string ErrorMessage)> GetRegionByIdAsync(int Id); Task<(bool IsSuccess, Models.Region Region, string ErrorMessage)> PostRegionAsync(Models.Region region); - Task<(bool IsSuccess, Models.Region Region, string ErrorMessage)> PutRegionAsync(Models.Region region); - Task<(bool IsSuccess, Models.Region Region, string ErrorMessage)> DeleteRegionAsync(string Id); + Task<(bool IsSuccess, Models.Region Region, string ErrorMessage)> PutRegionAsync(int Id, Models.Region region); + Task<(bool IsSuccess, Models.Region Region, string ErrorMessage)> DeleteRegionAsync(int Id); void SeedData(); } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Locations/Models/Location.cs b/DamageAssesmentApi/DamageAssesment.Api.Locations/Models/Location.cs index 1fdad6a..eafbea6 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Locations/Models/Location.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Locations/Models/Location.cs @@ -4,19 +4,12 @@ namespace DamageAssesment.Api.Locations.Models { public class Location { - [StringLength(4)] - public string Id { get; set; } - - [StringLength(1)] - public string RegionId { get; set; } - - [StringLength(50)] + [Key] + public int Id { get; set; } + public int RegionId { get; set; } + public string LocationCode { get; set; } public string Name { get; set; } - - [StringLength(1)] public string MaintenanceCenter { get; set; } - - [StringLength(2)] public string SchoolType { get; set; } } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Locations/Models/Region.cs b/DamageAssesmentApi/DamageAssesment.Api.Locations/Models/Region.cs index ebcabeb..e2481a9 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Locations/Models/Region.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Locations/Models/Region.cs @@ -4,14 +4,8 @@ namespace DamageAssesment.Api.Locations.Models { public class Region { - - [StringLength(1)] - public string Id { get; set; } - - [StringLength(50)] + public int Id { get; set; } public string Name { get; set; } - - [StringLength(5)] public string Abbreviation { get; set; } } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Locations/Profiles/LocationProfile.cs b/DamageAssesmentApi/DamageAssesment.Api.Locations/Profiles/LocationProfile.cs index ca91e6a..dce65b3 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Locations/Profiles/LocationProfile.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Locations/Profiles/LocationProfile.cs @@ -5,6 +5,7 @@ public LocationProfile() { CreateMap(); + CreateMap(); } } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Locations/Providers/LocationsProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.Locations/Providers/LocationsProvider.cs index 85da34c..5f1d057 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Locations/Providers/LocationsProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Locations/Providers/LocationsProvider.cs @@ -20,39 +20,16 @@ namespace DamageAssesment.Api.Locations.Providers //SeedData(); } - public async Task<(bool IsSuccess, IEnumerable locations, string ErrorMessage)> GetLocationsAsync() - { - - try - { - logger?.LogInformation("Query Question"); - var Location = await locationDbContext.Locations.AsNoTracking().ToListAsync(); - if (Location != null) - { - logger?.LogInformation($"{Location.Count} Locations(s) found"); - var result = mapper.Map, IEnumerable>(Location); - return (true, result, null); - } - return (false, null, "Not found"); - } - catch (Exception ex) - { - logger?.LogError(ex.ToString()); - return (false, null, ex.Message); - } - - } - - public async Task<(bool IsSuccess, Models.Location Location, string ErrorMessage)> GetLocationByIdAsync(string Id) + public async Task<(bool IsSuccess, IEnumerable Locations, string ErrorMessage)> GetLocationsAsync() { try { logger?.LogInformation("Query Location"); - var Location = await locationDbContext.Locations.AsNoTracking().FirstOrDefaultAsync(q => q.Id == Id); - if (Location != null) + var locations = await locationDbContext.Locations.AsNoTracking().ToListAsync(); + if (locations != null) { - logger?.LogInformation($"{Location} customer(s) found"); - var result = mapper.Map(Location); + logger?.LogInformation($"{locations.Count} Locations(s) found"); + var result = mapper.Map, IEnumerable>(locations); return (true, result, null); } return (false, null, "Not found"); @@ -63,21 +40,42 @@ namespace DamageAssesment.Api.Locations.Providers return (false, null, ex.Message); } } - public async Task<(bool IsSuccess, Models.Location Question, string ErrorMessage)> PostLocationAsync(Models.Location Location) + + public async Task<(bool IsSuccess, Models.Location Location, string ErrorMessage)> GetLocationByIdAsync(int Id) { try { logger?.LogInformation("Query Location"); - if (!LocationExists(Location.Id)) + var location = await locationDbContext.Locations.AsNoTracking().FirstOrDefaultAsync(q => q.Id == Id); + if (location != null) { - Db.Location _location = mapper.Map(Location); + logger?.LogInformation($"{location} found"); + var result = mapper.Map(location); + return (true, result, null); + } + return (false, null, "Not found"); + } + catch (Exception ex) + { + logger?.LogError(ex.ToString()); + return (false, null, ex.Message); + } + } + public async Task<(bool IsSuccess, Models.Location Location, string ErrorMessage)> PostLocationAsync(Models.Location location) + { + try + { + if (!LocationCodeExists(location.LocationCode)) + { + Db.Location _location = mapper.Map(location); locationDbContext.Locations.Add(_location); - locationDbContext.SaveChanges(); - return (true, Location, null); + await locationDbContext.SaveChangesAsync(); + location.Id = _location.Id; + return (true, location, null); } else { - return (false, null, "Location is Already exists"); + return (false, null, "Location code is already exists"); } } catch (Exception ex) @@ -86,57 +84,67 @@ namespace DamageAssesment.Api.Locations.Providers return (false, null, ex.Message); } } - public async Task<(bool IsSuccess, string ErrorMessage)> UpdateLocationAsync(Models.Location Location) + public async Task<(bool IsSuccess, Models.Location Location, string ErrorMessage)> UpdateLocationAsync(int Id, Models.Location location) { try { - Db.Location _location = mapper.Map(Location); - locationDbContext.Entry(_location).State = EntityState.Modified; - locationDbContext.SaveChanges(); - return (true, "Record updated successfully"); - } - catch (Exception ex) - { - - logger?.LogError(ex.ToString()); - return (false, ex.Message); - } - } - public async Task<(bool IsSuccess, string ErrorMessage)> DeleteLocationAsync(string Id) - { - try - { - Db.Location Location = locationDbContext.Locations.AsNoTracking().Where(a => a.Id == Id).FirstOrDefault(); - if (Location == null) + if (LocationExists(Id)) { - return (false, "record not found"); + Db.Location _location = mapper.Map(location); + locationDbContext.Entry(_location).State = EntityState.Modified; + await locationDbContext.SaveChangesAsync(); + return (true, location, "Record updated successfully"); + } + else + { + return (false, null, "Location is not exists"); } - locationDbContext.Locations.Remove(Location); - locationDbContext.SaveChanges(); - return (true, "Record deleted successfully"); } catch (Exception ex) { - logger?.LogError(ex.ToString()); - return (false, ex.Message); + return (false, null, ex.Message); + } + } + public async Task<(bool IsSuccess, Models.Location Location, string ErrorMessage)> DeleteLocationAsync(int Id) + { + try + { + Db.Location location = locationDbContext.Locations.AsNoTracking().Where(a => a.Id == Id).FirstOrDefault(); + if (location == null) + { + return (false, null, "record not found"); + } + locationDbContext.Locations.Remove(location); + await locationDbContext.SaveChangesAsync(); + return (true, mapper.Map(location), "Record deleted successfully"); + } + catch (Exception ex) + { + logger?.LogError(ex.ToString()); + return (false, null, ex.Message); } } - private bool LocationExists(string id) + private bool LocationExists(int id) { return locationDbContext.Locations.AsNoTracking().Count(e => e.Id == id) > 0; } + + private bool LocationCodeExists(string locationCode) + { + return locationDbContext.Locations.AsNoTracking().Count(e => e.LocationCode.ToLower() == locationCode.ToLower()) > 0; + } public void SeedData() { if (!locationDbContext.Locations.Any()) { - locationDbContext.Locations.Add(new Db.Location() { Id = "Loc1", RegionId = "1", Name = "BOB GRAHAM EDUCATION CENTER 1", MaintenanceCenter = "1", SchoolType = "US" }); - locationDbContext.Locations.Add(new Db.Location() { Id = "Loc2", RegionId = "2", Name = "BOB GRAHAM EDUCATION CENTER 2", MaintenanceCenter = "1", SchoolType = "US" }); - locationDbContext.Locations.Add(new Db.Location() { Id = "Loc3", RegionId = "3", Name = "BOB GRAHAM EDUCATION CENTER 3", MaintenanceCenter = "1", SchoolType = "US" }); - locationDbContext.Locations.Add(new Db.Location() { Id = "Loc4", RegionId = "1", Name = "BOB GRAHAM EDUCATION CENTER 4", MaintenanceCenter = "1", SchoolType = "US" }); - locationDbContext.Locations.Add(new Db.Location() { Id = "Loc5", RegionId = "2", Name = "BOB GRAHAM EDUCATION CENTER 5", MaintenanceCenter = "1", SchoolType = "US" }); - locationDbContext.Locations.Add(new Db.Location() { Id = "Loc6", RegionId = "3", Name = "BOB GRAHAM EDUCATION CENTER 6", MaintenanceCenter = "1", SchoolType = "US" }); + locationDbContext.Locations.Add(new Db.Location() { Id = 1, LocationCode = "Loc1", RegionId = 1, Name = "BOB GRAHAM EDUCATION CENTER 1", MaintenanceCenter = "1", SchoolType = "US" }); + locationDbContext.Locations.Add(new Db.Location() { Id = 2, LocationCode = "Loc2", RegionId = 2, Name = "BOB GRAHAM EDUCATION CENTER 2", MaintenanceCenter = "1", SchoolType = "US" }); + locationDbContext.Locations.Add(new Db.Location() { Id = 3, LocationCode = "Loc3", RegionId = 3, Name = "BOB GRAHAM EDUCATION CENTER 3", MaintenanceCenter = "1", SchoolType = "US" }); + locationDbContext.Locations.Add(new Db.Location() { Id = 4, LocationCode = "Loc4", RegionId = 1, Name = "BOB GRAHAM EDUCATION CENTER 4", MaintenanceCenter = "1", SchoolType = "US" }); + locationDbContext.Locations.Add(new Db.Location() { Id = 5, LocationCode = "Loc5", RegionId = 2, Name = "BOB GRAHAM EDUCATION CENTER 5", MaintenanceCenter = "1", SchoolType = "US" }); + locationDbContext.Locations.Add(new Db.Location() { Id = 6, LocationCode = "Loc6", RegionId = 3, Name = "BOB GRAHAM EDUCATION CENTER 6", MaintenanceCenter = "1", SchoolType = "US" }); locationDbContext.SaveChanges(); } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Locations/Providers/RegionsProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.Locations/Providers/RegionsProvider.cs index 0ea0b3f..4f33fee 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Locations/Providers/RegionsProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Locations/Providers/RegionsProvider.cs @@ -19,7 +19,7 @@ namespace DamageAssesment.Api.Locations.Providers //SeedData(); } - public async Task<(bool IsSuccess, Models.Region Region, string ErrorMessage)> GetRegionByIdAsync(string Id) + public async Task<(bool IsSuccess, Models.Region Region, string ErrorMessage)> GetRegionByIdAsync(int Id) { try { @@ -41,7 +41,7 @@ namespace DamageAssesment.Api.Locations.Providers } } - public async Task<(bool IsSuccess, IEnumerable regions, string ErrorMessage)> GetRegionsAsync() + public async Task<(bool IsSuccess, IEnumerable Regions, string ErrorMessage)> GetRegionsAsync() { try { @@ -69,11 +69,10 @@ namespace DamageAssesment.Api.Locations.Providers { if (region != null) { - var regions = await locationDbContext.Regions.AsNoTracking().ToListAsync(); - - region.Id = Convert.ToString(regions.Count + 1); - locationDbContext.Regions.Add(mapper.Map(region)); - locationDbContext.SaveChanges(); + var _region = mapper.Map(region); + locationDbContext.Regions.Add(_region); + await locationDbContext.SaveChangesAsync(); + region.Id = _region.Id; logger?.LogInformation($"{region} added successfuly"); return (true, region, "Successful"); } @@ -90,30 +89,38 @@ namespace DamageAssesment.Api.Locations.Providers } } - public async Task<(bool IsSuccess, Models.Region Region, string ErrorMessage)> PutRegionAsync(Models.Region region) + public async Task<(bool IsSuccess, Models.Region Region, string ErrorMessage)> PutRegionAsync(int Id, Models.Region region) { try { if (region != null) { - var _region = await locationDbContext.Regions.AsNoTracking().Where(s => s.Id == region.Id).FirstOrDefaultAsync(); + var _region = await locationDbContext.Regions.AsNoTracking().Where(s => s.Id == Id).FirstOrDefaultAsync(); if (_region != null) { - locationDbContext.Regions.Update(mapper.Map(region)); - locationDbContext.SaveChanges(); - return (true, region, "Region updated Successfuly"); + if (RegionExists(region.Id)) + { + locationDbContext.Regions.Update(mapper.Map(region)); + locationDbContext.SaveChanges(); + return (true, region, "Region updated Successfuly"); + } + else + { + logger?.LogInformation($"RegionID: {Id} Not exists"); + return (false, null, "Region not exists"); + } } else { - logger?.LogInformation($"RegionID: {region.Id} Not found"); + logger?.LogInformation($"RegionID: {Id} Not found"); return (false, null, "Not Found"); } } else { - logger?.LogInformation($"RegionID: {region.Id} Bad Request"); + logger?.LogInformation($"RegionID: {Id} Bad Request"); return (false, null, "Bad request"); } } @@ -124,7 +131,7 @@ namespace DamageAssesment.Api.Locations.Providers } } - public async Task<(bool IsSuccess, Models.Region Region, string ErrorMessage)> DeleteRegionAsync(string Id) + public async Task<(bool IsSuccess, Models.Region Region, string ErrorMessage)> DeleteRegionAsync(int Id) { try { @@ -149,13 +156,18 @@ namespace DamageAssesment.Api.Locations.Providers } } + private bool RegionExists(int id) + { + return locationDbContext.Regions.AsNoTracking().Count(e => e.Id == id) > 0; + } + public void SeedData() { if (!locationDbContext.Regions.Any()) { - locationDbContext.Regions.Add(new Db.Region() { Id = "1", Name = "North", Abbreviation = "N" }); - locationDbContext.Regions.Add(new Db.Region() { Id = "2", Name = "South", Abbreviation = "S" }); - locationDbContext.Regions.Add(new Db.Region() { Id = "3", Name = "Central", Abbreviation = "C" }); + locationDbContext.Regions.Add(new Db.Region() { Id = 1, Name = "North", Abbreviation = "N" }); + locationDbContext.Regions.Add(new Db.Region() { Id = 2, Name = "South", Abbreviation = "S" }); + locationDbContext.Regions.Add(new Db.Region() { Id = 3, Name = "Central", Abbreviation = "C" }); locationDbContext.SaveChanges(); } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Questions/Controllers/QuestionsController.cs b/DamageAssesmentApi/DamageAssesment.Api.Questions/Controllers/QuestionsController.cs index 19c32bc..17024eb 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Questions/Controllers/QuestionsController.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Questions/Controllers/QuestionsController.cs @@ -40,7 +40,7 @@ namespace DamageAssesment.Api.Questions.Controllers [Route("Questions/{id}/{language:alpha}")] [Route("Questions/{id:int}")] [HttpGet] - public async Task GetQuestionByIdAsync(string? language,int id) + public async Task GetQuestionByIdAsync(int id, string? language) { var result = await this.questionsProvider.GetQuestionAsync(id, language); if (result.IsSuccess) diff --git a/DamageAssesmentApi/DamageAssesment.Api.Questions/Interfaces/IQuestionsProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.Questions/Interfaces/IQuestionsProvider.cs index 59a805b..f8e13c8 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Questions/Interfaces/IQuestionsProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Questions/Interfaces/IQuestionsProvider.cs @@ -4,12 +4,12 @@ namespace DamageAssesment.Api.Questions.Interfaces { public interface IQuestionsProvider : IQuestionTypesProvider { - Task<(bool IsSuccess, Models.MultiLanQuestion Question, string ErrorMessage)> GetQuestionAsync(int id, string language); - Task<(bool IsSuccess, IEnumerable Questions, string ErrorMessage)> GetQuestionsAsync(string language); + Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> GetQuestionAsync(int id, string language); + Task<(bool IsSuccess, IEnumerable Questions, string ErrorMessage)> GetQuestionsAsync(string language); Task<(bool IsSuccess, List SurveyQuestions, string ErrorMessage)> GetSurveyQuestionAsync(int surveyId,string language); - Task<(bool IsSuccess, Models.MultiLanQuestion Question, string ErrorMessage)> PostQuestionAsync(Models.Question Question); - Task<(bool IsSuccess, Models.MultiLanQuestion Question, string ErrorMessage)> UpdateQuestionAsync(Models.Question Question); - Task<(bool IsSuccess, Models.MultiLanQuestion Question, string ErrorMessage)> DeleteQuestionAsync(int id); + Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> PostQuestionAsync(Models.Question Question); + Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> UpdateQuestionAsync(Models.Question Question); + Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> DeleteQuestionAsync(int id); Task<(bool IsSuccess, IEnumerable QuestionCategories, string ErrorMessage)> GetQuestionCategoriesAsync(string? language); diff --git a/DamageAssesmentApi/DamageAssesment.Api.Questions/Models/Question.cs b/DamageAssesmentApi/DamageAssesment.Api.Questions/Models/Question.cs index 7900097..b6c1668 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Questions/Models/Question.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Questions/Models/Question.cs @@ -1,29 +1,18 @@ -using System.ComponentModel.DataAnnotations; - -namespace DamageAssesment.Api.Questions.Models +namespace DamageAssesment.Api.Questions.Models { - public class MultiLanQuestion: BaseQuestion - { - public MultiLanguage Questions { get; set; } - } - public class Question: BaseQuestion + public class Question: BaseQuestion { public List Questions { get; set; } } public class BaseQuestion { public int Id { get; set; } - //public int QuestionTypeID { get; set; } - public string TypeText { get; set; } = string.Empty; - public int QuestionNumber { get; set; } public bool IsRequired { get; set; } public bool Comment { get; set; } - public bool Key { get; set; } public int? SurveyId { get; set; } public int CategoryId { get; set; } - // public int? Survey_SurveyID { get; set; } } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Questions/Models/QuestionsTranslation.cs b/DamageAssesmentApi/DamageAssesment.Api.Questions/Models/QuestionsTranslation.cs index af39cdd..28548f1 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Questions/Models/QuestionsTranslation.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Questions/Models/QuestionsTranslation.cs @@ -3,10 +3,10 @@ public class QuestionsTranslation { public string QuestionText { get; set; } - public string Language { get; set; } = "En"; + public string Language { get; set; } = "en"; } - public class MultiLanguage + public class MultiLanguage : BaseQuestion { - public object questionText { get; set; } + public Dictionary Text { get; set; } } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Questions/Models/SurveyQuestion.cs b/DamageAssesmentApi/DamageAssesment.Api.Questions/Models/SurveyQuestion.cs index a3a5513..8f4fd7b 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Questions/Models/SurveyQuestion.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Questions/Models/SurveyQuestion.cs @@ -5,6 +5,6 @@ public int CategoryId { get; set; } public string IconName { get; set; } public string IconLibrary { get; set; } - public List Questions { get; set; } + public List QuestionsText { get; set; } } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Questions/Profiles/QuestionProfile.cs b/DamageAssesmentApi/DamageAssesment.Api.Questions/Profiles/QuestionProfile.cs index 5c0f36e..59b402a 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Questions/Profiles/QuestionProfile.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Questions/Profiles/QuestionProfile.cs @@ -8,7 +8,7 @@ namespace DamageAssesment.Api.Questions.Profiles { CreateMap().ForMember(dest => dest.TypeText, opt => opt.MapFrom(src => src.QuestionType.TypeText)); - CreateMap().ForMember(dest => dest.TypeText, + CreateMap().ForMember(dest => dest.TypeText, opt => opt.MapFrom(src => src.QuestionType.TypeText)); CreateMap(); CreateMap(); diff --git a/DamageAssesmentApi/DamageAssesment.Api.Questions/Program.cs b/DamageAssesmentApi/DamageAssesment.Api.Questions/Program.cs index b978465..073cb10 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Questions/Program.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Questions/Program.cs @@ -2,7 +2,6 @@ using DamageAssesment.Api.Questions.Db; using DamageAssesment.Api.Questions.Interfaces; using DamageAssesment.Api.Questions.Providers; using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Options; using System.Reflection; var builder = WebApplication.CreateBuilder(args); @@ -16,7 +15,6 @@ builder.Services.AddControllers(); builder.Services.AddScoped(); builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); - builder.Services.AddEndpointsApiExplorer(); //builder.Services.AddSwaggerGen(); builder.Services.AddSwaggerGen(c => diff --git a/DamageAssesmentApi/DamageAssesment.Api.Questions/Providers/QuestionsProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.Questions/Providers/QuestionsProvider.cs index 26aa866..0b140e0 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Questions/Providers/QuestionsProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Questions/Providers/QuestionsProvider.cs @@ -2,11 +2,7 @@ using DamageAssesment.Api.Questions.Db; using DamageAssesment.Api.Questions.Interfaces; using DamageAssesment.Api.Questions.Models; -using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Internal; -using System.Collections; -using System.Collections.Generic; namespace DamageAssesment.Api.Questions.Providers { @@ -130,7 +126,7 @@ namespace DamageAssesment.Api.Questions.Providers } return QuestionTranslations; } - public MultiLanguage CreateMultiLanguageObject(List questions) + public Dictionary CreateMultiLanguageObject(List questions) { MultiLanguage MultiLanguage = new MultiLanguage(); Dictionary dict = new Dictionary(); @@ -138,10 +134,10 @@ namespace DamageAssesment.Api.Questions.Providers { dict.Add(item.Language, item.QuestionText); } - MultiLanguage.questionText = dict; - return MultiLanguage; + //MultiLanguage.questionText = dict; + return dict; } - public async Task<(bool IsSuccess, IEnumerable Questions, string ErrorMessage)> GetQuestionsAsync(string language) + public async Task<(bool IsSuccess, IEnumerable Questions, string ErrorMessage)> GetQuestionsAsync(string language) { try { @@ -151,10 +147,10 @@ namespace DamageAssesment.Api.Questions.Providers { //logger?.LogInformation($"{question} customer(s) found"); - var result = mapper.Map, IEnumerable>(questions); - foreach (var question in result) + var result = mapper.Map, IEnumerable>(questions); + foreach (var item in result) { - question.Questions = CreateMultiLanguageObject(GetQuestionsTranslations(question.Id, language)); + item.Text = CreateMultiLanguageObject(GetQuestionsTranslations(item.Id, language)); } return (true, result, null); } @@ -166,7 +162,7 @@ namespace DamageAssesment.Api.Questions.Providers return (false, null, ex.Message); } } - public async Task<(bool IsSuccess, Models.MultiLanQuestion Question, string ErrorMessage)> GetQuestionAsync(int id, string language) + public async Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> GetQuestionAsync(int id, string language) { try { @@ -175,8 +171,8 @@ namespace DamageAssesment.Api.Questions.Providers if (question != null) { logger?.LogInformation($"{question} customer(s) found"); - var result = mapper.Map(question); - result.Questions = CreateMultiLanguageObject(GetQuestionsTranslations(id, language)); + var result = mapper.Map(question); + result.Text = CreateMultiLanguageObject(GetQuestionsTranslations(id, language)); return (true, result, null); } return (false, null, "Not found"); @@ -187,11 +183,11 @@ namespace DamageAssesment.Api.Questions.Providers return (false, null, ex.Message); } } - public List GetSurveyQuestion(List questions, string language) + public List GetSurveyQuestion(List questions, string language) { foreach (var item in questions) { - item.Questions = CreateMultiLanguageObject(GetQuestionsTranslations(item.Id, language)); + item.Text = CreateMultiLanguageObject(GetQuestionsTranslations(item.Id, language)); } return questions; } @@ -214,7 +210,7 @@ namespace DamageAssesment.Api.Questions.Providers CategoryId = item.Id, IconLibrary = item.IconLibrary, IconName = item.IconName, - Questions = GetSurveyQuestion(mapper.Map, List>(questions.Where(a => a.CategoryId == item.Id).ToList()), language) + QuestionsText = GetSurveyQuestion(mapper.Map, List>(questions.Where(a => a.CategoryId == item.Id).ToList()), language) }); } @@ -229,7 +225,7 @@ namespace DamageAssesment.Api.Questions.Providers return (false, null, ex.Message); } } - public async Task<(bool IsSuccess, Models.MultiLanQuestion Question, string ErrorMessage)> PostQuestionAsync(Models.Question Question) + public async Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> PostQuestionAsync(Models.Question Question) { try { @@ -242,8 +238,8 @@ namespace DamageAssesment.Api.Questions.Providers questionDbContext.QuestionsTranslations.AddRange(dbquestiontranslation); questionDbContext.SaveChanges(); Question.Id = dbquestion.Id; - var result = mapper.Map(dbquestion); - result.Questions = CreateMultiLanguageObject(GetQuestionsTranslations(result.Id,"")); + var result = mapper.Map(dbquestion); + result.Text = CreateMultiLanguageObject(GetQuestionsTranslations(result.Id,"")); return (true, result, null); } catch (Exception ex) @@ -252,7 +248,7 @@ namespace DamageAssesment.Api.Questions.Providers return (false, null, ex.Message); } } - public async Task<(bool IsSuccess, Models.MultiLanQuestion Question, string ErrorMessage)> UpdateQuestionAsync(Models.Question Question) + public async Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> UpdateQuestionAsync(Models.Question Question) { try { @@ -266,8 +262,8 @@ namespace DamageAssesment.Api.Questions.Providers dbquestiontranslation.ForEach(i => i.QuestionId = dbquestion.Id); questionDbContext.QuestionsTranslations.AddRange(dbquestiontranslation); questionDbContext.SaveChanges(); - var result = mapper.Map(dbquestion); - result.Questions = CreateMultiLanguageObject(GetQuestionsTranslations(result.Id, "")); + var result = mapper.Map(dbquestion); + result.Text = CreateMultiLanguageObject(GetQuestionsTranslations(result.Id, "")); return (true, result, null); } catch (Exception ex) @@ -277,7 +273,7 @@ namespace DamageAssesment.Api.Questions.Providers return (false, null, ex.Message); } } - public async Task<(bool IsSuccess, Models.MultiLanQuestion Question, string ErrorMessage)> DeleteQuestionAsync(int id) + public async Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> DeleteQuestionAsync(int id) { try { @@ -285,8 +281,8 @@ namespace DamageAssesment.Api.Questions.Providers if (question != null) { - var result = mapper.Map(question); - result.Questions = CreateMultiLanguageObject(GetQuestionsTranslations(result.Id, "")); + var result = mapper.Map(question); + result.Text = CreateMultiLanguageObject(GetQuestionsTranslations(result.Id, "")); questionDbContext.Questions.Remove(question); questionDbContext.SaveChanges(); return (true, result, $"QuestionID {id} deleted Successfuly"); diff --git a/DamageAssesmentApi/DamageAssesment.Api.QuestionsTest/MockData.cs b/DamageAssesmentApi/DamageAssesment.Api.QuestionsTest/MockData.cs index 363ed98..8b13b70 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.QuestionsTest/MockData.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.QuestionsTest/MockData.cs @@ -5,13 +5,13 @@ namespace DamageAssesment.Api.Questions.Test public class MockData { - public static async Task<(bool, IEnumerable, string)> getOkResponse() + public static async Task<(bool, IEnumerable, string)> getOkResponse() { - IEnumerable list = new List(); + IEnumerable list = new List(); for (int i = 0; i < 10; i++) { - list.Append(new Questions.Models.MultiLanQuestion { Id = i, TypeText = "Text" + i, SurveyId = 1, QuestionNumber = 1, IsRequired = true, Comment = false, Key = true, CategoryId=i }); + list.Append(new Questions.Models.MultiLanguage { Id = i, TypeText = "Text" + i, SurveyId = 1, QuestionNumber = 1, IsRequired = true, Comment = false, Key = true, CategoryId=i }); } return (true, list, null); } @@ -23,38 +23,38 @@ namespace DamageAssesment.Api.Questions.Test for (int i = 0; i < 10; i++) { - List question = new List(); - question.Add(new Models.MultiLanQuestion { Id = i, TypeText = "Text" + i, SurveyId = 1, QuestionNumber = 1, IsRequired = true, Comment = false, Key = true, CategoryId = i }); + List question = new List(); + question.Add(new Models.MultiLanguage { Id = i, TypeText = "Text" + i, SurveyId = 1, QuestionNumber = 1, IsRequired = true, Comment = false, Key = true, CategoryId = i }); list.Append(new Questions.Models.SurveyQuestions { CategoryId = i, IconLibrary = "img" + i, IconName = "Category " + i, - Questions = question + QuestionsText = question }); } return (true, list, null); } - public static async Task<(bool, Questions.Models.MultiLanQuestion, string)> getOkResponse(int Id) + public static async Task<(bool, Questions.Models.MultiLanguage, string)> getOkResponse(int Id) { var Questions = await getOkResponse(); var Question = Questions.Item2.FirstOrDefault(s => s.Id == Id); return (true, Question, null); } - public static async Task<(bool, Questions.Models.MultiLanQuestion, string)> getBadRequestResponse() + public static async Task<(bool, Questions.Models.MultiLanguage, string)> getBadRequestResponse() { return (false, null, "Bad Request"); } - public static async Task<(bool, Questions.Models.MultiLanQuestion, string)> getNotFoundResponse() + public static async Task<(bool, Questions.Models.MultiLanguage, string)> getNotFoundResponse() { return (false, null, "Not Found"); } - public static async Task<(bool, IEnumerable, string)> getNoContentResponse() + public static async Task<(bool, IEnumerable, string)> getNoContentResponse() { - IEnumerable list = new List(); + IEnumerable list = new List(); return (false, list, null); } public static async Task<(bool, List, string)> getNoSurveyContentResponse() diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Controllers/SurveyResponsesController.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Controllers/SurveyResponsesController.cs index 5b141a8..e5f3917 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Controllers/SurveyResponsesController.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Controllers/SurveyResponsesController.cs @@ -6,7 +6,6 @@ using Microsoft.Extensions.Configuration; namespace DamageAssesment.Api.SurveyResponses.Controllers { - [Route("api")] [ApiController] public class SurveyResponsesController : ControllerBase { @@ -20,7 +19,7 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers /// GET request for retrieving survey responses. /// - [HttpGet("SurveyResponses")] + [HttpGet("Responses")] public async Task GetSurveyResponsesAsync() { var result = await this.surveyResponseProvider.GetSurveyResponsesAsync(); @@ -38,10 +37,10 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers /// GET request for retrieving survey responses by survey ID. /// - [HttpGet("SurveyResponses/{surveyId}")] - public async Task GetSurveyResponsesAsync(int surveyId) + [HttpGet("Responses/BySurvey/{surveyid}")] + public async Task GetSurveyResponsesAsync(int surveyid) { - var result = await this.surveyResponseProvider.GetSurveyResponsesBySurveyAsync(surveyId); + var result = await this.surveyResponseProvider.GetSurveyResponsesBySurveyAsync(surveyid); if (result.IsSuccess) { return Ok(result.SurveyResponses); @@ -51,13 +50,13 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers /// /// GET request for retrieving survey responses by survey and location IDs. /// - /// The ID of the survey for which responses are to be retrieved. - /// The ID of the location for which responses are to be retrieved. + /// The ID of the survey for which responses are to be retrieved. + /// The ID of the location for which responses are to be retrieved. - [HttpGet("Responses/{surveyId}/{locationId}")] - public async Task GetSurveyResponsesBySurveyAndLocationAsync(int surveyId, string locationId) + [HttpGet("Responses/{surveyid}/{locationid}")] + public async Task GetSurveyResponsesBySurveyAndLocationAsync(int surveyid, int locationid) { - var result = await this.surveyResponseProvider.GetSurveyResponsesBySurveyAndLocationAsync(surveyId, locationId); + var result = await this.surveyResponseProvider.GetSurveyResponsesBySurveyAndLocationAsync(surveyid, locationid); if (result.IsSuccess) { return Ok(result.SurveyResponses); @@ -72,10 +71,10 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers /// The ID of the question for which responses are to be retrieved. /// The answer for which responses are to be retrieved. - [HttpGet("ResponsesByAnswer/{surveyId}/{questionId}/{answer}")] - public async Task GetSurveyResponsesByAnswerAsyncAsync(int surveyId, int questionId, string answer) + [HttpGet("Responses/ByAnswer/{surveyid}/{questionid}/{answer}")] + public async Task GetSurveyResponsesByAnswerAsyncAsync(int surveyid, int questionid, string answer) { - var result = await surveyResponseProvider.GetResponsesByAnswerAsync(surveyId, questionId, answer); + var result = await surveyResponseProvider.GetResponsesByAnswerAsync(surveyid, questionid, answer); if (result.IsSuccess) { return Ok(result.SurveyResponses); @@ -88,10 +87,10 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers /// /// The ID of the survey for which answers are to be retrieved. - [HttpGet("AnswersByRegion/{surveyId}")] - public async Task GetAnswersByRegionAsync(int surveyId) + [HttpGet("Responses/ByRegion/{surveyid}")] + public async Task GetAnswersByRegionAsync(int surveyid) { - var result = await this.surveyResponseProvider.GetAnswersByRegionAsync(surveyId); + var result = await this.surveyResponseProvider.GetAnswersByRegionAsync(surveyid); if (result.IsSuccess) { return Ok(result.Answers); @@ -103,10 +102,10 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers /// /// The ID of the survey for which responses are to be retrieved. - [HttpGet("AnswersByMaintenanceCenter/{surveyId}")] - public async Task GetAnswersByMaintenaceCentersync(int surveyId) + [HttpGet("Responses/ByMaintenanceCenter/{surveyid}")] + public async Task GetAnswersByMaintenaceCentersync(int surveyid) { - var result = await this.surveyResponseProvider.GetSurveyResponsesByMaintenanceCenterAsync(surveyId); + var result = await this.surveyResponseProvider.GetSurveyResponsesByMaintenanceCenterAsync(surveyid); if (result.IsSuccess) { return Ok(result.SurveyResponses); @@ -118,10 +117,10 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers /// /// The ID of the survey response to be retrieved. - [HttpGet("SurveyResponse/{Id}")] - public async Task GetSurveyResponseByIdAsync(int Id) + [HttpGet("Responses/{id}")] + public async Task GetSurveyResponseByIdAsync(int id) { - var result = await this.surveyResponseProvider.GetSurveyResponseByIdAsync(Id); + var result = await this.surveyResponseProvider.GetSurveyResponseByIdAsync(id); if (result.IsSuccess) { return Ok(result.SurveyResponse); @@ -134,7 +133,7 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers /// /// The survey response object to be created. - [HttpPost("SurveyResponses")] + [HttpPost("Responses")] public async Task PostSurveysAsync(Models.SurveyResponse surveyResponse) { var result = await this.surveyResponseProvider.PostSurveyResponseAsync(surveyResponse); @@ -150,10 +149,10 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers /// The ID of the survey response to be updated. /// The updated survey response object. - [HttpPut("SurveyResponses/{Id}")] - public async Task PutSurveyResponseAsync(int Id, Models.SurveyResponse surveyResponse) + [HttpPut("Responses/{id}")] + public async Task PutSurveyResponseAsync(int id, Models.SurveyResponse surveyResponse) { - var result = await this.surveyResponseProvider.PutSurveyResponseAsync(Id, surveyResponse); + var result = await this.surveyResponseProvider.PutSurveyResponseAsync(id, surveyResponse); if (result.IsSuccess) { return Ok(result.SurveyResponse); @@ -167,10 +166,10 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers /// DELETE request for deleting an existing survey response. /// - [HttpDelete("SurveyResponses/{Id}")] - public async Task DeleteSurveyResponseAsync(int Id) + [HttpDelete("Responses/{id}")] + public async Task DeleteSurveyResponseAsync(int id) { - var result = await this.surveyResponseProvider.DeleteSurveyResponseAsync(Id); + var result = await this.surveyResponseProvider.DeleteSurveyResponseAsync(id); if (result.IsSuccess) { return Ok(result.SurveyResponse); @@ -182,7 +181,7 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers /// /// The answers to be submitted for the survey. - [HttpPost("SurveyResponses/Answers")] + [HttpPost("Responses/Answers")] public async Task PostSurveyAnswersAsync(Request request) { var result = await this.surveyResponseProvider.PostSurveyAnswersAsync(request); diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Db/SurveyResponse.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Db/SurveyResponse.cs index ea9ed5e..2169097 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Db/SurveyResponse.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Db/SurveyResponse.cs @@ -10,14 +10,12 @@ namespace DamageAssesment.Api.SurveyResponses.Db [ForeignKey("Survey")] public int SurveyId { get; set; } - - [StringLength(4)] [ForeignKey("Location")] - public string LocationId { get; set; } + public int LocationId { get; set; } [StringLength(6)] [ForeignKey("Employee")] - public string EmployeeId { get; set; } + public int EmployeeId { get; set; } public DateTime? CreatedDate { get; set; } = DateTime.Now; diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Interfaces/IEmployeeServiceProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Interfaces/IEmployeeServiceProvider.cs index a402c30..62031d5 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Interfaces/IEmployeeServiceProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Interfaces/IEmployeeServiceProvider.cs @@ -5,6 +5,6 @@ namespace DamageAssesment.Api.SurveyResponses.Interfaces public interface IEmployeeServiceProvider { Task> getEmployeesAsync(); - Task getEmployeeAsync(string employeeID); + Task getEmployeeAsync(int employeeId); } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Interfaces/ISurveysResponse.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Interfaces/ISurveysResponse.cs index 5cdd198..536353c 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Interfaces/ISurveysResponse.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Interfaces/ISurveysResponse.cs @@ -13,7 +13,7 @@ namespace DamageAssesment.Api.SurveyResponses.Interfaces Task<(bool IsSuccess, Models.SurveyResponse SurveyResponse, string ErrorMessage)> DeleteSurveyResponseAsync(int Id); Task<(bool IsSuccess, dynamic SurveyResponse, string ErrorMessage)> GetSurveyResponseByIdAsync(int responseId); Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesBySurveyAsync(int surveyId); - Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesBySurveyAndLocationAsync(int surveyId, string location); + Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesBySurveyAndLocationAsync(int surveyId, int locationId); Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesByMaintenanceCenterAsync(int surveyId); Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetResponsesByAnswerAsync(int surveyId, int questionId, string answer); diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/AggregateAnswer.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/AggregateAnswer.cs deleted file mode 100644 index d728e1d..0000000 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/AggregateAnswer.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace DamageAssesment.Api.SurveyResponses.Models -{ - public class AggregateAnswer - { - public string? Answer { get; set; } - public int Counter { get; set; } - - } -} diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/AggregateResult.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/AggregateResult.cs deleted file mode 100644 index ef8d174..0000000 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/AggregateResult.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace DamageAssesment.Api.SurveyResponses.Models -{ - public class AggregateResult - { - public string RegionId { get; set; } - public AggregateAnswer Answers { get; set; } - - } -} diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Answer.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Answer.cs index cab6f5b..d607a2f 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Answer.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Answer.cs @@ -6,11 +6,11 @@ namespace DamageAssesment.Api.SurveyResponses.Models { public int Id { get; set; } public int QuestionId { get; set; } - public string? LocationId { get; set; } + public int LocationId { get; set; } public string AnswerText { get; set; } - public string? Comment { get; set; } + public string Comment { get; set; } public int SurveyResponseId { get; set; } - public string? RegionId { get; set; } + public int RegionId { get; set; } // public string? Name { get; set; } // public string? Abbreviation { get; set; } diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/AnswerData.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/AnswerData.cs deleted file mode 100644 index cee0699..0000000 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/AnswerData.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace DamageAssesment.Api.SurveyResponses.Models -{ - public class AnswerData - { - public string RegionId { get; set; } - public string Name { get; set; } - public string Abbreviation { get; set; } - public List Answers { get; set; } - - } -} diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Employee.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Employee.cs index c1fb576..9a06020 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Employee.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Employee.cs @@ -4,18 +4,13 @@ namespace DamageAssesment.Api.SurveyResponses.Models { public class Employee { - public string Id { get; set; } - - [StringLength(50)] + public int Id { get; set; } + public string EmployeeCode { get; set; } public string Name { get; set; } - public DateTime BirthDate { get; set; } - - [StringLength(50)] public string OfficePhoneNumber { get; set; } - - [StringLength(50)] public string Email { get; set; } public bool IsActive { get; set; } + public string? PreferredLanguage { get; set; } } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Location.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Location.cs index 4c7f846..078a5ef 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Location.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Location.cs @@ -2,8 +2,8 @@ { public class Location { - public string Id { get; set; } - public string RegionId { get; set; } + public int Id { get; set; } + public int RegionId { get; set; } public string Name { get; set; } public string MaintenanceCenter { get; set; } public string SchoolType { get; set; } diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Question.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Question.cs index ad18bf1..37abb4b 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Question.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Question.cs @@ -1,24 +1,17 @@ -using System.ComponentModel.DataAnnotations; +using System.Collections.Generic; namespace DamageAssesment.Api.SurveyResponses.Models { - public class Question + public class Question { public int Id { get; set; } - public List Questions { get; set; } - - //public int QuestionTypeID { get; set; } - - public string TypeText { get; set; } = string.Empty; - + public string TypeText { get; set; } public int QuestionNumber { get; set; } public bool IsRequired { get; set; } public bool Comment { get; set; } - public bool Key { get; set; } - public int? SurveyId { get; set; } - //public string QuestionGroup { get; set; } + public int SurveyId { get; set; } public int CategoryId { get; set; } - // public int? Survey_SurveyID { get; set; } + public Dictionary Text { get; set; } } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/QuestionsTranslation.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/QuestionsTranslation.cs deleted file mode 100644 index e347a5c..0000000 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/QuestionsTranslation.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace DamageAssesment.Api.SurveyResponses.Models -{ - public class QuestionsTranslation - { - public string QuestionText { get; set; } - public string Language { get; set; } = "En"; - } -} diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Region.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Region.cs index b1941d2..3fc5ad7 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Region.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Region.cs @@ -4,7 +4,7 @@ namespace DamageAssesment.Api.SurveyResponses.Models { public class Region { - public string Id { get; set; } + public int Id { get; set; } public string Name { get; set; } public string Abbreviation { get; set; } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Request.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Request.cs index 53b3044..5060914 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Request.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Request.cs @@ -3,8 +3,13 @@ public class Request { public int SurveyId { get; set; } - public string LocationId { get; set; } - public string EmployeeId { get; set; } + public int LocationId { get; set; } + public int EmployeeId { get; set; } + public string? ClientDevice { get; set; } + public string? KeyAnswerResult { get; set; } + public double? Longitute { get; set; } + public double? Latitude { get; set; } + public DateTime? CreatedDate { get; set; } = DateTime.Now; public List Answers { get; set; } } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/ResultData.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/ResultData.cs deleted file mode 100644 index 4df1631..0000000 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/ResultData.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace DamageAssesment.Api.SurveyResponses.Models -{ - public class ResultData - { - public List Regions { get; set; } - - } -} diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Survey.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Survey.cs index 506a2f4..b47193e 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Survey.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/Survey.cs @@ -6,9 +6,9 @@ namespace DamageAssesment.Api.SurveyResponses.Models { public int Id { get; set; } public bool IsEnabled { get; set; } - public DateTime? StartDate { get; set; } - public DateTime? EndDate { get; set; } + public DateTime StartDate { get; set; } + public DateTime EndDate { get; set; } public DateTime CreatedDate { get; set; } - public IEnumerable Titles { get; set; } + public Dictionary Titles { get; set; } } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/SurveyResponse.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/SurveyResponse.cs index ccaffdc..37862ca 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/SurveyResponse.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Models/SurveyResponse.cs @@ -7,12 +7,12 @@ namespace DamageAssesment.Api.SurveyResponses.Models { public int Id { get; set; } public int SurveyId { get; set; } - public string LocationId { get; set; } - public string EmployeeId { get; set; } - public DateTime? CreatedDate { get; set; } - public string? ClientDevice { get; set; } - public string? KeyAnswerResult { get; set; } - public double? Longitute { get; set; } - public double? Latitude { get; set; } + public int LocationId { get; set; } + public int EmployeeId { get; set; } + public DateTime CreatedDate { get; set; } + public string ClientDevice { get; set; } + public string KeyAnswerResult { get; set; } + public double Longitute { get; set; } + public double Latitude { get; set; } } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Providers/SurveyResponsesProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Providers/SurveyResponsesProvider.cs index ec5bcc3..1f82d8c 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Providers/SurveyResponsesProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Providers/SurveyResponsesProvider.cs @@ -31,19 +31,19 @@ namespace DamageAssesment.Api.SurveyResponses.Providers this.questionServiceProvider = questionServiceProvider; this.surveyServiceProvider = surveyServiceProvider; this.mapper = mapper; - //seedData(); + // seedData(); } private void seedData() { if (!surveyResponseDbContext.SurveyResponses.Any()) { - surveyResponseDbContext.SurveyResponses.Add(new Db.SurveyResponse { Id = 1, SurveyId = 1, EmployeeId = "Emp1", LocationId = "Loc1", ClientDevice = "Mobile", Latitude = 98.8767, Longitute = -129.9897, KeyAnswerResult = "", CreatedDate = DateTime.Now }); - surveyResponseDbContext.SurveyResponses.Add(new Db.SurveyResponse { Id = 2, SurveyId = 1, EmployeeId = "Emp2", LocationId = "Loc2", ClientDevice = "Desktop", Latitude = 98.8767, Longitute = -129.9897, KeyAnswerResult = "", CreatedDate = DateTime.Now }); - surveyResponseDbContext.SurveyResponses.Add(new Db.SurveyResponse { Id = 3, SurveyId = 3, EmployeeId = "Emp4", LocationId = "Loc1", ClientDevice = "Mobile", Latitude = 98.8767, Longitute = -129.9897, KeyAnswerResult = "", CreatedDate = DateTime.Now }); - surveyResponseDbContext.SurveyResponses.Add(new Db.SurveyResponse { Id = 4, SurveyId = 4, EmployeeId = "Emp1", LocationId = "Loc2", ClientDevice = "Desktop", Latitude = 98.8767, Longitute = -129.9897, KeyAnswerResult = "", CreatedDate = DateTime.Now }); - surveyResponseDbContext.SurveyResponses.Add(new Db.SurveyResponse { Id = 6, SurveyId = 1, EmployeeId = "Emp4", LocationId = "Loc2", ClientDevice = "Desktop", Latitude = 98.8767, Longitute = -129.9897, KeyAnswerResult = "", CreatedDate = DateTime.Now }); - surveyResponseDbContext.SurveyResponses.Add(new Db.SurveyResponse { Id = 7, SurveyId = 1, EmployeeId = "Emp4", LocationId = "Loc3", ClientDevice = "Desktop", Latitude = 98.8767, Longitute = -129.9897, KeyAnswerResult = "", CreatedDate = DateTime.Now }); + surveyResponseDbContext.SurveyResponses.Add(new Db.SurveyResponse { Id = 1, SurveyId = 1, EmployeeId = 1, LocationId = 1, ClientDevice = "Mobile", Latitude = 98.8767, Longitute = -129.9897, KeyAnswerResult = "true", CreatedDate = DateTime.Now }); + surveyResponseDbContext.SurveyResponses.Add(new Db.SurveyResponse { Id = 2, SurveyId = 1, EmployeeId = 2, LocationId = 2, ClientDevice = "Desktop", Latitude = 98.8767, Longitute = -129.9897, KeyAnswerResult = "true", CreatedDate = DateTime.Now }); + surveyResponseDbContext.SurveyResponses.Add(new Db.SurveyResponse { Id = 3, SurveyId = 3, EmployeeId = 4, LocationId = 1, ClientDevice = "Mobile", Latitude = 98.8767, Longitute = -129.9897, KeyAnswerResult = "true", CreatedDate = DateTime.Now }); + surveyResponseDbContext.SurveyResponses.Add(new Db.SurveyResponse { Id = 4, SurveyId = 4, EmployeeId = 1, LocationId = 2, ClientDevice = "Desktop", Latitude = 98.8767, Longitute = -129.9897, KeyAnswerResult = "false", CreatedDate = DateTime.Now }); + surveyResponseDbContext.SurveyResponses.Add(new Db.SurveyResponse { Id = 6, SurveyId = 1, EmployeeId = 4, LocationId = 2, ClientDevice = "Desktop", Latitude = 98.8767, Longitute = -129.9897, KeyAnswerResult = "true", CreatedDate = DateTime.Now }); + surveyResponseDbContext.SurveyResponses.Add(new Db.SurveyResponse { Id = 7, SurveyId = 1, EmployeeId = 4, LocationId = 3, ClientDevice = "Desktop", Latitude = 98.8767, Longitute = -129.9897, KeyAnswerResult = "false", CreatedDate = DateTime.Now }); surveyResponseDbContext.SaveChanges(); } } @@ -136,7 +136,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers } } - public async Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesBySurveyAndLocationAsync(int surveyId, string locationId) + public async Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesBySurveyAndLocationAsync(int surveyId, int locationId) { try { @@ -286,19 +286,14 @@ namespace DamageAssesment.Api.SurveyResponses.Providers { if (SurveyResponse != null) { - var _SurveyResponse = await surveyResponseDbContext.SurveyResponses.Where(s => s.Id == Id).FirstOrDefaultAsync(); + var _SurveyResponse = await surveyResponseDbContext.SurveyResponses.AsNoTracking().Where(s => s.Id == Id).FirstOrDefaultAsync(); if (_SurveyResponse != null) { - _SurveyResponse.SurveyId = SurveyResponse.SurveyId; - _SurveyResponse.EmployeeId = SurveyResponse.EmployeeId; - _SurveyResponse.LocationId = SurveyResponse.LocationId; - _SurveyResponse.ClientDevice = SurveyResponse.ClientDevice; - _SurveyResponse.KeyAnswerResult = SurveyResponse.KeyAnswerResult; - _SurveyResponse.Longitute = SurveyResponse.Longitute; - _SurveyResponse.Latitude = SurveyResponse.Latitude; + var response = mapper.Map(SurveyResponse); + surveyResponseDbContext.Update(response); await surveyResponseDbContext.SaveChangesAsync(); - return (true, mapper.Map(_SurveyResponse), "Successful"); + return (true, SurveyResponse, "Successful"); } else { @@ -360,13 +355,13 @@ namespace DamageAssesment.Api.SurveyResponses.Providers answer => answer.SurveyResponseId, surveyResponse => surveyResponse.Id, (answer, surveyResponse) => new - Answer + { - Id = answer.Id, - QuestionId = answer.QuestionId, - AnswerText = answer.AnswerText, - Comment = answer.Comment, - LocationId = surveyResponse.LocationId, + answer.Id, + answer.QuestionId, + answer.AnswerText, + answer.Comment, + surveyResponse.LocationId, SurveyResponseId = surveyResponse.Id }); @@ -383,41 +378,46 @@ namespace DamageAssesment.Api.SurveyResponses.Providers //get all the answers based on the locations var result = from answer in surveyAnswers from location in locations - where answer.LocationId == location.Id - select new Answer + where answer.LocationId.Equals(location.Id) + select new { - Id = answer.Id, - QuestionId = answer.QuestionId, - AnswerText = answer.AnswerText, - Comment = answer.Comment, - RegionId = location.RegionId, - LocationId = location.Id, - SurveyResponseId = answer.SurveyResponseId + answer.Id, + answer.QuestionId, + answer.AnswerText, + answer.Comment, + location.RegionId, + LocationId = location.Id, + answer.SurveyResponseId }; + + //group records by answer and region var q = from e in result group e by (e.RegionId, e.AnswerText) into g - select new AggregateResult + select new { - RegionId = g.Key.RegionId, - Answers = new AggregateAnswer + g.Key.RegionId, + Answers = new { - Answer = g.Key.AnswerText, + g.Key.AnswerText, Counter = g.Count() } }; - + //build the result - List resultList = new List(); + + List resultList = new List(); foreach (Region region in regions) { - var answers = q.Where(x => x.RegionId.Equals(region.Id)).Select(x => x.Answers).ToList(); - resultList.Add(new AnswerData { RegionId = region.Id, Name = region.Name, Abbreviation = region.Abbreviation, Answers = answers }); + var answers = from u in q.ToList() + where u.RegionId.Equals(region.Id) + select u.Answers; + + resultList.Add(new { RegionId = region.Id, region.Name, region.Abbreviation, Answers = answers}); } - //return the object result - return new ResultData { Regions = resultList }; + return new { Regions = resultList }; } catch (Exception ex) { @@ -455,7 +455,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers ans.Id, ans.AnswerText, ans.Comment, - Questions = (from q in questions where q.Id == ans.QuestionId select new { q.Id, q.QuestionNumber, q.CategoryId, q.Questions }).SingleOrDefault(), + Questions = (from q in questions where q.Id == ans.QuestionId select new { q.Id, q.QuestionNumber, q.CategoryId, q.Text }).SingleOrDefault(), Attachments = from att in attachments where att.AnswerId == ans.Id select new { att.Id, att.URI } } }; @@ -504,7 +504,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers ans.QuestionId, ans.AnswerText, ans.Comment, - Questions = (from q in surveyQuestions where q.Id == ans.QuestionId select new { q.Id, q.QuestionNumber, q.CategoryId, q.Questions }).SingleOrDefault(), + Questions = (from q in surveyQuestions where q.Id == ans.QuestionId select new { q.Id, q.QuestionNumber, q.CategoryId, q.Text }).SingleOrDefault(), Attachments = from att in attachments where att.AnswerId == ans.Id select new { att.Id, att.URI } } @@ -531,8 +531,6 @@ namespace DamageAssesment.Api.SurveyResponses.Providers var questions = await questionServiceProvider.getQuestionsAsync(); var attachments = await attachmentServiceProvider.getAttachmentsAsync(); - - var result = from r in surveyResonses select new { @@ -553,7 +551,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers ans.QuestionId, ans.AnswerText, ans.Comment, - Questions = (from q in questions where q.Id == ans.QuestionId select new { q.Id, q.QuestionNumber, q.CategoryId, q.Questions }).SingleOrDefault(), + Questions = (from q in questions where q.Id == ans.QuestionId select new { q.Id, q.QuestionNumber, q.CategoryId, q.Text }).SingleOrDefault(), Attachments = from att in attachments where att.AnswerId == ans.Id select new { att.Id, att.URI } } }; @@ -594,7 +592,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers //get all the answers with location var surveyAnswersLocations = from surveyAns in surveyAnswers from location in locations - where surveyAns.LocationId == location.Id + where surveyAns.LocationId.Equals(location.Id) select new { surveyAns, location.MaintenanceCenter }; //aggreting the answers @@ -603,9 +601,9 @@ namespace DamageAssesment.Api.SurveyResponses.Providers select new { g.Key.MaintenanceCenter, - Answers = new AggregateAnswer + Answers = new { - Answer = g.Key.AnswerText, + g.Key.AnswerText, Counter = g.Count() } }; @@ -628,7 +626,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers } //Method to get Survey Responses by surveyId and LocationId - private async Task getSurveyResponsesBySurveyIdLocationIdAsync(int surveyId, string locationId) + private async Task getSurveyResponsesBySurveyIdLocationIdAsync(int surveyId, int locationId) { try { @@ -661,7 +659,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers ans.Id, ans.AnswerText, ans.Comment, - Questions = (from q in surveyQuestions where q.Id == ans.QuestionId select new { q.Id, q.QuestionNumber, q.CategoryId, q.Questions }).SingleOrDefault(), + Questions = (from q in surveyQuestions where q.Id == ans.QuestionId select new { q.Id, q.QuestionNumber, q.CategoryId, q.Text }).SingleOrDefault(), Attachments = from att in attachments where att.AnswerId == ans.Id select new { att.Id, att.URI } } }; @@ -759,8 +757,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers { if (request != null) { - var response = await PostSurveyResponseAsync(new Models.SurveyResponse { SurveyId = request.SurveyId, EmployeeId = request.EmployeeId, LocationId = request.LocationId }); - + var response = await PostSurveyResponseAsync(new Models.SurveyResponse { SurveyId = request.SurveyId, EmployeeId = request.EmployeeId, LocationId = request.LocationId, ClientDevice = request.ClientDevice, KeyAnswerResult = request.KeyAnswerResult, Latitude = Convert.ToDouble(request.Latitude), Longitute = Convert.ToDouble(request.Longitute), CreatedDate=DateTime.Now }); if (response.IsSuccess) { var surveyResponse = response.SurveyResponse; diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/AnswerServiceProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/AnswerServiceProvider.cs index 921f59c..695ad3e 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/AnswerServiceProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/AnswerServiceProvider.cs @@ -7,14 +7,13 @@ namespace DamageAssesment.Api.SurveyResponses.Services { public class AnswerServiceProvider : ServiceProviderBase, IAnswerServiceProvider { - public AnswerServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger logger) : base(configuration, httpUtil, logger, "/api/Answers", configuration.GetValue("EndPointSettings:AnswerUrlBase")) + public AnswerServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger logger) : base(configuration, httpUtil, logger, configuration.GetValue("RessourceSettings:Answer"), configuration.GetValue("EndPointSettings:AnswerUrlBase")) { } public async Task> getAnswersAsync() { try { - var url = urlBase + ressource; var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null); var answers = JsonConvert.DeserializeObject>(responseJsonString); @@ -33,7 +32,7 @@ namespace DamageAssesment.Api.SurveyResponses.Services { try { - var url = urlBase + "/api/AnswersByResponse/" + responseId; + url = urlBase + string.Format(configuration.GetValue("RessourceSettings:AnswerByResponse"), responseId); var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null); var answers = JsonConvert.DeserializeObject>(responseJsonString); @@ -52,7 +51,6 @@ namespace DamageAssesment.Api.SurveyResponses.Services { try { - var url = urlBase + ressource; var requestJsonString = JsonConvert.SerializeObject(answer); var responseJsonString = await httpUtil.SendAsync(HttpMethod.Post, url, requestJsonString); var answers = JsonConvert.DeserializeObject(responseJsonString); diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/AttachmentServiceProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/AttachmentServiceProvider.cs index 9c45c72..120e60f 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/AttachmentServiceProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/AttachmentServiceProvider.cs @@ -6,7 +6,7 @@ namespace DamageAssesment.Api.SurveyResponses.Services { public class AttachmentServiceProvider : ServiceProviderBase, IAttachmentServiceProvider { - public AttachmentServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger logger) : base(configuration, httpUtil, logger, "/api/Attachments", configuration.GetValue("EndPointSettings:AttachmentUrlBase")) + public AttachmentServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger logger) : base(configuration, httpUtil, logger, configuration.GetValue("RessourceSettings:Attachment"), configuration.GetValue("EndPointSettings:AttachmentUrlBase")) { } @@ -14,7 +14,6 @@ namespace DamageAssesment.Api.SurveyResponses.Services { try { - var url = urlBase + ressource; var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null); var attachments = JsonConvert.DeserializeObject>(responseJsonString); @@ -33,7 +32,6 @@ namespace DamageAssesment.Api.SurveyResponses.Services { try { - var url = urlBase + ressource; var requestJsonString = JsonConvert.SerializeObject(attachmentInfo); var responseJsonString = await httpUtil.SendAsync(HttpMethod.Post, url, requestJsonString); var attachments = JsonConvert.DeserializeObject>(responseJsonString); diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/EmployeeServiceProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/EmployeeServiceProvider.cs index 46288a8..8dd1352 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/EmployeeServiceProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/EmployeeServiceProvider.cs @@ -1,12 +1,13 @@ using DamageAssesment.Api.SurveyResponses.Interfaces; using DamageAssesment.Api.SurveyResponses.Models; +using Microsoft.AspNetCore.Mvc.Routing; using Newtonsoft.Json; namespace DamageAssesment.Api.SurveyResponses.Services { - public class EmployeeServiceProvider :ServiceProviderBase, IEmployeeServiceProvider + public class EmployeeServiceProvider : ServiceProviderBase, IEmployeeServiceProvider { - public EmployeeServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger logger) : base(configuration, httpUtil, logger, "/api/Employees", configuration.GetValue("EndPointSettings:EmployeeUrlBase")) + public EmployeeServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger logger) : base(configuration, httpUtil, logger, configuration.GetValue("RessourceSettings:Employee"), configuration.GetValue("EndPointSettings:EmployeeUrlBase")) { } @@ -14,7 +15,6 @@ namespace DamageAssesment.Api.SurveyResponses.Services { try { - var url = urlBase + ressource; var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null); var employees = JsonConvert.DeserializeObject>(responseJsonString); @@ -29,15 +29,15 @@ namespace DamageAssesment.Api.SurveyResponses.Services } } - public async Task getEmployeeAsync(string employeeId) + public async Task getEmployeeAsync(int employeeId) { try { - var url = urlBase + "/api/Employees/" + employeeId; + url = urlBase + string.Format(configuration.GetValue("RessourceSettings:EmployeeById"), employeeId); var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null); var employee = JsonConvert.DeserializeObject(responseJsonString); - if (employee == null ) + if (employee == null) return null; else return employee; } diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/LocationServiceProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/LocationServiceProvider.cs index 07e456b..2e3fa32 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/LocationServiceProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/LocationServiceProvider.cs @@ -6,7 +6,7 @@ namespace DamageAssesment.Api.SurveyResponses.Services { public class LocationServiceProvider :ServiceProviderBase, ILocationServiceProvider { - public LocationServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger logger) : base(configuration, httpUtil, logger, "/api/Locations", configuration.GetValue("EndPointSettings:LocationUrlBase")) + public LocationServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger logger) : base(configuration, httpUtil, logger, configuration.GetValue("RessourceSettings:Location"), configuration.GetValue("EndPointSettings:LocationUrlBase")) { } @@ -14,7 +14,6 @@ namespace DamageAssesment.Api.SurveyResponses.Services { try { - var url = urlBase + ressource; var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null); var locations = JsonConvert.DeserializeObject>(responseJsonString); diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/QuestionServiceProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/QuestionServiceProvider.cs index 6099141..138011f 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/QuestionServiceProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/QuestionServiceProvider.cs @@ -6,7 +6,7 @@ namespace DamageAssesment.Api.SurveyResponses.Services { public class QuestionServiceProvider : ServiceProviderBase, IQuestionServiceProvider { - public QuestionServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger logger) : base(configuration, httpUtil, logger, "/api/Questions", configuration.GetValue("EndPointSettings:QuestionUrlBase")) + public QuestionServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger logger) : base(configuration, httpUtil, logger, configuration.GetValue("RessourceSettings:Question"), configuration.GetValue("EndPointSettings:QuestionUrlBase")) { } @@ -14,7 +14,6 @@ namespace DamageAssesment.Api.SurveyResponses.Services { try { - var url = urlBase + ressource; var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null); var questions = JsonConvert.DeserializeObject>(responseJsonString); @@ -33,7 +32,7 @@ namespace DamageAssesment.Api.SurveyResponses.Services { try { - var url = urlBase + "/api/GetSurveyQuestions/" + surveyId; + url = urlBase + string.Format(configuration.GetValue("RessourceSettings:SurveyQuestion"), surveyId); var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null); var questions = JsonConvert.DeserializeObject>(responseJsonString); @@ -53,7 +52,7 @@ namespace DamageAssesment.Api.SurveyResponses.Services { try { - var url = urlBase + "/api/Questions/" + questionId; + url = urlBase + string.Format(configuration.GetValue("RessourceSettings:QuestionById"), questionId); var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null); var question = JsonConvert.DeserializeObject(responseJsonString); diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/RegionServiceProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/RegionServiceProvider.cs index f31a1e1..091512e 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/RegionServiceProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/RegionServiceProvider.cs @@ -6,14 +6,13 @@ namespace DamageAssesment.Api.SurveyResponses.Services { public class RegionServiceProvider : ServiceProviderBase, IRegionServiceProvider { - public RegionServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger logger) : base(configuration, httpUtil, logger, "/api/Regions", configuration.GetValue("EndPointSettings:LocationUrlBase")) + public RegionServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger logger) : base(configuration, httpUtil, logger, configuration.GetValue("RessourceSettings:Region"), configuration.GetValue("EndPointSettings:LocationUrlBase")) { } public async Task> getRegionsAsync() { try { - var url = urlBase + ressource; var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null); var regions = JsonConvert.DeserializeObject>(responseJsonString); diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/ServiceProviderBase.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/ServiceProviderBase.cs index 487975b..af1aa65 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/ServiceProviderBase.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/ServiceProviderBase.cs @@ -9,6 +9,7 @@ namespace DamageAssesment.Api.SurveyResponses.Services protected readonly ILogger logger; protected string ressource; protected string urlBase; + protected string url; public ServiceProviderBase(IConfiguration configuration, IHttpUtil httpUtil, ILogger logger, string ressource, string urlBase) @@ -18,6 +19,7 @@ namespace DamageAssesment.Api.SurveyResponses.Services this.logger = logger; this.ressource = ressource; this.urlBase = urlBase; + url = urlBase + ressource; } } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/SurveyServiceProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/SurveyServiceProvider.cs index 616afb2..c9df4db 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/SurveyServiceProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/SurveyServiceProvider.cs @@ -6,7 +6,7 @@ namespace DamageAssesment.Api.SurveyResponses.Services { public class SurveyServiceProvider :ServiceProviderBase, ISurveyServiceProvider { - public SurveyServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger logger) : base(configuration, httpUtil, logger, "/api/Surveys", configuration.GetValue("EndPointSettings:SurveyUrlBase")) + public SurveyServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger logger) : base(configuration, httpUtil, logger, configuration.GetValue("RessourceSettings:Survey"), configuration.GetValue("EndPointSettings:SurveyUrlBase")) { } @@ -14,8 +14,6 @@ namespace DamageAssesment.Api.SurveyResponses.Services { try { - - var url = urlBase + ressource; var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null); var surveys = JsonConvert.DeserializeObject>(responseJsonString); @@ -34,7 +32,7 @@ namespace DamageAssesment.Api.SurveyResponses.Services { try { - var url = urlBase + ressource + "/" + surveyId; + url = urlBase + string.Format(configuration.GetValue("RessourceSettings:SurveyById"), surveyId); var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null); var survey = JsonConvert.DeserializeObject(responseJsonString); diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/appsettings.Development.json b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/appsettings.Development.json index 0c208ae..06d7caa 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/appsettings.Development.json +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/appsettings.Development.json @@ -3,6 +3,30 @@ "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" + }, + "EndPointSettings": { + "AnswerUrlBase": "http://localhost:5200", + "LocationUrlBase": "http://localhost:5213", + "RegionUrlBase": "http://localhost:5211", + "QuestionUrlBase": "http://localhost:5133", + "EmployeeUrlBase": "http://localhost:5135", + "AttachmentUrlBase": "http://localhost:5243", + "SurveyUrlBase": "http://localhost:5009" + }, + + "RessourceSettings": { + "Employee": "/Employees", + "EmployeeById": "/Employees/{0}", + "Question": "/Questions", + "QuestionById": "/Questions/{0}", + "SurveyQuestion": "/Questions/BySurvey/{0}", + "Survey": "/Surveys", + "SurveyById": "/Surveys/{0}", + "Attachment": "/Attachments", + "Answer": "/Answers", + "AnswerByResponse": "/Answers/ByResponse/{0}", + "Location": "/Locations", + "Region": "/Regions" } } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/appsettings.Production.json b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/appsettings.Production.json new file mode 100644 index 0000000..ba719e5 --- /dev/null +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/appsettings.Production.json @@ -0,0 +1,5 @@ +{ + "ConnectionStrings": { + "DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=_CHANGE_ME;Trusted_Connection=True;MultipleActiveResultSets=true" + } +} \ No newline at end of file diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/appsettings.Test.json b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/appsettings.Test.json new file mode 100644 index 0000000..ba719e5 --- /dev/null +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/appsettings.Test.json @@ -0,0 +1,5 @@ +{ + "ConnectionStrings": { + "DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=_CHANGE_ME;Trusted_Connection=True;MultipleActiveResultSets=true" + } +} \ No newline at end of file diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/appsettings.json b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/appsettings.json index 2d6dfe4..d7b64fc 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/appsettings.json +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/appsettings.json @@ -14,6 +14,20 @@ "EmployeeUrlBase": "http://localhost:5135", "AttachmentUrlBase": "http://localhost:5243", "SurveyUrlBase": "http://localhost:5009" + }, + "RessourceSettings": { + "Employee": "/Employees", + "EmployeeById": "/Employees/{0}", + "Question": "/Questions", + "QuestionById": "/Questions/{0}", + "SurveyQuestion": "/Questions/BySurvey/{0}", + "Survey": "/Surveys", + "SurveyById": "/Surveys/{0}", + "Attachment": "/Attachments", + "Answer": "/Answers", + "AnswerByResponse": "/Answers/ByResponse/{0}", + "Location": "/Locations", + "Region": "/Regions" } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Surveys/Models/Survey.cs b/DamageAssesmentApi/DamageAssesment.Api.Surveys/Models/Survey.cs index f79158b..25f5405 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Surveys/Models/Survey.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Surveys/Models/Survey.cs @@ -9,7 +9,6 @@ namespace DamageAssesment.Api.Surveys.Models public class Survey : BaseSurvey { public IEnumerable Titles { get; set; } - } public class BaseSurvey { diff --git a/DamageAssesmentApi/DamageAssesment.Api.Surveys/Providers/SurveysProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.Surveys/Providers/SurveysProvider.cs index f843216..df04662 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Surveys/Providers/SurveysProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Surveys/Providers/SurveysProvider.cs @@ -184,17 +184,15 @@ namespace DamageAssesment.Api.Surveys.Providers { if (survey != null) { - var _survey = await surveyDbContext.Surveys.Where(s => s.Id == Id).SingleOrDefaultAsync(); + var _survey = await surveyDbContext.Surveys.AsNoTracking().Where(s => s.Id == Id).SingleOrDefaultAsync(); if (_survey != null) { var surveysTranslation = await surveyDbContext.SurveysTranslation.Where(s => s.SurveyId == Id).ToListAsync(); surveyDbContext.SurveysTranslation.RemoveRange(surveysTranslation); await surveyDbContext.SaveChangesAsync(); - - _survey.IsEnabled = survey.IsEnabled; - _survey.StartDate = survey.StartDate; - _survey.EndDate = survey.EndDate; + _survey = mapper.Map(survey); + surveyDbContext.Surveys.Update(_survey); await surveyDbContext.SaveChangesAsync(); List listSurveyTranslation = new List(); diff --git a/DamageAssesmentApi/DamageAssesment.SurveyResponses.Test/MockData.cs b/DamageAssesmentApi/DamageAssesment.SurveyResponses.Test/MockData.cs index d70772d..5be421f 100644 --- a/DamageAssesmentApi/DamageAssesment.SurveyResponses.Test/MockData.cs +++ b/DamageAssesmentApi/DamageAssesment.SurveyResponses.Test/MockData.cs @@ -24,7 +24,7 @@ namespace DamageAssesment.Api.SurveyResponses.Test public static async Task getSurveyResponseObject() { - return new Models.SurveyResponse { EmployeeId = "Emp1", LocationId = "Loc1", SurveyId = 1, Id = 1 }; + return new Models.SurveyResponse { EmployeeId = 1, LocationId = 1, SurveyId = 1, Id = 1 }; } } } diff --git a/DamageAssesmentApi/DamageAssesment.SurveyResponses.Test/SurveyResponsesServiceTest.cs b/DamageAssesmentApi/DamageAssesment.SurveyResponses.Test/SurveyResponsesServiceTest.cs index 182ec5c..47685a5 100644 --- a/DamageAssesmentApi/DamageAssesment.SurveyResponses.Test/SurveyResponsesServiceTest.cs +++ b/DamageAssesmentApi/DamageAssesment.SurveyResponses.Test/SurveyResponsesServiceTest.cs @@ -68,9 +68,9 @@ namespace DamageAssesment.SurveyResponses.Test { SurveyResponse mockRequestObject = await MockData.getSurveyResponseObject(); var mockResponse = await MockData.getOkResponse(); - mockSurveyResponseService.Setup(service => service.GetSurveyResponsesBySurveyAndLocationAsync(1, "Loc1")).ReturnsAsync(mockResponse); + mockSurveyResponseService.Setup(service => service.GetSurveyResponsesBySurveyAndLocationAsync(1, 1)).ReturnsAsync(mockResponse); var surveyResponseProvider = new SurveyResponsesController(mockSurveyResponseService.Object); - var result = (OkObjectResult)await surveyResponseProvider.GetSurveyResponsesBySurveyAndLocationAsync(1, "Loc1"); + var result = (OkObjectResult)await surveyResponseProvider.GetSurveyResponsesBySurveyAndLocationAsync(1, 1); Assert.Equal(200, result.StatusCode); } @@ -78,9 +78,9 @@ namespace DamageAssesment.SurveyResponses.Test public async Task GetSurveyResponsesBySurveyLocationAsync_ShouldReturnStatusCode204() { var mockResponse = await MockData.getResponse(); - mockSurveyResponseService.Setup(service => service.GetSurveyResponsesBySurveyAndLocationAsync(1, "Loc1")).ReturnsAsync(mockResponse); + mockSurveyResponseService.Setup(service => service.GetSurveyResponsesBySurveyAndLocationAsync(1, 1)).ReturnsAsync(mockResponse); var surveyResponseProvider = new SurveyResponsesController(mockSurveyResponseService.Object); - var result = (NoContentResult)await surveyResponseProvider.GetSurveyResponsesBySurveyAndLocationAsync(1, "Lo1"); + var result = (NoContentResult)await surveyResponseProvider.GetSurveyResponsesBySurveyAndLocationAsync(1, 1); Assert.Equal(204, result.StatusCode); }