forked from MDCPS/DamageAssessment_Backend
Compare commits
13 Commits
server-bra
...
User-Role-
Author | SHA1 | Date | |
---|---|---|---|
15acd00959 | |||
46520c7e62 | |||
f6387fc371 | |||
4ebd40108d | |||
77816605d1 | |||
8d386af40a | |||
0ad7bd5420 | |||
3b91282419 | |||
fedbb8a93e | |||
9109d0d793 | |||
a6eed848f8 | |||
b878cd706c | |||
4cf7d9f891 |
@ -1,11 +1,9 @@
|
|||||||
using DamageAssesment.Api.Answers.Interfaces;
|
using DamageAssesment.Api.Answers.Interfaces;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.OpenApi.Any;
|
|
||||||
|
|
||||||
namespace DamageAssesment.Api.Answers.Controllers
|
namespace DamageAssesment.Api.Answers.Controllers
|
||||||
{
|
{
|
||||||
[Route("api")]
|
|
||||||
[ApiController]
|
[ApiController]
|
||||||
public class AnswersController: ControllerBase
|
public class AnswersController: ControllerBase
|
||||||
{
|
{
|
||||||
@ -17,7 +15,7 @@ namespace DamageAssesment.Api.Answers.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get all answers
|
/// Get all answers
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpGet("Answers")]
|
[HttpGet("Answers")]
|
||||||
public async Task<ActionResult> GetAnswersAsync() {
|
public async Task<ActionResult> GetAnswersAsync() {
|
||||||
|
|
||||||
@ -33,7 +31,7 @@ namespace DamageAssesment.Api.Answers.Controllers
|
|||||||
/// Get an answer based on answerId.
|
/// Get an answer based on answerId.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpGet("Answers/{Id}")]
|
[HttpGet("Answers/{Id}")]
|
||||||
public async Task<ActionResult> GetAnswerByIdAsync(int Id)
|
public async Task<ActionResult> GetAnswerByIdAsync(int Id)
|
||||||
{
|
{
|
||||||
@ -49,10 +47,11 @@ namespace DamageAssesment.Api.Answers.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get all answers based on responseId.
|
/// Get all answers based on responseId.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[HttpGet("AnswersByResponse/{ResponseId}")]
|
[Authorize(Roles = "admin")]
|
||||||
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)
|
if(result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.Answers);
|
return Ok(result.Answers);
|
||||||
@ -62,11 +61,11 @@ namespace DamageAssesment.Api.Answers.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get all answers based on questionId.
|
/// Get all answers based on questionId.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpGet("AnswersByQuestion/{QuestionId}")]
|
[HttpGet("Answers/ByQuestion/{questionid}")]
|
||||||
public async Task<IActionResult> AnswersByQuestionId(int 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)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.Answers);
|
return Ok(result.Answers);
|
||||||
@ -76,7 +75,7 @@ namespace DamageAssesment.Api.Answers.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Update an existing answer.
|
/// Update an existing answer.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpPut("Answers")]
|
[HttpPut("Answers")]
|
||||||
public async Task<IActionResult> UpdateAnswer(Models.Answer answer)
|
public async Task<IActionResult> UpdateAnswer(Models.Answer answer)
|
||||||
{
|
{
|
||||||
@ -97,7 +96,7 @@ namespace DamageAssesment.Api.Answers.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Save a new answer.
|
/// Save a new answer.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpPost("Answers")]
|
[HttpPost("Answers")]
|
||||||
public async Task<IActionResult> CreateAnswer(Models.Answer answer)
|
public async Task<IActionResult> CreateAnswer(Models.Answer answer)
|
||||||
{
|
{
|
||||||
@ -115,7 +114,7 @@ namespace DamageAssesment.Api.Answers.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Delete an existing answer.
|
/// Delete an existing answer.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpDelete("Answers/{id}")]
|
[HttpDelete("Answers/{id}")]
|
||||||
public async Task<IActionResult> DeleteAnswer(int id)
|
public async Task<IActionResult> DeleteAnswer(int id)
|
||||||
{
|
{
|
||||||
|
@ -1,23 +1,73 @@
|
|||||||
using DamageAssesment.Api.Answers.Db;
|
using DamageAssesment.Api.Answers.Db;
|
||||||
using DamageAssesment.Api.Answers.Interfaces;
|
using DamageAssesment.Api.Answers.Interfaces;
|
||||||
using DamageAssesment.Api.Answers.Providers;
|
using DamageAssesment.Api.Answers.Providers;
|
||||||
|
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.IdentityModel.Tokens;
|
||||||
|
using Microsoft.OpenApi.Models;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
var authkey = builder.Configuration.GetValue<string>("JwtSettings:securitykey");
|
||||||
|
builder.Services.AddAuthentication(item =>
|
||||||
|
{
|
||||||
|
item.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
|
||||||
|
item.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
|
||||||
|
}).AddJwtBearer(item =>
|
||||||
|
{
|
||||||
|
item.RequireHttpsMetadata = true;
|
||||||
|
item.SaveToken = true;
|
||||||
|
item.TokenValidationParameters = new TokenValidationParameters()
|
||||||
|
{
|
||||||
|
ValidateIssuerSigningKey = true,
|
||||||
|
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(authkey)),
|
||||||
|
ValidateIssuer = false,
|
||||||
|
ValidateAudience = false,
|
||||||
|
ClockSkew = TimeSpan.Zero
|
||||||
|
};
|
||||||
|
});
|
||||||
// Add services to the container.
|
// Add services to the container.
|
||||||
|
|
||||||
builder.Services.AddControllers();
|
builder.Services.AddControllers();
|
||||||
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
||||||
builder.Services.AddEndpointsApiExplorer();
|
builder.Services.AddEndpointsApiExplorer();
|
||||||
//builder.Services.AddSwaggerGen();
|
//builder.Services.AddSwaggerGen();
|
||||||
builder.Services.AddSwaggerGen(c =>
|
builder.Services.AddSwaggerGen(options =>
|
||||||
{
|
{
|
||||||
// Include XML comments from your assembly
|
// Include XML comments from your assembly
|
||||||
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
|
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
|
||||||
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
|
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
|
||||||
c.IncludeXmlComments(xmlPath);
|
options.IncludeXmlComments(xmlPath);
|
||||||
|
|
||||||
|
OpenApiSecurityScheme securityDefinition = new OpenApiSecurityScheme()
|
||||||
|
{
|
||||||
|
Name = "Bearer",
|
||||||
|
BearerFormat = "JWT",
|
||||||
|
Scheme = "bearer",
|
||||||
|
Description = "Specify the authorization token.",
|
||||||
|
In = ParameterLocation.Header,
|
||||||
|
Type = SecuritySchemeType.Http,
|
||||||
|
};
|
||||||
|
|
||||||
|
options.AddSecurityDefinition("jwt_auth", securityDefinition);
|
||||||
|
|
||||||
|
// Make sure swagger UI requires a Bearer token specified
|
||||||
|
OpenApiSecurityScheme securityScheme = new OpenApiSecurityScheme()
|
||||||
|
{
|
||||||
|
Reference = new OpenApiReference()
|
||||||
|
{
|
||||||
|
Id = "jwt_auth",
|
||||||
|
Type = ReferenceType.SecurityScheme
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
OpenApiSecurityRequirement securityRequirements = new OpenApiSecurityRequirement()
|
||||||
|
{
|
||||||
|
{securityScheme, new string[] { }},
|
||||||
|
};
|
||||||
|
|
||||||
|
options.AddSecurityRequirement(securityRequirements);
|
||||||
});
|
});
|
||||||
builder.Services.AddScoped<IAnswersProvider, AnswersProvider>();
|
builder.Services.AddScoped<IAnswersProvider, AnswersProvider>();
|
||||||
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); //4/30
|
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); //4/30
|
||||||
@ -35,7 +85,7 @@ if (app.Environment.IsDevelopment())
|
|||||||
app.UseSwagger();
|
app.UseSwagger();
|
||||||
app.UseSwaggerUI();
|
app.UseSwaggerUI();
|
||||||
}
|
}
|
||||||
|
app.UseAuthentication();
|
||||||
app.UseAuthorization();
|
app.UseAuthorization();
|
||||||
|
|
||||||
app.MapControllers();
|
app.MapControllers();
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
using Azure;
|
using Azure;
|
||||||
using DamageAssesment.Api.Attachments.Interfaces;
|
using DamageAssesment.Api.Attachments.Interfaces;
|
||||||
using DamageAssesment.Api.Attachments.Models;
|
using DamageAssesment.Api.Attachments.Models;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using System.Net.Http.Headers;
|
using System.Net.Http.Headers;
|
||||||
|
|
||||||
namespace DamageAssesment.Api.Attachments.Controllers
|
namespace DamageAssesment.Api.Attachments.Controllers
|
||||||
{
|
{
|
||||||
[Route("api")]
|
|
||||||
[ApiController]
|
[ApiController]
|
||||||
public class AttachmentsController : ControllerBase
|
public class AttachmentsController : ControllerBase
|
||||||
{
|
{
|
||||||
@ -22,7 +22,7 @@ namespace DamageAssesment.Api.Attachments.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get all attachments.
|
/// Get all attachments.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpGet("Attachments")]
|
[HttpGet("Attachments")]
|
||||||
public async Task<ActionResult> GetAttachmentsAsync()
|
public async Task<ActionResult> GetAttachmentsAsync()
|
||||||
{
|
{
|
||||||
@ -38,6 +38,7 @@ namespace DamageAssesment.Api.Attachments.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get all attachments by attachmentId.
|
/// Get all attachments by attachmentId.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpGet("Attachments/{id}")]
|
[HttpGet("Attachments/{id}")]
|
||||||
public async Task<ActionResult> GetAttachmentbyIdAsync(int id)
|
public async Task<ActionResult> GetAttachmentbyIdAsync(int id)
|
||||||
{
|
{
|
||||||
@ -81,7 +82,7 @@ namespace DamageAssesment.Api.Attachments.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Save new Attachment(s)
|
/// Save new Attachment(s)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpPost("Attachments"), DisableRequestSizeLimit]
|
[HttpPost("Attachments"), DisableRequestSizeLimit]
|
||||||
public async Task<IActionResult> UploadAttachmentAsync(AttachmentInfo attachmentInfo)
|
public async Task<IActionResult> UploadAttachmentAsync(AttachmentInfo attachmentInfo)
|
||||||
{
|
{
|
||||||
@ -108,7 +109,7 @@ namespace DamageAssesment.Api.Attachments.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Modify an new attachment.
|
/// Modify an new attachment.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpPut("Attachments"), DisableRequestSizeLimit]
|
[HttpPut("Attachments"), DisableRequestSizeLimit]
|
||||||
public async Task<IActionResult> UpdateAttachmentAsync(AttachmentInfo attachmentInfo)
|
public async Task<IActionResult> UpdateAttachmentAsync(AttachmentInfo attachmentInfo)
|
||||||
{
|
{
|
||||||
@ -139,11 +140,12 @@ namespace DamageAssesment.Api.Attachments.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Delete an existing attachment.
|
/// Delete an existing attachment.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[HttpDelete("Delete")]
|
[Authorize(Roles = "admin")]
|
||||||
public async Task<IActionResult> DeleteAttachment(int Id)
|
[HttpDelete("Attachments/{id}")]
|
||||||
|
public async Task<IActionResult> DeleteAttachment(int id)
|
||||||
{
|
{
|
||||||
// database soft delete
|
// database soft delete
|
||||||
var result = await this.AttachmentProvider.DeleteAttachmentAsync(Id);
|
var result = await this.AttachmentProvider.DeleteAttachmentAsync(id);
|
||||||
if (result.IsSuccess)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
// deleting file from folder
|
// deleting file from folder
|
||||||
|
@ -1,25 +1,75 @@
|
|||||||
using DamageAssesment.Api.Attachments.Db;
|
using DamageAssesment.Api.Attachments.Db;
|
||||||
using DamageAssesment.Api.Attachments.Interfaces;
|
using DamageAssesment.Api.Attachments.Interfaces;
|
||||||
using DamageAssesment.Api.Attachments.Providers;
|
using DamageAssesment.Api.Attachments.Providers;
|
||||||
|
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
||||||
using Microsoft.AspNetCore.Http.Features;
|
using Microsoft.AspNetCore.Http.Features;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.Extensions.FileProviders;
|
using Microsoft.Extensions.FileProviders;
|
||||||
|
using Microsoft.IdentityModel.Tokens;
|
||||||
|
using Microsoft.OpenApi.Models;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
var authkey = builder.Configuration.GetValue<string>("JwtSettings:securitykey");
|
||||||
|
builder.Services.AddAuthentication(item =>
|
||||||
|
{
|
||||||
|
item.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
|
||||||
|
item.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
|
||||||
|
}).AddJwtBearer(item =>
|
||||||
|
{
|
||||||
|
item.RequireHttpsMetadata = true;
|
||||||
|
item.SaveToken = true;
|
||||||
|
item.TokenValidationParameters = new TokenValidationParameters()
|
||||||
|
{
|
||||||
|
ValidateIssuerSigningKey = true,
|
||||||
|
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(authkey)),
|
||||||
|
ValidateIssuer = false,
|
||||||
|
ValidateAudience = false,
|
||||||
|
ClockSkew = TimeSpan.Zero
|
||||||
|
};
|
||||||
|
});
|
||||||
// Add services to the container.
|
// Add services to the container.
|
||||||
|
|
||||||
builder.Services.AddControllers();
|
builder.Services.AddControllers();
|
||||||
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
||||||
builder.Services.AddEndpointsApiExplorer();
|
builder.Services.AddEndpointsApiExplorer();
|
||||||
//builder.Services.AddSwaggerGen();
|
//builder.Services.AddSwaggerGen();
|
||||||
builder.Services.AddSwaggerGen(c =>
|
builder.Services.AddSwaggerGen(options =>
|
||||||
{
|
{
|
||||||
// Include XML comments from your assembly
|
// Include XML comments from your assembly
|
||||||
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
|
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
|
||||||
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
|
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
|
||||||
c.IncludeXmlComments(xmlPath);
|
options.IncludeXmlComments(xmlPath);
|
||||||
|
|
||||||
|
OpenApiSecurityScheme securityDefinition = new OpenApiSecurityScheme()
|
||||||
|
{
|
||||||
|
Name = "Bearer",
|
||||||
|
BearerFormat = "JWT",
|
||||||
|
Scheme = "bearer",
|
||||||
|
Description = "Specify the authorization token.",
|
||||||
|
In = ParameterLocation.Header,
|
||||||
|
Type = SecuritySchemeType.Http,
|
||||||
|
};
|
||||||
|
|
||||||
|
options.AddSecurityDefinition("jwt_auth", securityDefinition);
|
||||||
|
|
||||||
|
// Make sure swagger UI requires a Bearer token specified
|
||||||
|
OpenApiSecurityScheme securityScheme = new OpenApiSecurityScheme()
|
||||||
|
{
|
||||||
|
Reference = new OpenApiReference()
|
||||||
|
{
|
||||||
|
Id = "jwt_auth",
|
||||||
|
Type = ReferenceType.SecurityScheme
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
OpenApiSecurityRequirement securityRequirements = new OpenApiSecurityRequirement()
|
||||||
|
{
|
||||||
|
{securityScheme, new string[] { }},
|
||||||
|
};
|
||||||
|
|
||||||
|
options.AddSecurityRequirement(securityRequirements);
|
||||||
});
|
});
|
||||||
builder.Services.AddScoped<IAttachmentsProvider, AttachmentsProvider>();
|
builder.Services.AddScoped<IAttachmentsProvider, AttachmentsProvider>();
|
||||||
builder.Services.AddScoped<IUploadService, UploadService>();
|
builder.Services.AddScoped<IUploadService, UploadService>();
|
||||||
@ -45,6 +95,7 @@ if (app.Environment.IsDevelopment())
|
|||||||
app.UseSwaggerUI();
|
app.UseSwaggerUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
app.UseAuthentication();
|
||||||
app.UseAuthorization();
|
app.UseAuthorization();
|
||||||
app.UseHttpsRedirection();
|
app.UseHttpsRedirection();
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\DamageAssesment.Api.Documents\DamageAssesment.Api.Documents.csproj" />
|
<ProjectReference Include="..\DamageAssesment.Api.Documents\DamageAssesment.Api.DocuLinks.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
@ -17,10 +17,10 @@ namespace DamageAssesment.Api.Documents.Test
|
|||||||
var mockDocumentService = new Mock<IDocumentsProvider>();
|
var mockDocumentService = new Mock<IDocumentsProvider>();
|
||||||
var mockUploadService = new Mock<IUploadService>();
|
var mockUploadService = new Mock<IUploadService>();
|
||||||
var mockResponse = await MockData.getNoContentResponse();
|
var mockResponse = await MockData.getNoContentResponse();
|
||||||
mockDocumentService.Setup(service => service.GetDocumnetsAsync()).ReturnsAsync(mockResponse);
|
mockDocumentService.Setup(service => service.GetdocumentsByLinkAsync("forms","en")).ReturnsAsync(mockResponse);
|
||||||
|
|
||||||
var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object);
|
var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object);
|
||||||
var result = (NoContentResult)await DocumentProvider.GetDocumentsbyFormsandLanguageAsync("", "");
|
var result = (NoContentResult)await DocumentProvider.GetDocumentsAsync("", "");
|
||||||
|
|
||||||
Assert.Equal(204, result.StatusCode);
|
Assert.Equal(204, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -31,10 +31,10 @@ namespace DamageAssesment.Api.Documents.Test
|
|||||||
var mockDocumentService = new Mock<IDocumentsProvider>();
|
var mockDocumentService = new Mock<IDocumentsProvider>();
|
||||||
var mockUploadService = new Mock<IUploadService>();
|
var mockUploadService = new Mock<IUploadService>();
|
||||||
var mockResponse = await MockData.getNoContentResponse();
|
var mockResponse = await MockData.getNoContentResponse();
|
||||||
mockDocumentService.Setup(service => service.GetDocumnetsAsync()).ReturnsAsync(mockResponse);
|
mockDocumentService.Setup(service => service.GetdocumentsByLinkAsync("forms","en")).ReturnsAsync(mockResponse);
|
||||||
|
|
||||||
var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object);
|
var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object);
|
||||||
var result = (NoContentResult)await DocumentProvider.GetDocumentsbyFormsandLanguageAsync("", "");
|
var result = (NoContentResult)await DocumentProvider.GetDocumentsAsync("", "");
|
||||||
|
|
||||||
Assert.Equal(204, result.StatusCode);
|
Assert.Equal(204, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -44,10 +44,10 @@ namespace DamageAssesment.Api.Documents.Test
|
|||||||
var mockDocumentService = new Mock<IDocumentsProvider>();
|
var mockDocumentService = new Mock<IDocumentsProvider>();
|
||||||
var mockUploadService = new Mock<IUploadService>();
|
var mockUploadService = new Mock<IUploadService>();
|
||||||
var mockResponse = await MockData.getOkResponse();
|
var mockResponse = await MockData.getOkResponse();
|
||||||
mockDocumentService.Setup(service => service.GetDocumnetsAsync()).ReturnsAsync(mockResponse);
|
mockDocumentService.Setup(service => service.GetdocumentsByLinkAsync("forms","en")).ReturnsAsync(mockResponse);
|
||||||
|
|
||||||
var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object);
|
var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object);
|
||||||
var result = (OkObjectResult)await DocumentProvider.GetDocumentsAsync();
|
var result = (OkObjectResult)await DocumentProvider.GetDocumentsAsync("forms","en");
|
||||||
|
|
||||||
Assert.Equal(200, result.StatusCode);
|
Assert.Equal(200, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -58,10 +58,10 @@ namespace DamageAssesment.Api.Documents.Test
|
|||||||
var mockDocumentService = new Mock<IDocumentsProvider>();
|
var mockDocumentService = new Mock<IDocumentsProvider>();
|
||||||
var mockUploadService = new Mock<IUploadService>();
|
var mockUploadService = new Mock<IUploadService>();
|
||||||
var mockResponse = await MockData.getNoContentResponse();
|
var mockResponse = await MockData.getNoContentResponse();
|
||||||
mockDocumentService.Setup(service => service.GetDocumnetsAsync()).ReturnsAsync(mockResponse);
|
mockDocumentService.Setup(service => service.GetdocumentsByLinkAsync("forms", "en")).ReturnsAsync(mockResponse);
|
||||||
|
|
||||||
var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object);
|
var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object);
|
||||||
var result = (NoContentResult)await DocumentProvider.GetDocumentsAsync();
|
var result = (NoContentResult)await DocumentProvider.GetDocumentsAsync("forms","en");
|
||||||
|
|
||||||
Assert.Equal(204, result.StatusCode);
|
Assert.Equal(204, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -72,10 +72,10 @@ namespace DamageAssesment.Api.Documents.Test
|
|||||||
var mockDocumentService = new Mock<IDocumentsProvider>();
|
var mockDocumentService = new Mock<IDocumentsProvider>();
|
||||||
var mockUploadService = new Mock<IUploadService>();
|
var mockUploadService = new Mock<IUploadService>();
|
||||||
var mockResponse = await MockData.getOkResponse(1);
|
var mockResponse = await MockData.getOkResponse(1);
|
||||||
mockDocumentService.Setup(service => service.GetDocumentAsync(1)).ReturnsAsync(mockResponse);
|
mockDocumentService.Setup(service => service.GetDocumentAsync(1,"forms","en")).ReturnsAsync(mockResponse);
|
||||||
|
|
||||||
var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object);
|
var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object);
|
||||||
var result = (OkObjectResult)await DocumentProvider.GetDocumentAsync(1);
|
var result = (OkObjectResult)await DocumentProvider.GetDocumentAsync(1, "forms", "en");
|
||||||
|
|
||||||
Assert.Equal(200, result.StatusCode);
|
Assert.Equal(200, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -86,9 +86,9 @@ namespace DamageAssesment.Api.Documents.Test
|
|||||||
var mockDocumentService = new Mock<IDocumentsProvider>();
|
var mockDocumentService = new Mock<IDocumentsProvider>();
|
||||||
var mockUploadService = new Mock<IUploadService>();
|
var mockUploadService = new Mock<IUploadService>();
|
||||||
var mockResponse = await MockData.getNotFoundResponse();
|
var mockResponse = await MockData.getNotFoundResponse();
|
||||||
mockDocumentService.Setup(service => service.GetDocumentAsync(99)).ReturnsAsync(mockResponse);
|
mockDocumentService.Setup(service => service.GetDocumentAsync(99, "forms", "en")).ReturnsAsync(mockResponse);
|
||||||
var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object);
|
var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object);
|
||||||
var result = (NotFoundResult)await DocumentProvider.GetDocumentAsync(99);
|
var result = (NotFoundResult)await DocumentProvider.GetDocumentAsync(99, "forms", "en");
|
||||||
Assert.Equal(404, result.StatusCode);
|
Assert.Equal(404, result.StatusCode);
|
||||||
}
|
}
|
||||||
[Fact(DisplayName = "Post Document - Ok case")]
|
[Fact(DisplayName = "Post Document - Ok case")]
|
||||||
@ -129,11 +129,11 @@ namespace DamageAssesment.Api.Documents.Test
|
|||||||
var mockResponse = await MockData.getOkResponse(1);
|
var mockResponse = await MockData.getOkResponse(1);
|
||||||
var mockInputDocument = await MockData.getInputDocumentData();
|
var mockInputDocument = await MockData.getInputDocumentData();
|
||||||
var DocumentResponse = await MockData.GetDocumentsInfo(1);
|
var DocumentResponse = await MockData.GetDocumentsInfo(1);
|
||||||
mockDocumentService.Setup(service => service.UpdateDocumentAsync(mockInputDocument)).ReturnsAsync(mockResponse);
|
mockDocumentService.Setup(service => service.UpdateDocumentAsync(1,mockInputDocument)).ReturnsAsync(mockResponse);
|
||||||
var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object);
|
var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object);
|
||||||
var result = (NoContentResult)await DocumentProvider.UpdateDocument(DocumentResponse);
|
var result = (NotFoundResult)await DocumentProvider.UpdateDocument(1,DocumentResponse);
|
||||||
|
|
||||||
Assert.Equal(204, result.StatusCode);
|
Assert.Equal(404, result.StatusCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact(DisplayName = "Put Document - BadRequest case")]
|
[Fact(DisplayName = "Put Document - BadRequest case")]
|
||||||
@ -143,9 +143,9 @@ namespace DamageAssesment.Api.Documents.Test
|
|||||||
var mockUploadService = new Mock<IUploadService>();
|
var mockUploadService = new Mock<IUploadService>();
|
||||||
var mockResponse = await MockData.getBadRequestResponse();
|
var mockResponse = await MockData.getBadRequestResponse();
|
||||||
var mockInputDocument = await MockData.getInputDocumentData();
|
var mockInputDocument = await MockData.getInputDocumentData();
|
||||||
mockDocumentService.Setup(service => service.UpdateDocumentAsync(mockInputDocument)).ReturnsAsync(mockResponse);
|
mockDocumentService.Setup(service => service.UpdateDocumentAsync(99,mockInputDocument)).ReturnsAsync(mockResponse);
|
||||||
var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object);
|
var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object);
|
||||||
var result = (BadRequestObjectResult)await DocumentProvider.UpdateDocument(null);
|
var result = (BadRequestObjectResult)await DocumentProvider.UpdateDocument(99,null);
|
||||||
Assert.Equal(400, result.StatusCode);
|
Assert.Equal(400, result.StatusCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,12 +11,16 @@ namespace DamageAssesment.Api.Documents.Test
|
|||||||
public class MockData
|
public class MockData
|
||||||
{
|
{
|
||||||
|
|
||||||
public static async Task<(bool, List<Documents.Models.Document>, string)> getOkResponse()
|
public static async Task<(bool, List<Documents.Models.MultiLanDocument>, string)> getOkResponse()
|
||||||
{
|
{
|
||||||
List<Documents.Models.Document> list = new List<Documents.Models.Document>();
|
List<Documents.Models.MultiLanDocument> list = new List<Documents.Models.MultiLanDocument>();
|
||||||
|
|
||||||
for (int i = 1; i < 4; i++)
|
for (int i = 1; i < 4; i++)
|
||||||
{
|
{
|
||||||
|
Dictionary<string, string> dicttitle = new Dictionary<string, string>();
|
||||||
|
Dictionary<string, string> dictdesc = new Dictionary<string, string>();
|
||||||
|
dicttitle.Add("en", "test"); dicttitle.Add("fr", "tester");
|
||||||
|
dictdesc.Add("en", "test"); dictdesc.Add("fr", "tester");
|
||||||
List<Documents.Models.DocumentsTranslation> documentsTranslations = new List<DocumentsTranslation>();
|
List<Documents.Models.DocumentsTranslation> documentsTranslations = new List<DocumentsTranslation>();
|
||||||
documentsTranslations.Add(new DocumentsTranslation()
|
documentsTranslations.Add(new DocumentsTranslation()
|
||||||
{
|
{
|
||||||
@ -24,7 +28,7 @@ namespace DamageAssesment.Api.Documents.Test
|
|||||||
title = "tel"+i,
|
title = "tel"+i,
|
||||||
description = "Sample"+i
|
description = "Sample"+i
|
||||||
});
|
});
|
||||||
list.Add(new Documents.Models.Document()
|
list.Add(new Documents.Models.MultiLanDocument()
|
||||||
{
|
{
|
||||||
|
|
||||||
Id = i,
|
Id = i,
|
||||||
@ -33,32 +37,33 @@ namespace DamageAssesment.Api.Documents.Test
|
|||||||
url = "testurl" + i,
|
url = "testurl" + i,
|
||||||
Path = "testpath" + i,
|
Path = "testpath" + i,
|
||||||
IsActive = true,
|
IsActive = true,
|
||||||
documentsTranslations= documentsTranslations,
|
titles= dicttitle,
|
||||||
|
description=dictdesc,
|
||||||
dateCreated = DateTime.Now,
|
dateCreated = DateTime.Now,
|
||||||
dateUpdated = DateTime.Now
|
dateUpdated = DateTime.Now
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return (true, list, null);
|
return (true, list, null);
|
||||||
}
|
}
|
||||||
public static async Task<(bool, Documents.Models.Document, string)> getOkResponse(int Id)
|
public static async Task<(bool, Documents.Models.MultiLanDocument, string)> getOkResponse(int Id)
|
||||||
{
|
{
|
||||||
var Documents = await getOkResponse();
|
var Documents = await getOkResponse();
|
||||||
var Document = Documents.Item2.FirstOrDefault(s => s.Id == Id);
|
var Document = Documents.Item2.FirstOrDefault(s => s.Id == Id);
|
||||||
return (true, Document, null);
|
return (true, Document, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<(bool, Documents.Models.Document, string)> getBadRequestResponse()
|
public static async Task<(bool, Documents.Models.MultiLanDocument, string)> getBadRequestResponse()
|
||||||
{
|
{
|
||||||
return (false, null, "Bad Request");
|
return (false, null, "Bad Request");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<(bool, Documents.Models.Document, string)> getNotFoundResponse()
|
public static async Task<(bool, Documents.Models.MultiLanDocument, string)> getNotFoundResponse()
|
||||||
{
|
{
|
||||||
return (false, null, "Not Found");
|
return (false, null, "Not Found");
|
||||||
}
|
}
|
||||||
public static async Task<(bool, IEnumerable<Documents.Models.Document>, string)> getNoContentResponse()
|
public static async Task<(bool, IEnumerable<Documents.Models.MultiLanDocument>, string)> getNoContentResponse()
|
||||||
{
|
{
|
||||||
IEnumerable<Documents.Models.Document> list = new List<Documents.Models.Document>();
|
IEnumerable<Documents.Models.MultiLanDocument> list = new List<Documents.Models.MultiLanDocument>();
|
||||||
return (false, list, null);
|
return (false, list, null);
|
||||||
}
|
}
|
||||||
public static async Task<Documents.Models.DocumentInfo> GetDocumentsInfo(int id)
|
public static async Task<Documents.Models.DocumentInfo> GetDocumentsInfo(int id)
|
||||||
|
@ -2,12 +2,12 @@
|
|||||||
using DamageAssesment.Api.Documents.Interfaces;
|
using DamageAssesment.Api.Documents.Interfaces;
|
||||||
using DamageAssesment.Api.Documents.Models;
|
using DamageAssesment.Api.Documents.Models;
|
||||||
using DamageAssesment.Api.Documents.Providers;
|
using DamageAssesment.Api.Documents.Providers;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
namespace DamageAssesment.Api.Documents.Controllers
|
namespace DamageAssesment.Api.Documents.Controllers
|
||||||
{
|
{
|
||||||
[Route("api")]
|
|
||||||
[ApiController]
|
[ApiController]
|
||||||
public class DocumentsController : ControllerBase
|
public class DocumentsController : ControllerBase
|
||||||
{
|
{
|
||||||
@ -21,54 +21,138 @@ namespace DamageAssesment.Api.Documents.Controllers
|
|||||||
this.uploadService = uploadService;
|
this.uploadService = uploadService;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Get all document link type.
|
||||||
|
/// </summary>
|
||||||
|
[HttpGet]
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
|
[Route("doculinks/types")]
|
||||||
|
public async Task<IActionResult> GetLinkTypesAsync()
|
||||||
|
{
|
||||||
|
var result = await this.documentsProvider.GetLinkTypesAsync();
|
||||||
|
if (result.IsSuccess)
|
||||||
|
{
|
||||||
|
return Ok(result.LinkTypes);
|
||||||
|
}
|
||||||
|
return NoContent();
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Get a document link type by id.
|
||||||
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
|
[HttpGet]
|
||||||
|
[Route("doculinks/types/{id}")]
|
||||||
|
public async Task<IActionResult> GetLinkTypeAsync(int id)
|
||||||
|
{
|
||||||
|
var result = await this.documentsProvider.GetLinkTypeAsync(id);
|
||||||
|
if (result.IsSuccess)
|
||||||
|
{
|
||||||
|
return Ok(result.LinkType);
|
||||||
|
}
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Update a existing document link type.
|
||||||
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
|
[HttpPut]
|
||||||
|
[Route("doculinks/types")]
|
||||||
|
public async Task<IActionResult> UpdateLinkType(Models.LinkType linkType)
|
||||||
|
{
|
||||||
|
if (linkType != null)
|
||||||
|
{
|
||||||
|
var result = await this.documentsProvider.UpdateLinkTypeAsync(linkType);
|
||||||
|
if (result.IsSuccess)
|
||||||
|
{
|
||||||
|
return Ok(result.LinkType);
|
||||||
|
}
|
||||||
|
if (result.ErrorMessage == "Not Found")
|
||||||
|
return NotFound(result.ErrorMessage);
|
||||||
|
|
||||||
|
return BadRequest(result.ErrorMessage);
|
||||||
|
}
|
||||||
|
return CreatedAtRoute("DefaultApi", new { id = linkType.Id }, linkType);
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Create a new document link type.
|
||||||
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
|
[HttpPost]
|
||||||
|
[Route("doculinks/types")]
|
||||||
|
public async Task<IActionResult> CreateLinkType(Models.LinkType linkType)
|
||||||
|
{
|
||||||
|
if (linkType != null)
|
||||||
|
{
|
||||||
|
var result = await this.documentsProvider.PostLinkTypeAsync(linkType);
|
||||||
|
if (result.IsSuccess)
|
||||||
|
{
|
||||||
|
return Ok(result.LinkType);
|
||||||
|
}
|
||||||
|
return BadRequest(result.ErrorMessage);
|
||||||
|
}
|
||||||
|
return CreatedAtRoute("DefaultApi", new { id = linkType.Id }, linkType);
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Delete a existing document link type by id.
|
||||||
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
|
[HttpDelete]
|
||||||
|
[Route("doculinks/types/{id}")]
|
||||||
|
public async Task<IActionResult> DeleteLinkType(int id)
|
||||||
|
{
|
||||||
|
var result = await this.documentsProvider.DeleteLinkTypeAsync(id);
|
||||||
|
if (result.IsSuccess)
|
||||||
|
{
|
||||||
|
return Ok(result.LinkType);
|
||||||
|
}
|
||||||
|
return NotFound();
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Get all documents.
|
||||||
|
/// </summary>
|
||||||
|
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
|
[Route("doculinks")]
|
||||||
|
[Route("doculinks/{linktype:alpha}")]
|
||||||
|
[Route("doculinks/{linktype:alpha}/{language:alpha}")]
|
||||||
|
[HttpGet]
|
||||||
|
public async Task<IActionResult> GetDocumentsAsync(string? linktype, string? language)
|
||||||
|
{
|
||||||
|
var result = await this.documentsProvider.GetdocumentsByLinkAsync(linktype, language);
|
||||||
|
if (result.IsSuccess)
|
||||||
|
{
|
||||||
|
return Ok(result.documents);
|
||||||
|
}
|
||||||
|
return NoContent();
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Get all documents.
|
||||||
|
/// </summary>
|
||||||
|
///
|
||||||
|
//[Route("doculinks/{language:alpha}")]
|
||||||
|
//[Route("doculinks")]
|
||||||
|
//[HttpGet]
|
||||||
|
//public async Task<IActionResult> GetDocumentsAsync(string? language)
|
||||||
|
//{
|
||||||
|
// var result = await this.documentsProvider.GetdocumentsAsync(language);
|
||||||
|
// if (result.IsSuccess)
|
||||||
|
// {
|
||||||
|
// return Ok(result.documents);
|
||||||
|
// }
|
||||||
|
// return NoContent();
|
||||||
|
//}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get all documnets.
|
/// Get a document by id.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[HttpGet("{language}/{LinkType}/documents")]
|
[Authorize(Roles = "admin")]
|
||||||
public async Task<IActionResult> GetDocumentsbyFormsandLanguageAsync(string language,string LinkType)
|
[HttpGet]
|
||||||
|
[Route("doculinks/{id}")]
|
||||||
|
[Route("doculinks/{id}/{linktype:alpha}")]
|
||||||
|
[Route("doculinks/{id}/{linktype:alpha}/{language:alpha}")]
|
||||||
|
public async Task<IActionResult> GetDocumentAsync(int id,string? linktype, string? language)
|
||||||
{
|
{
|
||||||
var result = await this.documentsProvider.GetDocumnetsByLinkAsync(language, LinkType);
|
var result = await this.documentsProvider.GetDocumentAsync(id, linktype, language);
|
||||||
if (result.IsSuccess)
|
|
||||||
{
|
|
||||||
return Ok(result.documents);
|
|
||||||
}
|
|
||||||
return NoContent();
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// Get all documnets.
|
|
||||||
/// </summary>
|
|
||||||
[HttpGet("{LinkType}/documents")]
|
|
||||||
public async Task<IActionResult> GetDocumentsbyFormAsync(string LinkType)
|
|
||||||
{
|
|
||||||
var result = await this.documentsProvider.GetDocumnetsByLinkAsync(null, LinkType);
|
|
||||||
if (result.IsSuccess)
|
|
||||||
{
|
|
||||||
return Ok(result.documents);
|
|
||||||
}
|
|
||||||
return NoContent();
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// Get all documnets.
|
|
||||||
/// </summary>
|
|
||||||
[HttpGet("documents")]
|
|
||||||
public async Task<IActionResult> GetDocumentsAsync()
|
|
||||||
{
|
|
||||||
var result = await this.documentsProvider.GetDocumnetsAsync();
|
|
||||||
if (result.IsSuccess)
|
|
||||||
{
|
|
||||||
return Ok(result.documents);
|
|
||||||
}
|
|
||||||
return NoContent();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Get a documnet by id.
|
|
||||||
/// </summary>
|
|
||||||
[HttpGet("documents/{id}")]
|
|
||||||
public async Task<IActionResult> GetDocumentAsync(int id)
|
|
||||||
{
|
|
||||||
var result = await this.documentsProvider.GetDocumentAsync(id);
|
|
||||||
if (result.IsSuccess)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.Document);
|
return Ok(result.Document);
|
||||||
@ -78,30 +162,34 @@ namespace DamageAssesment.Api.Documents.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Upload new document.
|
/// Upload new document.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[HttpPut("documents")]
|
[Authorize(Roles = "admin")]
|
||||||
public async Task<IActionResult> UpdateDocument(DocumentInfo documentInfo)
|
[HttpPut]
|
||||||
|
[Route("doculinks/{id}")]
|
||||||
|
public async Task<IActionResult> UpdateDocument(int id,DocumentInfo documentInfo)
|
||||||
{
|
{
|
||||||
if (documentInfo != null)
|
if (documentInfo != null)
|
||||||
{
|
{
|
||||||
var dbdoc = await this.documentsProvider.GetDocumentAsync(documentInfo.Id);
|
var dbdoc = await this.documentsProvider.GetDocumentByidAsync(id);
|
||||||
if (dbdoc.IsSuccess)
|
if (dbdoc.IsSuccess)
|
||||||
{
|
{
|
||||||
Models.Document document = uploadService.UpdateDocuments(dbdoc.Document, documentInfo);
|
Models.Document document = uploadService.UpdateDocuments(dbdoc.Document, documentInfo);
|
||||||
var result = await this.documentsProvider.UpdateDocumentAsync(document);
|
var result = await this.documentsProvider.UpdateDocumentAsync(id,document);
|
||||||
if (result.IsSuccess)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.Document);
|
return Ok(result.Document);
|
||||||
}
|
}
|
||||||
return NoContent();
|
return NoContent();
|
||||||
}
|
}
|
||||||
return NoContent();
|
return NotFound();
|
||||||
}
|
}
|
||||||
return BadRequest(documentInfo);
|
return BadRequest(documentInfo);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// update existing document.
|
/// update existing document.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[HttpPost("documents")]
|
[Authorize(Roles = "admin")]
|
||||||
|
[HttpPost]
|
||||||
|
[Route("doculinks")]
|
||||||
public async Task<IActionResult> CreateDocument(DocumentInfo documentInfo)
|
public async Task<IActionResult> CreateDocument(DocumentInfo documentInfo)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -125,9 +213,11 @@ namespace DamageAssesment.Api.Documents.Controllers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Delete documnet by id.
|
/// Delete document by id.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[HttpDelete("documents/{id}")]
|
[Authorize(Roles = "admin")]
|
||||||
|
[HttpDelete]
|
||||||
|
[Route("doculinks/{id}")]
|
||||||
public async Task<IActionResult> DeleteDocument(int id)
|
public async Task<IActionResult> DeleteDocument(int id)
|
||||||
{
|
{
|
||||||
// database soft delete
|
// database soft delete
|
||||||
@ -140,83 +230,6 @@ namespace DamageAssesment.Api.Documents.Controllers
|
|||||||
}
|
}
|
||||||
return NotFound();
|
return NotFound();
|
||||||
}
|
}
|
||||||
/// <summary>
|
|
||||||
/// Get all document link type.
|
|
||||||
/// </summary>
|
|
||||||
[HttpGet("LinkTypes")]
|
|
||||||
public async Task<IActionResult> GetLinkTypesAsync()
|
|
||||||
{
|
|
||||||
var result = await this.documentsProvider.GetLinkTypesAsync();
|
|
||||||
if (result.IsSuccess)
|
|
||||||
{
|
|
||||||
return Ok(result.LinkTypes);
|
|
||||||
}
|
|
||||||
return NoContent();
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// Get a document link type by id.
|
|
||||||
/// </summary>
|
|
||||||
[HttpGet("LinkTypes/{id}")]
|
|
||||||
public async Task<IActionResult> GetLinkTypeAsync(int id)
|
|
||||||
{
|
|
||||||
var result = await this.documentsProvider.GetLinkTypeAsync(id);
|
|
||||||
if (result.IsSuccess)
|
|
||||||
{
|
|
||||||
return Ok(result.LinkType);
|
|
||||||
}
|
|
||||||
return NotFound();
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// Update a existing document link type.
|
|
||||||
/// </summary>
|
|
||||||
[HttpPut("LinkTypes")]
|
|
||||||
public async Task<IActionResult> UpdateLinkType(Models.LinkType linkType)
|
|
||||||
{
|
|
||||||
if (linkType != null)
|
|
||||||
{
|
|
||||||
var result = await this.documentsProvider.UpdateLinkTypeAsync(linkType);
|
|
||||||
if (result.IsSuccess)
|
|
||||||
{
|
|
||||||
return Ok(result.LinkType);
|
|
||||||
}
|
|
||||||
if (result.ErrorMessage == "Not Found")
|
|
||||||
return NotFound(result.ErrorMessage);
|
|
||||||
|
|
||||||
return BadRequest(result.ErrorMessage);
|
|
||||||
}
|
|
||||||
return CreatedAtRoute("DefaultApi", new { id = linkType.Id }, linkType);
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// Create a new document link type.
|
|
||||||
/// </summary>
|
|
||||||
[HttpPost("LinkTypes")]
|
|
||||||
public async Task<IActionResult> CreateLinkType(Models.LinkType linkType)
|
|
||||||
{
|
|
||||||
if (linkType != null)
|
|
||||||
{
|
|
||||||
var result = await this.documentsProvider.PostLinkTypeAsync(linkType);
|
|
||||||
if (result.IsSuccess)
|
|
||||||
{
|
|
||||||
return Ok(result.LinkType);
|
|
||||||
}
|
|
||||||
return BadRequest(result.ErrorMessage);
|
|
||||||
}
|
|
||||||
return CreatedAtRoute("DefaultApi", new { id = linkType.Id }, linkType);
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// Delete a existing document link type by id.
|
|
||||||
/// </summary>
|
|
||||||
[HttpDelete("LinkTypes/{id}")]
|
|
||||||
public async Task<IActionResult> DeleteLinkType(int id)
|
|
||||||
{
|
|
||||||
var result = await this.documentsProvider.DeleteLinkTypeAsync(id);
|
|
||||||
if (result.IsSuccess)
|
|
||||||
{
|
|
||||||
return Ok(result.LinkType);
|
|
||||||
}
|
|
||||||
return NotFound();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1 +0,0 @@
|
|||||||
sample
|
|
@ -4,11 +4,13 @@
|
|||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<GenerateDocumentationFile>True</GenerateDocumentationFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
|
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
|
||||||
<PackageReference Include="Azure.Storage.Blobs" Version="12.16.0" />
|
<PackageReference Include="Azure.Storage.Blobs" Version="12.16.0" />
|
||||||
|
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.21" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.2.7" />
|
<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.2.7" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.9" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.9" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.9">
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.9">
|
@ -9,6 +9,7 @@ namespace DamageAssesment.Api.Documents.Db
|
|||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
[ForeignKey("LinkType")]
|
[ForeignKey("LinkType")]
|
||||||
public int linkTypeId { get; set; }
|
public int linkTypeId { get; set; }
|
||||||
|
public LinkType? LinkType { get; set; }
|
||||||
public string docName { get; set; }
|
public string docName { get; set; }
|
||||||
|
|
||||||
public string url { get; set; }
|
public string url { get; set; }
|
||||||
|
@ -4,12 +4,13 @@ namespace DamageAssesment.Api.Documents.Interfaces
|
|||||||
{
|
{
|
||||||
public interface IDocumentsProvider : ILinkTypesProvider
|
public interface IDocumentsProvider : ILinkTypesProvider
|
||||||
{
|
{
|
||||||
Task<(bool IsSuccess, Models.Document Document, string ErrorMessage)> GetDocumentAsync(int Id);
|
Task<(bool IsSuccess, Models.MultiLanDocument Document, string ErrorMessage)> GetDocumentAsync(int id, string? linktype, string? language);
|
||||||
Task<(bool IsSuccess, IEnumerable<Models.Document> documents, string ErrorMessage)> GetDocumnetsAsync();
|
Task<(bool IsSuccess, Models.Document Document, string ErrorMessage)> GetDocumentByidAsync(int id);
|
||||||
Task<(bool IsSuccess, IEnumerable<Models.Document> documents, string ErrorMessage)> GetDocumnetsByLinkAsync(string Language,string LinkType);
|
// Task<(bool IsSuccess, IEnumerable<Models.MultiLanDocument> documents, string ErrorMessage)> GetDocumnetsAsync(string? language);
|
||||||
Task<(bool IsSuccess, Models.Document Document, string ErrorMessage)> PostDocumentAsync(Models.Document Document);
|
Task<(bool IsSuccess, IEnumerable<Models.MultiLanDocument> documents, string ErrorMessage)> GetdocumentsByLinkAsync(string? linkType, string? language);
|
||||||
Task<(bool IsSuccess, Models.Document Document, string ErrorMessage)> UpdateDocumentAsync(Models.Document Document);
|
Task<(bool IsSuccess, Models.MultiLanDocument Document, string ErrorMessage)> PostDocumentAsync(Models.Document Document);
|
||||||
Task<(bool IsSuccess, Models.Document Document, string ErrorMessage)> DeleteDocumentAsync(int Id);
|
Task<(bool IsSuccess, Models.MultiLanDocument Document, string ErrorMessage)> UpdateDocumentAsync(int id,Models.Document Document);
|
||||||
|
Task<(bool IsSuccess, Models.MultiLanDocument Document, string ErrorMessage)> DeleteDocumentAsync(int id);
|
||||||
Task<(bool IsSuccess, int counter, string message)> GetDocumentCounter();
|
Task<(bool IsSuccess, int counter, string message)> GetDocumentCounter();
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,7 +2,17 @@
|
|||||||
|
|
||||||
namespace DamageAssesment.Api.Documents.Models
|
namespace DamageAssesment.Api.Documents.Models
|
||||||
{
|
{
|
||||||
public class Document
|
public class Document : BaseDocument
|
||||||
|
{
|
||||||
|
public List<DocumentsTranslation> documentsTranslations { get; set; }
|
||||||
|
}
|
||||||
|
public class MultiLanDocument:BaseDocument
|
||||||
|
{
|
||||||
|
public object titles { get; set; }
|
||||||
|
public object description { get; set; }
|
||||||
|
public string LinkType { get; set; }
|
||||||
|
}
|
||||||
|
public class BaseDocument
|
||||||
{
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
@ -14,6 +24,5 @@ namespace DamageAssesment.Api.Documents.Models
|
|||||||
public bool IsActive { get; set; }
|
public bool IsActive { get; set; }
|
||||||
public DateTime dateCreated { get; set; }
|
public DateTime dateCreated { get; set; }
|
||||||
public DateTime dateUpdated { get; set; }
|
public DateTime dateUpdated { get; set; }
|
||||||
public List<DocumentsTranslation> documentsTranslations { get; set; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,8 @@ namespace DamageAssesment.Api.Documents.Profiles
|
|||||||
{
|
{
|
||||||
public DocumentProfile()
|
public DocumentProfile()
|
||||||
{
|
{
|
||||||
|
CreateMap<Db.Document, Models.MultiLanDocument>().ForMember(dest => dest.LinkType,
|
||||||
|
opt => opt.MapFrom(src => src.LinkType.TypeText)); ;
|
||||||
CreateMap<Db.Document, Models.Document>();
|
CreateMap<Db.Document, Models.Document>();
|
||||||
CreateMap<Models.Document, Db.Document>();
|
CreateMap<Models.Document, Db.Document>();
|
||||||
CreateMap<Db.LinkType, Models.LinkType>();
|
CreateMap<Db.LinkType, Models.LinkType>();
|
||||||
|
@ -2,15 +2,73 @@ using DamageAssesment.Api.Documents.Db;
|
|||||||
using DamageAssesment.Api.Documents.Interfaces;
|
using DamageAssesment.Api.Documents.Interfaces;
|
||||||
using DamageAssesment.Api.Documents.Providers;
|
using DamageAssesment.Api.Documents.Providers;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
||||||
|
using Microsoft.IdentityModel.Tokens;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
using Microsoft.OpenApi.Models;
|
||||||
|
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
|
||||||
// Add services to the container.
|
// Add services to the container.
|
||||||
|
var authkey = builder.Configuration.GetValue<string>("JwtSettings:securitykey");
|
||||||
|
builder.Services.AddAuthentication(item =>
|
||||||
|
{
|
||||||
|
item.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
|
||||||
|
item.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
|
||||||
|
}).AddJwtBearer(item =>
|
||||||
|
{
|
||||||
|
item.RequireHttpsMetadata = true;
|
||||||
|
item.SaveToken = true;
|
||||||
|
item.TokenValidationParameters = new TokenValidationParameters()
|
||||||
|
{
|
||||||
|
ValidateIssuerSigningKey = true,
|
||||||
|
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(authkey)),
|
||||||
|
ValidateIssuer = false,
|
||||||
|
ValidateAudience = false,
|
||||||
|
ClockSkew = TimeSpan.Zero
|
||||||
|
};
|
||||||
|
});
|
||||||
builder.Services.AddControllers();
|
builder.Services.AddControllers();
|
||||||
|
builder.Services.AddSwaggerGen(options =>
|
||||||
|
{
|
||||||
|
// Include XML comments from your assembly
|
||||||
|
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
|
||||||
|
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
|
||||||
|
options.IncludeXmlComments(xmlPath);
|
||||||
|
|
||||||
|
OpenApiSecurityScheme securityDefinition = new OpenApiSecurityScheme()
|
||||||
|
{
|
||||||
|
Name = "Bearer",
|
||||||
|
BearerFormat = "JWT",
|
||||||
|
Scheme = "bearer",
|
||||||
|
Description = "Specify the authorization token.",
|
||||||
|
In = ParameterLocation.Header,
|
||||||
|
Type = SecuritySchemeType.Http,
|
||||||
|
};
|
||||||
|
|
||||||
|
options.AddSecurityDefinition("jwt_auth", securityDefinition);
|
||||||
|
|
||||||
|
// Make sure swagger UI requires a Bearer token specified
|
||||||
|
OpenApiSecurityScheme securityScheme = new OpenApiSecurityScheme()
|
||||||
|
{
|
||||||
|
Reference = new OpenApiReference()
|
||||||
|
{
|
||||||
|
Id = "jwt_auth",
|
||||||
|
Type = ReferenceType.SecurityScheme
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
OpenApiSecurityRequirement securityRequirements = new OpenApiSecurityRequirement()
|
||||||
|
{
|
||||||
|
{securityScheme, new string[] { }},
|
||||||
|
};
|
||||||
|
|
||||||
|
options.AddSecurityRequirement(securityRequirements);
|
||||||
|
});
|
||||||
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
||||||
builder.Services.AddEndpointsApiExplorer();
|
builder.Services.AddEndpointsApiExplorer();
|
||||||
builder.Services.AddSwaggerGen();
|
//builder.Services.AddSwaggerGen();
|
||||||
builder.Services.AddScoped<IDocumentsProvider, documentsProvider>();
|
builder.Services.AddScoped<IDocumentsProvider, documentsProvider>();
|
||||||
builder.Services.AddScoped<IUploadService, UploadService>();
|
builder.Services.AddScoped<IUploadService, UploadService>();
|
||||||
builder.Services.AddScoped<IAzureBlobService, AzureBlobService>();
|
builder.Services.AddScoped<IAzureBlobService, AzureBlobService>();
|
||||||
@ -28,6 +86,7 @@ if (app.Environment.IsDevelopment())
|
|||||||
app.UseSwaggerUI();
|
app.UseSwaggerUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
app.UseAuthentication();
|
||||||
app.UseAuthorization();
|
app.UseAuthorization();
|
||||||
|
|
||||||
app.MapControllers();
|
app.MapControllers();
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
"dotnetRunMessages": true,
|
"dotnetRunMessages": true,
|
||||||
"launchBrowser": true,
|
"launchBrowser": true,
|
||||||
"launchUrl": "swagger",
|
"launchUrl": "swagger",
|
||||||
"applicationUrl": "http://localhost:5133",
|
"applicationUrl": "http://localhost:5136",
|
||||||
"environmentVariables": {
|
"environmentVariables": {
|
||||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Metadata.Internal;
|
using Microsoft.EntityFrameworkCore.Metadata.Internal;
|
||||||
using System;
|
using System;
|
||||||
using System.Diagnostics.Eventing.Reader;
|
using System.Diagnostics.Eventing.Reader;
|
||||||
|
using System.Reflection.Metadata;
|
||||||
|
|
||||||
namespace DamageAssesment.Api.Documents.Providers
|
namespace DamageAssesment.Api.Documents.Providers
|
||||||
{
|
{
|
||||||
@ -54,29 +55,55 @@ namespace DamageAssesment.Api.Documents.Providers
|
|||||||
DocumentDbContext.SaveChanges();
|
DocumentDbContext.SaveChanges();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public async Task<(bool IsSuccess, IEnumerable<Models.Document> documents, string ErrorMessage)> GetDocumnetsByLinkAsync(string Language, string LinkType)
|
public List<Models.DocumentsTranslation> GetDocumentTranslations(int id, string? language)
|
||||||
|
{
|
||||||
|
List<Models.DocumentsTranslation> QuestionTranslations;
|
||||||
|
if (string.IsNullOrEmpty(language))
|
||||||
|
{
|
||||||
|
QuestionTranslations = mapper.Map<List<Db.DocumentsTranslation>, List<Models.DocumentsTranslation>>(
|
||||||
|
DocumentDbContext.DocumentsTranslations.AsNoTracking().Where(a => a.DocumentId == id).ToList());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QuestionTranslations = mapper.Map<List<Db.DocumentsTranslation>, List<Models.DocumentsTranslation>>(
|
||||||
|
DocumentDbContext.DocumentsTranslations.AsNoTracking().Where(a => a.DocumentId == id && a.Language == language).ToList());
|
||||||
|
}
|
||||||
|
return QuestionTranslations;
|
||||||
|
}
|
||||||
|
public MultiLanDocument CreateMultiLanguageObject(List<Models.DocumentsTranslation> questions)
|
||||||
|
{
|
||||||
|
MultiLanDocument MultiLanguage = new MultiLanDocument();
|
||||||
|
Dictionary<string, string> dicttitle = new Dictionary<string, string>();
|
||||||
|
Dictionary<string, string> dictdesc = new Dictionary<string, string>();
|
||||||
|
foreach (Models.DocumentsTranslation item in questions)
|
||||||
|
{
|
||||||
|
dicttitle.Add(item.Language, item.title);
|
||||||
|
dictdesc.Add(item.Language, item.description);
|
||||||
|
}
|
||||||
|
MultiLanguage.titles = dicttitle;
|
||||||
|
MultiLanguage.description = dictdesc;
|
||||||
|
return MultiLanguage;
|
||||||
|
}
|
||||||
|
public async Task<(bool IsSuccess, IEnumerable<Models.MultiLanDocument> documents, string ErrorMessage)> GetdocumentsByLinkAsync(string? linkType, string? language)
|
||||||
{
|
{
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
logger?.LogInformation("Query Question");
|
logger?.LogInformation("Query Question");
|
||||||
var documents=new List<Db.Document>();
|
var documents=new List<Db.Document>();
|
||||||
if(String.IsNullOrEmpty(LinkType))
|
if(String.IsNullOrEmpty(linkType))
|
||||||
documents = await DocumentDbContext.Documents.AsNoTracking().Where(q => q.IsActive).ToListAsync();
|
documents = await DocumentDbContext.Documents.Include(a=>a.LinkType).AsNoTracking().Where(q => q.IsActive).ToListAsync();
|
||||||
else
|
else
|
||||||
documents = await DocumentDbContext.Documents.AsNoTracking().Where(q => q.IsActive &&
|
documents = await DocumentDbContext.Documents.Include(a => a.LinkType).AsNoTracking().Where(q => q.IsActive &&
|
||||||
q.linkTypeId == (DocumentDbContext.LinkTypes.AsNoTracking().Where(a => a.TypeText.ToLower() == LinkType.ToLower()).Select(a => a.Id).FirstOrDefault())).ToListAsync();
|
q.linkTypeId == (DocumentDbContext.LinkTypes.AsNoTracking().Where(a => a.TypeText.ToLower() == linkType.ToLower()).Select(a => a.Id).FirstOrDefault())).ToListAsync();
|
||||||
if (documents != null)
|
if (documents != null)
|
||||||
{
|
{
|
||||||
var result = mapper.Map<IEnumerable<Db.Document>, IEnumerable<Models.Document>>(documents);
|
var result = mapper.Map<List<Db.Document>, List<Models.MultiLanDocument>>(documents);
|
||||||
foreach (var item in result)
|
foreach (var item in result)
|
||||||
{
|
{
|
||||||
if(!String.IsNullOrEmpty(Language))
|
var multilan = CreateMultiLanguageObject(GetDocumentTranslations(item.Id, language));
|
||||||
item.documentsTranslations = mapper.Map<List<Db.DocumentsTranslation>, List<Models.DocumentsTranslation>>(
|
item.titles = multilan.titles;
|
||||||
DocumentDbContext.DocumentsTranslations.Where(a => a.DocumentId == item.Id && (a.Language.ToLower() == Language.ToLower())).ToList());
|
item.description = multilan.description;
|
||||||
else
|
|
||||||
item.documentsTranslations = mapper.Map<List<Db.DocumentsTranslation>, List<Models.DocumentsTranslation>>(
|
|
||||||
DocumentDbContext.DocumentsTranslations.Where(a => a.DocumentId == item.Id).ToList());
|
|
||||||
}
|
}
|
||||||
return (true, result, null);
|
return (true, result, null);
|
||||||
}
|
}
|
||||||
@ -89,39 +116,40 @@ namespace DamageAssesment.Api.Documents.Providers
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
public async Task<(bool IsSuccess, IEnumerable<Models.Document> documents, string ErrorMessage)> GetDocumnetsAsync()
|
//public async Task<(bool IsSuccess, IEnumerable<Models.MultiLanDocument> documents, string ErrorMessage)> GetDocumnetsAsync(string? language)
|
||||||
{
|
//{
|
||||||
|
|
||||||
try
|
// try
|
||||||
{
|
// {
|
||||||
logger?.LogInformation("Query Question");
|
// logger?.LogInformation("Query Question");
|
||||||
var documents = await DocumentDbContext.Documents.AsNoTracking().Where(q => q.IsActive).ToListAsync();
|
// var documents = await DocumentDbContext.Documents.Include(a => a.LinkType).AsNoTracking().Where(q => q.IsActive).ToListAsync();
|
||||||
if (documents != null)
|
// if (documents != null)
|
||||||
{
|
// {
|
||||||
logger?.LogInformation($"{documents.Count} Document(s) found");
|
// logger?.LogInformation($"{documents.Count} Document(s) found");
|
||||||
var result = mapper.Map<IEnumerable<Db.Document>, IEnumerable<Models.Document>>(documents);
|
// var result = mapper.Map<List<Db.Document>, List<Models.MultiLanDocument>>(documents);
|
||||||
foreach (var item in result)
|
// foreach (var item in result)
|
||||||
{
|
// {
|
||||||
item.documentsTranslations = mapper.Map<List<Db.DocumentsTranslation>, List<Models.DocumentsTranslation>>(
|
// var multilan = CreateMultiLanguageObject(GetDocumentTranslations(item.Id, language));
|
||||||
DocumentDbContext.DocumentsTranslations.Where(a => a.DocumentId == item.Id).ToList());
|
// item.titles = multilan.titles;
|
||||||
}
|
// item.description = multilan.description;
|
||||||
return (true, result, null);
|
// }
|
||||||
}
|
// return (true, result, null);
|
||||||
return (false, null, "Not found");
|
// }
|
||||||
}
|
// return (false, null, "Not found");
|
||||||
catch (Exception ex)
|
// }
|
||||||
{
|
// catch (Exception ex)
|
||||||
logger?.LogError(ex.ToString());
|
// {
|
||||||
return (false, null, ex.Message);
|
// logger?.LogError(ex.ToString());
|
||||||
}
|
// return (false, null, ex.Message);
|
||||||
|
// }
|
||||||
|
|
||||||
}
|
//}
|
||||||
public async Task<(bool IsSuccess, Models.Document Document, string ErrorMessage)> GetDocumentAsync(int Id)
|
public async Task<(bool IsSuccess, Models.Document Document, string ErrorMessage)> GetDocumentByidAsync(int id)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
logger?.LogInformation("Query LinkType");
|
logger?.LogInformation("Query LinkType");
|
||||||
var Document = await DocumentDbContext.Documents.AsNoTracking().FirstOrDefaultAsync(q => q.Id == Id && q.IsActive);
|
var Document = await DocumentDbContext.Documents.Include(a => a.LinkType).AsNoTracking().FirstOrDefaultAsync(q => q.Id == id && q.IsActive);
|
||||||
if (Document != null)
|
if (Document != null)
|
||||||
{
|
{
|
||||||
logger?.LogInformation($"{Document} customer(s) found");
|
logger?.LogInformation($"{Document} customer(s) found");
|
||||||
@ -138,7 +166,37 @@ namespace DamageAssesment.Api.Documents.Providers
|
|||||||
return (false, null, ex.Message);
|
return (false, null, ex.Message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public async Task<(bool IsSuccess, Models.Document Document, string ErrorMessage)> PostDocumentAsync(Models.Document Document)
|
//added linktype filter
|
||||||
|
public async Task<(bool IsSuccess, Models.MultiLanDocument Document, string ErrorMessage)> GetDocumentAsync(int id, string? linkType, string? language)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
logger?.LogInformation("Query LinkType");
|
||||||
|
//var Document = await DocumentDbContext.Documents.Include(a => a.LinkType).AsNoTracking().FirstOrDefaultAsync(q => q.Id == id && q.IsActive);
|
||||||
|
var Document = new Db.Document();
|
||||||
|
if (String.IsNullOrEmpty(linkType))
|
||||||
|
Document = await DocumentDbContext.Documents.Include(a => a.LinkType).AsNoTracking().Where(q => q.IsActive&&q.Id==id).FirstOrDefaultAsync();
|
||||||
|
else
|
||||||
|
Document = await DocumentDbContext.Documents.Include(a => a.LinkType).AsNoTracking().Where(q => q.IsActive && q.Id == id &&
|
||||||
|
q.linkTypeId == (DocumentDbContext.LinkTypes.AsNoTracking().Where(a => a.TypeText.ToLower() == linkType.ToLower()).Select(a => a.Id).FirstOrDefault())).FirstOrDefaultAsync();
|
||||||
|
if (Document != null)
|
||||||
|
{
|
||||||
|
logger?.LogInformation($"{Document} customer(s) found");
|
||||||
|
var result = mapper.Map<Db.Document, Models.MultiLanDocument>(Document);
|
||||||
|
var multilan = CreateMultiLanguageObject(GetDocumentTranslations(result.Id, language));
|
||||||
|
result.titles = multilan.titles;
|
||||||
|
result.description = multilan.description;
|
||||||
|
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.MultiLanDocument Document, string ErrorMessage)> PostDocumentAsync(Models.Document Document)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -149,8 +207,11 @@ namespace DamageAssesment.Api.Documents.Providers
|
|||||||
dbtranslation.ForEach(i => i.DocumentId = document.Id);
|
dbtranslation.ForEach(i => i.DocumentId = document.Id);
|
||||||
DocumentDbContext.DocumentsTranslations.AddRange(dbtranslation);
|
DocumentDbContext.DocumentsTranslations.AddRange(dbtranslation);
|
||||||
DocumentDbContext.SaveChanges();
|
DocumentDbContext.SaveChanges();
|
||||||
Document.Id = document.Id;
|
var result = mapper.Map<Db.Document, Models.MultiLanDocument>(document);
|
||||||
return (true, Document, null);
|
var multilan = CreateMultiLanguageObject(GetDocumentTranslations(document.Id, ""));
|
||||||
|
result.titles = multilan.titles;
|
||||||
|
result.description = multilan.description;
|
||||||
|
return (true, result, null);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -159,15 +220,16 @@ namespace DamageAssesment.Api.Documents.Providers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<(bool IsSuccess, Models.Document Document, string ErrorMessage)> UpdateDocumentAsync(Models.Document Document)
|
public async Task<(bool IsSuccess, Models.MultiLanDocument Document, string ErrorMessage)> UpdateDocumentAsync(int id,Models.Document Document)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (Document != null)
|
if (Document != null)
|
||||||
{
|
{
|
||||||
var existing = DocumentDbContext.Documents.AsNoTracking().FirstOrDefault(x => x.Id == Document.Id);
|
var existing = DocumentDbContext.Documents.AsNoTracking().FirstOrDefault(x => x.Id == id);
|
||||||
if (existing != null)
|
if (existing != null)
|
||||||
{
|
{
|
||||||
|
Document.Id = existing.Id;
|
||||||
var document = mapper.Map<Models.Document, Db.Document>(Document);
|
var document = mapper.Map<Models.Document, Db.Document>(Document);
|
||||||
DocumentDbContext.Documents.Update(document);
|
DocumentDbContext.Documents.Update(document);
|
||||||
DocumentDbContext.SaveChanges();
|
DocumentDbContext.SaveChanges();
|
||||||
@ -176,7 +238,13 @@ namespace DamageAssesment.Api.Documents.Providers
|
|||||||
DocumentDbContext.DocumentsTranslations.RemoveRange(oldtranslations);
|
DocumentDbContext.DocumentsTranslations.RemoveRange(oldtranslations);
|
||||||
var dbtranslation = mapper.Map<List<Models.DocumentsTranslation>, List<Db.DocumentsTranslation>>(Document.documentsTranslations);
|
var dbtranslation = mapper.Map<List<Models.DocumentsTranslation>, List<Db.DocumentsTranslation>>(Document.documentsTranslations);
|
||||||
dbtranslation.ForEach(i => i.DocumentId = Document.Id);
|
dbtranslation.ForEach(i => i.DocumentId = Document.Id);
|
||||||
return (true, Document, "Successful");
|
DocumentDbContext.DocumentsTranslations.AddRange(dbtranslation);
|
||||||
|
DocumentDbContext.SaveChanges();
|
||||||
|
var result = mapper.Map<Db.Document, Models.MultiLanDocument>(document);
|
||||||
|
var multilan = CreateMultiLanguageObject(GetDocumentTranslations(document.Id, ""));
|
||||||
|
result.titles = multilan.titles;
|
||||||
|
result.description = multilan.description;
|
||||||
|
return (true, result, "Successful");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -198,20 +266,24 @@ namespace DamageAssesment.Api.Documents.Providers
|
|||||||
return (false, null, ex.Message);
|
return (false, null, ex.Message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public async Task<(bool IsSuccess, Models.Document Document, string ErrorMessage)> DeleteDocumentAsync(int Id)
|
public async Task<(bool IsSuccess, Models.MultiLanDocument Document, string ErrorMessage)> DeleteDocumentAsync(int id)
|
||||||
{
|
{
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Db.Document Document = DocumentDbContext.Documents.AsNoTracking().Where(a => a.Id == Id).FirstOrDefault();
|
Db.Document Document = DocumentDbContext.Documents.Include(a => a.LinkType).AsNoTracking().Where(a => a.Id == id).FirstOrDefault();
|
||||||
if (Document == null)
|
if (Document == null)
|
||||||
{
|
{
|
||||||
return (false, null, "Not Found");
|
return (false, null, "Not Found");
|
||||||
}
|
}
|
||||||
|
var result = mapper.Map<Db.Document, Models.MultiLanDocument>(Document);
|
||||||
|
var multilan = CreateMultiLanguageObject(GetDocumentTranslations(Document.Id, ""));
|
||||||
|
result.titles = multilan.titles;
|
||||||
|
result.description = multilan.description;
|
||||||
Document.IsActive = false;
|
Document.IsActive = false;
|
||||||
DocumentDbContext.Documents.Update(Document);
|
DocumentDbContext.Documents.Update(Document);
|
||||||
DocumentDbContext.SaveChanges();
|
DocumentDbContext.SaveChanges();
|
||||||
return (true, mapper.Map<Db.Document, Models.Document>(Document), $"DocumentId {Id} deleted Successfuly");
|
return (true, result, $"DocumentId {id} deleted Successfuly");
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -257,7 +329,6 @@ namespace DamageAssesment.Api.Documents.Providers
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<(bool IsSuccess, Models.LinkType LinkType, string ErrorMessage)> GetLinkTypeAsync(int Id)
|
public async Task<(bool IsSuccess, Models.LinkType LinkType, string ErrorMessage)> GetLinkTypeAsync(int Id)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -6,8 +6,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"AllowedHosts": "*",
|
"AllowedHosts": "*",
|
||||||
|
"JwtSettings": {
|
||||||
|
"securitykey": "bWlhbWkgZGFkZSBzY2hvb2xzIHNlY3JldCBrZXk="
|
||||||
|
},
|
||||||
"Fileupload": {
|
"Fileupload": {
|
||||||
"folderpath": "DASA_Documents/Active",
|
"folderpath": "DASA_Documents/Active",
|
||||||
"Deletepath": "DASA_Documents/Deleted"
|
"Deletepath": "DASA_Documents/Deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,11 +43,11 @@ namespace DamageAssesment.Api.Employees.Test
|
|||||||
public async Task GetEmployeeAsync_ShouldReturnStatusCode200()
|
public async Task GetEmployeeAsync_ShouldReturnStatusCode200()
|
||||||
{
|
{
|
||||||
var mockEmployeeService = new Mock<IEmployeesProvider>();
|
var mockEmployeeService = new Mock<IEmployeesProvider>();
|
||||||
var mockResponse = await MockData.getOkResponse("Emp1");
|
var mockResponse = await MockData.getOkResponse(1);
|
||||||
mockEmployeeService.Setup(service => service.GetEmployeeByIdAsync("Emp1")).ReturnsAsync(mockResponse);
|
mockEmployeeService.Setup(service => service.GetEmployeeByIdAsync(1)).ReturnsAsync(mockResponse);
|
||||||
|
|
||||||
var EmployeeProvider = new EmployeesController(mockEmployeeService.Object);
|
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);
|
Assert.Equal(200, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -57,10 +57,10 @@ namespace DamageAssesment.Api.Employees.Test
|
|||||||
{
|
{
|
||||||
var mockEmployeeService = new Mock<IEmployeesProvider>();
|
var mockEmployeeService = new Mock<IEmployeesProvider>();
|
||||||
var mockResponse = await MockData.getNotFoundResponse();
|
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 EmployeeProvider = new EmployeesController(mockEmployeeService.Object);
|
||||||
var result = (NotFoundResult)await EmployeeProvider.GetEmployeeByIdAsync("Emp99");
|
var result = (NotFoundResult)await EmployeeProvider.GetEmployeeByIdAsync(99999);
|
||||||
Assert.Equal(404, result.StatusCode);
|
Assert.Equal(404, result.StatusCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ namespace DamageAssesment.Api.Employees.Test
|
|||||||
public async Task PostEmployeeAsync_ShouldReturnStatusCode200()
|
public async Task PostEmployeeAsync_ShouldReturnStatusCode200()
|
||||||
{
|
{
|
||||||
var mockEmployeeService = new Mock<IEmployeesProvider>();
|
var mockEmployeeService = new Mock<IEmployeesProvider>();
|
||||||
var mockResponse = await MockData.getOkResponse("Emp1");
|
var mockResponse = await MockData.getOkResponse(1);
|
||||||
var mockInputEmployee = await MockData.getInputEmployeeData();
|
var mockInputEmployee = await MockData.getInputEmployeeData();
|
||||||
mockEmployeeService.Setup(service => service.PostEmployeeAsync(mockInputEmployee)).ReturnsAsync(mockResponse);
|
mockEmployeeService.Setup(service => service.PostEmployeeAsync(mockInputEmployee)).ReturnsAsync(mockResponse);
|
||||||
|
|
||||||
@ -96,12 +96,12 @@ namespace DamageAssesment.Api.Employees.Test
|
|||||||
public async Task PutEmployeeAsync_ShouldReturnStatusCode200()
|
public async Task PutEmployeeAsync_ShouldReturnStatusCode200()
|
||||||
{
|
{
|
||||||
var mockEmployeeService = new Mock<IEmployeesProvider>();
|
var mockEmployeeService = new Mock<IEmployeesProvider>();
|
||||||
var mockResponse = await MockData.getOkResponse("Emp1");
|
var mockResponse = await MockData.getOkResponse(1);
|
||||||
var mockInputEmployee = await MockData.getInputEmployeeData();
|
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 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);
|
Assert.Equal(200, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -112,10 +112,10 @@ namespace DamageAssesment.Api.Employees.Test
|
|||||||
var mockEmployeeService = new Mock<IEmployeesProvider>();
|
var mockEmployeeService = new Mock<IEmployeesProvider>();
|
||||||
var mockResponse = await MockData.getNotFoundResponse();
|
var mockResponse = await MockData.getNotFoundResponse();
|
||||||
var mockInputEmployee = await MockData.getInputEmployeeData();
|
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 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);
|
Assert.Equal(404, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -126,10 +126,10 @@ namespace DamageAssesment.Api.Employees.Test
|
|||||||
var mockEmployeeService = new Mock<IEmployeesProvider>();
|
var mockEmployeeService = new Mock<IEmployeesProvider>();
|
||||||
var mockResponse = await MockData.getBadRequestResponse();
|
var mockResponse = await MockData.getBadRequestResponse();
|
||||||
var mockInputEmployee = await MockData.getInputEmployeeData();
|
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 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);
|
Assert.Equal(400, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -138,12 +138,12 @@ namespace DamageAssesment.Api.Employees.Test
|
|||||||
public async Task DeleteEmployeeAsync_ShouldReturnStatusCode200()
|
public async Task DeleteEmployeeAsync_ShouldReturnStatusCode200()
|
||||||
{
|
{
|
||||||
var mockEmployeeService = new Mock<IEmployeesProvider>();
|
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 EmployeeProvider = new EmployeesController(mockEmployeeService.Object);
|
||||||
var result = (OkObjectResult)await EmployeeProvider.DeleteEmployee("Emp1");
|
var result = (OkObjectResult)await EmployeeProvider.DeleteEmployee(1);
|
||||||
|
|
||||||
Assert.Equal(200, result.StatusCode);
|
Assert.Equal(200, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -153,10 +153,10 @@ namespace DamageAssesment.Api.Employees.Test
|
|||||||
{
|
{
|
||||||
var mockEmployeeService = new Mock<IEmployeesProvider>();
|
var mockEmployeeService = new Mock<IEmployeesProvider>();
|
||||||
var mockResponse = await MockData.getNotFoundResponse();
|
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 EmployeeProvider = new EmployeesController(mockEmployeeService.Object);
|
||||||
var result = (NotFoundResult)await EmployeeProvider.DeleteEmployee("Emp1");
|
var result = (NotFoundResult)await EmployeeProvider.DeleteEmployee(1);
|
||||||
|
|
||||||
Assert.Equal(404, result.StatusCode);
|
Assert.Equal(404, result.StatusCode);
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,4 @@
|
|||||||
using System;
|
using System.Text;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace DamageAssesment.Api.Employees.Test
|
namespace DamageAssesment.Api.Employees.Test
|
||||||
{
|
{
|
||||||
@ -15,13 +11,13 @@ namespace DamageAssesment.Api.Employees.Test
|
|||||||
|
|
||||||
for (int i = 0; i < 10; i++)
|
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);
|
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 Employees = await getOkResponse();
|
||||||
var Employee = Employees.Item2.FirstOrDefault(s => s.Id == Id);
|
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()
|
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" };
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
using DamageAssesment.Api.Employees.Interfaces;
|
using DamageAssesment.Api.Employees.Interfaces;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
namespace DamageAssesment.Api.Employees.Controllers
|
namespace DamageAssesment.Api.Employees.Controllers
|
||||||
{
|
{
|
||||||
[Route("api")]
|
|
||||||
[ApiController]
|
[ApiController]
|
||||||
public class EmployeesController : ControllerBase
|
public class EmployeesController : ControllerBase
|
||||||
{
|
{
|
||||||
@ -19,7 +19,7 @@ namespace DamageAssesment.Api.Employees.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// GET request for retrieving employees.
|
/// GET request for retrieving employees.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpGet("Employees")]
|
[HttpGet("Employees")]
|
||||||
public async Task<ActionResult> GetEmployeesAsync()
|
public async Task<ActionResult> GetEmployeesAsync()
|
||||||
{
|
{
|
||||||
@ -36,12 +36,12 @@ namespace DamageAssesment.Api.Employees.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// GET request for retrieving an employee by ID.
|
/// GET request for retrieving an employee by ID.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpGet("Employees/{Id}")]
|
[HttpGet("Employees/{id}")]
|
||||||
public async Task<ActionResult> GetEmployeeByIdAsync(string Id)
|
public async Task<ActionResult> GetEmployeeByIdAsync(int id)
|
||||||
{
|
{
|
||||||
|
|
||||||
var result = await EmployeeProvider.GetEmployeeByIdAsync(Id);
|
var result = await EmployeeProvider.GetEmployeeByIdAsync(id);
|
||||||
if (result.IsSuccess)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.Employee);
|
return Ok(result.Employee);
|
||||||
@ -54,12 +54,13 @@ namespace DamageAssesment.Api.Employees.Controllers
|
|||||||
/// PUT request for updating an existing employee.
|
/// PUT request for updating an existing employee.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="Employee">The updated employee object.</param>
|
/// <param name="Employee">The updated employee object.</param>
|
||||||
[HttpPut("Employees")]
|
[Authorize(Roles = "admin")]
|
||||||
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)
|
if (Employee != null)
|
||||||
{
|
{
|
||||||
var result = await this.EmployeeProvider.UpdateEmployeeAsync(Id,Employee);
|
var result = await this.EmployeeProvider.UpdateEmployeeAsync(id,Employee);
|
||||||
if (result.IsSuccess)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.Employee);
|
return Ok(result.Employee);
|
||||||
@ -76,6 +77,7 @@ namespace DamageAssesment.Api.Employees.Controllers
|
|||||||
/// POST request for creating a new employee.
|
/// POST request for creating a new employee.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="Employee">The employee information for creating a new employee.</param>
|
/// <param name="Employee">The employee information for creating a new employee.</param>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpPost("Employees")]
|
[HttpPost("Employees")]
|
||||||
public async Task<IActionResult> CreateEmployee(Models.Employee Employee)
|
public async Task<IActionResult> CreateEmployee(Models.Employee Employee)
|
||||||
{
|
{
|
||||||
@ -88,14 +90,15 @@ namespace DamageAssesment.Api.Employees.Controllers
|
|||||||
}
|
}
|
||||||
return BadRequest(result.ErrorMessage);
|
return BadRequest(result.ErrorMessage);
|
||||||
}
|
}
|
||||||
return CreatedAtRoute("DefaultApi", new { id = Employee.Id }, Employee);
|
return CreatedAtRoute("DefaultApi", new { Id = Employee.Id }, Employee);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// DELETE request for deleting an existing employee.
|
/// DELETE request for deleting an existing employee.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="id">The ID of the employee to be deleted.</param>
|
/// <param name="id">The ID of the employee to be deleted.</param>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpDelete("Employees/{id}")]
|
[HttpDelete("Employees/{id}")]
|
||||||
public async Task<IActionResult> DeleteEmployee(string id)
|
public async Task<IActionResult> DeleteEmployee(int id)
|
||||||
{
|
{
|
||||||
var result = await this.EmployeeProvider.DeleteEmployeeAsync(id);
|
var result = await this.EmployeeProvider.DeleteEmployeeAsync(id);
|
||||||
if (result.IsSuccess)
|
if (result.IsSuccess)
|
||||||
|
@ -5,7 +5,9 @@ namespace DamageAssesment.Api.Employees.Db
|
|||||||
public class Employee
|
public class Employee
|
||||||
{
|
{
|
||||||
[Key]
|
[Key]
|
||||||
public string Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
[StringLength(50)]
|
||||||
|
public string EmployeeCode { get; set; }
|
||||||
|
|
||||||
[StringLength(50)]
|
[StringLength(50)]
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
@ -17,7 +19,7 @@ namespace DamageAssesment.Api.Employees.Db
|
|||||||
|
|
||||||
[StringLength(50)]
|
[StringLength(50)]
|
||||||
public string Email { get; set; }
|
public string Email { get; set; }
|
||||||
public bool IsActive {get;set;}
|
public bool IsActive { get; set; }
|
||||||
public string? PreferredLanguage { get; set; } = "en";
|
public string? PreferredLanguage { get; set; } = "en";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,5 +8,14 @@ namespace DamageAssesment.Api.Employees.Db
|
|||||||
public EmployeeDbContext(DbContextOptions options) : base(options)
|
public EmployeeDbContext(DbContextOptions options) : base(options)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
base.OnModelCreating(modelBuilder);
|
||||||
|
|
||||||
|
modelBuilder.Entity<Employee>()
|
||||||
|
.Property(item => item.Id)
|
||||||
|
.ValueGeneratedOnAdd();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
public interface IEmployeesProvider
|
public interface IEmployeesProvider
|
||||||
{
|
{
|
||||||
Task<(bool IsSuccess, IEnumerable<Models.Employee> Employees, string ErrorMessage)> GetEmployeesAsync();
|
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)> 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)> UpdateEmployeeAsync(int Id, Models.Employee Employee);
|
||||||
Task<(bool IsSuccess, Models.Employee Employee, string ErrorMessage)> DeleteEmployeeAsync(string Id);
|
Task<(bool IsSuccess, Models.Employee Employee, string ErrorMessage)> DeleteEmployeeAsync(int Id);
|
||||||
void SeedData();
|
void SeedData();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,8 @@ namespace DamageAssesment.Api.Employees.Models
|
|||||||
{
|
{
|
||||||
public class Employee
|
public class Employee
|
||||||
{
|
{
|
||||||
public string Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
public string EmployeeCode { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public DateTime BirthDate { get; set; }
|
public DateTime BirthDate { get; set; }
|
||||||
public string OfficePhoneNumber { get; set; }
|
public string OfficePhoneNumber { get; set; }
|
||||||
|
@ -7,6 +7,7 @@ namespace DamageAssesment.Api.Employees.Profiles
|
|||||||
public EmployeesProfile()
|
public EmployeesProfile()
|
||||||
{
|
{
|
||||||
CreateMap<Db.Employee, Models.Employee>();
|
CreateMap<Db.Employee, Models.Employee>();
|
||||||
|
CreateMap<Models.Employee, Db.Employee>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,23 +1,74 @@
|
|||||||
using DamageAssesment.Api.Employees.Db;
|
using DamageAssesment.Api.Employees.Db;
|
||||||
using DamageAssesment.Api.Employees.Interfaces;
|
using DamageAssesment.Api.Employees.Interfaces;
|
||||||
using DamageAssesment.Api.Employees.Providers;
|
using DamageAssesment.Api.Employees.Providers;
|
||||||
|
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.IdentityModel.Tokens;
|
||||||
|
using Microsoft.OpenApi.Models;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
|
||||||
// Add services to the container.
|
// Add services to the container.
|
||||||
|
var authkey = builder.Configuration.GetValue<string>("JwtSettings:securitykey");
|
||||||
|
builder.Services.AddAuthentication(item =>
|
||||||
|
{
|
||||||
|
item.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
|
||||||
|
item.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
|
||||||
|
}).AddJwtBearer(item =>
|
||||||
|
{
|
||||||
|
item.RequireHttpsMetadata = true;
|
||||||
|
item.SaveToken = true;
|
||||||
|
item.TokenValidationParameters = new TokenValidationParameters()
|
||||||
|
{
|
||||||
|
ValidateIssuerSigningKey = true,
|
||||||
|
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(authkey)),
|
||||||
|
ValidateIssuer = false,
|
||||||
|
ValidateAudience = false,
|
||||||
|
ClockSkew = TimeSpan.Zero
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
builder.Services.AddControllers();
|
builder.Services.AddControllers();
|
||||||
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
||||||
builder.Services.AddEndpointsApiExplorer();
|
builder.Services.AddEndpointsApiExplorer();
|
||||||
//builder.Services.AddSwaggerGen();
|
//builder.Services.AddSwaggerGen();
|
||||||
builder.Services.AddSwaggerGen(c =>
|
builder.Services.AddSwaggerGen(options =>
|
||||||
{
|
{
|
||||||
// Include XML comments from your assembly
|
// Include XML comments from your assembly
|
||||||
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
|
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
|
||||||
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
|
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
|
||||||
c.IncludeXmlComments(xmlPath);
|
options.IncludeXmlComments(xmlPath);
|
||||||
|
|
||||||
|
OpenApiSecurityScheme securityDefinition = new OpenApiSecurityScheme()
|
||||||
|
{
|
||||||
|
Name = "Bearer",
|
||||||
|
BearerFormat = "JWT",
|
||||||
|
Scheme = "bearer",
|
||||||
|
Description = "Specify the authorization token.",
|
||||||
|
In = ParameterLocation.Header,
|
||||||
|
Type = SecuritySchemeType.Http,
|
||||||
|
};
|
||||||
|
|
||||||
|
options.AddSecurityDefinition("jwt_auth", securityDefinition);
|
||||||
|
|
||||||
|
// Make sure swagger UI requires a Bearer token specified
|
||||||
|
OpenApiSecurityScheme securityScheme = new OpenApiSecurityScheme()
|
||||||
|
{
|
||||||
|
Reference = new OpenApiReference()
|
||||||
|
{
|
||||||
|
Id = "jwt_auth",
|
||||||
|
Type = ReferenceType.SecurityScheme
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
OpenApiSecurityRequirement securityRequirements = new OpenApiSecurityRequirement()
|
||||||
|
{
|
||||||
|
{securityScheme, new string[] { }},
|
||||||
|
};
|
||||||
|
|
||||||
|
options.AddSecurityRequirement(securityRequirements);
|
||||||
});
|
});
|
||||||
|
|
||||||
builder.Services.AddScoped<IEmployeesProvider, EmployeesProvider>();
|
builder.Services.AddScoped<IEmployeesProvider, EmployeesProvider>();
|
||||||
@ -43,6 +94,7 @@ if (app.Environment.IsDevelopment())
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
app.UseAuthentication();
|
||||||
app.UseAuthorization();
|
app.UseAuthorization();
|
||||||
|
|
||||||
app.MapControllers();
|
app.MapControllers();
|
||||||
|
@ -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
|
try
|
||||||
{
|
{
|
||||||
logger?.LogInformation("Query Employee");
|
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)
|
if (Employee != null)
|
||||||
{
|
{
|
||||||
logger?.LogInformation($"{Employee} customer(s) found");
|
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);
|
Db.Employee _employee = mapper.Map<Models.Employee, Db.Employee>(Employee);
|
||||||
|
|
||||||
logger?.LogInformation("Query Employee");
|
logger?.LogInformation("Query Employee");
|
||||||
if (!EmployeeExists(Employee.Id))
|
if (!EmployeeCodeExists(Employee.EmployeeCode))
|
||||||
{
|
{
|
||||||
EmployeeDbContext.Employees.Add(_employee);
|
EmployeeDbContext.Employees.Add(_employee);
|
||||||
|
Employee.Id = _employee.Id;
|
||||||
EmployeeDbContext.SaveChanges();
|
EmployeeDbContext.SaveChanges();
|
||||||
return (true, Employee, null);
|
return (true, Employee, null);
|
||||||
}
|
}
|
||||||
return (false, null, "Employee is already exits");
|
return (false, null, "Employee code is already exits");
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -86,19 +87,20 @@ namespace DamageAssesment.Api.Employees.Providers
|
|||||||
return (false, null, ex.Message);
|
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
|
try
|
||||||
{
|
{
|
||||||
if (Employee != null)
|
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)
|
if (_employee != null)
|
||||||
{
|
{
|
||||||
Db.Employee vEmployee = mapper.Map<Models.Employee, Db.Employee>(Employee);
|
Db.Employee vEmployee = mapper.Map<Models.Employee, Db.Employee>(Employee);
|
||||||
EmployeeDbContext.Employees.Update(vEmployee);
|
EmployeeDbContext.Employees.Update(vEmployee);
|
||||||
EmployeeDbContext.SaveChanges();
|
EmployeeDbContext.SaveChanges();
|
||||||
|
Employee.Id = Id;
|
||||||
return (true, Employee, "Successful");
|
return (true, Employee, "Successful");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -120,11 +122,11 @@ namespace DamageAssesment.Api.Employees.Providers
|
|||||||
return (false, null, ex.Message);
|
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
|
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)
|
if (Employee == null)
|
||||||
{
|
{
|
||||||
return (false, null, "Not Found");
|
return (false, null, "Not Found");
|
||||||
@ -137,24 +139,29 @@ namespace DamageAssesment.Api.Employees.Providers
|
|||||||
{
|
{
|
||||||
|
|
||||||
logger?.LogError(ex.ToString());
|
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()
|
public void SeedData()
|
||||||
{
|
{
|
||||||
if (!EmployeeDbContext.Employees.Any())
|
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 = 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 = "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 = 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 = "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 = 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 = "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 = 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 = "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 = 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 = "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 = 6, EmployeeCode = "Emp6", Name = "ABC6", Email = "abc6@gmail.com", OfficePhoneNumber = "12345678", BirthDate = DateTime.Now.AddYears(-32), IsActive = true, PreferredLanguage = "es" });
|
||||||
EmployeeDbContext.SaveChanges();
|
EmployeeDbContext.SaveChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,10 +8,5 @@
|
|||||||
"Microsoft.AspNetCore": "Warning"
|
"Microsoft.AspNetCore": "Warning"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"AllowedHosts": "*",
|
"AllowedHosts": "*"
|
||||||
"settings": {
|
|
||||||
"endpoint1": "xxx",
|
|
||||||
"endpoint2": "xxx",
|
|
||||||
"endpoint3": "xxx"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -40,11 +40,11 @@ namespace DamageAssesment.Api.Locations.Test
|
|||||||
public async Task GetLocationsByIdAsync_ShouldReturnStatusCode200()
|
public async Task GetLocationsByIdAsync_ShouldReturnStatusCode200()
|
||||||
{
|
{
|
||||||
var mockLocationService = new Mock<ILocationsProvider>();
|
var mockLocationService = new Mock<ILocationsProvider>();
|
||||||
var mockResponse = await MockData.getOkResponseLocation("Loc1");
|
var mockResponse = await MockData.getOkResponseLocation(1);
|
||||||
mockLocationService.Setup(service => service.GetLocationByIdAsync("Loc1")).ReturnsAsync(mockResponse);
|
mockLocationService.Setup(service => service.GetLocationByIdAsync(1)).ReturnsAsync(mockResponse);
|
||||||
|
|
||||||
var locationProvider = new LocationsController(mockLocationService.Object);
|
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);
|
Assert.Equal(200, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -55,10 +55,10 @@ namespace DamageAssesment.Api.Locations.Test
|
|||||||
{
|
{
|
||||||
var mockLocationService = new Mock<ILocationsProvider>();
|
var mockLocationService = new Mock<ILocationsProvider>();
|
||||||
var mockResponse = await MockData.getLocationNotFoundResponse();
|
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 locationProvider = new LocationsController(mockLocationService.Object);
|
||||||
var result = (NotFoundResult)await locationProvider.GetLocationByIdAsync("Loc1");
|
var result = (NotFoundResult)await locationProvider.GetLocationByIdAsync(1);
|
||||||
|
|
||||||
Assert.Equal(404, result.StatusCode);
|
Assert.Equal(404, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -68,8 +68,8 @@ namespace DamageAssesment.Api.Locations.Test
|
|||||||
public async Task PostLocationAsync_ShouldReturnStatusCode200()
|
public async Task PostLocationAsync_ShouldReturnStatusCode200()
|
||||||
{
|
{
|
||||||
var mockLocationService = new Mock<ILocationsProvider>();
|
var mockLocationService = new Mock<ILocationsProvider>();
|
||||||
var mockResponse = await MockData.getOkResponseLocation("Loc1");
|
var mockResponse = await MockData.getOkResponseLocation(1);
|
||||||
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);
|
mockLocationService.Setup(service => service.PostLocationAsync(mockInputLocation)).ReturnsAsync(mockResponse);
|
||||||
|
|
||||||
var locationProvider = new LocationsController(mockLocationService.Object);
|
var locationProvider = new LocationsController(mockLocationService.Object);
|
||||||
@ -83,11 +83,11 @@ namespace DamageAssesment.Api.Locations.Test
|
|||||||
{
|
{
|
||||||
var mockLocationService = new Mock<ILocationsProvider>();
|
var mockLocationService = new Mock<ILocationsProvider>();
|
||||||
var mockResponse = await MockData.getLocationNotFoundResponse();
|
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);
|
mockLocationService.Setup(service => service.PostLocationAsync(mockInputLocation)).ReturnsAsync(mockResponse);
|
||||||
|
|
||||||
var locationProvider = new LocationsController(mockLocationService.Object);
|
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);
|
Assert.Equal(400, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -98,11 +98,11 @@ namespace DamageAssesment.Api.Locations.Test
|
|||||||
{
|
{
|
||||||
var mockLocationService = new Mock<ILocationsProvider>();
|
var mockLocationService = new Mock<ILocationsProvider>();
|
||||||
var mockResponse = await MockData.getLocation(true, "update success");
|
var mockResponse = await MockData.getLocation(true, "update success");
|
||||||
var mockInputLocation = new Models.Location { Id = "Loc1", RegionId = "R1", Name = "Location 1", SchoolType = "US", MaintenanceCenter = "1" };
|
var mockInputLocation = new Models.Location { Id = 1, LocationCode ="Loc1", RegionId = 1, Name = "Location 1", SchoolType = "US", MaintenanceCenter = "1" };
|
||||||
mockLocationService.Setup(service => service.UpdateLocationAsync(mockInputLocation)).ReturnsAsync(mockResponse);
|
mockLocationService.Setup(service => service.UpdateLocationAsync(1,mockInputLocation)).ReturnsAsync(mockResponse);
|
||||||
|
|
||||||
var locationProvider = new LocationsController(mockLocationService.Object);
|
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);
|
Assert.Equal(200, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -112,11 +112,11 @@ namespace DamageAssesment.Api.Locations.Test
|
|||||||
{
|
{
|
||||||
var mockLocationService = new Mock<ILocationsProvider>();
|
var mockLocationService = new Mock<ILocationsProvider>();
|
||||||
var mockResponse = await MockData.getLocation(false, null);
|
var mockResponse = await MockData.getLocation(false, null);
|
||||||
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.UpdateLocationAsync(mockInputLocation)).ReturnsAsync(mockResponse);
|
mockLocationService.Setup(service => service.UpdateLocationAsync(1,mockInputLocation)).ReturnsAsync(mockResponse);
|
||||||
|
|
||||||
var locationProvider = new LocationsController(mockLocationService.Object);
|
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);
|
Assert.Equal(404, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -127,10 +127,10 @@ namespace DamageAssesment.Api.Locations.Test
|
|||||||
{
|
{
|
||||||
var mockLocationService = new Mock<ILocationsProvider>();
|
var mockLocationService = new Mock<ILocationsProvider>();
|
||||||
var mockResponse = await MockData.getLocation(true, "delete success");
|
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 locationProvider = new LocationsController(mockLocationService.Object);
|
||||||
var result = (OkObjectResult)await locationProvider.DeleteLocation("Loc1");
|
var result = (OkObjectResult)await locationProvider.DeleteLocation(1);
|
||||||
|
|
||||||
Assert.Equal(200, result.StatusCode);
|
Assert.Equal(200, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -140,10 +140,10 @@ namespace DamageAssesment.Api.Locations.Test
|
|||||||
{
|
{
|
||||||
var mockLocationService = new Mock<ILocationsProvider>();
|
var mockLocationService = new Mock<ILocationsProvider>();
|
||||||
var mockResponse = await MockData.getLocation(false, null);
|
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 locationProvider = new LocationsController(mockLocationService.Object);
|
||||||
var result = (NotFoundResult)await locationProvider.DeleteLocation("Loc1");
|
var result = (NotFoundResult)await locationProvider.DeleteLocation(1);
|
||||||
|
|
||||||
Assert.Equal(404, result.StatusCode);
|
Assert.Equal(404, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -180,11 +180,11 @@ namespace DamageAssesment.Api.Locations.Test
|
|||||||
public async Task GetRegionAsync_ShouldReturnStatusCode200()
|
public async Task GetRegionAsync_ShouldReturnStatusCode200()
|
||||||
{
|
{
|
||||||
var mockRegionService = new Mock<IRegionsProvider>();
|
var mockRegionService = new Mock<IRegionsProvider>();
|
||||||
var mockResponse = await MockData.getOkResponse("1");
|
var mockResponse = await MockData.getOkResponse(1);
|
||||||
mockRegionService.Setup(service => service.GetRegionByIdAsync("1")).ReturnsAsync(mockResponse);
|
mockRegionService.Setup(service => service.GetRegionByIdAsync(1)).ReturnsAsync(mockResponse);
|
||||||
|
|
||||||
var regionProvider = new RegionsController(mockRegionService.Object);
|
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);
|
Assert.Equal(200, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -194,10 +194,10 @@ namespace DamageAssesment.Api.Locations.Test
|
|||||||
{
|
{
|
||||||
var mockRegionService = new Mock<IRegionsProvider>();
|
var mockRegionService = new Mock<IRegionsProvider>();
|
||||||
var mockResponse = await MockData.getNotFoundResponse();
|
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 regionProvider = new RegionsController(mockRegionService.Object);
|
||||||
var result = (NotFoundResult)await regionProvider.GetRegionAsync("99");
|
var result = (NotFoundResult)await regionProvider.GetRegionAsync(99);
|
||||||
Assert.Equal(404, result.StatusCode);
|
Assert.Equal(404, result.StatusCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -205,7 +205,7 @@ namespace DamageAssesment.Api.Locations.Test
|
|||||||
public async Task PostRegionAsync_ShouldReturnStatusCode200()
|
public async Task PostRegionAsync_ShouldReturnStatusCode200()
|
||||||
{
|
{
|
||||||
var mockRegionService = new Mock<IRegionsProvider>();
|
var mockRegionService = new Mock<IRegionsProvider>();
|
||||||
var mockResponse = await MockData.getOkResponse("1");
|
var mockResponse = await MockData.getOkResponse(1);
|
||||||
var mockInputRegion = await MockData.getInputRegionData();
|
var mockInputRegion = await MockData.getInputRegionData();
|
||||||
mockRegionService.Setup(service => service.PostRegionAsync(mockInputRegion)).ReturnsAsync(mockResponse);
|
mockRegionService.Setup(service => service.PostRegionAsync(mockInputRegion)).ReturnsAsync(mockResponse);
|
||||||
|
|
||||||
@ -233,12 +233,12 @@ namespace DamageAssesment.Api.Locations.Test
|
|||||||
public async Task PutRegionAsync_ShouldReturnStatusCode200()
|
public async Task PutRegionAsync_ShouldReturnStatusCode200()
|
||||||
{
|
{
|
||||||
var mockRegionService = new Mock<IRegionsProvider>();
|
var mockRegionService = new Mock<IRegionsProvider>();
|
||||||
var mockResponse = await MockData.getOkResponse("1");
|
var mockResponse = await MockData.getOkResponse(1);
|
||||||
var mockInputRegion = await MockData.getInputRegionData();
|
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 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);
|
Assert.Equal(200, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -249,10 +249,10 @@ namespace DamageAssesment.Api.Locations.Test
|
|||||||
var mockRegionService = new Mock<IRegionsProvider>();
|
var mockRegionService = new Mock<IRegionsProvider>();
|
||||||
var mockResponse = await MockData.getNotFoundResponse();
|
var mockResponse = await MockData.getNotFoundResponse();
|
||||||
var mockInputRegion = await MockData.getInputRegionData();
|
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 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);
|
Assert.Equal(404, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -263,10 +263,10 @@ namespace DamageAssesment.Api.Locations.Test
|
|||||||
var mockRegionService = new Mock<IRegionsProvider>();
|
var mockRegionService = new Mock<IRegionsProvider>();
|
||||||
var mockResponse = await MockData.getBadRequestResponse();
|
var mockResponse = await MockData.getBadRequestResponse();
|
||||||
var mockInputRegion = await MockData.getInputRegionData();
|
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 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);
|
Assert.Equal(400, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -275,12 +275,12 @@ namespace DamageAssesment.Api.Locations.Test
|
|||||||
public async Task DeleteRegionAsync_ShouldReturnStatusCode200()
|
public async Task DeleteRegionAsync_ShouldReturnStatusCode200()
|
||||||
{
|
{
|
||||||
var mockRegionService = new Mock<IRegionsProvider>();
|
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 regionProvider = new RegionsController(mockRegionService.Object);
|
||||||
var result = (OkObjectResult)await regionProvider.DeleteRegionAsync("1");
|
var result = (OkObjectResult)await regionProvider.DeleteRegionAsync(1);
|
||||||
|
|
||||||
Assert.Equal(200, result.StatusCode);
|
Assert.Equal(200, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -291,10 +291,10 @@ namespace DamageAssesment.Api.Locations.Test
|
|||||||
var mockRegionService = new Mock<IRegionsProvider>();
|
var mockRegionService = new Mock<IRegionsProvider>();
|
||||||
var mockResponse = await MockData.getNotFoundResponse();
|
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 regionProvider = new RegionsController(mockRegionService.Object);
|
||||||
var result = (NotFoundResult)await regionProvider.DeleteRegionAsync("1");
|
var result = (NotFoundResult)await regionProvider.DeleteRegionAsync(1);
|
||||||
|
|
||||||
Assert.Equal(404, result.StatusCode);
|
Assert.Equal(404, result.StatusCode);
|
||||||
}
|
}
|
||||||
|
@ -9,13 +9,13 @@ namespace DamageAssesment.Api.Locations.Test
|
|||||||
|
|
||||||
for (int i = 0; i < 10; i++)
|
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);
|
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 regions = await getOkResponse();
|
||||||
var region = regions.Item2.FirstOrDefault(s => s.Id == Id);
|
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++)
|
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);
|
return (true, list, null);
|
||||||
}
|
}
|
||||||
@ -39,16 +39,17 @@ namespace DamageAssesment.Api.Locations.Test
|
|||||||
return (false, null, null);
|
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 locations = await getOkResponseLocation();
|
||||||
var location = locations.Item2.FirstOrDefault(s => s.Id == Id);
|
var location = locations.Item2.FirstOrDefault(s => s.Id == Id);
|
||||||
return (true, location, null);
|
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()
|
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()
|
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" };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,14 @@
|
|||||||
using DamageAssesment.Api.Locations.Interfaces;
|
using DamageAssesment.Api.Locations.Interfaces;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
namespace DamageAssesment.Api.Locations.Controllers
|
namespace DamageAssesment.Api.Locations.Controllers
|
||||||
{
|
{
|
||||||
[Route("api")]
|
|
||||||
[ApiController]
|
[ApiController]
|
||||||
public class LocationsController : ControllerBase
|
public class LocationsController : ControllerBase
|
||||||
{
|
{
|
||||||
private ILocationsProvider LocationProvider;
|
private ILocationsProvider LocationProvider;
|
||||||
|
|
||||||
public LocationsController(ILocationsProvider LocationsProvider)
|
public LocationsController(ILocationsProvider LocationsProvider)
|
||||||
{
|
{
|
||||||
this.LocationProvider = LocationsProvider;
|
this.LocationProvider = LocationsProvider;
|
||||||
@ -17,7 +16,7 @@ namespace DamageAssesment.Api.Locations.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get all locations.
|
/// Get all locations.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpGet("Locations")]
|
[HttpGet("Locations")]
|
||||||
public async Task<ActionResult> GetLocationsAsync()
|
public async Task<ActionResult> GetLocationsAsync()
|
||||||
{
|
{
|
||||||
@ -25,7 +24,7 @@ namespace DamageAssesment.Api.Locations.Controllers
|
|||||||
var result = await LocationProvider.GetLocationsAsync();
|
var result = await LocationProvider.GetLocationsAsync();
|
||||||
if (result.IsSuccess)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.locations);
|
return Ok(result.Locations);
|
||||||
}
|
}
|
||||||
return NoContent();
|
return NoContent();
|
||||||
|
|
||||||
@ -33,9 +32,9 @@ namespace DamageAssesment.Api.Locations.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get all locations based on locationdId.
|
/// Get all locations based on locationdId.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpGet("Locations/{id}")]
|
[HttpGet("Locations/{id}")]
|
||||||
public async Task<ActionResult> GetLocationByIdAsync(string id)
|
public async Task<ActionResult> GetLocationByIdAsync(int id)
|
||||||
{
|
{
|
||||||
|
|
||||||
var result = await LocationProvider.GetLocationByIdAsync(id);
|
var result = await LocationProvider.GetLocationByIdAsync(id);
|
||||||
@ -49,16 +48,16 @@ namespace DamageAssesment.Api.Locations.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Update a Location.
|
/// Update a Location.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpPut("Locations")]
|
[HttpPut("Locations/{id}")]
|
||||||
public async Task<IActionResult> UpdateLocation(Models.Location Location)
|
public async Task<IActionResult> UpdateLocation(int id, Models.Location Location)
|
||||||
{
|
{
|
||||||
if (Location != null)
|
if (Location != null)
|
||||||
{
|
{
|
||||||
var result = await this.LocationProvider.UpdateLocationAsync(Location);
|
var result = await this.LocationProvider.UpdateLocationAsync(id, Location);
|
||||||
if (result.IsSuccess)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.ErrorMessage);
|
return Ok(result.Location);
|
||||||
}
|
}
|
||||||
return NotFound();
|
return NotFound();
|
||||||
}
|
}
|
||||||
@ -67,7 +66,7 @@ namespace DamageAssesment.Api.Locations.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Save a new location.
|
/// Save a new location.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpPost("Locations")]
|
[HttpPost("Locations")]
|
||||||
public async Task<IActionResult> CreateLocation(Models.Location Location)
|
public async Task<IActionResult> CreateLocation(Models.Location Location)
|
||||||
{
|
{
|
||||||
@ -76,23 +75,23 @@ namespace DamageAssesment.Api.Locations.Controllers
|
|||||||
var result = await this.LocationProvider.PostLocationAsync(Location);
|
var result = await this.LocationProvider.PostLocationAsync(Location);
|
||||||
if (result.IsSuccess)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.Question);
|
return Ok(result.Location);
|
||||||
}
|
}
|
||||||
return BadRequest();
|
return BadRequest(result.ErrorMessage);
|
||||||
}
|
}
|
||||||
return BadRequest();
|
return BadRequest();
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Delete an existing location.
|
/// Delete an existing location.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpDelete("Locations/{id}")]
|
[HttpDelete("Locations/{id}")]
|
||||||
public async Task<IActionResult> DeleteLocation(string id)
|
public async Task<IActionResult> DeleteLocation(int id)
|
||||||
{
|
{
|
||||||
var result = await this.LocationProvider.DeleteLocationAsync(id);
|
var result = await this.LocationProvider.DeleteLocationAsync(id);
|
||||||
if (result.IsSuccess)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.ErrorMessage);
|
return Ok(result.Location);
|
||||||
}
|
}
|
||||||
return NotFound();
|
return NotFound();
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
using DamageAssesment.Api.Locations.Interfaces;
|
using DamageAssesment.Api.Locations.Interfaces;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
namespace DamageAssesment.Api.Locations.Controllers
|
namespace DamageAssesment.Api.Locations.Controllers
|
||||||
{
|
{
|
||||||
[Route("api/[controller]")]
|
|
||||||
[ApiController]
|
[ApiController]
|
||||||
public class RegionsController : ControllerBase
|
public class RegionsController : ControllerBase
|
||||||
{
|
{
|
||||||
@ -16,25 +16,25 @@ namespace DamageAssesment.Api.Locations.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get all regions.2
|
/// Get all regions.2
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpGet]
|
[HttpGet("regions")]
|
||||||
public async Task<ActionResult> GetRegionsAsync()
|
public async Task<ActionResult> GetRegionsAsync()
|
||||||
{
|
{
|
||||||
var result = await regionProvider.GetRegionsAsync();
|
var result = await regionProvider.GetRegionsAsync();
|
||||||
if (result.IsSuccess)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.regions);
|
return Ok(result.Regions);
|
||||||
}
|
}
|
||||||
return NoContent();
|
return NoContent();
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// GET request for retrieving a region by its ID.
|
/// GET request for retrieving a region by its ID.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpGet("{Id}")]
|
[HttpGet("regions/{id}")]
|
||||||
public async Task<ActionResult> GetRegionAsync(string 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)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.Region);
|
return Ok(result.Region);
|
||||||
@ -44,8 +44,8 @@ namespace DamageAssesment.Api.Locations.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// POST request for creating a new region.
|
/// POST request for creating a new region.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpPost]
|
[HttpPost("regions")]
|
||||||
public async Task<ActionResult> PostRegionAsync(Models.Region region)
|
public async Task<ActionResult> PostRegionAsync(Models.Region region)
|
||||||
{
|
{
|
||||||
var result = await this.regionProvider.PostRegionAsync(region);
|
var result = await this.regionProvider.PostRegionAsync(region);
|
||||||
@ -58,11 +58,11 @@ namespace DamageAssesment.Api.Locations.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// PUT request for updating an existing region.
|
/// PUT request for updating an existing region.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpPut]
|
[HttpPut("regions/{id}")]
|
||||||
public async Task<ActionResult> PutRegionAsync(Models.Region region)
|
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)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.Region);
|
return Ok(result.Region);
|
||||||
@ -76,11 +76,11 @@ namespace DamageAssesment.Api.Locations.Controllers
|
|||||||
/// DELETE request for deleting a region based on ID.
|
/// DELETE request for deleting a region based on ID.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpDelete("{Id}")]
|
[HttpDelete("regions/{id}")]
|
||||||
public async Task<ActionResult> DeleteRegionAsync(string 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)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.Region);
|
return Ok(result.Region);
|
||||||
|
@ -6,18 +6,20 @@ namespace DamageAssesment.Api.Locations.Db
|
|||||||
public class Location
|
public class Location
|
||||||
{
|
{
|
||||||
[Key]
|
[Key]
|
||||||
|
public int Id { get; set; }
|
||||||
|
[ForeignKey("Region")]
|
||||||
|
public int RegionId { get; set; }
|
||||||
[StringLength(4)]
|
[StringLength(4)]
|
||||||
public string Id { get; set; }
|
public string LocationCode { get; set; }
|
||||||
|
|
||||||
[StringLength(50)]
|
[StringLength(50)]
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
[StringLength(1)]
|
[StringLength(4)]
|
||||||
public string MaintenanceCenter { get; set; }
|
public string MaintenanceCenter { get; set; }
|
||||||
|
|
||||||
[StringLength(2)]
|
[StringLength(2)]
|
||||||
public string SchoolType { get; set; }
|
public string SchoolType { get; set; }
|
||||||
[ForeignKey("Region")]
|
|
||||||
public string RegionId { get; set; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace DamageAssesment.Api.Locations.Db
|
namespace DamageAssesment.Api.Locations.Db
|
||||||
{
|
{
|
||||||
public class LocationDbContext:DbContext
|
public class LocationDbContext : DbContext
|
||||||
{
|
{
|
||||||
public DbSet<Db.Location> Locations { get; set; }
|
public DbSet<Db.Location> Locations { get; set; }
|
||||||
public DbSet<Db.Region> Regions { 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();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,15 +5,12 @@ namespace DamageAssesment.Api.Locations.Db
|
|||||||
public class Region
|
public class Region
|
||||||
{
|
{
|
||||||
[Key]
|
[Key]
|
||||||
[StringLength(2)]
|
public int Id { get; set; }
|
||||||
public string Id { get; set; }
|
|
||||||
|
|
||||||
[StringLength(50)]
|
[StringLength(50)]
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
[StringLength(5)]
|
[StringLength(5)]
|
||||||
public string Abbreviation { get; set; }
|
public string Abbreviation { get; set; }
|
||||||
|
|
||||||
// public ICollection<Location> Locations { get; set; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,11 +4,11 @@ namespace DamageAssesment.Api.Locations.Interfaces
|
|||||||
{
|
{
|
||||||
public interface ILocationsProvider
|
public interface ILocationsProvider
|
||||||
{
|
{
|
||||||
Task<(bool IsSuccess, IEnumerable<Models.Location> locations, string ErrorMessage)> GetLocationsAsync();
|
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 Location, string ErrorMessage)> GetLocationByIdAsync(int Id);
|
||||||
Task<(bool IsSuccess, Models.Location Question, string ErrorMessage)> PostLocationAsync(Models.Location Location);
|
Task<(bool IsSuccess, Models.Location Location, string ErrorMessage)> PostLocationAsync(Models.Location Location);
|
||||||
Task<(bool IsSuccess, string ErrorMessage)> UpdateLocationAsync(Models.Location Location);
|
Task<(bool IsSuccess, Models.Location Location, string ErrorMessage)> UpdateLocationAsync(int Id, Models.Location Location);
|
||||||
Task<(bool IsSuccess, string ErrorMessage)> DeleteLocationAsync(string Id);
|
Task<(bool IsSuccess, Models.Location Location, string ErrorMessage)> DeleteLocationAsync(int Id);
|
||||||
void SeedData();
|
void SeedData();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,11 +2,11 @@
|
|||||||
{
|
{
|
||||||
public interface IRegionsProvider
|
public interface IRegionsProvider
|
||||||
{
|
{
|
||||||
Task<(bool IsSuccess, IEnumerable<Models.Region> regions, string ErrorMessage)> GetRegionsAsync();
|
Task<(bool IsSuccess, IEnumerable<Models.Region> Regions, string ErrorMessage)> GetRegionsAsync();
|
||||||
Task<(bool IsSuccess, Models.Region Region, string ErrorMessage)> GetRegionByIdAsync(string Id);
|
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)> PostRegionAsync(Models.Region region);
|
||||||
Task<(bool IsSuccess, Models.Region Region, string ErrorMessage)> PutRegionAsync(Models.Region region);
|
Task<(bool IsSuccess, Models.Region Region, string ErrorMessage)> PutRegionAsync(int Id, Models.Region region);
|
||||||
Task<(bool IsSuccess, Models.Region Region, string ErrorMessage)> DeleteRegionAsync(string Id);
|
Task<(bool IsSuccess, Models.Region Region, string ErrorMessage)> DeleteRegionAsync(int Id);
|
||||||
void SeedData();
|
void SeedData();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,19 +4,12 @@ namespace DamageAssesment.Api.Locations.Models
|
|||||||
{
|
{
|
||||||
public class Location
|
public class Location
|
||||||
{
|
{
|
||||||
[StringLength(4)]
|
[Key]
|
||||||
public string Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
public int RegionId { get; set; }
|
||||||
[StringLength(1)]
|
public string LocationCode { get; set; }
|
||||||
public string RegionId { get; set; }
|
|
||||||
|
|
||||||
[StringLength(50)]
|
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
[StringLength(1)]
|
|
||||||
public string MaintenanceCenter { get; set; }
|
public string MaintenanceCenter { get; set; }
|
||||||
|
|
||||||
[StringLength(2)]
|
|
||||||
public string SchoolType { get; set; }
|
public string SchoolType { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,14 +4,8 @@ namespace DamageAssesment.Api.Locations.Models
|
|||||||
{
|
{
|
||||||
public class Region
|
public class Region
|
||||||
{
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
[StringLength(1)]
|
|
||||||
public string Id { get; set; }
|
|
||||||
|
|
||||||
[StringLength(50)]
|
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
[StringLength(5)]
|
|
||||||
public string Abbreviation { get; set; }
|
public string Abbreviation { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
public LocationProfile()
|
public LocationProfile()
|
||||||
{
|
{
|
||||||
CreateMap<Db.Location, Models.Location>();
|
CreateMap<Db.Location, Models.Location>();
|
||||||
|
CreateMap<Models.Location, Db.Location>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,23 +1,73 @@
|
|||||||
using DamageAssesment.Api.Locations.Db;
|
using DamageAssesment.Api.Locations.Db;
|
||||||
using DamageAssesment.Api.Locations.Interfaces;
|
using DamageAssesment.Api.Locations.Interfaces;
|
||||||
using DamageAssesment.Api.Locations.Providers;
|
using DamageAssesment.Api.Locations.Providers;
|
||||||
|
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.IdentityModel.Tokens;
|
||||||
|
using Microsoft.OpenApi.Models;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
|
||||||
// Add services to the container.
|
// Add services to the container.
|
||||||
|
var authkey = builder.Configuration.GetValue<string>("JwtSettings:securitykey");
|
||||||
|
builder.Services.AddAuthentication(item =>
|
||||||
|
{
|
||||||
|
item.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
|
||||||
|
item.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
|
||||||
|
}).AddJwtBearer(item =>
|
||||||
|
{
|
||||||
|
item.RequireHttpsMetadata = true;
|
||||||
|
item.SaveToken = true;
|
||||||
|
item.TokenValidationParameters = new TokenValidationParameters()
|
||||||
|
{
|
||||||
|
ValidateIssuerSigningKey = true,
|
||||||
|
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(authkey)),
|
||||||
|
ValidateIssuer = false,
|
||||||
|
ValidateAudience = false,
|
||||||
|
ClockSkew = TimeSpan.Zero
|
||||||
|
};
|
||||||
|
});
|
||||||
builder.Services.AddControllers();
|
builder.Services.AddControllers();
|
||||||
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
||||||
builder.Services.AddEndpointsApiExplorer();
|
builder.Services.AddEndpointsApiExplorer();
|
||||||
//builder.Services.AddSwaggerGen();
|
//builder.Services.AddSwaggerGen();
|
||||||
builder.Services.AddSwaggerGen(c =>
|
builder.Services.AddSwaggerGen(options =>
|
||||||
{
|
{
|
||||||
// Include XML comments from your assembly
|
// Include XML comments from your assembly
|
||||||
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
|
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
|
||||||
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
|
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
|
||||||
c.IncludeXmlComments(xmlPath);
|
options.IncludeXmlComments(xmlPath);
|
||||||
|
|
||||||
|
OpenApiSecurityScheme securityDefinition = new OpenApiSecurityScheme()
|
||||||
|
{
|
||||||
|
Name = "Bearer",
|
||||||
|
BearerFormat = "JWT",
|
||||||
|
Scheme = "bearer",
|
||||||
|
Description = "Specify the authorization token.",
|
||||||
|
In = ParameterLocation.Header,
|
||||||
|
Type = SecuritySchemeType.Http,
|
||||||
|
};
|
||||||
|
|
||||||
|
options.AddSecurityDefinition("jwt_auth", securityDefinition);
|
||||||
|
|
||||||
|
// Make sure swagger UI requires a Bearer token specified
|
||||||
|
OpenApiSecurityScheme securityScheme = new OpenApiSecurityScheme()
|
||||||
|
{
|
||||||
|
Reference = new OpenApiReference()
|
||||||
|
{
|
||||||
|
Id = "jwt_auth",
|
||||||
|
Type = ReferenceType.SecurityScheme
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
OpenApiSecurityRequirement securityRequirements = new OpenApiSecurityRequirement()
|
||||||
|
{
|
||||||
|
{securityScheme, new string[] { }},
|
||||||
|
};
|
||||||
|
|
||||||
|
options.AddSecurityRequirement(securityRequirements);
|
||||||
});
|
});
|
||||||
builder.Services.AddScoped<ILocationsProvider, LocationsProvider>();
|
builder.Services.AddScoped<ILocationsProvider, LocationsProvider>();
|
||||||
builder.Services.AddScoped<IRegionsProvider, RegionsProvider>();
|
builder.Services.AddScoped<IRegionsProvider, RegionsProvider>();
|
||||||
@ -26,7 +76,10 @@ builder.Services.AddDbContext<LocationDbContext>(option =>
|
|||||||
{
|
{
|
||||||
option.UseInMemoryDatabase("Locations");
|
option.UseInMemoryDatabase("Locations");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
var app = builder.Build();
|
var app = builder.Build();
|
||||||
|
// Add services to the container.
|
||||||
|
|
||||||
// Configure the HTTP request pipeline.
|
// Configure the HTTP request pipeline.
|
||||||
if (app.Environment.IsDevelopment())
|
if (app.Environment.IsDevelopment())
|
||||||
@ -44,6 +97,7 @@ if (app.Environment.IsDevelopment())
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
app.UseAuthentication();
|
||||||
app.UseAuthorization();
|
app.UseAuthorization();
|
||||||
|
|
||||||
app.MapControllers();
|
app.MapControllers();
|
||||||
|
@ -20,39 +20,16 @@ namespace DamageAssesment.Api.Locations.Providers
|
|||||||
//SeedData();
|
//SeedData();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<(bool IsSuccess, IEnumerable<Models.Location> locations, string ErrorMessage)> GetLocationsAsync()
|
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)
|
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
logger?.LogInformation("Query Location");
|
logger?.LogInformation("Query Location");
|
||||||
var Location = await locationDbContext.Locations.AsNoTracking().FirstOrDefaultAsync(q => q.Id == Id);
|
var locations = await locationDbContext.Locations.AsNoTracking().ToListAsync();
|
||||||
if (Location != null)
|
if (locations != null)
|
||||||
{
|
{
|
||||||
logger?.LogInformation($"{Location} customer(s) found");
|
logger?.LogInformation($"{locations.Count} Locations(s) found");
|
||||||
var result = mapper.Map<Db.Location, Models.Location>(Location);
|
var result = mapper.Map<IEnumerable<Db.Location>, IEnumerable<Models.Location>>(locations);
|
||||||
return (true, result, null);
|
return (true, result, null);
|
||||||
}
|
}
|
||||||
return (false, null, "Not found");
|
return (false, null, "Not found");
|
||||||
@ -63,21 +40,42 @@ namespace DamageAssesment.Api.Locations.Providers
|
|||||||
return (false, null, ex.Message);
|
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
|
try
|
||||||
{
|
{
|
||||||
logger?.LogInformation("Query Location");
|
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.Locations.Add(_location);
|
||||||
locationDbContext.SaveChanges();
|
await locationDbContext.SaveChangesAsync();
|
||||||
return (true, Location, null);
|
location.Id = _location.Id;
|
||||||
|
return (true, location, null);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return (false, null, "Location is Already exists");
|
return (false, null, "Location code is already exists");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@ -86,57 +84,67 @@ namespace DamageAssesment.Api.Locations.Providers
|
|||||||
return (false, null, ex.Message);
|
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
|
try
|
||||||
{
|
{
|
||||||
Db.Location _location = mapper.Map<Models.Location, Db.Location>(Location);
|
if (LocationExists(Id))
|
||||||
|
{
|
||||||
|
Db.Location _location = mapper.Map<Models.Location, Db.Location>(location);
|
||||||
locationDbContext.Entry(_location).State = EntityState.Modified;
|
locationDbContext.Entry(_location).State = EntityState.Modified;
|
||||||
locationDbContext.SaveChanges();
|
await locationDbContext.SaveChangesAsync();
|
||||||
return (true, "Record updated successfully");
|
return (true, location, "Record updated successfully");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return (false, null, "Location is not exists");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|
||||||
logger?.LogError(ex.ToString());
|
logger?.LogError(ex.ToString());
|
||||||
return (false, ex.Message);
|
return (false, null, ex.Message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public async Task<(bool IsSuccess, string ErrorMessage)> DeleteLocationAsync(string Id)
|
public async Task<(bool IsSuccess, Models.Location Location, string ErrorMessage)> DeleteLocationAsync(int Id)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Db.Location Location = locationDbContext.Locations.AsNoTracking().Where(a => a.Id == Id).FirstOrDefault();
|
Db.Location location = locationDbContext.Locations.AsNoTracking().Where(a => a.Id == Id).FirstOrDefault();
|
||||||
if (Location == null)
|
if (location == null)
|
||||||
{
|
{
|
||||||
return (false, "record not found");
|
return (false, null, "record not found");
|
||||||
}
|
}
|
||||||
locationDbContext.Locations.Remove(Location);
|
locationDbContext.Locations.Remove(location);
|
||||||
locationDbContext.SaveChanges();
|
await locationDbContext.SaveChangesAsync();
|
||||||
return (true, "Record deleted successfully");
|
return (true, mapper.Map<Db.Location, Models.Location>(location), "Record deleted successfully");
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|
||||||
logger?.LogError(ex.ToString());
|
logger?.LogError(ex.ToString());
|
||||||
return (false, ex.Message);
|
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;
|
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()
|
public void SeedData()
|
||||||
{
|
{
|
||||||
if (!locationDbContext.Locations.Any())
|
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 = 1, LocationCode = "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 = 2, LocationCode = "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 = 3, LocationCode = "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 = 4, LocationCode = "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 = 5, LocationCode = "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 = 6, LocationCode = "Loc6", RegionId = 3, Name = "BOB GRAHAM EDUCATION CENTER 6", MaintenanceCenter = "1", SchoolType = "US" });
|
||||||
locationDbContext.SaveChanges();
|
locationDbContext.SaveChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ namespace DamageAssesment.Api.Locations.Providers
|
|||||||
//SeedData();
|
//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
|
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
|
try
|
||||||
{
|
{
|
||||||
@ -69,11 +69,10 @@ namespace DamageAssesment.Api.Locations.Providers
|
|||||||
{
|
{
|
||||||
if (region != null)
|
if (region != null)
|
||||||
{
|
{
|
||||||
var regions = await locationDbContext.Regions.AsNoTracking().ToListAsync();
|
var _region = mapper.Map<Models.Region, Db.Region>(region);
|
||||||
|
locationDbContext.Regions.Add(_region);
|
||||||
region.Id = Convert.ToString(regions.Count + 1);
|
await locationDbContext.SaveChangesAsync();
|
||||||
locationDbContext.Regions.Add(mapper.Map<Models.Region, Db.Region>(region));
|
region.Id = _region.Id;
|
||||||
locationDbContext.SaveChanges();
|
|
||||||
logger?.LogInformation($"{region} added successfuly");
|
logger?.LogInformation($"{region} added successfuly");
|
||||||
return (true, region, "Successful");
|
return (true, region, "Successful");
|
||||||
}
|
}
|
||||||
@ -90,15 +89,17 @@ 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
|
try
|
||||||
{
|
{
|
||||||
if (region != null)
|
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)
|
if (_region != null)
|
||||||
|
{
|
||||||
|
if (RegionExists(region.Id))
|
||||||
{
|
{
|
||||||
locationDbContext.Regions.Update(mapper.Map<Models.Region, Db.Region>(region));
|
locationDbContext.Regions.Update(mapper.Map<Models.Region, Db.Region>(region));
|
||||||
locationDbContext.SaveChanges();
|
locationDbContext.SaveChanges();
|
||||||
@ -106,14 +107,20 @@ namespace DamageAssesment.Api.Locations.Providers
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
logger?.LogInformation($"RegionID: {region.Id} Not found");
|
logger?.LogInformation($"RegionID: {Id} Not exists");
|
||||||
|
return (false, null, "Region not exists");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
logger?.LogInformation($"RegionID: {Id} Not found");
|
||||||
return (false, null, "Not Found");
|
return (false, null, "Not Found");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
logger?.LogInformation($"RegionID: {region.Id} Bad Request");
|
logger?.LogInformation($"RegionID: {Id} Bad Request");
|
||||||
return (false, null, "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
|
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()
|
public void SeedData()
|
||||||
{
|
{
|
||||||
if (!locationDbContext.Regions.Any())
|
if (!locationDbContext.Regions.Any())
|
||||||
{
|
{
|
||||||
locationDbContext.Regions.Add(new Db.Region() { Id = "1", Name = "North", Abbreviation = "N" });
|
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 = 2, Name = "South", Abbreviation = "S" });
|
||||||
locationDbContext.Regions.Add(new Db.Region() { Id = "3", Name = "Central", Abbreviation = "C" });
|
locationDbContext.Regions.Add(new Db.Region() { Id = 3, Name = "Central", Abbreviation = "C" });
|
||||||
locationDbContext.SaveChanges();
|
locationDbContext.SaveChanges();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
using DamageAssesment.Api.Questions.Interfaces;
|
using DamageAssesment.Api.Questions.Interfaces;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
namespace DamageAssesment.Api.Questions.Controllers
|
namespace DamageAssesment.Api.Questions.Controllers
|
||||||
{
|
{
|
||||||
[Route("api")]
|
|
||||||
[ApiController]
|
[ApiController]
|
||||||
public class QuestionsController : ControllerBase
|
public class QuestionsController : ControllerBase
|
||||||
{
|
{
|
||||||
@ -11,22 +11,20 @@ namespace DamageAssesment.Api.Questions.Controllers
|
|||||||
|
|
||||||
public QuestionsController(IQuestionsProvider questionsProvider)
|
public QuestionsController(IQuestionsProvider questionsProvider)
|
||||||
{
|
{
|
||||||
|
|
||||||
this.questionsProvider = questionsProvider;
|
this.questionsProvider = questionsProvider;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// GET request for retrieving questions.
|
/// GET request for retrieving questions.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
// get all questions
|
//get all questions
|
||||||
[Route("{Language}/Questions")]
|
[Authorize(Roles = "admin,survey,user,report")]
|
||||||
[Route("Questions")]
|
[Route("Questions")]
|
||||||
|
[Route("Questions/{language:alpha}")]
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public async Task<IActionResult> GetQuestionsAsync(string? Language)
|
public async Task<IActionResult> GetQuestionsAsync(string? language)
|
||||||
{
|
{
|
||||||
var result = await this.questionsProvider.GetQuestionsAsync(Language);
|
var result = await this.questionsProvider.GetQuestionsAsync(language);
|
||||||
if (result.IsSuccess)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.Questions);
|
return Ok(result.Questions);
|
||||||
@ -38,12 +36,13 @@ namespace DamageAssesment.Api.Questions.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// GET request for retrieving a question by ID.
|
/// GET request for retrieving a question by ID.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Route("{Language}/Questions/{id}")]
|
[Authorize(Roles = "admin,survey,user,report")]
|
||||||
[Route("Questions/{id}")]
|
[Route("Questions/{id}/{language:alpha}")]
|
||||||
|
[Route("Questions/{id:int}")]
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public async Task<IActionResult> GetQuestionAsync(int id, string? Language)
|
public async Task<IActionResult> GetQuestionByIdAsync(int id, string? language)
|
||||||
{
|
{
|
||||||
var result = await this.questionsProvider.GetQuestionAsync(id,Language);
|
var result = await this.questionsProvider.GetQuestionAsync(id, language);
|
||||||
if (result.IsSuccess)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.Question);
|
return Ok(result.Question);
|
||||||
@ -56,12 +55,13 @@ namespace DamageAssesment.Api.Questions.Controllers
|
|||||||
/// GET request for retrieving survey questions based on a survey ID.
|
/// GET request for retrieving survey questions based on a survey ID.
|
||||||
/// Uri: {Optional language}/GetSurveyQuestions/{surveyId} :Default returns question in all languages
|
/// Uri: {Optional language}/GetSurveyQuestions/{surveyId} :Default returns question in all languages
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Route("{Language}/GetSurveyQuestions/{surveyId}")]
|
[Authorize(Roles = "admin,survey,user,report")]
|
||||||
[Route("GetSurveyQuestions/{surveyId}")]
|
[Route("Questions/BySurvey/{surveyId:int}")]
|
||||||
|
[Route("Questions/BySurvey/{surveyId:int}/{language:alpha}")]
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public async Task<IActionResult> GetSurveyQuestions(int surveyId,string? Language)
|
public async Task<IActionResult> GetSurveyQuestions(int surveyId,string? language)
|
||||||
{
|
{
|
||||||
var result = await this.questionsProvider.GetSurveyQuestionAsync(surveyId, Language);
|
var result = await this.questionsProvider.GetSurveyQuestionAsync(surveyId, language);
|
||||||
if (result.IsSuccess)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.SurveyQuestions);
|
return Ok(result.SurveyQuestions);
|
||||||
@ -72,6 +72,7 @@ namespace DamageAssesment.Api.Questions.Controllers
|
|||||||
/// PUT request for updating a question (multilingual).
|
/// PUT request for updating a question (multilingual).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpPut("Questions")]
|
[HttpPut("Questions")]
|
||||||
public async Task<IActionResult> UpdateQuestion(Models.Question question)
|
public async Task<IActionResult> UpdateQuestion(Models.Question question)
|
||||||
{
|
{
|
||||||
@ -93,6 +94,7 @@ namespace DamageAssesment.Api.Questions.Controllers
|
|||||||
/// POST request for creating a new question (multilingual).
|
/// POST request for creating a new question (multilingual).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpPost("Questions")]
|
[HttpPost("Questions")]
|
||||||
public async Task<IActionResult> CreateQuestion(Models.Question question)
|
public async Task<IActionResult> CreateQuestion(Models.Question question)
|
||||||
{
|
{
|
||||||
@ -111,6 +113,7 @@ namespace DamageAssesment.Api.Questions.Controllers
|
|||||||
/// DELETE request for deleting a question based on ID.
|
/// DELETE request for deleting a question based on ID.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
|
[Authorize(Roles = "admin")]
|
||||||
[HttpDelete("Questions/{id}")]
|
[HttpDelete("Questions/{id}")]
|
||||||
public async Task<IActionResult> DeleteQuestion(int id)
|
public async Task<IActionResult> DeleteQuestion(int id)
|
||||||
{
|
{
|
||||||
@ -126,10 +129,12 @@ namespace DamageAssesment.Api.Questions.Controllers
|
|||||||
/// GET request for retrieving question categories.
|
/// GET request for retrieving question categories.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
[HttpGet("QuestionCategories")]
|
[Authorize(Roles = "admin,user,report")]
|
||||||
public async Task<IActionResult> GetQuestionCategoriesAsync()
|
[HttpGet("Questions/Categories")]
|
||||||
|
[HttpGet("Questions/Categories/{language:alpha}")]
|
||||||
|
public async Task<IActionResult> GetQuestionCategoriesAsync(string? language)
|
||||||
{
|
{
|
||||||
var result = await this.questionsProvider.GetQuestionCategoriesAsync();
|
var result = await this.questionsProvider.GetQuestionCategoriesAsync(language);
|
||||||
if (result.IsSuccess)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.QuestionCategories);
|
return Ok(result.QuestionCategories);
|
||||||
@ -139,11 +144,12 @@ namespace DamageAssesment.Api.Questions.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// GET request for retrieving a question category by ID.
|
/// GET request for retrieving a question category by ID.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin,report")]
|
||||||
[HttpGet("QuestionCategories/{id}")]
|
[HttpGet("Questions/Categories/{id:int}")]
|
||||||
public async Task<IActionResult> GetQuestionCategoryAsync(int id)
|
[HttpGet("Questions/Categories/{id:int}/{language:alpha}")]
|
||||||
|
public async Task<IActionResult> GetQuestionCategoryAsync(int id,string? language)
|
||||||
{
|
{
|
||||||
var result = await this.questionsProvider.GetQuestionCategoryAsync(id);
|
var result = await this.questionsProvider.GetQuestionCategoryAsync(id, language);
|
||||||
if (result.IsSuccess)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.QuestionCategory);
|
return Ok(result.QuestionCategory);
|
||||||
@ -155,8 +161,8 @@ namespace DamageAssesment.Api.Questions.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// PUT request for updating a question category.
|
/// PUT request for updating a question category.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin,survey,report")]
|
||||||
[HttpPut("QuestionCategories")]
|
[HttpPut("Questions/Categories")]
|
||||||
public async Task<IActionResult> UpdateQuestionCategory(Models.QuestionCategory questionCategory)
|
public async Task<IActionResult> UpdateQuestionCategory(Models.QuestionCategory questionCategory)
|
||||||
{
|
{
|
||||||
if (questionCategory != null)
|
if (questionCategory != null)
|
||||||
@ -177,7 +183,8 @@ namespace DamageAssesment.Api.Questions.Controllers
|
|||||||
/// POST request for creating a new question category.
|
/// POST request for creating a new question category.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
[HttpPost("QuestionCategories")]
|
[Authorize(Roles = "admin")]
|
||||||
|
[HttpPost("Questions/Categories")]
|
||||||
public async Task<IActionResult> CreateQuestionCategory(Models.QuestionCategory questionCategory)
|
public async Task<IActionResult> CreateQuestionCategory(Models.QuestionCategory questionCategory)
|
||||||
{
|
{
|
||||||
if (questionCategory != null)
|
if (questionCategory != null)
|
||||||
@ -195,7 +202,8 @@ namespace DamageAssesment.Api.Questions.Controllers
|
|||||||
/// DELETE request for deleting a question category based on ID.
|
/// DELETE request for deleting a question category based on ID.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
[HttpDelete("QuestionCategories/{id}")]
|
[Authorize(Roles = "admin")]
|
||||||
|
[HttpDelete("Questions/Categories/{id}")]
|
||||||
public async Task<IActionResult> DeleteQuestionCategory(int id)
|
public async Task<IActionResult> DeleteQuestionCategory(int id)
|
||||||
{
|
{
|
||||||
var result = await this.questionsProvider.DeleteQuestionCategoryAsync(id);
|
var result = await this.questionsProvider.DeleteQuestionCategoryAsync(id);
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace DamageAssesment.Api.Questions.Db
|
||||||
|
{
|
||||||
|
public class CategoryTranslation
|
||||||
|
{
|
||||||
|
[Key]
|
||||||
|
public int Id { get; set; }
|
||||||
|
[ForeignKey("QuestionCategory")]
|
||||||
|
public int CategoryId { get; set; }
|
||||||
|
public string Title { get; set; }
|
||||||
|
public string Language { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -7,8 +7,8 @@ namespace DamageAssesment.Api.Questions.Db
|
|||||||
{
|
{
|
||||||
[Key]
|
[Key]
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string CategoryName { get; set; }
|
public string IconName { get; set; }
|
||||||
public string CategoryImage { get; set; }
|
public string IconLibrary { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ namespace DamageAssesment.Api.Questions.Db
|
|||||||
public DbSet<Db.QuestionType> QuestionTypes { get; set; }
|
public DbSet<Db.QuestionType> QuestionTypes { get; set; }
|
||||||
public DbSet<Db.QuestionsTranslation> QuestionsTranslations { get; set; }
|
public DbSet<Db.QuestionsTranslation> QuestionsTranslations { get; set; }
|
||||||
public DbSet<Db.QuestionCategory> QuestionCategories { get; set; }
|
public DbSet<Db.QuestionCategory> QuestionCategories { get; set; }
|
||||||
|
public DbSet<Db.CategoryTranslation> CategoryTranslations { get; set; }
|
||||||
public QuestionDbContext(DbContextOptions options) : base(options)
|
public QuestionDbContext(DbContextOptions options) : base(options)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -29,6 +30,9 @@ namespace DamageAssesment.Api.Questions.Db
|
|||||||
modelBuilder.Entity<QuestionCategory>()
|
modelBuilder.Entity<QuestionCategory>()
|
||||||
.Property(item => item.Id)
|
.Property(item => item.Id)
|
||||||
.ValueGeneratedOnAdd();
|
.ValueGeneratedOnAdd();
|
||||||
|
modelBuilder.Entity<CategoryTranslation>()
|
||||||
|
.Property(item => item.Id)
|
||||||
|
.ValueGeneratedOnAdd();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,19 +4,19 @@ namespace DamageAssesment.Api.Questions.Interfaces
|
|||||||
{
|
{
|
||||||
public interface IQuestionsProvider : IQuestionTypesProvider
|
public interface IQuestionsProvider : IQuestionTypesProvider
|
||||||
{
|
{
|
||||||
Task<(bool IsSuccess, Models.Question Question, string ErrorMessage)> GetQuestionAsync(int Id, string Language);
|
Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> GetQuestionAsync(int id, string language);
|
||||||
Task<(bool IsSuccess, IEnumerable<Models.Question> Questions, string ErrorMessage)> GetQuestionsAsync(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, List<SurveyQuestions> SurveyQuestions, string ErrorMessage)> GetSurveyQuestionAsync(int surveyId,string language);
|
||||||
Task<(bool IsSuccess, Models.Question Question, string ErrorMessage)> PostQuestionAsync(Models.Question Question);
|
Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> PostQuestionAsync(Models.Question Question);
|
||||||
Task<(bool IsSuccess, Models.Question Question, string ErrorMessage)> UpdateQuestionAsync(Models.Question Question);
|
Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> UpdateQuestionAsync(Models.Question Question);
|
||||||
Task<(bool IsSuccess, Models.Question Question, string ErrorMessage)> DeleteQuestionAsync(int Id);
|
Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> DeleteQuestionAsync(int id);
|
||||||
|
|
||||||
|
|
||||||
Task<(bool IsSuccess, IEnumerable<Models.QuestionCategory> QuestionCategories, string ErrorMessage)> GetQuestionCategoriesAsync();
|
Task<(bool IsSuccess, IEnumerable<Models.MultiLanQuestionCategory> QuestionCategories, string ErrorMessage)> GetQuestionCategoriesAsync(string? language);
|
||||||
Task<(bool IsSuccess, Models.QuestionCategory QuestionCategory, string ErrorMessage)> GetQuestionCategoryAsync(int Id);
|
Task<(bool IsSuccess, Models.MultiLanQuestionCategory QuestionCategory, string ErrorMessage)> GetQuestionCategoryAsync(int id, string? language);
|
||||||
Task<(bool IsSuccess, Models.QuestionCategory QuestionCategory, string ErrorMessage)> PostQuestionCategoryAsync(Models.QuestionCategory QuestionCategory);
|
Task<(bool IsSuccess, Models.MultiLanQuestionCategory QuestionCategory, string ErrorMessage)> PostQuestionCategoryAsync(Models.QuestionCategory QuestionCategory);
|
||||||
Task<(bool IsSuccess, Models.QuestionCategory QuestionCategory, string ErrorMessage)> UpdateQuestionCategoryAsync(Models.QuestionCategory QuestionCategory);
|
Task<(bool IsSuccess, Models.MultiLanQuestionCategory QuestionCategory, string ErrorMessage)> UpdateQuestionCategoryAsync(Models.QuestionCategory QuestionCategory);
|
||||||
Task<(bool IsSuccess, Models.QuestionCategory QuestionCategory, string ErrorMessage)> DeleteQuestionCategoryAsync(int Id);
|
Task<(bool IsSuccess, Models.MultiLanQuestionCategory QuestionCategory, string ErrorMessage)> DeleteQuestionCategoryAsync(int id);
|
||||||
void SeedData();
|
void SeedData();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
namespace DamageAssesment.Api.Questions.Models
|
||||||
|
{
|
||||||
|
public class CategoryTranslation
|
||||||
|
{
|
||||||
|
public string Title { get; set; }
|
||||||
|
public string Language { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -1,23 +1,18 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
namespace DamageAssesment.Api.Questions.Models
|
||||||
|
|
||||||
namespace DamageAssesment.Api.Questions.Models
|
|
||||||
{
|
{
|
||||||
public class Question
|
public class Question: BaseQuestion
|
||||||
|
{
|
||||||
|
public List<QuestionsTranslation> Questions { get; set; }
|
||||||
|
}
|
||||||
|
public class BaseQuestion
|
||||||
{
|
{
|
||||||
public int Id { get; set; }
|
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; } = string.Empty;
|
||||||
|
|
||||||
public int QuestionNumber { get; set; }
|
public int QuestionNumber { get; set; }
|
||||||
public bool IsRequired { get; set; }
|
public bool IsRequired { get; set; }
|
||||||
public bool Comment { get; set; }
|
public bool Comment { get; set; }
|
||||||
|
|
||||||
public bool Key { get; set; }
|
public bool Key { get; set; }
|
||||||
public int? SurveyId { get; set; }
|
public int SurveyId { get; set; }
|
||||||
public int CategoryId { get; set; }
|
public int CategoryId { get; set; }
|
||||||
// public int? Survey_SurveyID { get; set; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,17 @@
|
|||||||
namespace DamageAssesment.Api.Questions.Models
|
namespace DamageAssesment.Api.Questions.Models
|
||||||
{
|
{
|
||||||
public class QuestionCategory
|
public class MultiLanQuestionCategory : BaseQuestionCategory
|
||||||
|
{
|
||||||
|
public object Titles { get; set; }
|
||||||
|
}
|
||||||
|
public class QuestionCategory : BaseQuestionCategory
|
||||||
|
{
|
||||||
|
public List<CategoryTranslation> Categories { get; set; }
|
||||||
|
}
|
||||||
|
public class BaseQuestionCategory
|
||||||
{
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string CategoryName { get; set; }
|
public string IconName { get; set; }
|
||||||
public string CategoryImage { get; set; }
|
public string IconLibrary { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,10 @@
|
|||||||
public class QuestionsTranslation
|
public class QuestionsTranslation
|
||||||
{
|
{
|
||||||
public string QuestionText { get; set; }
|
public string QuestionText { get; set; }
|
||||||
public string Language { get; set; } = "En";
|
public string Language { get; set; } = "en";
|
||||||
|
}
|
||||||
|
public class MultiLanguage : BaseQuestion
|
||||||
|
{
|
||||||
|
public Dictionary<string,string> Text { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,8 +3,8 @@
|
|||||||
public class SurveyQuestions
|
public class SurveyQuestions
|
||||||
{
|
{
|
||||||
public int CategoryId { get; set; }
|
public int CategoryId { get; set; }
|
||||||
public string CategoryName { get; set; }
|
public string IconName { get; set; }
|
||||||
public string CategoryImage { get; set; }
|
public string IconLibrary { get; set; }
|
||||||
public List<Question> Questions { get; set; }
|
public List<MultiLanguage> QuestionsText { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,11 +8,15 @@ namespace DamageAssesment.Api.Questions.Profiles
|
|||||||
{
|
{
|
||||||
CreateMap<Db.Question, Models.Question>().ForMember(dest => dest.TypeText,
|
CreateMap<Db.Question, Models.Question>().ForMember(dest => dest.TypeText,
|
||||||
opt => opt.MapFrom(src => src.QuestionType.TypeText));
|
opt => opt.MapFrom(src => src.QuestionType.TypeText));
|
||||||
|
CreateMap<Db.Question, Models.MultiLanguage>().ForMember(dest => dest.TypeText,
|
||||||
|
opt => opt.MapFrom(src => src.QuestionType.TypeText));
|
||||||
CreateMap<Models.QuestionCategory, Db.QuestionCategory>();
|
CreateMap<Models.QuestionCategory, Db.QuestionCategory>();
|
||||||
CreateMap<Db.QuestionCategory, Models.QuestionCategory>();
|
CreateMap<Db.QuestionCategory, Models.MultiLanQuestionCategory>();
|
||||||
CreateMap<Models.Question, Db.Question>();
|
CreateMap<Models.Question, Db.Question>();
|
||||||
CreateMap<Db.QuestionsTranslation, Models.QuestionsTranslation>();
|
CreateMap<Db.QuestionsTranslation, Models.QuestionsTranslation>();
|
||||||
CreateMap<Models.QuestionsTranslation, Db.QuestionsTranslation>();
|
CreateMap<Models.QuestionsTranslation, Db.QuestionsTranslation>();
|
||||||
|
CreateMap<Db.CategoryTranslation, Models.CategoryTranslation>();
|
||||||
|
CreateMap<Models.CategoryTranslation, Db.CategoryTranslation>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,33 @@
|
|||||||
using DamageAssesment.Api.Questions.Db;
|
using DamageAssesment.Api.Questions.Db;
|
||||||
using DamageAssesment.Api.Questions.Interfaces;
|
using DamageAssesment.Api.Questions.Interfaces;
|
||||||
using DamageAssesment.Api.Questions.Providers;
|
using DamageAssesment.Api.Questions.Providers;
|
||||||
|
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.IdentityModel.Tokens;
|
||||||
|
using Microsoft.OpenApi.Models;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
// Add services to the container.
|
||||||
|
var authkey = builder.Configuration.GetValue<string>("JwtSettings:securitykey");
|
||||||
|
builder.Services.AddAuthentication(item =>
|
||||||
|
{
|
||||||
|
item.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
|
||||||
|
item.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
|
||||||
|
}).AddJwtBearer(item =>
|
||||||
|
{
|
||||||
|
item.RequireHttpsMetadata = true;
|
||||||
|
item.SaveToken = true;
|
||||||
|
item.TokenValidationParameters = new TokenValidationParameters()
|
||||||
|
{
|
||||||
|
ValidateIssuerSigningKey = true,
|
||||||
|
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(authkey)),
|
||||||
|
ValidateIssuer = false,
|
||||||
|
ValidateAudience = false,
|
||||||
|
ClockSkew = TimeSpan.Zero
|
||||||
|
};
|
||||||
|
});
|
||||||
// Add services to the container.
|
// Add services to the container.
|
||||||
|
|
||||||
builder.Services.AddControllers();
|
builder.Services.AddControllers();
|
||||||
@ -16,16 +37,43 @@ builder.Services.AddControllers();
|
|||||||
builder.Services.AddScoped<IQuestionsProvider, QuestionsProvider>();
|
builder.Services.AddScoped<IQuestionsProvider, QuestionsProvider>();
|
||||||
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
|
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
|
||||||
|
|
||||||
|
|
||||||
builder.Services.AddEndpointsApiExplorer();
|
builder.Services.AddEndpointsApiExplorer();
|
||||||
//builder.Services.AddSwaggerGen();
|
//builder.Services.AddSwaggerGen();
|
||||||
builder.Services.AddSwaggerGen(c =>
|
builder.Services.AddSwaggerGen(options =>
|
||||||
{
|
{
|
||||||
// Include XML comments from your assembly
|
// Include XML comments from your assembly
|
||||||
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
|
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
|
||||||
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
|
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
|
||||||
c.IncludeXmlComments(xmlPath);
|
options.IncludeXmlComments(xmlPath);
|
||||||
|
|
||||||
|
OpenApiSecurityScheme securityDefinition = new OpenApiSecurityScheme()
|
||||||
|
{
|
||||||
|
Name = "Bearer",
|
||||||
|
BearerFormat = "JWT",
|
||||||
|
Scheme = "bearer",
|
||||||
|
Description = "Specify the authorization token.",
|
||||||
|
In = ParameterLocation.Header,
|
||||||
|
Type = SecuritySchemeType.Http,
|
||||||
|
};
|
||||||
|
|
||||||
|
options.AddSecurityDefinition("jwt_auth", securityDefinition);
|
||||||
|
|
||||||
|
// Make sure swagger UI requires a Bearer token specified
|
||||||
|
OpenApiSecurityScheme securityScheme = new OpenApiSecurityScheme()
|
||||||
|
{
|
||||||
|
Reference = new OpenApiReference()
|
||||||
|
{
|
||||||
|
Id = "jwt_auth",
|
||||||
|
Type = ReferenceType.SecurityScheme
|
||||||
|
}
|
||||||
|
};
|
||||||
|
OpenApiSecurityRequirement securityRequirements = new OpenApiSecurityRequirement()
|
||||||
|
{
|
||||||
|
{securityScheme, new string[] { }},
|
||||||
|
};
|
||||||
|
options.AddSecurityRequirement(securityRequirements);
|
||||||
});
|
});
|
||||||
|
|
||||||
builder.Services.AddDbContext<QuestionDbContext>(option =>
|
builder.Services.AddDbContext<QuestionDbContext>(option =>
|
||||||
{
|
{
|
||||||
option.UseInMemoryDatabase("Questions");
|
option.UseInMemoryDatabase("Questions");
|
||||||
@ -45,7 +93,7 @@ if (app.Environment.IsDevelopment())
|
|||||||
questionProvider.SeedData();
|
questionProvider.SeedData();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
app.UseAuthentication();
|
||||||
app.UseAuthorization();
|
app.UseAuthorization();
|
||||||
|
|
||||||
app.MapControllers();
|
app.MapControllers();
|
||||||
|
@ -2,9 +2,7 @@
|
|||||||
using DamageAssesment.Api.Questions.Db;
|
using DamageAssesment.Api.Questions.Db;
|
||||||
using DamageAssesment.Api.Questions.Interfaces;
|
using DamageAssesment.Api.Questions.Interfaces;
|
||||||
using DamageAssesment.Api.Questions.Models;
|
using DamageAssesment.Api.Questions.Models;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata.Internal;
|
|
||||||
|
|
||||||
namespace DamageAssesment.Api.Questions.Providers
|
namespace DamageAssesment.Api.Questions.Providers
|
||||||
{
|
{
|
||||||
@ -57,16 +55,89 @@ namespace DamageAssesment.Api.Questions.Providers
|
|||||||
|
|
||||||
if (!questionDbContext.QuestionCategories.Any())
|
if (!questionDbContext.QuestionCategories.Any())
|
||||||
{
|
{
|
||||||
questionDbContext.QuestionCategories.Add(new Db.QuestionCategory() { Id = 1, CategoryName = "Flooding", CategoryImage= "https://example.com/images/img1.png" });
|
questionDbContext.QuestionCategories.Add(new Db.QuestionCategory() { Id = 1, IconName = "Flooding", IconLibrary= "https://example.com/images/img1.png" });
|
||||||
questionDbContext.QuestionCategories.Add(new Db.QuestionCategory() { Id = 2, CategoryName = "Electrical", CategoryImage = "https://example.com/images/img2.png" });
|
questionDbContext.QuestionCategories.Add(new Db.QuestionCategory() { Id = 2, IconName = "Electrical", IconLibrary = "https://example.com/images/img2.png" });
|
||||||
questionDbContext.QuestionCategories.Add(new Db.QuestionCategory() { Id = 3, CategoryName = "Structural", CategoryImage = "https://example.com/images/img3.png" });
|
questionDbContext.QuestionCategories.Add(new Db.QuestionCategory() { Id = 3, IconName = "Structural", IconLibrary = "https://example.com/images/img3.png" });
|
||||||
questionDbContext.QuestionCategories.Add(new Db.QuestionCategory() { Id = 4, CategoryName = "Utility", CategoryImage = "https://example.com/images/img4.png" });
|
questionDbContext.QuestionCategories.Add(new Db.QuestionCategory() { Id = 4, IconName = "Utility", IconLibrary = "https://example.com/images/img4.png" });
|
||||||
questionDbContext.QuestionCategories.Add(new Db.QuestionCategory() { Id = 5, CategoryName = "Debris", CategoryImage = "https://example.com/images/img5.png" });
|
questionDbContext.QuestionCategories.Add(new Db.QuestionCategory() { Id = 5, IconName = "Debris", IconLibrary = "https://example.com/images/img5.png" });
|
||||||
|
questionDbContext.SaveChanges();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!questionDbContext.CategoryTranslations.Any())
|
||||||
|
{
|
||||||
|
|
||||||
|
questionDbContext.CategoryTranslations.Add(new Db.CategoryTranslation() { Id = 1, CategoryId = 1, Title = "Flooding", Language = "en" });
|
||||||
|
questionDbContext.CategoryTranslations.Add(new Db.CategoryTranslation() { Id = 2, CategoryId = 2, Title = "Electrical", Language = "en" });
|
||||||
|
questionDbContext.CategoryTranslations.Add(new Db.CategoryTranslation() { Id = 3, CategoryId = 3, Title = "Structural", Language = "en" });
|
||||||
|
questionDbContext.CategoryTranslations.Add(new Db.CategoryTranslation() { Id = 4, CategoryId = 4, Title = "Utility", Language = "en" });
|
||||||
|
questionDbContext.CategoryTranslations.Add(new Db.CategoryTranslation() { Id = 5, CategoryId = 5, Title = "Debris", Language = "en" });
|
||||||
|
questionDbContext.CategoryTranslations.Add(new Db.CategoryTranslation() { Id = 6, CategoryId = 1, Title = "Inondation", Language = "fr" });
|
||||||
|
questionDbContext.CategoryTranslations.Add(new Db.CategoryTranslation() { Id = 7, CategoryId = 2, Title = "Électrique", Language = "fr" });
|
||||||
|
questionDbContext.CategoryTranslations.Add(new Db.CategoryTranslation() { Id = 8, CategoryId = 3, Title = "De construction", Language = "fr" });
|
||||||
|
questionDbContext.CategoryTranslations.Add(new Db.CategoryTranslation() { Id = 9, CategoryId = 4, Title = "Utilitaire", Language = "fr" });
|
||||||
|
questionDbContext.CategoryTranslations.Add(new Db.CategoryTranslation() { Id = 10, CategoryId = 5, Title = "Débris", Language = "fr" });
|
||||||
|
questionDbContext.CategoryTranslations.Add(new Db.CategoryTranslation() { Id = 11, CategoryId = 1, Title = "Inundación", Language = "es" });
|
||||||
|
questionDbContext.CategoryTranslations.Add(new Db.CategoryTranslation() { Id = 12, CategoryId = 2, Title = "Eléctrica", Language = "es" });
|
||||||
|
questionDbContext.CategoryTranslations.Add(new Db.CategoryTranslation() { Id = 13, CategoryId = 3, Title = "Estructural", Language = "es" });
|
||||||
|
questionDbContext.CategoryTranslations.Add(new Db.CategoryTranslation() { Id = 14, CategoryId = 4, Title = "Utilidad", Language = "es" });
|
||||||
|
questionDbContext.CategoryTranslations.Add(new Db.CategoryTranslation() { Id = 15, CategoryId = 5, Title = "Escombros", Language = "es" });
|
||||||
questionDbContext.SaveChanges();
|
questionDbContext.SaveChanges();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<(bool IsSuccess, IEnumerable<Models.Question> Questions, string ErrorMessage)> GetQuestionsAsync(string Language)
|
public List<Models.CategoryTranslation> GetCategoryTranslations(int id, string? language)
|
||||||
|
{
|
||||||
|
List<Models.CategoryTranslation> categoryTranslations = new List<Models.CategoryTranslation>();
|
||||||
|
if (string.IsNullOrEmpty(language))
|
||||||
|
{
|
||||||
|
categoryTranslations = mapper.Map<List<Db.CategoryTranslation>, List<Models.CategoryTranslation>>(
|
||||||
|
questionDbContext.CategoryTranslations.AsNoTracking().Where(a => a.CategoryId == id).ToList());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
categoryTranslations = mapper.Map<List<Db.CategoryTranslation>, List<Models.CategoryTranslation>>(
|
||||||
|
questionDbContext.CategoryTranslations.AsNoTracking().Where(a => a.CategoryId == id && a.Language == language).ToList());
|
||||||
|
}
|
||||||
|
return categoryTranslations;
|
||||||
|
}
|
||||||
|
public object CreateCategoryMultiLanguageObject(List<Models.CategoryTranslation> categoryTranslations)
|
||||||
|
{
|
||||||
|
object MultiLanguage = new object();
|
||||||
|
Dictionary<string, string> dict = new Dictionary<string, string>();
|
||||||
|
foreach (Models.CategoryTranslation item in categoryTranslations)
|
||||||
|
{
|
||||||
|
dict.Add(item.Language, item.Title);
|
||||||
|
}
|
||||||
|
MultiLanguage = dict;
|
||||||
|
return MultiLanguage;
|
||||||
|
}
|
||||||
|
public List<Models.QuestionsTranslation> GetQuestionsTranslations(int id, string? language)
|
||||||
|
{
|
||||||
|
List<Models.QuestionsTranslation> QuestionTranslations;
|
||||||
|
if (string.IsNullOrEmpty(language))
|
||||||
|
{
|
||||||
|
QuestionTranslations = mapper.Map<List<Db.QuestionsTranslation>, List<Models.QuestionsTranslation>>(
|
||||||
|
questionDbContext.QuestionsTranslations.AsNoTracking().Where(a => a.QuestionId == id).ToList());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QuestionTranslations = mapper.Map<List<Db.QuestionsTranslation>, List<Models.QuestionsTranslation>>(
|
||||||
|
questionDbContext.QuestionsTranslations.AsNoTracking().Where(a => a.QuestionId == id && a.Language == language).ToList());
|
||||||
|
}
|
||||||
|
return QuestionTranslations;
|
||||||
|
}
|
||||||
|
public Dictionary<string, string> CreateMultiLanguageObject(List<Models.QuestionsTranslation> questions)
|
||||||
|
{
|
||||||
|
MultiLanguage MultiLanguage = new MultiLanguage();
|
||||||
|
Dictionary<string, string> dict = new Dictionary<string, string>();
|
||||||
|
foreach (Models.QuestionsTranslation item in questions)
|
||||||
|
{
|
||||||
|
dict.Add(item.Language, item.QuestionText);
|
||||||
|
}
|
||||||
|
//MultiLanguage.questionText = dict;
|
||||||
|
return dict;
|
||||||
|
}
|
||||||
|
public async Task<(bool IsSuccess, IEnumerable<Models.MultiLanguage> Questions, string ErrorMessage)> GetQuestionsAsync(string language)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -76,21 +147,10 @@ namespace DamageAssesment.Api.Questions.Providers
|
|||||||
{
|
{
|
||||||
|
|
||||||
//logger?.LogInformation($"{question} customer(s) found");
|
//logger?.LogInformation($"{question} customer(s) found");
|
||||||
var result = mapper.Map<IEnumerable<Db.Question>, IEnumerable<Models.Question>>(questions);
|
var result = mapper.Map<IEnumerable<Db.Question>, IEnumerable<Models.MultiLanguage>>(questions);
|
||||||
|
foreach (var item in result)
|
||||||
|
|
||||||
foreach (var question in result)
|
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(Language))
|
item.Text = CreateMultiLanguageObject(GetQuestionsTranslations(item.Id, language));
|
||||||
{
|
|
||||||
question.Questions = mapper.Map<List<Db.QuestionsTranslation>, List<Models.QuestionsTranslation>>(
|
|
||||||
questionDbContext.QuestionsTranslations.Where(a => a.QuestionId == question.Id).ToList());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
question.Questions = mapper.Map<List<Db.QuestionsTranslation>, List<Models.QuestionsTranslation>>(
|
|
||||||
questionDbContext.QuestionsTranslations.Where(a => a.QuestionId == question.Id && a.Language == Language).ToList());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return (true, result, null);
|
return (true, result, null);
|
||||||
}
|
}
|
||||||
@ -102,27 +162,17 @@ namespace DamageAssesment.Api.Questions.Providers
|
|||||||
return (false, null, ex.Message);
|
return (false, null, ex.Message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public async Task<(bool IsSuccess, Models.Question Question, string ErrorMessage)> GetQuestionAsync(int Id, string Language)
|
public async Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> GetQuestionAsync(int id, string language)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
logger?.LogInformation("Query Question");
|
logger?.LogInformation("Query Question");
|
||||||
var question = await questionDbContext.Questions.Include("QuestionType").AsNoTracking().FirstOrDefaultAsync(q => q.Id == Id);
|
var question = await questionDbContext.Questions.Include("QuestionType").AsNoTracking().FirstOrDefaultAsync(q => q.Id == id);
|
||||||
if (question != null)
|
if (question != null)
|
||||||
{
|
{
|
||||||
logger?.LogInformation($"{question} customer(s) found");
|
logger?.LogInformation($"{question} customer(s) found");
|
||||||
var result = mapper.Map<Db.Question, Models.Question>(question);
|
var result = mapper.Map<Db.Question, Models.MultiLanguage>(question);
|
||||||
|
result.Text = CreateMultiLanguageObject(GetQuestionsTranslations(id, language));
|
||||||
if (string.IsNullOrEmpty(Language))
|
|
||||||
{
|
|
||||||
result.Questions = mapper.Map<List<Db.QuestionsTranslation>, List<Models.QuestionsTranslation>>(
|
|
||||||
questionDbContext.QuestionsTranslations.Where(a => a.QuestionId == result.Id).ToList());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
result.Questions = mapper.Map<List<Db.QuestionsTranslation>, List<Models.QuestionsTranslation>>(
|
|
||||||
questionDbContext.QuestionsTranslations.Where(a => a.QuestionId == result.Id && a.Language == Language).ToList());
|
|
||||||
}
|
|
||||||
return (true, result, null);
|
return (true, result, null);
|
||||||
}
|
}
|
||||||
return (false, null, "Not found");
|
return (false, null, "Not found");
|
||||||
@ -133,27 +183,15 @@ namespace DamageAssesment.Api.Questions.Providers
|
|||||||
return (false, null, ex.Message);
|
return (false, null, ex.Message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public List<Models.Question> GetSurveyQuestion(List<Models.Question> questions, string Language)
|
public List<Models.MultiLanguage> GetSurveyQuestion(List<Models.MultiLanguage> questions, string language)
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(Language))
|
|
||||||
{
|
{
|
||||||
foreach (var item in questions)
|
foreach (var item in questions)
|
||||||
{
|
{
|
||||||
item.Questions = mapper.Map<List<Db.QuestionsTranslation>, List<Models.QuestionsTranslation>>(
|
item.Text = CreateMultiLanguageObject(GetQuestionsTranslations(item.Id, language));
|
||||||
questionDbContext.QuestionsTranslations.Where(a => a.QuestionId == item.Id).ToList());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
foreach (var item in questions)
|
|
||||||
{
|
|
||||||
item.Questions = mapper.Map<List<Db.QuestionsTranslation>, List<Models.QuestionsTranslation>>(
|
|
||||||
questionDbContext.QuestionsTranslations.Where(a => a.QuestionId == item.Id && a.Language == Language).ToList());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return questions;
|
return questions;
|
||||||
}
|
}
|
||||||
public async Task<(bool IsSuccess, List<SurveyQuestions> SurveyQuestions, string ErrorMessage)> GetSurveyQuestionAsync(int SurveyId, string Language)
|
public async Task<(bool IsSuccess, List<SurveyQuestions> SurveyQuestions, string ErrorMessage)> GetSurveyQuestionAsync(int SurveyId, string language)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -170,9 +208,9 @@ namespace DamageAssesment.Api.Questions.Providers
|
|||||||
surveyQuestionsList.Add(new SurveyQuestions()
|
surveyQuestionsList.Add(new SurveyQuestions()
|
||||||
{
|
{
|
||||||
CategoryId = item.Id,
|
CategoryId = item.Id,
|
||||||
CategoryImage = item.CategoryImage,
|
IconLibrary = item.IconLibrary,
|
||||||
CategoryName = item.CategoryName,
|
IconName = item.IconName,
|
||||||
Questions = GetSurveyQuestion(mapper.Map<List<Db.Question>, List<Models.Question>>(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)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -187,7 +225,7 @@ namespace DamageAssesment.Api.Questions.Providers
|
|||||||
return (false, null, ex.Message);
|
return (false, null, ex.Message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public async Task<(bool IsSuccess, Models.Question Question, string ErrorMessage)> PostQuestionAsync(Models.Question Question)
|
public async Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> PostQuestionAsync(Models.Question Question)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -200,7 +238,9 @@ namespace DamageAssesment.Api.Questions.Providers
|
|||||||
questionDbContext.QuestionsTranslations.AddRange(dbquestiontranslation);
|
questionDbContext.QuestionsTranslations.AddRange(dbquestiontranslation);
|
||||||
questionDbContext.SaveChanges();
|
questionDbContext.SaveChanges();
|
||||||
Question.Id = dbquestion.Id;
|
Question.Id = dbquestion.Id;
|
||||||
return (true, Question, null);
|
var result = mapper.Map<Db.Question, Models.MultiLanguage>(dbquestion);
|
||||||
|
result.Text = CreateMultiLanguageObject(GetQuestionsTranslations(result.Id,""));
|
||||||
|
return (true, result, null);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -208,7 +248,7 @@ namespace DamageAssesment.Api.Questions.Providers
|
|||||||
return (false, null, ex.Message);
|
return (false, null, ex.Message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public async Task<(bool IsSuccess, Models.Question Question, string ErrorMessage)> UpdateQuestionAsync(Models.Question Question)
|
public async Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> UpdateQuestionAsync(Models.Question Question)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -222,7 +262,9 @@ namespace DamageAssesment.Api.Questions.Providers
|
|||||||
dbquestiontranslation.ForEach(i => i.QuestionId = dbquestion.Id);
|
dbquestiontranslation.ForEach(i => i.QuestionId = dbquestion.Id);
|
||||||
questionDbContext.QuestionsTranslations.AddRange(dbquestiontranslation);
|
questionDbContext.QuestionsTranslations.AddRange(dbquestiontranslation);
|
||||||
questionDbContext.SaveChanges();
|
questionDbContext.SaveChanges();
|
||||||
return (true, Question, null);
|
var result = mapper.Map<Db.Question, Models.MultiLanguage>(dbquestion);
|
||||||
|
result.Text = CreateMultiLanguageObject(GetQuestionsTranslations(result.Id, ""));
|
||||||
|
return (true, result, null);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -231,21 +273,23 @@ namespace DamageAssesment.Api.Questions.Providers
|
|||||||
return (false, null, ex.Message);
|
return (false, null, ex.Message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public async Task<(bool IsSuccess, Models.Question Question, string ErrorMessage)> DeleteQuestionAsync(int Id)
|
public async Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> DeleteQuestionAsync(int id)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var question = await questionDbContext.Questions.Where(x => x.Id == Id).FirstOrDefaultAsync();
|
var question = await questionDbContext.Questions.Where(x => x.Id == id).FirstOrDefaultAsync();
|
||||||
|
|
||||||
if (question != null)
|
if (question != null)
|
||||||
{
|
{
|
||||||
|
var result = mapper.Map<Db.Question, Models.MultiLanguage>(question);
|
||||||
|
result.Text = CreateMultiLanguageObject(GetQuestionsTranslations(result.Id, ""));
|
||||||
questionDbContext.Questions.Remove(question);
|
questionDbContext.Questions.Remove(question);
|
||||||
questionDbContext.SaveChanges();
|
questionDbContext.SaveChanges();
|
||||||
return (true, mapper.Map<Db.Question, Models.Question>(question), $"QuestionID {Id} deleted Successfuly");
|
return (true, result, $"QuestionID {id} deleted Successfuly");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
logger?.LogInformation($"QuestionID: {Id} Not found");
|
logger?.LogInformation($"QuestionID: {id} Not found");
|
||||||
return (false, null, "Not Found");
|
return (false, null, "Not Found");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -258,7 +302,7 @@ namespace DamageAssesment.Api.Questions.Providers
|
|||||||
|
|
||||||
//Question Category Logic
|
//Question Category Logic
|
||||||
|
|
||||||
public async Task<(bool IsSuccess, IEnumerable<Models.QuestionCategory> QuestionCategories, string ErrorMessage)> GetQuestionCategoriesAsync()
|
public async Task<(bool IsSuccess, IEnumerable<Models.MultiLanQuestionCategory> QuestionCategories, string ErrorMessage)> GetQuestionCategoriesAsync(string? language)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -267,7 +311,11 @@ namespace DamageAssesment.Api.Questions.Providers
|
|||||||
if (questionCategories != null)
|
if (questionCategories != null)
|
||||||
{
|
{
|
||||||
//logger?.LogInformation($"{question} customer(s) found");
|
//logger?.LogInformation($"{question} customer(s) found");
|
||||||
var result = mapper.Map<IEnumerable<Db.QuestionCategory>, IEnumerable<Models.QuestionCategory>>(questionCategories);
|
var result = mapper.Map<IEnumerable<Db.QuestionCategory>, IEnumerable<Models.MultiLanQuestionCategory>>(questionCategories);
|
||||||
|
foreach (var category in result)
|
||||||
|
{
|
||||||
|
category.Titles = CreateCategoryMultiLanguageObject(GetCategoryTranslations(category.Id, language));
|
||||||
|
}
|
||||||
return (true, result, null);
|
return (true, result, null);
|
||||||
}
|
}
|
||||||
return (false, null, "Not found");
|
return (false, null, "Not found");
|
||||||
@ -278,16 +326,17 @@ namespace DamageAssesment.Api.Questions.Providers
|
|||||||
return (false, null, ex.Message);
|
return (false, null, ex.Message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public async Task<(bool IsSuccess, Models.QuestionCategory QuestionCategory, string ErrorMessage)> GetQuestionCategoryAsync(int Id)
|
public async Task<(bool IsSuccess, Models.MultiLanQuestionCategory QuestionCategory, string ErrorMessage)> GetQuestionCategoryAsync(int id, string? language)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
logger?.LogInformation("Query Question");
|
logger?.LogInformation("Query Question");
|
||||||
var questioncategory = await questionDbContext.QuestionCategories.AsNoTracking().FirstOrDefaultAsync(q => q.Id == Id);
|
var questioncategory = await questionDbContext.QuestionCategories.AsNoTracking().FirstOrDefaultAsync(q => q.Id == id);
|
||||||
if (questioncategory != null)
|
if (questioncategory != null)
|
||||||
{
|
{
|
||||||
logger?.LogInformation($"{questioncategory} customer(s) found");
|
logger?.LogInformation($"{questioncategory} customer(s) found");
|
||||||
var result = mapper.Map<Db.QuestionCategory, Models.QuestionCategory>(questioncategory);
|
var result = mapper.Map<Db.QuestionCategory, Models.MultiLanQuestionCategory>(questioncategory);
|
||||||
|
result.Titles = CreateCategoryMultiLanguageObject(GetCategoryTranslations(result.Id, language));
|
||||||
return (true, result, null);
|
return (true, result, null);
|
||||||
}
|
}
|
||||||
return (false, null, "Not found");
|
return (false, null, "Not found");
|
||||||
@ -298,17 +347,23 @@ namespace DamageAssesment.Api.Questions.Providers
|
|||||||
return (false, null, ex.Message);
|
return (false, null, ex.Message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public async Task<(bool IsSuccess, Models.QuestionCategory QuestionCategory, string ErrorMessage)> PostQuestionCategoryAsync(Models.QuestionCategory QuestionCategory)
|
public async Task<(bool IsSuccess, Models.MultiLanQuestionCategory QuestionCategory, string ErrorMessage)> PostQuestionCategoryAsync(Models.QuestionCategory QuestionCategory)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
logger?.LogInformation("Query Question");
|
logger?.LogInformation("Query Question");
|
||||||
var dbQuestionCategory = mapper.Map<Models.QuestionCategory, Db.QuestionCategory>(QuestionCategory);
|
var dbQuestionCategory = mapper.Map<Models.QuestionCategory, Db.QuestionCategory>(QuestionCategory);
|
||||||
|
var dbCategorytranslations = mapper.Map<List<Models.CategoryTranslation>, List<Db.CategoryTranslation>>(QuestionCategory.Categories);
|
||||||
// Question.QuestionType = GetQuestionType(Question.QuestionTypeId);
|
// Question.QuestionType = GetQuestionType(Question.QuestionTypeId);
|
||||||
questionDbContext.QuestionCategories.Add(dbQuestionCategory);
|
questionDbContext.QuestionCategories.Add(dbQuestionCategory);
|
||||||
questionDbContext.SaveChanges();
|
questionDbContext.SaveChanges();
|
||||||
QuestionCategory.Id = dbQuestionCategory.Id;
|
QuestionCategory.Id = dbQuestionCategory.Id;
|
||||||
return (true, QuestionCategory, null);
|
dbCategorytranslations.ForEach(i => i.CategoryId = QuestionCategory.Id);
|
||||||
|
questionDbContext.CategoryTranslations.AddRange(dbCategorytranslations);
|
||||||
|
questionDbContext.SaveChanges();
|
||||||
|
var result = mapper.Map<Db.QuestionCategory, Models.MultiLanQuestionCategory>(dbQuestionCategory);
|
||||||
|
result.Titles = CreateCategoryMultiLanguageObject(GetCategoryTranslations(result.Id, ""));
|
||||||
|
return (true, result, null);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -316,15 +371,23 @@ namespace DamageAssesment.Api.Questions.Providers
|
|||||||
return (false, null, ex.Message);
|
return (false, null, ex.Message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public async Task<(bool IsSuccess, Models.QuestionCategory QuestionCategory, string ErrorMessage)> UpdateQuestionCategoryAsync(Models.QuestionCategory QuestionCategory)
|
public async Task<(bool IsSuccess, Models.MultiLanQuestionCategory QuestionCategory, string ErrorMessage)> UpdateQuestionCategoryAsync(Models.QuestionCategory QuestionCategory)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var dbQuestionCategory = mapper.Map<Models.QuestionCategory, Db.QuestionCategory>(QuestionCategory);
|
var dbQuestionCategory = mapper.Map<Models.QuestionCategory, Db.QuestionCategory>(QuestionCategory);
|
||||||
|
var dbCategorytranslations = mapper.Map<List<Models.CategoryTranslation>, List<Db.CategoryTranslation>>(QuestionCategory.Categories);
|
||||||
questionDbContext.Entry(dbQuestionCategory).State = EntityState.Modified;
|
questionDbContext.Entry(dbQuestionCategory).State = EntityState.Modified;
|
||||||
|
QuestionCategory.Id = dbQuestionCategory.Id;
|
||||||
|
var oldcategories = questionDbContext.CategoryTranslations.Where(a => a.CategoryId == dbQuestionCategory.Id).ToList();
|
||||||
|
if (oldcategories != null)
|
||||||
|
questionDbContext.CategoryTranslations.RemoveRange(oldcategories);
|
||||||
|
dbCategorytranslations.ForEach(i => i.CategoryId = QuestionCategory.Id);
|
||||||
|
questionDbContext.CategoryTranslations.AddRange(dbCategorytranslations);
|
||||||
questionDbContext.SaveChanges();
|
questionDbContext.SaveChanges();
|
||||||
return (true, QuestionCategory, null);
|
var result = mapper.Map<Db.QuestionCategory, Models.MultiLanQuestionCategory>(dbQuestionCategory);
|
||||||
|
result.Titles = CreateCategoryMultiLanguageObject(GetCategoryTranslations(result.Id, ""));
|
||||||
|
return (true, result, null);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -333,18 +396,20 @@ namespace DamageAssesment.Api.Questions.Providers
|
|||||||
return (false, null, ex.Message);
|
return (false, null, ex.Message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public async Task<(bool IsSuccess, Models.QuestionCategory QuestionCategory, string ErrorMessage)> DeleteQuestionCategoryAsync(int Id)
|
public async Task<(bool IsSuccess, Models.MultiLanQuestionCategory QuestionCategory, string ErrorMessage)> DeleteQuestionCategoryAsync(int Id)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var questioncategory = await questionDbContext.QuestionCategories.Where(x => x.Id == Id).FirstOrDefaultAsync();
|
var questioncategory = await questionDbContext.QuestionCategories.Where(x => x.Id == Id).FirstOrDefaultAsync();
|
||||||
if (questioncategory != null)
|
if (questioncategory != null)
|
||||||
{
|
{
|
||||||
|
var result = mapper.Map<Db.QuestionCategory, Models.MultiLanQuestionCategory>(questioncategory);
|
||||||
|
result.Titles = CreateCategoryMultiLanguageObject(GetCategoryTranslations(result.Id, ""));
|
||||||
var question = await questionDbContext.Questions.Where(x => x.Id == Id).ToListAsync();
|
var question = await questionDbContext.Questions.Where(x => x.Id == Id).ToListAsync();
|
||||||
questionDbContext.Questions.RemoveRange(question);
|
questionDbContext.Questions.RemoveRange(question);
|
||||||
questionDbContext.QuestionCategories.Remove(questioncategory);
|
questionDbContext.QuestionCategories.Remove(questioncategory);
|
||||||
questionDbContext.SaveChanges();
|
questionDbContext.SaveChanges();
|
||||||
return (true, mapper.Map<Db.QuestionCategory, Models.QuestionCategory>(questioncategory), $"QuestionID {Id} deleted Successfuly");
|
return (true, result, $"QuestionID {Id} deleted Successfuly");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -8,42 +8,42 @@ namespace DamageAssesment.Api.Questions.Test
|
|||||||
{
|
{
|
||||||
public class CategoryMockData
|
public class CategoryMockData
|
||||||
{
|
{
|
||||||
public static async Task<(bool, IEnumerable<Questions.Models.QuestionCategory>, string)> getOkResponse()
|
public static async Task<(bool, IEnumerable<Questions.Models.MultiLanQuestionCategory>, string)> getOkResponse()
|
||||||
{
|
{
|
||||||
IEnumerable<Questions.Models.QuestionCategory> list = new List<Questions.Models.QuestionCategory>();
|
IEnumerable<Questions.Models.MultiLanQuestionCategory> list = new List<Questions.Models.MultiLanQuestionCategory>();
|
||||||
|
|
||||||
for (int i = 0; i < 10; i++)
|
for (int i = 0; i < 10; i++)
|
||||||
{
|
{
|
||||||
list.Append(new Questions.Models.QuestionCategory { Id = i, CategoryImage = "img"+i,CategoryName="Category "+i });
|
list.Append(new Questions.Models.MultiLanQuestionCategory { Id = i, IconLibrary = "img"+i,IconName="Category "+i });
|
||||||
}
|
}
|
||||||
return (true, list, null);
|
return (true, list, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<(bool, Questions.Models.QuestionCategory, string)> getOkResponse(int Id)
|
public static async Task<(bool, Questions.Models.MultiLanQuestionCategory, string)> getOkResponse(int Id)
|
||||||
{
|
{
|
||||||
var Questions = await getOkResponse();
|
var Questions = await getOkResponse();
|
||||||
var Question = Questions.Item2.FirstOrDefault(s => s.Id == Id);
|
var Question = Questions.Item2.FirstOrDefault(s => s.Id == Id);
|
||||||
return (true, Question, null);
|
return (true, Question, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<(bool, Questions.Models.QuestionCategory, string)> getBadRequestResponse()
|
public static async Task<(bool, Questions.Models.MultiLanQuestionCategory, string)> getBadRequestResponse()
|
||||||
{
|
{
|
||||||
return (false, null, "Bad Request");
|
return (false, null, "Bad Request");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<(bool, Questions.Models.QuestionCategory, string)> getNotFoundResponse()
|
public static async Task<(bool, Questions.Models.MultiLanQuestionCategory, string)> getNotFoundResponse()
|
||||||
{
|
{
|
||||||
return (false, null, "Not Found");
|
return (false, null, "Not Found");
|
||||||
}
|
}
|
||||||
public static async Task<(bool, IEnumerable<Questions.Models.QuestionCategory>, string)> getNoContentResponse()
|
public static async Task<(bool, IEnumerable<Questions.Models.MultiLanQuestionCategory>, string)> getNoContentResponse()
|
||||||
{
|
{
|
||||||
IEnumerable<Questions.Models.QuestionCategory> list = new List<Questions.Models.QuestionCategory>();
|
IEnumerable<Questions.Models.MultiLanQuestionCategory> list = new List<Questions.Models.MultiLanQuestionCategory>();
|
||||||
return (false, list, null);
|
return (false, list, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<Questions.Models.QuestionCategory> getInputQuestionCategoryData()
|
public static async Task<Questions.Models.QuestionCategory> getInputQuestionCategoryData()
|
||||||
{
|
{
|
||||||
return new Questions.Models.QuestionCategory { Id = 1, CategoryName = "Category 1",CategoryImage="img 1" };
|
return new Questions.Models.QuestionCategory { Id = 1, IconName = "Category 1",IconLibrary="img 1" };
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,13 +5,13 @@ namespace DamageAssesment.Api.Questions.Test
|
|||||||
public class MockData
|
public class MockData
|
||||||
{
|
{
|
||||||
|
|
||||||
public static async Task<(bool, IEnumerable<Questions.Models.Question>, string)> getOkResponse()
|
public static async Task<(bool, IEnumerable<Questions.Models.MultiLanguage>, string)> getOkResponse()
|
||||||
{
|
{
|
||||||
IEnumerable<Questions.Models.Question> list = new List<Questions.Models.Question>();
|
IEnumerable<Questions.Models.MultiLanguage> list = new List<Questions.Models.MultiLanguage>();
|
||||||
|
|
||||||
for (int i = 0; i < 10; i++)
|
for (int i = 0; i < 10; i++)
|
||||||
{
|
{
|
||||||
list.Append(new Questions.Models.Question { 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);
|
return (true, list, null);
|
||||||
}
|
}
|
||||||
@ -23,38 +23,38 @@ namespace DamageAssesment.Api.Questions.Test
|
|||||||
|
|
||||||
for (int i = 0; i < 10; i++)
|
for (int i = 0; i < 10; i++)
|
||||||
{
|
{
|
||||||
List<Models.Question> question = new List<Models.Question>();
|
List<Models.MultiLanguage> question = new List<Models.MultiLanguage>();
|
||||||
question.Add(new Models.Question { Id = i, TypeText = "Text" + i, SurveyId = 1, QuestionNumber = 1, IsRequired = true, Comment = false, Key = true, CategoryId = i });
|
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
|
list.Append(new Questions.Models.SurveyQuestions
|
||||||
{
|
{
|
||||||
CategoryId = i,
|
CategoryId = i,
|
||||||
CategoryImage = "img" + i,
|
IconLibrary = "img" + i,
|
||||||
CategoryName = "Category " + i,
|
IconName = "Category " + i,
|
||||||
Questions = question
|
QuestionsText = question
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return (true, list, null);
|
return (true, list, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<(bool, Questions.Models.Question, string)> getOkResponse(int Id)
|
public static async Task<(bool, Questions.Models.MultiLanguage, string)> getOkResponse(int Id)
|
||||||
{
|
{
|
||||||
var Questions = await getOkResponse();
|
var Questions = await getOkResponse();
|
||||||
var Question = Questions.Item2.FirstOrDefault(s => s.Id == Id);
|
var Question = Questions.Item2.FirstOrDefault(s => s.Id == Id);
|
||||||
return (true, Question, null);
|
return (true, Question, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<(bool, Questions.Models.Question, string)> getBadRequestResponse()
|
public static async Task<(bool, Questions.Models.MultiLanguage, string)> getBadRequestResponse()
|
||||||
{
|
{
|
||||||
return (false, null, "Bad Request");
|
return (false, null, "Bad Request");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<(bool, Questions.Models.Question, string)> getNotFoundResponse()
|
public static async Task<(bool, Questions.Models.MultiLanguage, string)> getNotFoundResponse()
|
||||||
{
|
{
|
||||||
return (false, null, "Not Found");
|
return (false, null, "Not Found");
|
||||||
}
|
}
|
||||||
public static async Task<(bool, IEnumerable<Questions.Models.Question>, string)> getNoContentResponse()
|
public static async Task<(bool, IEnumerable<Questions.Models.MultiLanguage>, string)> getNoContentResponse()
|
||||||
{
|
{
|
||||||
IEnumerable<Questions.Models.Question> list = new List<Questions.Models.Question>();
|
IEnumerable<Questions.Models.MultiLanguage> list = new List<Questions.Models.MultiLanguage>();
|
||||||
return (false, list, null);
|
return (false, list, null);
|
||||||
}
|
}
|
||||||
public static async Task<(bool, List<Questions.Models.SurveyQuestions>, string)> getNoSurveyContentResponse()
|
public static async Task<(bool, List<Questions.Models.SurveyQuestions>, string)> getNoSurveyContentResponse()
|
||||||
|
@ -42,7 +42,7 @@ namespace DamageAssesment.Api.Questions.Test
|
|||||||
mockQuestionService.Setup(service => service.GetQuestionAsync(1,null)).ReturnsAsync(mockResponse);
|
mockQuestionService.Setup(service => service.GetQuestionAsync(1,null)).ReturnsAsync(mockResponse);
|
||||||
|
|
||||||
var QuestionProvider = new QuestionsController(mockQuestionService.Object);
|
var QuestionProvider = new QuestionsController(mockQuestionService.Object);
|
||||||
var result = (OkObjectResult)await QuestionProvider.GetQuestionAsync(1,null);
|
var result = (OkObjectResult)await QuestionProvider.GetQuestionByIdAsync(1,null);
|
||||||
|
|
||||||
Assert.Equal(200, result.StatusCode);
|
Assert.Equal(200, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -55,7 +55,7 @@ namespace DamageAssesment.Api.Questions.Test
|
|||||||
mockQuestionService.Setup(service => service.GetQuestionAsync(99,null)).ReturnsAsync(mockResponse);
|
mockQuestionService.Setup(service => service.GetQuestionAsync(99,null)).ReturnsAsync(mockResponse);
|
||||||
|
|
||||||
var QuestionProvider = new QuestionsController(mockQuestionService.Object);
|
var QuestionProvider = new QuestionsController(mockQuestionService.Object);
|
||||||
var result = (NotFoundResult)await QuestionProvider.GetQuestionAsync(99,null);
|
var result = (NotFoundResult)await QuestionProvider.GetQuestionByIdAsync(99,null);
|
||||||
Assert.Equal(404, result.StatusCode);
|
Assert.Equal(404, result.StatusCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,10 +188,10 @@ namespace DamageAssesment.Api.Questions.Test
|
|||||||
{
|
{
|
||||||
var mockQuestionService = new Mock<IQuestionsProvider>();
|
var mockQuestionService = new Mock<IQuestionsProvider>();
|
||||||
var mockResponse = await CategoryMockData.getOkResponse();
|
var mockResponse = await CategoryMockData.getOkResponse();
|
||||||
mockQuestionService.Setup(service => service.GetQuestionCategoriesAsync()).ReturnsAsync(mockResponse);
|
mockQuestionService.Setup(service => service.GetQuestionCategoriesAsync("en")).ReturnsAsync(mockResponse);
|
||||||
|
|
||||||
var QuestionProvider = new QuestionsController(mockQuestionService.Object);
|
var QuestionProvider = new QuestionsController(mockQuestionService.Object);
|
||||||
var result = (OkObjectResult)await QuestionProvider.GetQuestionCategoriesAsync();
|
var result = (OkObjectResult)await QuestionProvider.GetQuestionCategoriesAsync("en");
|
||||||
|
|
||||||
Assert.Equal(200, result.StatusCode);
|
Assert.Equal(200, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -201,10 +201,10 @@ namespace DamageAssesment.Api.Questions.Test
|
|||||||
{
|
{
|
||||||
var mockQuestionService = new Mock<IQuestionsProvider>();
|
var mockQuestionService = new Mock<IQuestionsProvider>();
|
||||||
var mockResponse = await CategoryMockData.getNoContentResponse();
|
var mockResponse = await CategoryMockData.getNoContentResponse();
|
||||||
mockQuestionService.Setup(service => service.GetQuestionCategoriesAsync()).ReturnsAsync(mockResponse);
|
mockQuestionService.Setup(service => service.GetQuestionCategoriesAsync("en")).ReturnsAsync(mockResponse);
|
||||||
|
|
||||||
var QuestionProvider = new QuestionsController(mockQuestionService.Object);
|
var QuestionProvider = new QuestionsController(mockQuestionService.Object);
|
||||||
var result = (NoContentResult)await QuestionProvider.GetQuestionCategoriesAsync();
|
var result = (NoContentResult)await QuestionProvider.GetQuestionCategoriesAsync("en");
|
||||||
|
|
||||||
Assert.Equal(204, result.StatusCode);
|
Assert.Equal(204, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -214,10 +214,10 @@ namespace DamageAssesment.Api.Questions.Test
|
|||||||
{
|
{
|
||||||
var mockQuestionService = new Mock<IQuestionsProvider>();
|
var mockQuestionService = new Mock<IQuestionsProvider>();
|
||||||
var mockResponse = await CategoryMockData.getOkResponse(1);
|
var mockResponse = await CategoryMockData.getOkResponse(1);
|
||||||
mockQuestionService.Setup(service => service.GetQuestionCategoryAsync(1)).ReturnsAsync(mockResponse);
|
mockQuestionService.Setup(service => service.GetQuestionCategoryAsync(1, "en")).ReturnsAsync(mockResponse);
|
||||||
|
|
||||||
var QuestionProvider = new QuestionsController(mockQuestionService.Object);
|
var QuestionProvider = new QuestionsController(mockQuestionService.Object);
|
||||||
var result = (OkObjectResult)await QuestionProvider.GetQuestionCategoryAsync(1);
|
var result = (OkObjectResult)await QuestionProvider.GetQuestionCategoryAsync(1, "en");
|
||||||
|
|
||||||
Assert.Equal(200, result.StatusCode);
|
Assert.Equal(200, result.StatusCode);
|
||||||
}
|
}
|
||||||
@ -227,10 +227,10 @@ namespace DamageAssesment.Api.Questions.Test
|
|||||||
{
|
{
|
||||||
var mockQuestionService = new Mock<IQuestionsProvider>();
|
var mockQuestionService = new Mock<IQuestionsProvider>();
|
||||||
var mockResponse = await CategoryMockData.getNotFoundResponse();
|
var mockResponse = await CategoryMockData.getNotFoundResponse();
|
||||||
mockQuestionService.Setup(service => service.GetQuestionCategoryAsync(99)).ReturnsAsync(mockResponse);
|
mockQuestionService.Setup(service => service.GetQuestionCategoryAsync(99, "en")).ReturnsAsync(mockResponse);
|
||||||
|
|
||||||
var QuestionProvider = new QuestionsController(mockQuestionService.Object);
|
var QuestionProvider = new QuestionsController(mockQuestionService.Object);
|
||||||
var result = (NotFoundResult)await QuestionProvider.GetQuestionCategoryAsync(99);
|
var result = (NotFoundResult)await QuestionProvider.GetQuestionCategoryAsync(99, "en");
|
||||||
Assert.Equal(404, result.StatusCode);
|
Assert.Equal(404, result.StatusCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,26 +1,23 @@
|
|||||||
using DamageAssesment.Api.SurveyResponses.Interfaces;
|
using DamageAssesment.Api.Responses.Interfaces;
|
||||||
using DamageAssesment.Api.SurveyResponses.Models;
|
using DamageAssesment.Api.Responses.Models;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.Extensions.Configuration;
|
|
||||||
|
|
||||||
namespace DamageAssesment.Api.SurveyResponses.Controllers
|
namespace DamageAssesment.Api.Responses.Controllers
|
||||||
{
|
{
|
||||||
[Route("api")]
|
|
||||||
[ApiController]
|
[ApiController]
|
||||||
public class SurveyResponsesController : ControllerBase
|
public class ResponsesController : ControllerBase
|
||||||
{
|
{
|
||||||
private readonly ISurveysResponse surveyResponseProvider;
|
private readonly ISurveysResponse surveyResponseProvider;
|
||||||
|
public ResponsesController(ISurveysResponse surveyResponseProvider)
|
||||||
public SurveyResponsesController(ISurveysResponse surveyResponseProvider)
|
|
||||||
{
|
{
|
||||||
this.surveyResponseProvider = surveyResponseProvider;
|
this.surveyResponseProvider = surveyResponseProvider;
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// GET request for retrieving survey responses.
|
/// GET request for retrieving survey responses.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin,survey,user,report")]
|
||||||
[HttpGet("SurveyResponses")]
|
[HttpGet("Responses")]
|
||||||
public async Task<ActionResult> GetSurveyResponsesAsync()
|
public async Task<ActionResult> GetSurveyResponsesAsync()
|
||||||
{
|
{
|
||||||
var result = await this.surveyResponseProvider.GetSurveyResponsesAsync();
|
var result = await this.surveyResponseProvider.GetSurveyResponsesAsync();
|
||||||
@ -37,11 +34,11 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// GET request for retrieving survey responses by survey ID.
|
/// GET request for retrieving survey responses by survey ID.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin,survey,user,report")]
|
||||||
[HttpGet("SurveyResponses/{surveyId}")]
|
[HttpGet("Responses/BySurvey/{surveyid}")]
|
||||||
public async Task<ActionResult> GetSurveyResponsesAsync(int 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)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.SurveyResponses);
|
return Ok(result.SurveyResponses);
|
||||||
@ -51,13 +48,13 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// GET request for retrieving survey responses by survey and location IDs.
|
/// GET request for retrieving survey responses by survey and location IDs.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="surveyId">The ID of the survey 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>
|
/// <param name="locationid">The ID of the location for which responses are to be retrieved.</param>
|
||||||
|
[Authorize(Roles = "admin,survey,user,report")]
|
||||||
[HttpGet("Responses/{surveyId}/{locationId}")]
|
[HttpGet("Responses/{surveyid}/{locationid}")]
|
||||||
public async Task<ActionResult> GetSurveyResponsesBySurveyAndLocationAsync(int surveyId, string 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)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.SurveyResponses);
|
return Ok(result.SurveyResponses);
|
||||||
@ -71,11 +68,11 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers
|
|||||||
/// <param name="surveyId">The ID of the survey 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="questionId">The ID of the question for which responses are to be retrieved.</param>
|
/// <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>
|
/// <param name="answer">The answer for which responses are to be retrieved.</param>
|
||||||
|
[Authorize(Roles = "admin,survey,user,report")]
|
||||||
[HttpGet("ResponsesByAnswer/{surveyId}/{questionId}/{answer}")]
|
[HttpGet("Responses/ByAnswer/{surveyid}/{questionid}/{answer}")]
|
||||||
public async Task<ActionResult> GetSurveyResponsesByAnswerAsyncAsync(int surveyId, int questionId, string 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)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.SurveyResponses);
|
return Ok(result.SurveyResponses);
|
||||||
@ -87,11 +84,11 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers
|
|||||||
/// GET request for retrieving answers from survey responses by survey ID and region.
|
/// GET request for retrieving answers from survey responses by survey ID and region.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="surveyId">The ID of the survey for which answers are to be retrieved.</param>
|
/// <param name="surveyId">The ID of the survey for which answers are to be retrieved.</param>
|
||||||
|
[Authorize(Roles = "admin,survey,user,report")]
|
||||||
[HttpGet("AnswersByRegion/{surveyId}")]
|
[HttpGet("Responses/ByRegion/{surveyid}")]
|
||||||
public async Task<ActionResult> GetAnswersByRegionAsync(int 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)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.Answers);
|
return Ok(result.Answers);
|
||||||
@ -102,11 +99,11 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers
|
|||||||
/// GET request for retrieving survey responses by survey ID and maintenance center.
|
/// GET request for retrieving survey responses by survey ID and maintenance center.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="surveyId">The ID of the survey for which responses are to be retrieved.</param>
|
/// <param name="surveyId">The ID of the survey for which responses are to be retrieved.</param>
|
||||||
|
[Authorize(Roles = "admin,survey,user,report")]
|
||||||
[HttpGet("AnswersByMaintenanceCenter/{surveyId}")]
|
[HttpGet("Responses/ByMaintenanceCenter/{surveyid}")]
|
||||||
public async Task<ActionResult> GetAnswersByMaintenaceCentersync(int 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)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.SurveyResponses);
|
return Ok(result.SurveyResponses);
|
||||||
@ -117,11 +114,11 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers
|
|||||||
/// GET request for retrieving a survey response by response ID.
|
/// GET request for retrieving a survey response by response ID.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="responseId">The ID of the survey response to be retrieved.</param>
|
/// <param name="responseId">The ID of the survey response to be retrieved.</param>
|
||||||
|
[Authorize(Roles = "admin,survey,user,report")]
|
||||||
[HttpGet("SurveyResponse/{Id}")]
|
[HttpGet("Responses/{id}")]
|
||||||
public async Task<ActionResult> GetSurveyResponseByIdAsync(int 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)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.SurveyResponse);
|
return Ok(result.SurveyResponse);
|
||||||
@ -133,8 +130,8 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers
|
|||||||
/// POST request for creating a new survey response.
|
/// POST request for creating a new survey response.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="surveyResponse">The survey response object to be created.</param>
|
/// <param name="surveyResponse">The survey response object to be created.</param>
|
||||||
|
[Authorize(Roles = "admin,survey,user,report")]
|
||||||
[HttpPost("SurveyResponses")]
|
[HttpPost("Responses")]
|
||||||
public async Task<ActionResult> PostSurveysAsync(Models.SurveyResponse surveyResponse)
|
public async Task<ActionResult> PostSurveysAsync(Models.SurveyResponse surveyResponse)
|
||||||
{
|
{
|
||||||
var result = await this.surveyResponseProvider.PostSurveyResponseAsync(surveyResponse);
|
var result = await this.surveyResponseProvider.PostSurveyResponseAsync(surveyResponse);
|
||||||
@ -149,11 +146,11 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="Id">The ID of the survey response to be updated.</param>
|
/// <param name="Id">The ID of the survey response to be updated.</param>
|
||||||
/// <param name="surveyResponse">The updated survey response object.</param>
|
/// <param name="surveyResponse">The updated survey response object.</param>
|
||||||
|
[Authorize(Roles = "admin,survey,user,report")]
|
||||||
[HttpPut("SurveyResponses/{Id}")]
|
[HttpPut("Responses/{id}")]
|
||||||
public async Task<ActionResult> PutSurveyResponseAsync(int Id, Models.SurveyResponse surveyResponse)
|
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)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.SurveyResponse);
|
return Ok(result.SurveyResponse);
|
||||||
@ -166,11 +163,11 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// DELETE request for deleting an existing survey response.
|
/// DELETE request for deleting an existing survey response.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Authorize(Roles = "admin,survey,user,report")]
|
||||||
[HttpDelete("SurveyResponses/{Id}")]
|
[HttpDelete("Responses/{id}")]
|
||||||
public async Task<ActionResult> DeleteSurveyResponseAsync(int 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)
|
if (result.IsSuccess)
|
||||||
{
|
{
|
||||||
return Ok(result.SurveyResponse);
|
return Ok(result.SurveyResponse);
|
||||||
@ -181,8 +178,8 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers
|
|||||||
/// POST request for submitting survey with multiple answers.
|
/// POST request for submitting survey with multiple answers.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="request">The answers to be submitted for the survey.</param>
|
/// <param name="request">The answers to be submitted for the survey.</param>
|
||||||
|
[Authorize(Roles = "admin,survey,user,report")]
|
||||||
[HttpPost("SurveyResponses/Answers")]
|
[HttpPost("Responses/Answers")]
|
||||||
public async Task<ActionResult> PostSurveyAnswersAsync(Request request)
|
public async Task<ActionResult> PostSurveyAnswersAsync(Request request)
|
||||||
{
|
{
|
||||||
var result = await this.surveyResponseProvider.PostSurveyAnswersAsync(request);
|
var result = await this.surveyResponseProvider.PostSurveyAnswersAsync(request);
|
@ -1,7 +1,7 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
namespace DamageAssesment.Api.SurveyResponses.Db
|
namespace DamageAssesment.Api.Responses.Db
|
||||||
{
|
{
|
||||||
public class SurveyResponse
|
public class SurveyResponse
|
||||||
{
|
{
|
||||||
@ -10,14 +10,12 @@ namespace DamageAssesment.Api.SurveyResponses.Db
|
|||||||
|
|
||||||
[ForeignKey("Survey")]
|
[ForeignKey("Survey")]
|
||||||
public int SurveyId { get; set; }
|
public int SurveyId { get; set; }
|
||||||
|
|
||||||
[StringLength(4)]
|
|
||||||
[ForeignKey("Location")]
|
[ForeignKey("Location")]
|
||||||
public string LocationId { get; set; }
|
public int LocationId { get; set; }
|
||||||
|
|
||||||
[StringLength(6)]
|
[StringLength(6)]
|
||||||
[ForeignKey("Employee")]
|
[ForeignKey("Employee")]
|
||||||
public string EmployeeId { get; set; }
|
public int EmployeeId { get; set; }
|
||||||
|
|
||||||
public DateTime? CreatedDate { get; set; } = DateTime.Now;
|
public DateTime? CreatedDate { get; set; } = DateTime.Now;
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace DamageAssesment.Api.SurveyResponses.Db
|
namespace DamageAssesment.Api.Responses.Db
|
||||||
{
|
{
|
||||||
public class SurveyResponseDbContext:DbContext
|
public class SurveyResponseDbContext:DbContext
|
||||||
{
|
{
|
@ -0,0 +1,12 @@
|
|||||||
|
using DamageAssesment.Api.Responses.Models;
|
||||||
|
|
||||||
|
namespace DamageAssesment.Api.Responses.Interfaces
|
||||||
|
{
|
||||||
|
public interface IAnswerServiceProvider
|
||||||
|
{
|
||||||
|
Task<List<Answer>> getAnswersAsync(string token);
|
||||||
|
Task<List<Models.Answer>> GetAnswersByResponseIdAsync(int responseId, string token);
|
||||||
|
|
||||||
|
Task<Models.Answer> PostAnswersAsync(Models.Answer answer, string token);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
using DamageAssesment.Api.Responses.Models;
|
||||||
|
|
||||||
|
namespace DamageAssesment.Api.Responses.Interfaces
|
||||||
|
{
|
||||||
|
public interface IAttachmentServiceProvider
|
||||||
|
{
|
||||||
|
Task<List<Attachment>> getAttachmentsAsync(string token);
|
||||||
|
Task<IEnumerable<Attachment>> PostAttachmentsAsync(Models.AttachmentInfo attachmentInfo, string token);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
using DamageAssesment.Api.Responses.Models;
|
||||||
|
|
||||||
|
namespace DamageAssesment.Api.Responses.Interfaces
|
||||||
|
{
|
||||||
|
public interface IEmployeeServiceProvider
|
||||||
|
{
|
||||||
|
Task<List<Employee>> getEmployeesAsync(string token);
|
||||||
|
Task<Employee> getEmployeeAsync(int employeeId, string token);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
using DamageAssesment.Api.Responses.Models;
|
||||||
|
|
||||||
|
namespace DamageAssesment.Api.Responses.Interfaces
|
||||||
|
{
|
||||||
|
public interface IHttpUtil
|
||||||
|
{
|
||||||
|
Task<string> SendAsync(HttpMethod method, string url, string JsonInput, string token);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
using DamageAssesment.Api.Responses.Models;
|
||||||
|
|
||||||
|
namespace DamageAssesment.Api.Responses.Interfaces
|
||||||
|
{
|
||||||
|
public interface ILocationServiceProvider
|
||||||
|
{
|
||||||
|
Task<List<Location>> getLocationsAsync(string token);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
using DamageAssesment.Api.Responses.Models;
|
||||||
|
|
||||||
|
namespace DamageAssesment.Api.Responses.Interfaces
|
||||||
|
{
|
||||||
|
public interface IQuestionServiceProvider
|
||||||
|
{
|
||||||
|
Task<List<Question>> getQuestionsAsync(string token);
|
||||||
|
Task<List<SurveyQuestions>> getSurveyQuestionsAsync(int surveyId, string token);
|
||||||
|
Task<Question> getQuestionsAsync(int questionId, string token);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
using DamageAssesment.Api.Responses.Models;
|
||||||
|
|
||||||
|
namespace DamageAssesment.Api.Responses.Interfaces
|
||||||
|
{
|
||||||
|
public interface IRegionServiceProvider
|
||||||
|
{
|
||||||
|
Task<List<Region>> getRegionsAsync(string token);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
using DamageAssesment.Api.Responses.Models;
|
||||||
|
|
||||||
|
namespace DamageAssesment.Api.Responses.Interfaces
|
||||||
|
{
|
||||||
|
public interface ISurveyServiceProvider
|
||||||
|
{
|
||||||
|
Task<List<Survey>> getSurveysAsync(string token);
|
||||||
|
Task<Survey> getSurveyAsync(int surveyId,string token);
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,6 @@
|
|||||||
using DamageAssesment.Api.SurveyResponses.Models;
|
using DamageAssesment.Api.Responses.Models;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
|
||||||
|
|
||||||
namespace DamageAssesment.Api.SurveyResponses.Interfaces
|
namespace DamageAssesment.Api.Responses.Interfaces
|
||||||
{
|
{
|
||||||
public interface ISurveysResponse
|
public interface ISurveysResponse
|
||||||
{
|
{
|
||||||
@ -13,7 +12,7 @@ namespace DamageAssesment.Api.SurveyResponses.Interfaces
|
|||||||
Task<(bool IsSuccess, Models.SurveyResponse SurveyResponse, string ErrorMessage)> DeleteSurveyResponseAsync(int Id);
|
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 SurveyResponse, string ErrorMessage)> GetSurveyResponseByIdAsync(int responseId);
|
||||||
Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesBySurveyAsync(int surveyId);
|
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)> GetSurveyResponsesByMaintenanceCenterAsync(int surveyId);
|
||||||
Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetResponsesByAnswerAsync(int surveyId, int questionId, string answer);
|
Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetResponsesByAnswerAsync(int surveyId, int questionId, string answer);
|
||||||
|
|
@ -1,16 +1,16 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
namespace DamageAssesment.Api.SurveyResponses.Models
|
namespace DamageAssesment.Api.Responses.Models
|
||||||
{
|
{
|
||||||
public class Answer
|
public class Answer
|
||||||
{
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public int QuestionId { get; set; }
|
public int QuestionId { get; set; }
|
||||||
public string? LocationId { get; set; }
|
public int LocationId { get; set; }
|
||||||
public string AnswerText { get; set; }
|
public string AnswerText { get; set; }
|
||||||
public string? Comment { get; set; }
|
public string Comment { get; set; }
|
||||||
public int SurveyResponseId { get; set; }
|
public int SurveyResponseId { get; set; }
|
||||||
public string? RegionId { get; set; }
|
public int RegionId { get; set; }
|
||||||
// public string? Name { get; set; }
|
// public string? Name { get; set; }
|
||||||
// public string? Abbreviation { get; set; }
|
// public string? Abbreviation { get; set; }
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
namespace DamageAssesment.Api.SurveyResponses.Models
|
namespace DamageAssesment.Api.Responses.Models
|
||||||
{
|
{
|
||||||
public class AnswerRequest
|
public class AnswerRequest
|
||||||
{
|
{
|
@ -1,6 +1,6 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
namespace DamageAssesment.Api.SurveyResponses.Models
|
namespace DamageAssesment.Api.Responses.Models
|
||||||
{
|
{
|
||||||
public class Attachment
|
public class Attachment
|
||||||
{
|
{
|
@ -1,4 +1,4 @@
|
|||||||
namespace DamageAssesment.Api.SurveyResponses.Models
|
namespace DamageAssesment.Api.Responses.Models
|
||||||
{
|
{
|
||||||
public class AttachmentInfo
|
public class AttachmentInfo
|
||||||
{
|
{
|
@ -1,21 +1,16 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
namespace DamageAssesment.Api.SurveyResponses.Models
|
namespace DamageAssesment.Api.Responses.Models
|
||||||
{
|
{
|
||||||
public class Employee
|
public class Employee
|
||||||
{
|
{
|
||||||
public string Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
public string EmployeeCode { get; set; }
|
||||||
[StringLength(50)]
|
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
public DateTime BirthDate { get; set; }
|
public DateTime BirthDate { get; set; }
|
||||||
|
|
||||||
[StringLength(50)]
|
|
||||||
public string OfficePhoneNumber { get; set; }
|
public string OfficePhoneNumber { get; set; }
|
||||||
|
|
||||||
[StringLength(50)]
|
|
||||||
public string Email { get; set; }
|
public string Email { get; set; }
|
||||||
public bool IsActive { get; set; }
|
public bool IsActive { get; set; }
|
||||||
|
public string PreferredLanguage { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,9 +1,9 @@
|
|||||||
namespace DamageAssesment.Api.SurveyResponses.Models
|
namespace DamageAssesment.Api.Responses.Models
|
||||||
{
|
{
|
||||||
public class Location
|
public class Location
|
||||||
{
|
{
|
||||||
public string Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string RegionId { get; set; }
|
public int RegionId { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public string MaintenanceCenter { get; set; }
|
public string MaintenanceCenter { get; set; }
|
||||||
public string SchoolType { get; set; }
|
public string SchoolType { get; set; }
|
@ -0,0 +1,17 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace DamageAssesment.Api.Responses.Models
|
||||||
|
{
|
||||||
|
public class Question
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
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 int CategoryId { get; set; }
|
||||||
|
public Dictionary<string, string> Text { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,10 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
namespace DamageAssesment.Api.SurveyResponses.Models
|
namespace DamageAssesment.Api.Responses.Models
|
||||||
{
|
{
|
||||||
public class Region
|
public class Region
|
||||||
{
|
{
|
||||||
public string Id { get; set; }
|
public int Id { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public string Abbreviation { get; set; }
|
public string Abbreviation { get; set; }
|
||||||
}
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
namespace DamageAssesment.Api.Responses.Models
|
||||||
|
{
|
||||||
|
public class Request
|
||||||
|
{
|
||||||
|
public int SurveyId { 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; }
|
||||||
|
}
|
||||||
|
}
|
@ -1,14 +1,14 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
namespace DamageAssesment.Api.SurveyResponses.Models
|
namespace DamageAssesment.Api.Responses.Models
|
||||||
{
|
{
|
||||||
public class Survey
|
public class Survey
|
||||||
{
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
public bool IsEnabled { get; set; }
|
public bool IsEnabled { get; set; }
|
||||||
public DateTime? StartDate { get; set; }
|
public DateTime StartDate { get; set; }
|
||||||
public DateTime? EndDate { get; set; }
|
public DateTime EndDate { get; set; }
|
||||||
public DateTime CreatedDate { get; set; }
|
public DateTime CreatedDate { get; set; }
|
||||||
public IEnumerable<SurveyTranslation> Titles { get; set; }
|
public Dictionary<string, string> Titles { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
namespace DamageAssesment.Api.SurveyResponses.Models
|
namespace DamageAssesment.Api.Responses.Models
|
||||||
{
|
{
|
||||||
public class SurveyQuestions
|
public class SurveyQuestions
|
||||||
{
|
{
|
@ -0,0 +1,18 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
|
namespace DamageAssesment.Api.Responses.Models
|
||||||
|
{
|
||||||
|
public class SurveyResponse
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
public int SurveyId { 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; }
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
namespace DamageAssesment.Api.SurveyResponses.Models
|
namespace DamageAssesment.Api.Responses.Models
|
||||||
{
|
{
|
||||||
public class SurveyTranslation
|
public class SurveyTranslation
|
||||||
{
|
{
|
@ -1,4 +1,4 @@
|
|||||||
namespace DamageAssesment.Api.SurveyResponses.Profiles
|
namespace DamageAssesment.Api.Responses.Profiles
|
||||||
{
|
{
|
||||||
public class SurveyResponsesProvider : AutoMapper.Profile
|
public class SurveyResponsesProvider : AutoMapper.Profile
|
||||||
{
|
{
|
@ -1,10 +1,14 @@
|
|||||||
using DamageAssesment.Api.SurveyResponses.Db;
|
using DamageAssesment.Api.Responses.Db;
|
||||||
using DamageAssesment.Api.SurveyResponses.Interfaces;
|
using DamageAssesment.Api.Responses.Interfaces;
|
||||||
using DamageAssesment.Api.SurveyResponses.Services;
|
using DamageAssesment.Api.Responses.Services;
|
||||||
using DamageAssesment.Api.SurveyResponses.Providers;
|
using DamageAssesment.Api.Responses.Providers;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Polly;
|
using Polly;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using Microsoft.OpenApi.Models;
|
||||||
|
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
||||||
|
using Microsoft.IdentityModel.Tokens;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
const int maxApiCallRetries = 3;
|
const int maxApiCallRetries = 3;
|
||||||
@ -14,6 +18,24 @@ const int intervalForCircuitBraker = 5; //5 seconds
|
|||||||
|
|
||||||
|
|
||||||
// Add services to the container.
|
// Add services to the container.
|
||||||
|
var authkey = builder.Configuration.GetValue<string>("JwtSettings:securitykey");
|
||||||
|
builder.Services.AddAuthentication(item =>
|
||||||
|
{
|
||||||
|
item.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
|
||||||
|
item.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
|
||||||
|
}).AddJwtBearer(item =>
|
||||||
|
{
|
||||||
|
item.RequireHttpsMetadata = true;
|
||||||
|
item.SaveToken = true;
|
||||||
|
item.TokenValidationParameters = new TokenValidationParameters()
|
||||||
|
{
|
||||||
|
ValidateIssuerSigningKey = true,
|
||||||
|
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(authkey)),
|
||||||
|
ValidateIssuer = false,
|
||||||
|
ValidateAudience = false,
|
||||||
|
ClockSkew = TimeSpan.Zero
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
builder.Services.AddControllers();
|
builder.Services.AddControllers();
|
||||||
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
||||||
@ -26,6 +48,7 @@ builder.Services.AddScoped<IQuestionServiceProvider, QuestionServiceProvider>();
|
|||||||
builder.Services.AddScoped<IEmployeeServiceProvider, EmployeeServiceProvider>();
|
builder.Services.AddScoped<IEmployeeServiceProvider, EmployeeServiceProvider>();
|
||||||
builder.Services.AddScoped<IAttachmentServiceProvider, AttachmentServiceProvider>();
|
builder.Services.AddScoped<IAttachmentServiceProvider, AttachmentServiceProvider>();
|
||||||
builder.Services.AddScoped<ISurveyServiceProvider, SurveyServiceProvider>();
|
builder.Services.AddScoped<ISurveyServiceProvider, SurveyServiceProvider>();
|
||||||
|
builder.Services.AddHttpContextAccessor();
|
||||||
|
|
||||||
builder.Services.AddHttpClient<IHttpUtil, HttpUtil>().
|
builder.Services.AddHttpClient<IHttpUtil, HttpUtil>().
|
||||||
AddTransientHttpErrorPolicy(policy => policy.WaitAndRetryAsync(maxApiCallRetries, _ => TimeSpan.FromSeconds(intervalToRetry))).
|
AddTransientHttpErrorPolicy(policy => policy.WaitAndRetryAsync(maxApiCallRetries, _ => TimeSpan.FromSeconds(intervalToRetry))).
|
||||||
@ -35,12 +58,40 @@ builder.Services.AddHttpClient<IHttpUtil, HttpUtil>().
|
|||||||
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
|
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
|
||||||
builder.Services.AddEndpointsApiExplorer();
|
builder.Services.AddEndpointsApiExplorer();
|
||||||
//builder.Services.AddSwaggerGen();
|
//builder.Services.AddSwaggerGen();
|
||||||
builder.Services.AddSwaggerGen(c =>
|
|
||||||
|
builder.Services.AddSwaggerGen(options =>
|
||||||
{
|
{
|
||||||
// Include XML comments from your assembly
|
// Include XML comments from your assembly
|
||||||
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
|
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
|
||||||
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
|
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
|
||||||
c.IncludeXmlComments(xmlPath);
|
options.IncludeXmlComments(xmlPath);
|
||||||
|
|
||||||
|
OpenApiSecurityScheme securityDefinition = new OpenApiSecurityScheme()
|
||||||
|
{
|
||||||
|
Name = "Bearer",
|
||||||
|
BearerFormat = "JWT",
|
||||||
|
Scheme = "bearer",
|
||||||
|
Description = "Specify the authorization token.",
|
||||||
|
In = ParameterLocation.Header,
|
||||||
|
Type = SecuritySchemeType.Http,
|
||||||
|
};
|
||||||
|
|
||||||
|
options.AddSecurityDefinition("jwt_auth", securityDefinition);
|
||||||
|
|
||||||
|
// Make sure swagger UI requires a Bearer token specified
|
||||||
|
OpenApiSecurityScheme securityScheme = new OpenApiSecurityScheme()
|
||||||
|
{
|
||||||
|
Reference = new OpenApiReference()
|
||||||
|
{
|
||||||
|
Id = "jwt_auth",
|
||||||
|
Type = ReferenceType.SecurityScheme
|
||||||
|
}
|
||||||
|
};
|
||||||
|
OpenApiSecurityRequirement securityRequirements = new OpenApiSecurityRequirement()
|
||||||
|
{
|
||||||
|
{securityScheme, new string[] { }},
|
||||||
|
};
|
||||||
|
options.AddSecurityRequirement(securityRequirements);
|
||||||
});
|
});
|
||||||
builder.Services.AddDbContext<SurveyResponseDbContext>(option =>
|
builder.Services.AddDbContext<SurveyResponseDbContext>(option =>
|
||||||
{
|
{
|
||||||
@ -55,6 +106,7 @@ if (app.Environment.IsDevelopment())
|
|||||||
app.UseSwaggerUI();
|
app.UseSwaggerUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
app.UseAuthentication();
|
||||||
app.UseAuthorization();
|
app.UseAuthorization();
|
||||||
|
|
||||||
app.MapControllers();
|
app.MapControllers();
|
@ -9,7 +9,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"profiles": {
|
"profiles": {
|
||||||
"DamageAssesment.Api.SurveyResponses": {
|
"DamageAssesment.Api.Responses": {
|
||||||
"commandName": "Project",
|
"commandName": "Project",
|
||||||
"dotnetRunMessages": true,
|
"dotnetRunMessages": true,
|
||||||
"launchBrowser": true,
|
"launchBrowser": true,
|
@ -1,10 +1,10 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using DamageAssesment.Api.SurveyResponses.Db;
|
using DamageAssesment.Api.Responses.Db;
|
||||||
using DamageAssesment.Api.SurveyResponses.Interfaces;
|
using DamageAssesment.Api.Responses.Interfaces;
|
||||||
using DamageAssesment.Api.SurveyResponses.Models;
|
using DamageAssesment.Api.Responses.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace DamageAssesment.Api.SurveyResponses.Providers
|
namespace DamageAssesment.Api.Responses.Providers
|
||||||
{
|
{
|
||||||
public class SurveyResponsesProvider : ISurveysResponse
|
public class SurveyResponsesProvider : ISurveysResponse
|
||||||
{
|
{
|
||||||
@ -18,8 +18,10 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
private readonly IQuestionServiceProvider questionServiceProvider;
|
private readonly IQuestionServiceProvider questionServiceProvider;
|
||||||
private readonly ISurveyServiceProvider surveyServiceProvider;
|
private readonly ISurveyServiceProvider surveyServiceProvider;
|
||||||
private readonly IMapper mapper;
|
private readonly IMapper mapper;
|
||||||
|
private readonly IHttpContextAccessor httpContextAccessor;
|
||||||
|
private string token;
|
||||||
|
|
||||||
public SurveyResponsesProvider(SurveyResponseDbContext surveyResponseDbContext, ILogger<SurveyResponsesProvider> logger, IAnswerServiceProvider answerServiceProvider, IRegionServiceProvider regionServiceProvider, ILocationServiceProvider locationServiceProvider, IEmployeeServiceProvider employeeServiceProvider, IAttachmentServiceProvider attachmentServiceProvider, IQuestionServiceProvider questionServiceProvider, ISurveyServiceProvider surveyServiceProvider, IMapper mapper)
|
public SurveyResponsesProvider(SurveyResponseDbContext surveyResponseDbContext, ILogger<SurveyResponsesProvider> logger, IAnswerServiceProvider answerServiceProvider, IRegionServiceProvider regionServiceProvider, ILocationServiceProvider locationServiceProvider, IEmployeeServiceProvider employeeServiceProvider, IAttachmentServiceProvider attachmentServiceProvider, IQuestionServiceProvider questionServiceProvider, ISurveyServiceProvider surveyServiceProvider, IMapper mapper, IHttpContextAccessor httpContextAccessor)
|
||||||
{
|
{
|
||||||
this.surveyResponseDbContext = surveyResponseDbContext;
|
this.surveyResponseDbContext = surveyResponseDbContext;
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
@ -30,20 +32,31 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
this.attachmentServiceProvider = attachmentServiceProvider;
|
this.attachmentServiceProvider = attachmentServiceProvider;
|
||||||
this.questionServiceProvider = questionServiceProvider;
|
this.questionServiceProvider = questionServiceProvider;
|
||||||
this.surveyServiceProvider = surveyServiceProvider;
|
this.surveyServiceProvider = surveyServiceProvider;
|
||||||
|
this.httpContextAccessor = httpContextAccessor;
|
||||||
this.mapper = mapper;
|
this.mapper = mapper;
|
||||||
//seedData();
|
|
||||||
|
token = httpContextAccessor.HttpContext.Request.Headers.Authorization;
|
||||||
|
if (token != null)
|
||||||
|
{
|
||||||
|
token = token.Replace("Bearer ", string.Empty);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
token = "";
|
||||||
|
}
|
||||||
|
// seedData();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void seedData()
|
private void seedData()
|
||||||
{
|
{
|
||||||
if (!surveyResponseDbContext.SurveyResponses.Any())
|
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 = 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 = "Emp2", LocationId = "Loc2", ClientDevice = "Desktop", Latitude = 98.8767, Longitute = -129.9897, KeyAnswerResult = "", 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 = "Emp4", LocationId = "Loc1", ClientDevice = "Mobile", Latitude = 98.8767, Longitute = -129.9897, KeyAnswerResult = "", 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 = "Emp1", LocationId = "Loc2", ClientDevice = "Desktop", Latitude = 98.8767, Longitute = -129.9897, KeyAnswerResult = "", 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 = "Emp4", LocationId = "Loc2", ClientDevice = "Desktop", Latitude = 98.8767, Longitute = -129.9897, KeyAnswerResult = "", CreatedDate = DateTime.Now });
|
surveyResponseDbContext.SurveyResponses.Add(new Db.SurveyResponse { Id = 5, 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 = "Emp4", LocationId = "Loc3", ClientDevice = "Desktop", Latitude = 98.8767, Longitute = -129.9897, KeyAnswerResult = "", CreatedDate = DateTime.Now });
|
surveyResponseDbContext.SurveyResponses.Add(new Db.SurveyResponse { Id = 6, SurveyId = 1, EmployeeId = 4, LocationId = 3, ClientDevice = "Desktop", Latitude = 98.8767, Longitute = -129.9897, KeyAnswerResult = "false", CreatedDate = DateTime.Now });
|
||||||
surveyResponseDbContext.SaveChanges();
|
surveyResponseDbContext.SaveChanges();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -110,7 +123,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
logger?.LogInformation("Querying to get Survey object from microservice");
|
logger?.LogInformation("Querying to get Survey object from microservice");
|
||||||
var survey = await surveyServiceProvider.getSurveyAsync(surveyId);
|
var survey = await surveyServiceProvider.getSurveyAsync(surveyId,token);
|
||||||
|
|
||||||
if (survey != null)
|
if (survey != null)
|
||||||
{
|
{
|
||||||
@ -136,12 +149,12 @@ 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
|
try
|
||||||
{
|
{
|
||||||
logger?.LogInformation("Querying to get Survey object from microservice");
|
logger?.LogInformation("Querying to get Survey object from microservice");
|
||||||
var survey = await surveyServiceProvider.getSurveyAsync(surveyId);
|
var survey = await surveyServiceProvider.getSurveyAsync(surveyId, token);
|
||||||
|
|
||||||
if (survey != null)
|
if (survey != null)
|
||||||
{
|
{
|
||||||
@ -172,7 +185,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
logger?.LogInformation("Querying to get Survey object from microservice");
|
logger?.LogInformation("Querying to get Survey object from microservice");
|
||||||
var survey = await surveyServiceProvider.getSurveyAsync(surveyId);
|
var survey = await surveyServiceProvider.getSurveyAsync(surveyId, token);
|
||||||
|
|
||||||
if (survey != null)
|
if (survey != null)
|
||||||
{
|
{
|
||||||
@ -203,8 +216,8 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
logger?.LogInformation("Querying to get Survey object from microservice");
|
logger?.LogInformation("Querying to get Survey object from microservice");
|
||||||
var survey = await surveyServiceProvider.getSurveyAsync(surveyId);
|
var survey = await surveyServiceProvider.getSurveyAsync(surveyId, token);
|
||||||
var question = await questionServiceProvider.getQuestionsAsync(questionId);
|
var question = await questionServiceProvider.getQuestionsAsync(questionId,token);
|
||||||
bool IsCorrectAnswer = answer.ToLower().Equals("yes") || answer.ToLower().Equals("no") ? true : false;
|
bool IsCorrectAnswer = answer.ToLower().Equals("yes") || answer.ToLower().Equals("no") ? true : false;
|
||||||
|
|
||||||
|
|
||||||
@ -286,19 +299,14 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
{
|
{
|
||||||
if (SurveyResponse != null)
|
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)
|
if (_SurveyResponse != null)
|
||||||
{
|
{
|
||||||
_SurveyResponse.SurveyId = SurveyResponse.SurveyId;
|
var response = mapper.Map<Models.SurveyResponse, Db.SurveyResponse>(SurveyResponse);
|
||||||
_SurveyResponse.EmployeeId = SurveyResponse.EmployeeId;
|
surveyResponseDbContext.Update(response);
|
||||||
_SurveyResponse.LocationId = SurveyResponse.LocationId;
|
|
||||||
_SurveyResponse.ClientDevice = SurveyResponse.ClientDevice;
|
|
||||||
_SurveyResponse.KeyAnswerResult = SurveyResponse.KeyAnswerResult;
|
|
||||||
_SurveyResponse.Longitute = SurveyResponse.Longitute;
|
|
||||||
_SurveyResponse.Latitude = SurveyResponse.Latitude;
|
|
||||||
await surveyResponseDbContext.SaveChangesAsync();
|
await surveyResponseDbContext.SaveChangesAsync();
|
||||||
return (true, mapper.Map<Db.SurveyResponse, Models.SurveyResponse>(_SurveyResponse), "Successful");
|
return (true, SurveyResponse, "Successful");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -350,7 +358,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var answersList = await answerServiceProvider.getAnswersAsync();
|
var answersList = await answerServiceProvider.getAnswersAsync(token);
|
||||||
if (answersList == null || !answersList.Any())
|
if (answersList == null || !answersList.Any())
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
@ -360,21 +368,21 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
answer => answer.SurveyResponseId,
|
answer => answer.SurveyResponseId,
|
||||||
surveyResponse => surveyResponse.Id,
|
surveyResponse => surveyResponse.Id,
|
||||||
(answer, surveyResponse) => new
|
(answer, surveyResponse) => new
|
||||||
Answer
|
|
||||||
{
|
{
|
||||||
Id = answer.Id,
|
answer.Id,
|
||||||
QuestionId = answer.QuestionId,
|
answer.QuestionId,
|
||||||
AnswerText = answer.AnswerText,
|
answer.AnswerText,
|
||||||
Comment = answer.Comment,
|
answer.Comment,
|
||||||
LocationId = surveyResponse.LocationId,
|
surveyResponse.LocationId,
|
||||||
SurveyResponseId = surveyResponse.Id
|
SurveyResponseId = surveyResponse.Id
|
||||||
});
|
});
|
||||||
|
|
||||||
if (surveyAnswers == null || !surveyAnswers.Any())
|
if (surveyAnswers == null || !surveyAnswers.Any())
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
var regions = await regionServiceProvider.getRegionsAsync();
|
var regions = await regionServiceProvider.getRegionsAsync(token);
|
||||||
var locations = await locationServiceProvider.getLocationsAsync();
|
var locations = await locationServiceProvider.getLocationsAsync(token);
|
||||||
|
|
||||||
if (regions == null || !regions.Any() || locations == null || !locations.Any())
|
if (regions == null || !regions.Any() || locations == null || !locations.Any())
|
||||||
return null;
|
return null;
|
||||||
@ -383,41 +391,46 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
//get all the answers based on the locations
|
//get all the answers based on the locations
|
||||||
var result = from answer in surveyAnswers
|
var result = from answer in surveyAnswers
|
||||||
from location in locations
|
from location in locations
|
||||||
where answer.LocationId == location.Id
|
where answer.LocationId.Equals(location.Id)
|
||||||
select new Answer
|
select new
|
||||||
{
|
{
|
||||||
Id = answer.Id,
|
answer.Id,
|
||||||
QuestionId = answer.QuestionId,
|
answer.QuestionId,
|
||||||
AnswerText = answer.AnswerText,
|
answer.AnswerText,
|
||||||
Comment = answer.Comment,
|
answer.Comment,
|
||||||
RegionId = location.RegionId,
|
location.RegionId,
|
||||||
LocationId = location.Id,
|
LocationId = location.Id,
|
||||||
SurveyResponseId = answer.SurveyResponseId
|
answer.SurveyResponseId
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//group records by answer and region
|
//group records by answer and region
|
||||||
var q = from e in result
|
var q = from e in result
|
||||||
group e by (e.RegionId, e.AnswerText) into g
|
group e by (e.RegionId, e.AnswerText) into g
|
||||||
select new AggregateResult
|
select new
|
||||||
{
|
{
|
||||||
RegionId = g.Key.RegionId,
|
g.Key.RegionId,
|
||||||
Answers = new AggregateAnswer
|
Answers = new
|
||||||
{
|
{
|
||||||
Answer = g.Key.AnswerText,
|
g.Key.AnswerText,
|
||||||
Counter = g.Count()
|
Counter = g.Count()
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//build the result
|
//build the result
|
||||||
List<AnswerData> resultList = new List<AnswerData>();
|
|
||||||
|
List<dynamic> resultList = new List<dynamic>();
|
||||||
foreach (Region region in regions)
|
foreach (Region region in regions)
|
||||||
{
|
{
|
||||||
var answers = q.Where(x => x.RegionId.Equals(region.Id)).Select(x => x.Answers).ToList();
|
var answers = from u in q.ToList()
|
||||||
resultList.Add(new AnswerData { RegionId = region.Id, Name = region.Name, Abbreviation = region.Abbreviation, Answers = answers });
|
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 the object result
|
||||||
return new ResultData { Regions = resultList };
|
return new { Regions = resultList };
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@ -431,11 +444,11 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var employee = await employeeServiceProvider.getEmployeeAsync(surveyResponse.EmployeeId);
|
var employee = await employeeServiceProvider.getEmployeeAsync(surveyResponse.EmployeeId, token);
|
||||||
var answers = await answerServiceProvider.GetAnswersByResponseIdAsync(surveyResponse.Id);
|
var answers = await answerServiceProvider.GetAnswersByResponseIdAsync(surveyResponse.Id, token);
|
||||||
var allQuestions = await questionServiceProvider.getQuestionsAsync();
|
var allQuestions = await questionServiceProvider.getQuestionsAsync(token);
|
||||||
var questions = allQuestions.Where(s => s.SurveyId == surveyResponse.SurveyId);
|
var questions = allQuestions.Where(s => s.SurveyId == surveyResponse.SurveyId);
|
||||||
var attachments = await attachmentServiceProvider.getAttachmentsAsync();
|
var attachments = await attachmentServiceProvider.getAttachmentsAsync(token);
|
||||||
|
|
||||||
var result = new
|
var result = new
|
||||||
{
|
{
|
||||||
@ -455,7 +468,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
ans.Id,
|
ans.Id,
|
||||||
ans.AnswerText,
|
ans.AnswerText,
|
||||||
ans.Comment,
|
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 }
|
Attachments = from att in attachments where att.AnswerId == ans.Id select new { att.Id, att.URI }
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -475,15 +488,14 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var surveyResonses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == surveyId).ToListAsync();
|
var surveyResonses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == surveyId).ToListAsync();
|
||||||
|
var employees = await employeeServiceProvider.getEmployeesAsync(token);
|
||||||
var employees = await employeeServiceProvider.getEmployeesAsync();
|
var answers = await answerServiceProvider.getAnswersAsync(token);
|
||||||
var answers = await answerServiceProvider.getAnswersAsync();
|
var questions = await questionServiceProvider.getQuestionsAsync(token);
|
||||||
var questions = await questionServiceProvider.getQuestionsAsync();
|
|
||||||
var surveyQuestions = from q in questions where q.SurveyId == surveyId select q;
|
var surveyQuestions = from q in questions where q.SurveyId == surveyId select q;
|
||||||
|
|
||||||
//var surveyQuestions = await questionServiceProvider.getSurveyQuestionsAsync(surveyId);
|
//var surveyQuestions = await questionServiceProvider.getSurveyQuestionsAsync(surveyId);
|
||||||
|
|
||||||
var attachments = await attachmentServiceProvider.getAttachmentsAsync();
|
var attachments = await attachmentServiceProvider.getAttachmentsAsync(token);
|
||||||
var result = from r in surveyResonses
|
var result = from r in surveyResonses
|
||||||
select new
|
select new
|
||||||
{
|
{
|
||||||
@ -504,7 +516,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
ans.QuestionId,
|
ans.QuestionId,
|
||||||
ans.AnswerText,
|
ans.AnswerText,
|
||||||
ans.Comment,
|
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 }
|
Attachments = from att in attachments where att.AnswerId == ans.Id select new { att.Id, att.URI }
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -525,13 +537,10 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var surveyResonses = await surveyResponseDbContext.SurveyResponses.ToListAsync();
|
var surveyResonses = await surveyResponseDbContext.SurveyResponses.ToListAsync();
|
||||||
|
var employees = await employeeServiceProvider.getEmployeesAsync(token);
|
||||||
var employees = await employeeServiceProvider.getEmployeesAsync();
|
var answers = await answerServiceProvider.getAnswersAsync(token);
|
||||||
var answers = await answerServiceProvider.getAnswersAsync();
|
var questions = await questionServiceProvider.getQuestionsAsync(token);
|
||||||
var questions = await questionServiceProvider.getQuestionsAsync();
|
var attachments = await attachmentServiceProvider.getAttachmentsAsync(token);
|
||||||
var attachments = await attachmentServiceProvider.getAttachmentsAsync();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var result = from r in surveyResonses
|
var result = from r in surveyResonses
|
||||||
select new
|
select new
|
||||||
@ -553,7 +562,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
ans.QuestionId,
|
ans.QuestionId,
|
||||||
ans.AnswerText,
|
ans.AnswerText,
|
||||||
ans.Comment,
|
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 }
|
Attachments = from att in attachments where att.AnswerId == ans.Id select new { att.Id, att.URI }
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -573,8 +582,8 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var surveyResponses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == surveyId).ToListAsync();
|
var surveyResponses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == surveyId).ToListAsync();
|
||||||
var answers = await answerServiceProvider.getAnswersAsync();
|
var answers = await answerServiceProvider.getAnswersAsync(token);
|
||||||
var locations = await locationServiceProvider.getLocationsAsync();
|
var locations = await locationServiceProvider.getLocationsAsync(token);
|
||||||
var maintenanceCenters = locations.DistinctBy(m => m.MaintenanceCenter);
|
var maintenanceCenters = locations.DistinctBy(m => m.MaintenanceCenter);
|
||||||
|
|
||||||
//get all the answers for the particular survey
|
//get all the answers for the particular survey
|
||||||
@ -594,7 +603,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
//get all the answers with location
|
//get all the answers with location
|
||||||
var surveyAnswersLocations = from surveyAns in surveyAnswers
|
var surveyAnswersLocations = from surveyAns in surveyAnswers
|
||||||
from location in locations
|
from location in locations
|
||||||
where surveyAns.LocationId == location.Id
|
where surveyAns.LocationId.Equals(location.Id)
|
||||||
select new { surveyAns, location.MaintenanceCenter };
|
select new { surveyAns, location.MaintenanceCenter };
|
||||||
|
|
||||||
//aggreting the answers
|
//aggreting the answers
|
||||||
@ -603,9 +612,9 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
select new
|
select new
|
||||||
{
|
{
|
||||||
g.Key.MaintenanceCenter,
|
g.Key.MaintenanceCenter,
|
||||||
Answers = new AggregateAnswer
|
Answers = new
|
||||||
{
|
{
|
||||||
Answer = g.Key.AnswerText,
|
g.Key.AnswerText,
|
||||||
Counter = g.Count()
|
Counter = g.Count()
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -628,17 +637,16 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Method to get Survey Responses by surveyId and LocationId
|
//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
|
try
|
||||||
{
|
{
|
||||||
var surveyResonses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == surveyId && x.LocationId.Equals(locationId)).ToListAsync();
|
var surveyResonses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == surveyId && x.LocationId.Equals(locationId)).ToListAsync();
|
||||||
|
var employees = await employeeServiceProvider.getEmployeesAsync(token);
|
||||||
var employees = await employeeServiceProvider.getEmployeesAsync();
|
var answers = await answerServiceProvider.getAnswersAsync(token);
|
||||||
var answers = await answerServiceProvider.getAnswersAsync();
|
var questions = await questionServiceProvider.getQuestionsAsync(token);
|
||||||
var questions = await questionServiceProvider.getQuestionsAsync();
|
|
||||||
var surveyQuestions = from q in questions where q.SurveyId == surveyId select q;
|
var surveyQuestions = from q in questions where q.SurveyId == surveyId select q;
|
||||||
var attachments = await attachmentServiceProvider.getAttachmentsAsync();
|
var attachments = await attachmentServiceProvider.getAttachmentsAsync(token);
|
||||||
|
|
||||||
var result = from r in surveyResonses
|
var result = from r in surveyResonses
|
||||||
select new
|
select new
|
||||||
@ -661,7 +669,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
ans.Id,
|
ans.Id,
|
||||||
ans.AnswerText,
|
ans.AnswerText,
|
||||||
ans.Comment,
|
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 }
|
Attachments = from att in attachments where att.AnswerId == ans.Id select new { att.Id, att.URI }
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -681,9 +689,9 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var surveyResponses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == survey.Id).ToListAsync();
|
var surveyResponses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == survey.Id).ToListAsync();
|
||||||
var answers = await answerServiceProvider.getAnswersAsync();
|
var answers = await answerServiceProvider.getAnswersAsync(token);
|
||||||
var employees = await employeeServiceProvider.getEmployeesAsync();
|
var employees = await employeeServiceProvider.getEmployeesAsync(token);
|
||||||
var attachments = await attachmentServiceProvider.getAttachmentsAsync();
|
var attachments = await attachmentServiceProvider.getAttachmentsAsync(token);
|
||||||
|
|
||||||
var result = from r in surveyResponses
|
var result = from r in surveyResponses
|
||||||
select new
|
select new
|
||||||
@ -726,12 +734,12 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
{
|
{
|
||||||
if (answerRequest != null)
|
if (answerRequest != null)
|
||||||
{
|
{
|
||||||
var answer = await answerServiceProvider.PostAnswersAsync(new Models.Answer { QuestionId = answerRequest.QuestionId, AnswerText = answerRequest.AnswerText, Comment = answerRequest.Comment, SurveyResponseId = surveyResponseId });
|
var answer = await answerServiceProvider.PostAnswersAsync(new Models.Answer { QuestionId = answerRequest.QuestionId, AnswerText = answerRequest.AnswerText, Comment = answerRequest.Comment, SurveyResponseId = surveyResponseId }, token);
|
||||||
if (answer != null)
|
if (answer != null)
|
||||||
{
|
{
|
||||||
List<AnswerInfo> listAnswerInfo = new List<AnswerInfo>();
|
List<AnswerInfo> listAnswerInfo = new List<AnswerInfo>();
|
||||||
listAnswerInfo.Add(new AnswerInfo { AnswerId = answer.Id, postedFiles = answerRequest.PostedFiles });
|
listAnswerInfo.Add(new AnswerInfo { AnswerId = answer.Id, postedFiles = answerRequest.PostedFiles });
|
||||||
var attachments = attachmentServiceProvider.PostAttachmentsAsync(new AttachmentInfo { ResponseId = surveyResponseId, Answers = listAnswerInfo });
|
var attachments = attachmentServiceProvider.PostAttachmentsAsync(new AttachmentInfo { ResponseId = surveyResponseId, Answers = listAnswerInfo }, token);
|
||||||
|
|
||||||
string message = $"Answer for question {answerRequest.QuestionId} saved to the database";
|
string message = $"Answer for question {answerRequest.QuestionId} saved to the database";
|
||||||
logger?.LogInformation(message);
|
logger?.LogInformation(message);
|
||||||
@ -752,15 +760,13 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public async Task<(bool IsSuccess, Models.SurveyResponse SurveyResponse, string ErrorMessage)> PostSurveyAnswersAsync(Models.Request request)
|
public async Task<(bool IsSuccess, Models.SurveyResponse SurveyResponse, string ErrorMessage)> PostSurveyAnswersAsync(Models.Request request)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (request != null)
|
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)
|
if (response.IsSuccess)
|
||||||
{
|
{
|
||||||
var surveyResponse = response.SurveyResponse;
|
var surveyResponse = response.SurveyResponse;
|
@ -1,21 +1,21 @@
|
|||||||
using DamageAssesment.Api.SurveyResponses.Interfaces;
|
using DamageAssesment.Api.Responses.Interfaces;
|
||||||
using DamageAssesment.Api.SurveyResponses.Models;
|
using DamageAssesment.Api.Responses.Models;
|
||||||
|
using Microsoft.Extensions.Primitives;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
|
||||||
namespace DamageAssesment.Api.SurveyResponses.Services
|
namespace DamageAssesment.Api.Responses.Services
|
||||||
{
|
{
|
||||||
public class AnswerServiceProvider : ServiceProviderBase, IAnswerServiceProvider
|
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()
|
public async Task<List<Answer>> getAnswersAsync(string token)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var url = urlBase + ressource;
|
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null, token);
|
||||||
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null);
|
|
||||||
var answers = JsonConvert.DeserializeObject<List<Answer>>(responseJsonString);
|
var answers = JsonConvert.DeserializeObject<List<Answer>>(responseJsonString);
|
||||||
|
|
||||||
if (answers == null || !answers.Any())
|
if (answers == null || !answers.Any())
|
||||||
@ -29,12 +29,12 @@ namespace DamageAssesment.Api.SurveyResponses.Services
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<Answer>> GetAnswersByResponseIdAsync(int responseId)
|
public async Task<List<Answer>> GetAnswersByResponseIdAsync(int responseId, string token)
|
||||||
{
|
{
|
||||||
try
|
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 responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null,token);
|
||||||
var answers = JsonConvert.DeserializeObject<List<Answer>>(responseJsonString);
|
var answers = JsonConvert.DeserializeObject<List<Answer>>(responseJsonString);
|
||||||
|
|
||||||
if (answers == null || !answers.Any())
|
if (answers == null || !answers.Any())
|
||||||
@ -48,13 +48,12 @@ namespace DamageAssesment.Api.SurveyResponses.Services
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<Answer> PostAnswersAsync(Answer answer)
|
public async Task<Answer> PostAnswersAsync(Answer answer, string token )
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var url = urlBase + ressource;
|
|
||||||
var requestJsonString = JsonConvert.SerializeObject(answer);
|
var requestJsonString = JsonConvert.SerializeObject(answer);
|
||||||
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Post, url, requestJsonString);
|
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Post, url, requestJsonString, token);
|
||||||
var answers = JsonConvert.DeserializeObject<Answer>(responseJsonString);
|
var answers = JsonConvert.DeserializeObject<Answer>(responseJsonString);
|
||||||
|
|
||||||
if (answers == null)
|
if (answers == null)
|
@ -1,21 +1,20 @@
|
|||||||
using DamageAssesment.Api.SurveyResponses.Interfaces;
|
using DamageAssesment.Api.Responses.Interfaces;
|
||||||
using DamageAssesment.Api.SurveyResponses.Models;
|
using DamageAssesment.Api.Responses.Models;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace DamageAssesment.Api.SurveyResponses.Services
|
namespace DamageAssesment.Api.Responses.Services
|
||||||
{
|
{
|
||||||
public class AttachmentServiceProvider : ServiceProviderBase, IAttachmentServiceProvider
|
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"))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<Attachment>> getAttachmentsAsync()
|
public async Task<List<Attachment>> getAttachmentsAsync(string token)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var url = urlBase + ressource;
|
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null,token);
|
||||||
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null);
|
|
||||||
var attachments = JsonConvert.DeserializeObject<List<Attachment>>(responseJsonString);
|
var attachments = JsonConvert.DeserializeObject<List<Attachment>>(responseJsonString);
|
||||||
|
|
||||||
if (attachments == null || !attachments.Any())
|
if (attachments == null || !attachments.Any())
|
||||||
@ -29,13 +28,12 @@ namespace DamageAssesment.Api.SurveyResponses.Services
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IEnumerable<Attachment>> PostAttachmentsAsync(AttachmentInfo attachmentInfo)
|
public async Task<IEnumerable<Attachment>> PostAttachmentsAsync(AttachmentInfo attachmentInfo, string token)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var url = urlBase + ressource;
|
|
||||||
var requestJsonString = JsonConvert.SerializeObject(attachmentInfo);
|
var requestJsonString = JsonConvert.SerializeObject(attachmentInfo);
|
||||||
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Post, url, requestJsonString);
|
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Post, url, requestJsonString, token);
|
||||||
var attachments = JsonConvert.DeserializeObject<IEnumerable<Attachment>>(responseJsonString);
|
var attachments = JsonConvert.DeserializeObject<IEnumerable<Attachment>>(responseJsonString);
|
||||||
|
|
||||||
if (attachments == null)
|
if (attachments == null)
|
@ -0,0 +1,51 @@
|
|||||||
|
using DamageAssesment.Api.Responses.Interfaces;
|
||||||
|
using DamageAssesment.Api.Responses.Models;
|
||||||
|
using Microsoft.AspNetCore.Mvc.Routing;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace DamageAssesment.Api.Responses.Services
|
||||||
|
{
|
||||||
|
public class EmployeeServiceProvider : ServiceProviderBase, IEmployeeServiceProvider
|
||||||
|
{
|
||||||
|
public EmployeeServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger<EmployeeServiceProvider> logger) : base(configuration, httpUtil, logger, configuration.GetValue<string>("RessourceSettings:Employee"), configuration.GetValue<string>("EndPointSettings:EmployeeUrlBase"))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<Employee>> getEmployeesAsync(string token)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null,token);
|
||||||
|
var employees = JsonConvert.DeserializeObject<List<Employee>>(responseJsonString);
|
||||||
|
|
||||||
|
if (employees == null || !employees.Any())
|
||||||
|
return new List<Employee>();
|
||||||
|
else return employees;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger?.LogError($"Exception Found : {ex.Message} - Ref: EmployeeServiceProvider.getEmployeesAsync()");
|
||||||
|
return new List<Employee>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<Employee> getEmployeeAsync(int employeeId, string token)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
url = urlBase + string.Format(configuration.GetValue<string>("RessourceSettings:EmployeeById"), employeeId);
|
||||||
|
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null, token);
|
||||||
|
var employee = JsonConvert.DeserializeObject<Employee>(responseJsonString);
|
||||||
|
|
||||||
|
if (employee == null)
|
||||||
|
return null;
|
||||||
|
else return employee;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger?.LogError($"Exception Found : {ex.Message} - Ref: EmployeeServiceProvider.getEmployeeAsync()");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
using DamageAssesment.Api.Responses.Interfaces;
|
||||||
|
using DamageAssesment.Api.Responses.Models;
|
||||||
|
using System.Net.Http.Headers;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace DamageAssesment.Api.Responses.Services
|
||||||
|
{
|
||||||
|
public class HttpUtil : IHttpUtil
|
||||||
|
{
|
||||||
|
private readonly HttpClient httpClient;
|
||||||
|
private readonly ILogger<HttpUtil> logger;
|
||||||
|
|
||||||
|
public HttpUtil(HttpClient httpClient, ILogger<HttpUtil> logger)
|
||||||
|
{
|
||||||
|
this.httpClient = httpClient;
|
||||||
|
this.logger = logger;
|
||||||
|
}
|
||||||
|
public async Task<string> SendAsync(HttpMethod method, string url, string JsonInput, string token)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var request = new HttpRequestMessage(method, url);
|
||||||
|
request.Headers.Accept.Clear();
|
||||||
|
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
|
||||||
|
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
|
||||||
|
if (method == HttpMethod.Post)
|
||||||
|
{
|
||||||
|
request.Content = new StringContent(JsonInput, Encoding.UTF8, "application/json");
|
||||||
|
}
|
||||||
|
var response = await httpClient.SendAsync(request, CancellationToken.None);
|
||||||
|
response.EnsureSuccessStatusCode();
|
||||||
|
var responseString = await response.Content.ReadAsStringAsync();
|
||||||
|
return responseString;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger?.LogError($"Exception Message : {ex.Message} - Ref: HttpUtil.SendAsync()");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,21 +1,20 @@
|
|||||||
using DamageAssesment.Api.SurveyResponses.Interfaces;
|
using DamageAssesment.Api.Responses.Interfaces;
|
||||||
using DamageAssesment.Api.SurveyResponses.Models;
|
using DamageAssesment.Api.Responses.Models;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace DamageAssesment.Api.SurveyResponses.Services
|
namespace DamageAssesment.Api.Responses.Services
|
||||||
{
|
{
|
||||||
public class LocationServiceProvider :ServiceProviderBase, ILocationServiceProvider
|
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"))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<Location>> getLocationsAsync()
|
public async Task<List<Location>> getLocationsAsync(string token)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var url = urlBase + ressource;
|
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null, token);
|
||||||
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null);
|
|
||||||
var locations = JsonConvert.DeserializeObject<List<Location>>(responseJsonString);
|
var locations = JsonConvert.DeserializeObject<List<Location>>(responseJsonString);
|
||||||
|
|
||||||
if (locations == null || !locations.Any())
|
if (locations == null || !locations.Any())
|
@ -1,21 +1,20 @@
|
|||||||
using DamageAssesment.Api.SurveyResponses.Interfaces;
|
using DamageAssesment.Api.Responses.Interfaces;
|
||||||
using DamageAssesment.Api.SurveyResponses.Models;
|
using DamageAssesment.Api.Responses.Models;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace DamageAssesment.Api.SurveyResponses.Services
|
namespace DamageAssesment.Api.Responses.Services
|
||||||
{
|
{
|
||||||
public class QuestionServiceProvider : ServiceProviderBase, IQuestionServiceProvider
|
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"))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<Question>> getQuestionsAsync()
|
public async Task<List<Question>> getQuestionsAsync(string token)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var url = urlBase + ressource;
|
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null,token);
|
||||||
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null);
|
|
||||||
var questions = JsonConvert.DeserializeObject<List<Question>>(responseJsonString);
|
var questions = JsonConvert.DeserializeObject<List<Question>>(responseJsonString);
|
||||||
|
|
||||||
if (questions == null || !questions.Any())
|
if (questions == null || !questions.Any())
|
||||||
@ -29,12 +28,12 @@ namespace DamageAssesment.Api.SurveyResponses.Services
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<SurveyQuestions>> getSurveyQuestionsAsync(int surveyId)
|
public async Task<List<SurveyQuestions>> getSurveyQuestionsAsync(int surveyId, string token)
|
||||||
{
|
{
|
||||||
try
|
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 responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null, token);
|
||||||
var questions = JsonConvert.DeserializeObject<List<SurveyQuestions>>(responseJsonString);
|
var questions = JsonConvert.DeserializeObject<List<SurveyQuestions>>(responseJsonString);
|
||||||
|
|
||||||
if (questions == null || !questions.Any())
|
if (questions == null || !questions.Any())
|
||||||
@ -49,12 +48,12 @@ namespace DamageAssesment.Api.SurveyResponses.Services
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public async Task<Question> getQuestionsAsync(int questionId)
|
public async Task<Question> getQuestionsAsync(int questionId, string token)
|
||||||
{
|
{
|
||||||
try
|
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 responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null, token);
|
||||||
var question = JsonConvert.DeserializeObject<Question>(responseJsonString);
|
var question = JsonConvert.DeserializeObject<Question>(responseJsonString);
|
||||||
|
|
||||||
if (question == null)
|
if (question == null)
|
@ -1,20 +1,19 @@
|
|||||||
using DamageAssesment.Api.SurveyResponses.Interfaces;
|
using DamageAssesment.Api.Responses.Interfaces;
|
||||||
using DamageAssesment.Api.SurveyResponses.Models;
|
using DamageAssesment.Api.Responses.Models;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace DamageAssesment.Api.SurveyResponses.Services
|
namespace DamageAssesment.Api.Responses.Services
|
||||||
{
|
{
|
||||||
public class RegionServiceProvider : ServiceProviderBase, IRegionServiceProvider
|
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()
|
public async Task<List<Region>> getRegionsAsync(string token)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var url = urlBase + ressource;
|
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null, token);
|
||||||
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null);
|
|
||||||
var regions = JsonConvert.DeserializeObject<List<Region>>(responseJsonString);
|
var regions = JsonConvert.DeserializeObject<List<Region>>(responseJsonString);
|
||||||
|
|
||||||
if (regions == null || !regions.Any())
|
if (regions == null || !regions.Any())
|
@ -1,6 +1,6 @@
|
|||||||
using DamageAssesment.Api.SurveyResponses.Interfaces;
|
using DamageAssesment.Api.Responses.Interfaces;
|
||||||
|
|
||||||
namespace DamageAssesment.Api.SurveyResponses.Services
|
namespace DamageAssesment.Api.Responses.Services
|
||||||
{
|
{
|
||||||
public class ServiceProviderBase
|
public class ServiceProviderBase
|
||||||
{
|
{
|
||||||
@ -9,6 +9,7 @@ namespace DamageAssesment.Api.SurveyResponses.Services
|
|||||||
protected readonly ILogger<ServiceProviderBase> logger;
|
protected readonly ILogger<ServiceProviderBase> logger;
|
||||||
protected string ressource;
|
protected string ressource;
|
||||||
protected string urlBase;
|
protected string urlBase;
|
||||||
|
protected string url;
|
||||||
|
|
||||||
|
|
||||||
public ServiceProviderBase(IConfiguration configuration, IHttpUtil httpUtil, ILogger<ServiceProviderBase> logger, string ressource, string urlBase)
|
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.logger = logger;
|
||||||
this.ressource = ressource;
|
this.ressource = ressource;
|
||||||
this.urlBase = urlBase;
|
this.urlBase = urlBase;
|
||||||
|
url = urlBase + ressource;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,22 +1,20 @@
|
|||||||
using DamageAssesment.Api.SurveyResponses.Interfaces;
|
using DamageAssesment.Api.Responses.Interfaces;
|
||||||
using DamageAssesment.Api.SurveyResponses.Models;
|
using DamageAssesment.Api.Responses.Models;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace DamageAssesment.Api.SurveyResponses.Services
|
namespace DamageAssesment.Api.Responses.Services
|
||||||
{
|
{
|
||||||
public class SurveyServiceProvider :ServiceProviderBase, ISurveyServiceProvider
|
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"))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<Survey>> getSurveysAsync()
|
public async Task<List<Survey>> getSurveysAsync(string token)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null, token);
|
||||||
var url = urlBase + ressource;
|
|
||||||
var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null);
|
|
||||||
var surveys = JsonConvert.DeserializeObject<List<Survey>>(responseJsonString);
|
var surveys = JsonConvert.DeserializeObject<List<Survey>>(responseJsonString);
|
||||||
|
|
||||||
if (surveys == null || !surveys.Any())
|
if (surveys == null || !surveys.Any())
|
||||||
@ -30,12 +28,12 @@ namespace DamageAssesment.Api.SurveyResponses.Services
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<Survey> getSurveyAsync(int surveyId)
|
public async Task<Survey> getSurveyAsync(int surveyId, string token)
|
||||||
{
|
{
|
||||||
try
|
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 responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null, token);
|
||||||
var survey = JsonConvert.DeserializeObject<Survey>(responseJsonString);
|
var survey = JsonConvert.DeserializeObject<Survey>(responseJsonString);
|
||||||
|
|
||||||
if (survey == null )
|
if (survey == null )
|
@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"Logging": {
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user