Update survey response, adding EmployeeId , Location Id as int, adjust end point for ansers submission in batch

This commit is contained in:
Reginald Cherenfant Jasmin 2023-09-13 01:28:24 -04:00
parent 4cf7d9f891
commit 9109d0d793
68 changed files with 525 additions and 540 deletions

View File

@ -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
/// <summary>
/// Get all answers based on responseId.
/// </summary>
[HttpGet("AnswersByResponse/{ResponseId}")]
public async Task<IActionResult> GetAnswersByResponseId(int ResponseId)
[HttpGet("Answers/ByResponse/{responseid}")]
public async Task<IActionResult> 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.
/// </summary>
[HttpGet("AnswersByQuestion/{QuestionId}")]
public async Task<IActionResult> AnswersByQuestionId(int QuestionId)
[HttpGet("Answers/ByQuestion/{questionid}")]
public async Task<IActionResult> AnswersByQuestionId(int questionid)
{
var result = await this.answerProvider.GetAnswersByQuestionAsync(QuestionId);
var result = await this.answerProvider.GetAnswersByQuestionAsync(questionid);
if (result.IsSuccess)
{
return Ok(result.Answers);

View File

@ -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
/// <summary>
/// Delete an existing attachment.
/// </summary>
[HttpDelete("Delete")]
public async Task<IActionResult> DeleteAttachment(int Id)
[HttpDelete("Attachments/{id}")]
public async Task<IActionResult> 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

View File

@ -43,11 +43,11 @@ namespace DamageAssesment.Api.Employees.Test
public async Task GetEmployeeAsync_ShouldReturnStatusCode200()
{
var mockEmployeeService = new Mock<IEmployeesProvider>();
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<IEmployeesProvider>();
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<IEmployeesProvider>();
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<IEmployeesProvider>();
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<IEmployeesProvider>();
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<IEmployeesProvider>();
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<IEmployeesProvider>();
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<IEmployeesProvider>();
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);
}

View File

@ -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<Models.Employee> 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" };
}

View File

@ -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.
/// </summary>
[HttpGet("Employees/{Id}")]
public async Task<ActionResult> GetEmployeeByIdAsync(string Id)
[HttpGet("Employees/{id}")]
public async Task<ActionResult> 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.
/// </summary>
/// <param name="Employee">The updated employee object.</param>
[HttpPut("Employees")]
public async Task<IActionResult> UpdateEmployee(string Id, Models.Employee Employee)
[HttpPut("Employees/{id}")]
public async Task<IActionResult> 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);
}
/// <summary>
/// DELETE request for deleting an existing employee.
/// </summary>
/// <param name="id">The ID of the employee to be deleted.</param>
[HttpDelete("Employees/{id}")]
public async Task<IActionResult> DeleteEmployee(string id)
public async Task<IActionResult> DeleteEmployee(int id)
{
var result = await this.EmployeeProvider.DeleteEmployeeAsync(id);
if (result.IsSuccess)

View File

@ -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";
}
}

View File

@ -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<Employee>()
.Property(item => item.Id)
.ValueGeneratedOnAdd();
}
}
}

View File

@ -3,10 +3,10 @@
public interface IEmployeesProvider
{
Task<(bool IsSuccess, IEnumerable<Models.Employee> 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();
}
}

View File

@ -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; }

View File

@ -7,6 +7,7 @@ namespace DamageAssesment.Api.Employees.Profiles
public EmployeesProfile()
{
CreateMap<Db.Employee, Models.Employee>();
CreateMap<Models.Employee, Db.Employee>();
}
}
}

View File

@ -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<Models.Employee> 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<Models.Employee, Db.Employee>(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<Models.Employee, Db.Employee>(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();
}

View File

@ -40,11 +40,11 @@ namespace DamageAssesment.Api.Locations.Test
public async Task GetLocationsByIdAsync_ShouldReturnStatusCode200()
{
var mockLocationService = new Mock<ILocationsProvider>();
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<ILocationsProvider>();
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<ILocationsProvider>();
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<ILocationsProvider>();
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<ILocationsProvider>();
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<ILocationsProvider>();
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<ILocationsProvider>();
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<ILocationsProvider>();
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<IRegionsProvider>();
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<IRegionsProvider>();
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<IRegionsProvider>();
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<IRegionsProvider>();
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<IRegionsProvider>();
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<IRegionsProvider>();
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<IRegionsProvider>();
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<IRegionsProvider>();
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);
}

View File

@ -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<Locations.Models.Region> 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" };
}
}
}

View File

@ -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
/// </summary>
[HttpGet("Locations/{id}")]
public async Task<ActionResult> GetLocationByIdAsync(string id)
public async Task<ActionResult> GetLocationByIdAsync(int id)
{
var result = await LocationProvider.GetLocationByIdAsync(id);
@ -50,15 +48,15 @@ namespace DamageAssesment.Api.Locations.Controllers
/// Update a Location.
/// </summary>
[HttpPut("Locations")]
public async Task<IActionResult> UpdateLocation(Models.Location Location)
[HttpPut("Locations/{id}")]
public async Task<IActionResult> 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
/// </summary>
[HttpDelete("Locations/{id}")]
public async Task<IActionResult> DeleteLocation(string id)
public async Task<IActionResult> DeleteLocation(int id)
{
var result = await this.LocationProvider.DeleteLocationAsync(id);
if (result.IsSuccess)
{
return Ok(result.ErrorMessage);
return Ok(result.Location);
}
return NotFound();
}

View File

@ -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
/// </summary>
[HttpGet]
[HttpGet("regions")]
public async Task<ActionResult> 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.
/// </summary>
[HttpGet("{Id}")]
public async Task<ActionResult> GetRegionAsync(string Id)
[HttpGet("regions/{id}")]
public async Task<ActionResult> 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.
/// </summary>
[HttpPost]
[HttpPost("regions")]
public async Task<ActionResult> 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.
/// </summary>
[HttpPut]
public async Task<ActionResult> PutRegionAsync(Models.Region region)
[HttpPut("regions/{id}")]
public async Task<ActionResult> 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
/// </summary>
[HttpDelete("{Id}")]
public async Task<ActionResult> DeleteRegionAsync(string Id)
[HttpDelete("regions/{id}")]
public async Task<ActionResult> DeleteRegionAsync(int id)
{
var result = await this.regionProvider.DeleteRegionAsync(Id);
var result = await this.regionProvider.DeleteRegionAsync(id);
if (result.IsSuccess)
{
return Ok(result.Region);

View File

@ -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; }
}
}

View File

@ -2,7 +2,7 @@
namespace DamageAssesment.Api.Locations.Db
{
public class LocationDbContext:DbContext
public class LocationDbContext : DbContext
{
public DbSet<Db.Location> Locations { get; set; }
public DbSet<Db.Region> Regions { get; set; }
@ -10,5 +10,17 @@ namespace DamageAssesment.Api.Locations.Db
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Location>()
.Property(item => item.Id)
.ValueGeneratedOnAdd();
modelBuilder.Entity<Region>()
.Property(item => item.Id)
.ValueGeneratedOnAdd();
}
}
}

View File

@ -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<Location> Locations { get; set; }
}
}

View File

@ -4,11 +4,11 @@ namespace DamageAssesment.Api.Locations.Interfaces
{
public interface ILocationsProvider
{
Task<(bool IsSuccess, IEnumerable<Models.Location> 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<Models.Location> 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();
}
}

View File

@ -2,11 +2,11 @@
{
public interface IRegionsProvider
{
Task<(bool IsSuccess, IEnumerable<Models.Region> regions, string ErrorMessage)> GetRegionsAsync();
Task<(bool IsSuccess, Models.Region Region, string ErrorMessage)> GetRegionByIdAsync(string Id);
Task<(bool IsSuccess, IEnumerable<Models.Region> 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();
}
}

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -5,6 +5,7 @@
public LocationProfile()
{
CreateMap<Db.Location, Models.Location>();
CreateMap<Models.Location, Db.Location>();
}
}
}

View File

@ -20,39 +20,16 @@ namespace DamageAssesment.Api.Locations.Providers
//SeedData();
}
public async Task<(bool IsSuccess, IEnumerable<Models.Location> 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<Db.Location>, IEnumerable<Models.Location>>(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<Models.Location> 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<Db.Location, Models.Location>(Location);
logger?.LogInformation($"{locations.Count} Locations(s) found");
var result = mapper.Map<IEnumerable<Db.Location>, IEnumerable<Models.Location>>(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<Models.Location, Db.Location>(Location);
logger?.LogInformation($"{location} found");
var result = mapper.Map<Db.Location, Models.Location>(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<Models.Location, Db.Location>(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<Models.Location, Db.Location>(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<Models.Location, Db.Location>(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<Db.Location, Models.Location>(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();
}

View File

@ -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<Models.Region> regions, string ErrorMessage)> GetRegionsAsync()
public async Task<(bool IsSuccess, IEnumerable<Models.Region> 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<Models.Region, Db.Region>(region));
locationDbContext.SaveChanges();
var _region = mapper.Map<Models.Region, Db.Region>(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<Models.Region, Db.Region>(region));
locationDbContext.SaveChanges();
return (true, region, "Region updated Successfuly");
if (RegionExists(region.Id))
{
locationDbContext.Regions.Update(mapper.Map<Models.Region, Db.Region>(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();
}
}

View File

@ -40,7 +40,7 @@ namespace DamageAssesment.Api.Questions.Controllers
[Route("Questions/{id}/{language:alpha}")]
[Route("Questions/{id:int}")]
[HttpGet]
public async Task<IActionResult> GetQuestionByIdAsync(string? language,int id)
public async Task<IActionResult> GetQuestionByIdAsync(int id, string? language)
{
var result = await this.questionsProvider.GetQuestionAsync(id, language);
if (result.IsSuccess)

View File

@ -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<Models.MultiLanQuestion> Questions, string ErrorMessage)> GetQuestionsAsync(string language);
Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> GetQuestionAsync(int id, string language);
Task<(bool IsSuccess, IEnumerable<Models.MultiLanguage> Questions, string ErrorMessage)> GetQuestionsAsync(string language);
Task<(bool IsSuccess, List<SurveyQuestions> 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<Models.MultiLanQuestionCategory> QuestionCategories, string ErrorMessage)> GetQuestionCategoriesAsync(string? language);

View File

@ -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<QuestionsTranslation> 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; }
}
}

View File

@ -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<string,string> Text { get; set; }
}
}

View File

@ -5,6 +5,6 @@
public int CategoryId { get; set; }
public string IconName { get; set; }
public string IconLibrary { get; set; }
public List<MultiLanQuestion> Questions { get; set; }
public List<MultiLanguage> QuestionsText { get; set; }
}
}

View File

@ -8,7 +8,7 @@ namespace DamageAssesment.Api.Questions.Profiles
{
CreateMap<Db.Question, Models.Question>().ForMember(dest => dest.TypeText,
opt => opt.MapFrom(src => src.QuestionType.TypeText));
CreateMap<Db.Question, Models.MultiLanQuestion>().ForMember(dest => dest.TypeText,
CreateMap<Db.Question, Models.MultiLanguage>().ForMember(dest => dest.TypeText,
opt => opt.MapFrom(src => src.QuestionType.TypeText));
CreateMap<Models.QuestionCategory, Db.QuestionCategory>();
CreateMap<Db.QuestionCategory, Models.MultiLanQuestionCategory>();

View File

@ -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<IQuestionsProvider, QuestionsProvider>();
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
builder.Services.AddEndpointsApiExplorer();
//builder.Services.AddSwaggerGen();
builder.Services.AddSwaggerGen(c =>

View File

@ -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<Models.QuestionsTranslation> questions)
public Dictionary<string, string> CreateMultiLanguageObject(List<Models.QuestionsTranslation> questions)
{
MultiLanguage MultiLanguage = new MultiLanguage();
Dictionary<string, string> dict = new Dictionary<string, string>();
@ -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<Models.MultiLanQuestion> Questions, string ErrorMessage)> GetQuestionsAsync(string language)
public async Task<(bool IsSuccess, IEnumerable<Models.MultiLanguage> 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<Db.Question>, IEnumerable<Models.MultiLanQuestion>>(questions);
foreach (var question in result)
var result = mapper.Map<IEnumerable<Db.Question>, IEnumerable<Models.MultiLanguage>>(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<Db.Question, Models.MultiLanQuestion>(question);
result.Questions = CreateMultiLanguageObject(GetQuestionsTranslations(id, language));
var result = mapper.Map<Db.Question, Models.MultiLanguage>(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<Models.MultiLanQuestion> GetSurveyQuestion(List<Models.MultiLanQuestion> questions, string language)
public List<Models.MultiLanguage> GetSurveyQuestion(List<Models.MultiLanguage> 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<Db.Question>, List<Models.MultiLanQuestion>>(questions.Where(a => a.CategoryId == item.Id).ToList()), language)
QuestionsText = GetSurveyQuestion(mapper.Map<List<Db.Question>, List<Models.MultiLanguage>>(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<Db.Question, Models.MultiLanQuestion>(dbquestion);
result.Questions = CreateMultiLanguageObject(GetQuestionsTranslations(result.Id,""));
var result = mapper.Map<Db.Question, Models.MultiLanguage>(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<Db.Question, Models.MultiLanQuestion>(dbquestion);
result.Questions = CreateMultiLanguageObject(GetQuestionsTranslations(result.Id, ""));
var result = mapper.Map<Db.Question, Models.MultiLanguage>(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<Db.Question, Models.MultiLanQuestion>(question);
result.Questions = CreateMultiLanguageObject(GetQuestionsTranslations(result.Id, ""));
var result = mapper.Map<Db.Question, Models.MultiLanguage>(question);
result.Text = CreateMultiLanguageObject(GetQuestionsTranslations(result.Id, ""));
questionDbContext.Questions.Remove(question);
questionDbContext.SaveChanges();
return (true, result, $"QuestionID {id} deleted Successfuly");

View File

@ -5,13 +5,13 @@ namespace DamageAssesment.Api.Questions.Test
public class MockData
{
public static async Task<(bool, IEnumerable<Questions.Models.MultiLanQuestion>, string)> getOkResponse()
public static async Task<(bool, IEnumerable<Questions.Models.MultiLanguage>, string)> getOkResponse()
{
IEnumerable<Questions.Models.MultiLanQuestion> list = new List<Questions.Models.MultiLanQuestion>();
IEnumerable<Questions.Models.MultiLanguage> list = new List<Questions.Models.MultiLanguage>();
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<Models.MultiLanQuestion> question = new List<Models.MultiLanQuestion>();
question.Add(new Models.MultiLanQuestion { Id = i, TypeText = "Text" + i, SurveyId = 1, QuestionNumber = 1, IsRequired = true, Comment = false, Key = true, CategoryId = i });
List<Models.MultiLanguage> question = new List<Models.MultiLanguage>();
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<Questions.Models.MultiLanQuestion>, string)> getNoContentResponse()
public static async Task<(bool, IEnumerable<Questions.Models.MultiLanguage>, string)> getNoContentResponse()
{
IEnumerable<Questions.Models.MultiLanQuestion> list = new List<Questions.Models.MultiLanQuestion>();
IEnumerable<Questions.Models.MultiLanguage> list = new List<Questions.Models.MultiLanguage>();
return (false, list, null);
}
public static async Task<(bool, List<Questions.Models.SurveyQuestions>, string)> getNoSurveyContentResponse()

View File

@ -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.
/// </summary>
[HttpGet("SurveyResponses")]
[HttpGet("Responses")]
public async Task<ActionResult> 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.
/// </summary>
[HttpGet("SurveyResponses/{surveyId}")]
public async Task<ActionResult> GetSurveyResponsesAsync(int surveyId)
[HttpGet("Responses/BySurvey/{surveyid}")]
public async Task<ActionResult> 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
/// <summary>
/// GET request for retrieving survey responses by survey and location IDs.
/// </summary>
/// <param name="surveyId">The ID of the survey for which responses are to be retrieved.</param>
/// <param name="locationId">The ID of the location for which responses are to be retrieved.</param>
/// <param name="surveyid">The ID of the survey for which responses are to be retrieved.</param>
/// <param name="locationid">The ID of the location for which responses are to be retrieved.</param>
[HttpGet("Responses/{surveyId}/{locationId}")]
public async Task<ActionResult> GetSurveyResponsesBySurveyAndLocationAsync(int surveyId, string locationId)
[HttpGet("Responses/{surveyid}/{locationid}")]
public async Task<ActionResult> 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
/// <param name="questionId">The ID of the question for which responses are to be retrieved.</param>
/// <param name="answer">The answer for which responses are to be retrieved.</param>
[HttpGet("ResponsesByAnswer/{surveyId}/{questionId}/{answer}")]
public async Task<ActionResult> GetSurveyResponsesByAnswerAsyncAsync(int surveyId, int questionId, string answer)
[HttpGet("Responses/ByAnswer/{surveyid}/{questionid}/{answer}")]
public async Task<ActionResult> 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
/// </summary>
/// <param name="surveyId">The ID of the survey for which answers are to be retrieved.</param>
[HttpGet("AnswersByRegion/{surveyId}")]
public async Task<ActionResult> GetAnswersByRegionAsync(int surveyId)
[HttpGet("Responses/ByRegion/{surveyid}")]
public async Task<ActionResult> 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
/// </summary>
/// <param name="surveyId">The ID of the survey for which responses are to be retrieved.</param>
[HttpGet("AnswersByMaintenanceCenter/{surveyId}")]
public async Task<ActionResult> GetAnswersByMaintenaceCentersync(int surveyId)
[HttpGet("Responses/ByMaintenanceCenter/{surveyid}")]
public async Task<ActionResult> 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
/// </summary>
/// <param name="responseId">The ID of the survey response to be retrieved.</param>
[HttpGet("SurveyResponse/{Id}")]
public async Task<ActionResult> GetSurveyResponseByIdAsync(int Id)
[HttpGet("Responses/{id}")]
public async Task<ActionResult> 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
/// </summary>
/// <param name="surveyResponse">The survey response object to be created.</param>
[HttpPost("SurveyResponses")]
[HttpPost("Responses")]
public async Task<ActionResult> PostSurveysAsync(Models.SurveyResponse surveyResponse)
{
var result = await this.surveyResponseProvider.PostSurveyResponseAsync(surveyResponse);
@ -150,10 +149,10 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers
/// <param name="Id">The ID of the survey response to be updated.</param>
/// <param name="surveyResponse">The updated survey response object.</param>
[HttpPut("SurveyResponses/{Id}")]
public async Task<ActionResult> PutSurveyResponseAsync(int Id, Models.SurveyResponse surveyResponse)
[HttpPut("Responses/{id}")]
public async Task<ActionResult> 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.
/// </summary>
[HttpDelete("SurveyResponses/{Id}")]
public async Task<ActionResult> DeleteSurveyResponseAsync(int Id)
[HttpDelete("Responses/{id}")]
public async Task<ActionResult> 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
/// </summary>
/// <param name="request">The answers to be submitted for the survey.</param>
[HttpPost("SurveyResponses/Answers")]
[HttpPost("Responses/Answers")]
public async Task<ActionResult> PostSurveyAnswersAsync(Request request)
{
var result = await this.surveyResponseProvider.PostSurveyAnswersAsync(request);

View File

@ -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;

View File

@ -5,6 +5,6 @@ namespace DamageAssesment.Api.SurveyResponses.Interfaces
public interface IEmployeeServiceProvider
{
Task<List<Employee>> getEmployeesAsync();
Task<Employee> getEmployeeAsync(string employeeID);
Task<Employee> getEmployeeAsync(int employeeId);
}
}

View File

@ -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);

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -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; }

View File

@ -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<AggregateAnswer> Answers { get; set; }
}
}

View File

@ -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; }
}
}

View File

@ -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; }

View File

@ -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<QuestionsTranslation> 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<string, string> Text { get; set; }
}
}

View File

@ -1,8 +0,0 @@
namespace DamageAssesment.Api.SurveyResponses.Models
{
public class QuestionsTranslation
{
public string QuestionText { get; set; }
public string Language { get; set; } = "En";
}
}

View File

@ -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; }
}

View File

@ -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<AnswerRequest> Answers { get; set; }
}
}

View File

@ -1,10 +0,0 @@
using System.ComponentModel.DataAnnotations;
namespace DamageAssesment.Api.SurveyResponses.Models
{
public class ResultData
{
public List<AnswerData> Regions { get; set; }
}
}

View File

@ -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<SurveyTranslation> Titles { get; set; }
public Dictionary<string, string> Titles { get; set; }
}
}

View File

@ -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; }
}
}

View File

@ -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<Models.SurveyResponse, Db.SurveyResponse>(SurveyResponse);
surveyResponseDbContext.Update(response);
await surveyResponseDbContext.SaveChangesAsync();
return (true, mapper.Map<Db.SurveyResponse, Models.SurveyResponse>(_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<AnswerData> resultList = new List<AnswerData>();
List<dynamic> resultList = new List<dynamic>();
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<dynamic> getSurveyResponsesBySurveyIdLocationIdAsync(int surveyId, string locationId)
private async Task<dynamic> 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;

View File

@ -7,14 +7,13 @@ namespace DamageAssesment.Api.SurveyResponses.Services
{
public class AnswerServiceProvider : ServiceProviderBase, IAnswerServiceProvider
{
public AnswerServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger<AnswerServiceProvider> logger) : base(configuration, httpUtil, logger, "/api/Answers", configuration.GetValue<string>("EndPointSettings:AnswerUrlBase"))
public AnswerServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger<AnswerServiceProvider> logger) : base(configuration, httpUtil, logger, configuration.GetValue<string>("RessourceSettings:Answer"), configuration.GetValue<string>("EndPointSettings:AnswerUrlBase"))
{
}
public async Task<List<Answer>> getAnswersAsync()
{
try
{
var url = urlBase + ressource;
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null);
var answers = JsonConvert.DeserializeObject<List<Answer>>(responseJsonString);
@ -33,7 +32,7 @@ namespace DamageAssesment.Api.SurveyResponses.Services
{
try
{
var url = urlBase + "/api/AnswersByResponse/" + responseId;
url = urlBase + string.Format(configuration.GetValue<string>("RessourceSettings:AnswerByResponse"), responseId);
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null);
var answers = JsonConvert.DeserializeObject<List<Answer>>(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<Answer>(responseJsonString);

View File

@ -6,7 +6,7 @@ namespace DamageAssesment.Api.SurveyResponses.Services
{
public class AttachmentServiceProvider : ServiceProviderBase, IAttachmentServiceProvider
{
public AttachmentServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger<AttachmentServiceProvider> logger) : base(configuration, httpUtil, logger, "/api/Attachments", configuration.GetValue<string>("EndPointSettings:AttachmentUrlBase"))
public AttachmentServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger<AttachmentServiceProvider> logger) : base(configuration, httpUtil, logger, configuration.GetValue<string>("RessourceSettings:Attachment"), configuration.GetValue<string>("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<List<Attachment>>(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<IEnumerable<Attachment>>(responseJsonString);

View File

@ -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<EmployeeServiceProvider> logger) : base(configuration, httpUtil, logger, "/api/Employees", configuration.GetValue<string>("EndPointSettings:EmployeeUrlBase"))
public EmployeeServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger<EmployeeServiceProvider> logger) : base(configuration, httpUtil, logger, configuration.GetValue<string>("RessourceSettings:Employee"), configuration.GetValue<string>("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<List<Employee>>(responseJsonString);
@ -29,15 +29,15 @@ namespace DamageAssesment.Api.SurveyResponses.Services
}
}
public async Task<Employee> getEmployeeAsync(string employeeId)
public async Task<Employee> getEmployeeAsync(int employeeId)
{
try
{
var url = urlBase + "/api/Employees/" + employeeId;
url = urlBase + string.Format(configuration.GetValue<string>("RessourceSettings:EmployeeById"), employeeId);
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null);
var employee = JsonConvert.DeserializeObject<Employee>(responseJsonString);
if (employee == null )
if (employee == null)
return null;
else return employee;
}

View File

@ -6,7 +6,7 @@ namespace DamageAssesment.Api.SurveyResponses.Services
{
public class LocationServiceProvider :ServiceProviderBase, ILocationServiceProvider
{
public LocationServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger<LocationServiceProvider> logger) : base(configuration, httpUtil, logger, "/api/Locations", configuration.GetValue<string>("EndPointSettings:LocationUrlBase"))
public LocationServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger<LocationServiceProvider> logger) : base(configuration, httpUtil, logger, configuration.GetValue<string>("RessourceSettings:Location"), configuration.GetValue<string>("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<List<Location>>(responseJsonString);

View File

@ -6,7 +6,7 @@ namespace DamageAssesment.Api.SurveyResponses.Services
{
public class QuestionServiceProvider : ServiceProviderBase, IQuestionServiceProvider
{
public QuestionServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger<QuestionServiceProvider> logger) : base(configuration, httpUtil, logger, "/api/Questions", configuration.GetValue<string>("EndPointSettings:QuestionUrlBase"))
public QuestionServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger<QuestionServiceProvider> logger) : base(configuration, httpUtil, logger, configuration.GetValue<string>("RessourceSettings:Question"), configuration.GetValue<string>("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<List<Question>>(responseJsonString);
@ -33,7 +32,7 @@ namespace DamageAssesment.Api.SurveyResponses.Services
{
try
{
var url = urlBase + "/api/GetSurveyQuestions/" + surveyId;
url = urlBase + string.Format(configuration.GetValue<string>("RessourceSettings:SurveyQuestion"), surveyId);
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null);
var questions = JsonConvert.DeserializeObject<List<SurveyQuestions>>(responseJsonString);
@ -53,7 +52,7 @@ namespace DamageAssesment.Api.SurveyResponses.Services
{
try
{
var url = urlBase + "/api/Questions/" + questionId;
url = urlBase + string.Format(configuration.GetValue<string>("RessourceSettings:QuestionById"), questionId);
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null);
var question = JsonConvert.DeserializeObject<Question>(responseJsonString);

View File

@ -6,14 +6,13 @@ namespace DamageAssesment.Api.SurveyResponses.Services
{
public class RegionServiceProvider : ServiceProviderBase, IRegionServiceProvider
{
public RegionServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger<RegionServiceProvider> logger) : base(configuration, httpUtil, logger, "/api/Regions", configuration.GetValue<string>("EndPointSettings:LocationUrlBase"))
public RegionServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger<RegionServiceProvider> logger) : base(configuration, httpUtil, logger, configuration.GetValue<string>("RessourceSettings:Region"), configuration.GetValue<string>("EndPointSettings:LocationUrlBase"))
{
}
public async Task<List<Region>> getRegionsAsync()
{
try
{
var url = urlBase + ressource;
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null);
var regions = JsonConvert.DeserializeObject<List<Region>>(responseJsonString);

View File

@ -9,6 +9,7 @@ namespace DamageAssesment.Api.SurveyResponses.Services
protected readonly ILogger<ServiceProviderBase> logger;
protected string ressource;
protected string urlBase;
protected string url;
public ServiceProviderBase(IConfiguration configuration, IHttpUtil httpUtil, ILogger<ServiceProviderBase> 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;
}
}
}

View File

@ -6,7 +6,7 @@ namespace DamageAssesment.Api.SurveyResponses.Services
{
public class SurveyServiceProvider :ServiceProviderBase, ISurveyServiceProvider
{
public SurveyServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger<EmployeeServiceProvider> logger) : base(configuration, httpUtil, logger, "/api/Surveys", configuration.GetValue<string>("EndPointSettings:SurveyUrlBase"))
public SurveyServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger<EmployeeServiceProvider> logger) : base(configuration, httpUtil, logger, configuration.GetValue<string>("RessourceSettings:Survey"), configuration.GetValue<string>("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<List<Survey>>(responseJsonString);
@ -34,7 +32,7 @@ namespace DamageAssesment.Api.SurveyResponses.Services
{
try
{
var url = urlBase + ressource + "/" + surveyId;
url = urlBase + string.Format(configuration.GetValue<string>("RessourceSettings:SurveyById"), surveyId);
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null);
var survey = JsonConvert.DeserializeObject<Survey>(responseJsonString);

View File

@ -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"
}
}
}

View File

@ -0,0 +1,5 @@
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=_CHANGE_ME;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}

View File

@ -0,0 +1,5 @@
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=_CHANGE_ME;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}

View File

@ -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"
}
}

View File

@ -9,7 +9,6 @@ namespace DamageAssesment.Api.Surveys.Models
public class Survey : BaseSurvey
{
public IEnumerable<SurveyTranslation> Titles { get; set; }
}
public class BaseSurvey
{

View File

@ -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<Models.Survey, Db.Survey>(survey);
surveyDbContext.Surveys.Update(_survey);
await surveyDbContext.SaveChangesAsync();
List<Db.SurveyTranslation> listSurveyTranslation = new List<Db.SurveyTranslation>();

View File

@ -24,7 +24,7 @@ namespace DamageAssesment.Api.SurveyResponses.Test
public static async Task<Models.SurveyResponse> 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 };
}
}
}

View File

@ -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);
}