diff --git a/DamageAssesmentApi/DamageAssesment.Api.DocuLinks.Test/DamageAssesment - Backup.Api.DocuLinks.Test.csproj b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks.Test/DamageAssesment - Backup.Api.DocuLinks.Test.csproj new file mode 100644 index 0000000..6d6c72f --- /dev/null +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks.Test/DamageAssesment - Backup.Api.DocuLinks.Test.csproj @@ -0,0 +1,27 @@ + + + + net6.0 + enable + enable + + false + true + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents.Test/DamageAssesment.Api.DocuLinks.Test.csproj b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks.Test/DamageAssesment.Api.DocuLinks.Test.csproj similarity index 93% rename from DamageAssesmentApi/DamageAssesment.Api.Documents.Test/DamageAssesment.Api.DocuLinks.Test.csproj rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks.Test/DamageAssesment.Api.DocuLinks.Test.csproj index e990a2c..6d6c72f 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents.Test/DamageAssesment.Api.DocuLinks.Test.csproj +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks.Test/DamageAssesment.Api.DocuLinks.Test.csproj @@ -21,7 +21,7 @@ - + diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents.Test/DocumentsServiceTest.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks.Test/DoculinkServiceTest.cs similarity index 67% rename from DamageAssesmentApi/DamageAssesment.Api.Documents.Test/DocumentsServiceTest.cs rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks.Test/DoculinkServiceTest.cs index 9ca0bbd..b953eeb 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents.Test/DocumentsServiceTest.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks.Test/DoculinkServiceTest.cs @@ -1,11 +1,11 @@ -using DamageAssesment.Api.Documents.Controllers; -using DamageAssesment.Api.Documents.Interfaces; -using DamageAssesment.Api.Documents.Models; +using DamageAssesment.Api.DocuLinks.Controllers; +using DamageAssesment.Api.DocuLinks.Interfaces; +using DamageAssesment.Api.DocuLinks.Models; using Microsoft.AspNetCore.Mvc; using Moq; using Xunit; -namespace DamageAssesment.Api.Documents.Test +namespace DamageAssesment.Api.DocuLinks.Test { public class DocumentServiceTest @@ -14,67 +14,66 @@ namespace DamageAssesment.Api.Documents.Test [Fact(DisplayName = "Get Documents - NoContent Case")] public async Task GetDocumentsLanguageAsync_ShouldReturnStatusCode204() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); var mockResponse = await MockData.getNoContentResponse(); - mockDocumentService.Setup(service => service.GetdocumentsByLinkAsync("forms","en")).ReturnsAsync(mockResponse); + mockDocumentService.Setup(service => service.GetdocumentsByLinkAsync("forms","en",null)).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); - var result = (NoContentResult)await DocumentProvider.GetDocumentsAsync("", ""); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); + var result = (NoContentResult)await DocumentProvider.GetDocumentsAsync("", "", null); Assert.Equal(204, result.StatusCode); } - [Fact(DisplayName = "Get Documents - NoContent Case")] + [Fact(DisplayName = "Get active Documents - NoContent Case")] public async Task GetDocumentsLinkTypeAsync_ShouldReturnStatusCode204() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); var mockResponse = await MockData.getNoContentResponse(); - mockDocumentService.Setup(service => service.GetdocumentsByLinkAsync("forms","en")).ReturnsAsync(mockResponse); + mockDocumentService.Setup(service => service.GetdocumentsByLinkAsync("forms", "en", true)).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); - var result = (NoContentResult)await DocumentProvider.GetDocumentsAsync("", ""); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); + var result = (NoContentResult)await DocumentProvider.GetDocumentsByActiveAsync("", ""); Assert.Equal(204, result.StatusCode); } [Fact(DisplayName = "Get Documents - Ok case")] public async Task GetDocumentsAsync_ShouldReturnStatusCode200() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); var mockResponse = await MockData.getOkResponse(); - mockDocumentService.Setup(service => service.GetdocumentsByLinkAsync("forms","en")).ReturnsAsync(mockResponse); + mockDocumentService.Setup(service => service.GetdocumentsByLinkAsync("forms","en", null)).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); - var result = (OkObjectResult)await DocumentProvider.GetDocumentsAsync("forms","en"); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); + var result = (OkObjectResult)await DocumentProvider.GetDocumentsAsync("forms","en", null); Assert.Equal(200, result.StatusCode); } - - [Fact(DisplayName = "Get Documents - NoContent Case")] - public async Task GetDocumentsAsync_ShouldReturnStatusCode204() + [Fact(DisplayName = "Get active Documents - Ok case")] + public async Task GetActiveDocumentsAsync_ShouldReturnStatusCode200() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); - var mockResponse = await MockData.getNoContentResponse(); - mockDocumentService.Setup(service => service.GetdocumentsByLinkAsync("forms", "en")).ReturnsAsync(mockResponse); + var mockResponse = await MockData.getOkResponse(); + mockDocumentService.Setup(service => service.GetdocumentsByLinkAsync("forms", "en", true)).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); - var result = (NoContentResult)await DocumentProvider.GetDocumentsAsync("forms","en"); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); + var result = (OkObjectResult)await DocumentProvider.GetDocumentsByActiveAsync("forms", "en"); - Assert.Equal(204, result.StatusCode); + Assert.Equal(200, result.StatusCode); } [Fact(DisplayName = "Get Document by Id - Ok case")] public async Task GetDocumentAsync_ShouldReturnStatusCode200() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); var mockResponse = await MockData.getOkResponse(1); mockDocumentService.Setup(service => service.GetDocumentAsync(1,"forms","en")).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); var result = (OkObjectResult)await DocumentProvider.GetDocumentAsync(1, "forms", "en"); Assert.Equal(200, result.StatusCode); @@ -83,24 +82,24 @@ namespace DamageAssesment.Api.Documents.Test [Fact(DisplayName = "Get Document by Id - NotFound case")] public async Task GetDocumentAsync_ShouldReturnStatusCode404() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); var mockResponse = await MockData.getNotFoundResponse(); mockDocumentService.Setup(service => service.GetDocumentAsync(99, "forms", "en")).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); var result = (NotFoundResult)await DocumentProvider.GetDocumentAsync(99, "forms", "en"); Assert.Equal(404, result.StatusCode); } [Fact(DisplayName = "Post Document - Ok case")] public async Task PostDocumentAsync_ShouldReturnStatusCode200() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); var mockResponse = await MockData.getOkResponse(1); var mockInputDocument = await MockData.getInputDocumentData(); - var DocumentResponse = await MockData.GetDocumentsInfo(0); + var DocumentResponse = await MockData.GetDocuLinksInfo(0); mockDocumentService.Setup(service => service.PostDocumentAsync(mockInputDocument)).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); var result = (NoContentResult)await DocumentProvider.CreateDocument(DocumentResponse); Assert.Equal(204, result.StatusCode); @@ -109,13 +108,13 @@ namespace DamageAssesment.Api.Documents.Test [Fact(DisplayName = "Post Document - BadRequest case")] public async Task PostDocumentAsync_ShouldReturnStatusCode400() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); var mockInputDocument = await MockData.getInputDocumentData(); var mockResponse = await MockData.getBadRequestResponse(); - DocumentInfo documentInfo = null; + ReqDoculink documentInfo = null; mockDocumentService.Setup(service => service.PostDocumentAsync(mockInputDocument)).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); var result = (BadRequestObjectResult)await DocumentProvider.CreateDocument(documentInfo); Assert.Equal(400, result.StatusCode); @@ -124,13 +123,13 @@ namespace DamageAssesment.Api.Documents.Test [Fact(DisplayName = "Put Document - Ok case")] public async Task PutDocumentAsync_ShouldReturnStatusCode200() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); var mockResponse = await MockData.getOkResponse(1); var mockInputDocument = await MockData.getInputDocumentData(); - var DocumentResponse = await MockData.GetDocumentsInfo(1); + var DocumentResponse = await MockData.GetDocuLinksInfo(1); mockDocumentService.Setup(service => service.UpdateDocumentAsync(1,mockInputDocument)).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); var result = (NotFoundResult)await DocumentProvider.UpdateDocument(1,DocumentResponse); Assert.Equal(404, result.StatusCode); @@ -139,12 +138,12 @@ namespace DamageAssesment.Api.Documents.Test [Fact(DisplayName = "Put Document - BadRequest case")] public async Task PutDocumentAsync_ShouldReturnStatusCode400() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); var mockResponse = await MockData.getBadRequestResponse(); var mockInputDocument = await MockData.getInputDocumentData(); mockDocumentService.Setup(service => service.UpdateDocumentAsync(99,mockInputDocument)).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); var result = (BadRequestObjectResult)await DocumentProvider.UpdateDocument(99,null); Assert.Equal(400, result.StatusCode); } @@ -152,11 +151,11 @@ namespace DamageAssesment.Api.Documents.Test [Fact(DisplayName = "Delete Document - Ok case")] public async Task DeleteDocumentAsync_ShouldReturnStatusCode200() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); var mockResponse = await MockData.getOkResponse(1); mockDocumentService.Setup(service => service.DeleteDocumentAsync(1)).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); var result = (OkObjectResult)await DocumentProvider.DeleteDocument(1); Assert.Equal(200, result.StatusCode); @@ -164,11 +163,11 @@ namespace DamageAssesment.Api.Documents.Test [Fact(DisplayName = "Delete Document - NotFound case")] public async Task DeleteDocumentAsync_ShouldReturnStatusCode404() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); var mockResponse = await MockData.getNotFoundResponse(); mockDocumentService.Setup(service => service.DeleteDocumentAsync(1)).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); var result = (NotFoundResult)await DocumentProvider.DeleteDocument(1); Assert.Equal(404, result.StatusCode); } @@ -180,12 +179,12 @@ namespace DamageAssesment.Api.Documents.Test [Fact(DisplayName = "Get Link types - Ok case")] public async Task GetDocumentCategoriesAsync_ShouldReturnStatusCode200() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); var mockResponse = await LinkTypeMockData.getOkResponse(); - mockDocumentService.Setup(service => service.GetLinkTypesAsync()).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); - var result = (OkObjectResult)await DocumentProvider.GetLinkTypesAsync(); + mockDocumentService.Setup(service => service.GetLinkTypesAsync("en")).ReturnsAsync(mockResponse); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); + var result = (OkObjectResult)await DocumentProvider.GetLinkTypesAsync("en"); Assert.Equal(200, result.StatusCode); } @@ -193,13 +192,13 @@ namespace DamageAssesment.Api.Documents.Test [Fact(DisplayName = "Get Link types - NoContent Case")] public async Task GetDocumentCategoriesAsync_ShouldReturnStatusCode204() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); var mockResponse = await LinkTypeMockData.getNoContentResponse(); - mockDocumentService.Setup(service => service.GetLinkTypesAsync()).ReturnsAsync(mockResponse); + mockDocumentService.Setup(service => service.GetLinkTypesAsync("en")).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); - var result = (NoContentResult)await DocumentProvider.GetLinkTypesAsync(); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); + var result = (NoContentResult)await DocumentProvider.GetLinkTypesAsync("en"); Assert.Equal(204, result.StatusCode); } @@ -207,12 +206,12 @@ namespace DamageAssesment.Api.Documents.Test [Fact(DisplayName = "Get Link Type by Id - Ok case")] public async Task GetDocumentcategoryAsync_ShouldReturnStatusCode200() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); var mockResponse = await LinkTypeMockData.getOkResponse(1); - mockDocumentService.Setup(service => service.GetLinkTypeAsync(1)).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); - var result = (OkObjectResult)await DocumentProvider.GetLinkTypeAsync(1); + mockDocumentService.Setup(service => service.GetLinkTypeAsync(1,"en")).ReturnsAsync(mockResponse); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); + var result = (OkObjectResult)await DocumentProvider.GetLinkTypeAsync(1, "en"); Assert.Equal(200, result.StatusCode); } @@ -220,25 +219,25 @@ namespace DamageAssesment.Api.Documents.Test [Fact(DisplayName = "Get Link Type by Id - NotFound case")] public async Task GetDocumentcategoryAsync_ShouldReturnStatusCode404() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); var mockResponse = await LinkTypeMockData.getNotFoundResponse(); - mockDocumentService.Setup(service => service.GetLinkTypeAsync(99)).ReturnsAsync(mockResponse); + mockDocumentService.Setup(service => service.GetLinkTypeAsync(99, "en")).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); - var result = (NotFoundResult)await DocumentProvider.GetLinkTypeAsync(99); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); + var result = (NotFoundResult)await DocumentProvider.GetLinkTypeAsync(99, "en"); Assert.Equal(404, result.StatusCode); } [Fact(DisplayName = "Post Link Type - Ok case")] public async Task PostDocumentcategoryAsync_ShouldReturnStatusCode200() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); var mockResponse = await LinkTypeMockData.getOkResponse(1); var mockInputDocument = await LinkTypeMockData.getInputLinkData(0); mockDocumentService.Setup(service => service.PostLinkTypeAsync(mockInputDocument)).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); var result = (OkObjectResult)await DocumentProvider.CreateLinkType(mockInputDocument); Assert.Equal(200, result.StatusCode); @@ -247,12 +246,12 @@ namespace DamageAssesment.Api.Documents.Test [Fact(DisplayName = "Post Link Type - BadRequest case")] public async Task PostDocumentcategoryAsync_ShouldReturnStatusCode400() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); var mockInputDocument = await LinkTypeMockData.getInputLinkData(99); var mockResponse = await LinkTypeMockData.getBadRequestResponse(); mockDocumentService.Setup(service => service.PostLinkTypeAsync(mockInputDocument)).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); var result = (BadRequestObjectResult)await DocumentProvider.CreateLinkType(mockInputDocument); Assert.Equal(400, result.StatusCode); @@ -261,13 +260,13 @@ namespace DamageAssesment.Api.Documents.Test [Fact(DisplayName = "Put Document - Ok case")] public async Task PutDocumentcategoryAsync_ShouldReturnStatusCode200() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); var mockResponse = await LinkTypeMockData.getOkResponse(1); var mockInputDocument = await LinkTypeMockData.getInputLinkData(1); - mockDocumentService.Setup(service => service.UpdateLinkTypeAsync(mockInputDocument)).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); - var result = (OkObjectResult)await DocumentProvider.UpdateLinkType(mockInputDocument); + mockDocumentService.Setup(service => service.UpdateLinkTypeAsync(1,mockInputDocument)).ReturnsAsync(mockResponse); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); + var result = (OkObjectResult)await DocumentProvider.UpdateLinkType(1,mockInputDocument); Assert.Equal(200, result.StatusCode); } @@ -275,13 +274,13 @@ namespace DamageAssesment.Api.Documents.Test [Fact(DisplayName = "Put Document - NotFound case")] public async Task PutDocumentcategoryAsync_ShouldReturnStatusCode404() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); var mockResponse = await LinkTypeMockData.getNotFoundResponse(); var mockInputDocument = await LinkTypeMockData.getInputLinkData(99); - mockDocumentService.Setup(service => service.UpdateLinkTypeAsync(mockInputDocument)).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); - var result = (NotFoundObjectResult)await DocumentProvider.UpdateLinkType(mockInputDocument); + mockDocumentService.Setup(service => service.UpdateLinkTypeAsync(99,mockInputDocument)).ReturnsAsync(mockResponse); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); + var result = (NotFoundObjectResult)await DocumentProvider.UpdateLinkType(99,mockInputDocument); Assert.Equal(404, result.StatusCode); } @@ -289,13 +288,13 @@ namespace DamageAssesment.Api.Documents.Test [Fact(DisplayName = "Put Document - BadRequest case")] public async Task PutDocumentcategoryAsync_ShouldReturnStatusCode400() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); var mockResponse = await LinkTypeMockData.getBadRequestResponse(); var mockInputDocument = await LinkTypeMockData.getInputLinkData(1); - mockDocumentService.Setup(service => service.UpdateLinkTypeAsync(mockInputDocument)).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); - var result = (BadRequestObjectResult)await DocumentProvider.UpdateLinkType(mockInputDocument); + mockDocumentService.Setup(service => service.UpdateLinkTypeAsync(1,mockInputDocument)).ReturnsAsync(mockResponse); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); + var result = (BadRequestObjectResult)await DocumentProvider.UpdateLinkType(1, mockInputDocument); Assert.Equal(400, result.StatusCode); } @@ -303,12 +302,12 @@ namespace DamageAssesment.Api.Documents.Test [Fact(DisplayName = "Delete Document - Ok case")] public async Task DeleteDocumentcategoryAsync_ShouldReturnStatusCode200() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); var mockResponse = await LinkTypeMockData.getOkResponse(1); mockDocumentService.Setup(service => service.DeleteLinkTypeAsync(1)).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); var result = (OkObjectResult)await DocumentProvider.DeleteLinkType(1); Assert.Equal(200, result.StatusCode); @@ -316,12 +315,12 @@ namespace DamageAssesment.Api.Documents.Test [Fact(DisplayName = "Delete Document - NotFound case")] public async Task DeleteDocumentcategoryAsync_ShouldReturnStatusCode404() { - var mockDocumentService = new Mock(); + var mockDocumentService = new Mock(); var mockUploadService = new Mock(); var mockResponse = await LinkTypeMockData.getNotFoundResponse(); mockDocumentService.Setup(service => service.DeleteLinkTypeAsync(1)).ReturnsAsync(mockResponse); - var DocumentProvider = new DocumentsController(mockDocumentService.Object, mockUploadService.Object); + var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object); var result = (NotFoundResult)await DocumentProvider.DeleteLinkType(99); Assert.Equal(404, result.StatusCode); diff --git a/DamageAssesmentApi/DamageAssesment.Api.DocuLinks.Test/LinkTypeMockData.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks.Test/LinkTypeMockData.cs new file mode 100644 index 0000000..8ed56f1 --- /dev/null +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks.Test/LinkTypeMockData.cs @@ -0,0 +1,71 @@ +using DamageAssesment.Api.DocuLinks.Db; +using DamageAssesment.Api.DocuLinks.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Mail; +using System.Text; +using System.Threading.Tasks; + +namespace DamageAssesment.Api.DocuLinks.Test +{ + public class LinkTypeMockData + { + + public static async Task<(bool, List, string)> getOkResponse() + { + List list = new List(); + Dictionary dictdesc = new Dictionary(); + dictdesc.Add("en", "test"); dictdesc.Add("fr", "tester"); + for (int i = 1; i < 4; i++) + { + list.Add(new DocuLinks.Models.ResLinkType() + { + Id = i, + titles= dictdesc, + CustomOrder=i, + IsActive = true + }); + } + return (true, list, null); + } + public static async Task<(bool, DocuLinks.Models.ResLinkType, string)> getOkResponse(int Id) + { + var DocuLinks = await getOkResponse(); + var Document = DocuLinks.Item2.FirstOrDefault(s => s.Id == Id); + return (true, Document, null); + } + public static async Task<(bool, DocuLinks.Models.ResLinkType, string)> getBadRequestResponse() + { + return (false, null, "Bad Request"); + } + + public static async Task<(bool, DocuLinks.Models.ResLinkType, string)> getNotFoundResponse() + { + return (false, null, "Not Found"); + } + public static async Task<(bool, IEnumerable, string)> getNoContentResponse() + { + IEnumerable list = new List(); + return (false, list, null); + } + + public static async Task getInputLinkData(int id) + { + List DocuLinksTranslations = new List(); + DocuLinksTranslations.Add(new Models.LinksTranslation() + { + Language = "en", + TypeText = "tel" + }); + return new Models.LinkType + { + Id = id, + linksTranslations = DocuLinksTranslations, + CustomOrder=1, + IsActive = true + }; + } + + } +} diff --git a/DamageAssesmentApi/DamageAssesment.Api.DocuLinks.Test/MockData.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks.Test/MockData.cs new file mode 100644 index 0000000..bd10e4b --- /dev/null +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks.Test/MockData.cs @@ -0,0 +1,137 @@ +using DamageAssesment.Api.DocuLinks.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Mail; +using System.Text; +using System.Threading.Tasks; + +namespace DamageAssesment.Api.DocuLinks.Test +{ + public class MockData + { + + public static async Task<(bool, List, string)> getOkResponse() + { + List list = new List(); + + for (int i = 1; i < 4; i++) + { + Dictionary dicttitle = new Dictionary(); + Dictionary dictdesc = new Dictionary(); + dicttitle.Add("en", "test"); dicttitle.Add("fr", "tester"); + dictdesc.Add("en", "test"); dictdesc.Add("fr", "tester"); + List DocuLinksTranslations = new List(); + DocuLinksTranslations.Add(new DoculinkTranslation() + { + Language = "en", + title = "tel"+i, + description = "Sample"+i + }); + List doclinksAttachments = new List(); + doclinksAttachments.Add(new DoculinkAttachments() + { + docName = "",Path="www.google.com", + IsAttachments=false,CustomOrder=1 + }); + list.Add(new DocuLinks.Models.ResDoculink() + { + + Id = i, + linkTypeId = i, + IsActive = true, + titles= dicttitle, + description=dictdesc, + CustomOrder=i, + doclinksAttachments= doclinksAttachments + }); + } + return (true, list, null); + } + public static async Task<(bool, DocuLinks.Models.ResDoculink, string)> getOkResponse(int Id) + { + var DocuLinks = await getOkResponse(); + var Document = DocuLinks.Item2.FirstOrDefault(s => s.Id == Id); + return (true, Document, null); + } + + public static async Task<(bool, DocuLinks.Models.ResDoculink, string)> getBadRequestResponse() + { + return (false, null, "Bad Request"); + } + + public static async Task<(bool, DocuLinks.Models.ResDoculink, string)> getNotFoundResponse() + { + return (false, null, "Not Found"); + } + public static async Task<(bool, IEnumerable, string)> getNoContentResponse() + { + IEnumerable list = new List(); + return (false, list, null); + } + public static async Task GetDocuLinksInfo(int id) + { + + List fileModels = new List(); + fileModels.Add( new FileModel() { FileName = "Sample", FileContent = "c2FtcGxl", FileExtension = ".txt",IsAttachments=true,CustomOrder=1 }); + return new ReqDoculink() { Id=id, linkTypeId = 1, CustomOrder = 1, Files = fileModels }; + } + public static async Task getInputDocumentData() + { + List DocuLinksTranslations = new List(); + DocuLinksTranslations.Add(new DoculinkTranslation() + { + Language = "en", + title = "tel", + description = "Sample" + }); + List doclinksAttachments = new List(); + doclinksAttachments.Add(new DoculinkAttachments() + { + docName = "", + Path = "www.google.com", + IsAttachments = false, + CustomOrder = 1 + }); + return new Models.Doculink + { + Id = 1, + linkTypeId = 1, + IsActive = true, + CustomOrder=1, + documentsTranslations = DocuLinksTranslations, + doclinksAttachments= doclinksAttachments + }; + } + public static async Task> getInputDocuLinksData() + { + List DocuLinksTranslations = new List(); + DocuLinksTranslations.Add(new DoculinkTranslation() + { + Language = "en", + title = "tel", + description = "Sample" + }); + List doclinksAttachments = new List(); + doclinksAttachments.Add(new DoculinkAttachments() + { + docName = "", + Path = "www.google.com", + IsAttachments = false, + CustomOrder = 1 + }); + List DocuLinks = new List(); + DocuLinks.Add(new Models.Doculink + { + Id = 1, + linkTypeId = 1, + IsActive = true, + CustomOrder = 1, + documentsTranslations = DocuLinksTranslations, + doclinksAttachments = doclinksAttachments + }); + return DocuLinks; + } + + } +} diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Controllers/DocumentsController.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Controllers/DoculinkController.cs similarity index 67% rename from DamageAssesmentApi/DamageAssesment.Api.Documents/Controllers/DocumentsController.cs rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Controllers/DoculinkController.cs index dcf43b9..cfbd508 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Controllers/DocumentsController.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Controllers/DoculinkController.cs @@ -1,19 +1,19 @@ -using DamageAssesment.Api.Documents.Db; -using DamageAssesment.Api.Documents.Interfaces; -using DamageAssesment.Api.Documents.Models; -using DamageAssesment.Api.Documents.Providers; +using DamageAssesment.Api.DocuLinks.Db; +using DamageAssesment.Api.DocuLinks.Interfaces; +using DamageAssesment.Api.DocuLinks.Models; +using DamageAssesment.Api.DocuLinks.Providers; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -namespace DamageAssesment.Api.Documents.Controllers +namespace DamageAssesment.Api.DocuLinks.Controllers { [ApiController] - public class DocumentsController : ControllerBase + public class DoculinkController : ControllerBase { - private readonly IDocumentsProvider documentsProvider; + private readonly IDoculinkProvider documentsProvider; private readonly IUploadService uploadService; - public DocumentsController(IDocumentsProvider documentsProvider,IUploadService uploadService) + public DoculinkController(IDoculinkProvider documentsProvider,IUploadService uploadService) { this.documentsProvider = documentsProvider; @@ -21,13 +21,14 @@ namespace DamageAssesment.Api.Documents.Controllers } /// - /// Get all document link type. + /// Get all Doculink type. /// [HttpGet] [Route("doculinks/types")] - public async Task GetLinkTypesAsync() + [Route("doculinks/types/{language:alpha}")] + public async Task GetLinkTypesAsync(string? language) { - var result = await this.documentsProvider.GetLinkTypesAsync(); + var result = await this.documentsProvider.GetLinkTypesAsync(language); if (result.IsSuccess) { return Ok(result.LinkTypes); @@ -35,13 +36,14 @@ namespace DamageAssesment.Api.Documents.Controllers return NoContent(); } /// - /// Get a document link type by id. + /// Get a Doculink type by id. /// [HttpGet] [Route("doculinks/types/{id}")] - public async Task GetLinkTypeAsync(int id) + [Route("doculinks/types/{id}/{language:alpha}")] + public async Task GetLinkTypeAsync(int id,string? language) { - var result = await this.documentsProvider.GetLinkTypeAsync(id); + var result = await this.documentsProvider.GetLinkTypeAsync(id, language); if (result.IsSuccess) { return Ok(result.LinkType); @@ -49,15 +51,15 @@ namespace DamageAssesment.Api.Documents.Controllers return NotFound(); } /// - /// Update a existing document link type. + /// Update a existing Doculink type. /// [HttpPut] - [Route("doculinks/types")] - public async Task UpdateLinkType(Models.LinkType linkType) + [Route("doculinks/types/{id}")] + public async Task UpdateLinkType(int id,Models.LinkType linkType) { if (linkType != null) { - var result = await this.documentsProvider.UpdateLinkTypeAsync(linkType); + var result = await this.documentsProvider.UpdateLinkTypeAsync(id,linkType); if (result.IsSuccess) { return Ok(result.LinkType); @@ -70,7 +72,7 @@ namespace DamageAssesment.Api.Documents.Controllers return CreatedAtRoute("DefaultApi", new { id = linkType.Id }, linkType); } /// - /// Create a new document link type. + /// Create a new Doculink type. /// [HttpPost] [Route("doculinks/types")] @@ -88,7 +90,7 @@ namespace DamageAssesment.Api.Documents.Controllers return CreatedAtRoute("DefaultApi", new { id = linkType.Id }, linkType); } /// - /// Delete a existing document link type by id. + /// Delete a existing Doculink type by id. /// [HttpDelete] [Route("doculinks/types/{id}")] @@ -101,17 +103,17 @@ namespace DamageAssesment.Api.Documents.Controllers } return NotFound(); } - /// - /// Get all documents. - /// - /// - [Route("doculinks")] + /// + /// Get all Doculink. + /// + /// + [Route("doculinks")] [Route("doculinks/{linktype:alpha}")] [Route("doculinks/{linktype:alpha}/{language:alpha}")] [HttpGet] - public async Task GetDocumentsAsync(string? linktype, string? language) + public async Task GetDocumentsAsync(string? linktype, string? language,bool? isactive) { - var result = await this.documentsProvider.GetdocumentsByLinkAsync(linktype, language); + var result = await this.documentsProvider.GetdocumentsByLinkAsync(linktype, language, isactive); if (result.IsSuccess) { return Ok(result.documents); @@ -119,24 +121,24 @@ namespace DamageAssesment.Api.Documents.Controllers return NoContent(); } /// - /// Get all documents. + /// Get all active Doculink. /// - /// - //[Route("doculinks/{language:alpha}")] - //[Route("doculinks")] - //[HttpGet] - //public async Task GetDocumentsAsync(string? language) - //{ - // var result = await this.documentsProvider.GetdocumentsAsync(language); - // if (result.IsSuccess) - // { - // return Ok(result.documents); - // } - // return NoContent(); - //} + [Route("doculinks/active")] + [Route("doculinks/active/{linktype:alpha}")] + [Route("doculinks/active/{linktype:alpha}/{language:alpha}")] + [HttpGet] + public async Task GetDocumentsByActiveAsync(string? linktype, string? language) + { + var result = await this.documentsProvider.GetdocumentsByLinkAsync(linktype, language,true); + if (result.IsSuccess) + { + return Ok(result.documents); + } + return NoContent(); + } /// - /// Get a document by id. + /// Get a Doculink by id. /// [HttpGet] [Route("doculinks/{id}")] @@ -152,19 +154,20 @@ namespace DamageAssesment.Api.Documents.Controllers return NotFound(); } /// - /// Upload new document. + /// update existing doclink. /// [HttpPut] [Route("doculinks/{id}")] - public async Task UpdateDocument(int id,DocumentInfo documentInfo) + public async Task UpdateDocument(int id,ReqDoculink documentInfo) { if (documentInfo != null) { var dbdoc = await this.documentsProvider.GetDocumentByidAsync(id); if (dbdoc.IsSuccess) { - Models.Document document = uploadService.UpdateDocuments(dbdoc.Document, documentInfo); - var result = await this.documentsProvider.UpdateDocumentAsync(id,document); + var documents = await this.documentsProvider.GetDocumentCounter(); + Models.Doculink DocuLink= uploadService.UpdateDocuments(documents.counter,dbdoc.Document, documentInfo); + var result = await this.documentsProvider.UpdateDocumentAsync(id, DocuLink); if (result.IsSuccess) { return Ok(result.Document); @@ -176,19 +179,19 @@ namespace DamageAssesment.Api.Documents.Controllers return BadRequest(documentInfo); } /// - /// update existing document. + /// Create new doclink. /// [HttpPost] [Route("doculinks")] - public async Task CreateDocument(DocumentInfo documentInfo) + public async Task CreateDocument(ReqDoculink documentInfo) { try { if (documentInfo != null) { var documents = await this.documentsProvider.GetDocumentCounter(); - Models.Document document = uploadService.UploadDocument(documents.counter, documentInfo); - var result = await this.documentsProvider.PostDocumentAsync(document); + Models.Doculink DocuLink= uploadService.UploadDocument(documents.counter, documentInfo); + var result = await this.documentsProvider.PostDocumentAsync(DocuLink); if (result.IsSuccess) { return Ok(result.Document); @@ -203,7 +206,7 @@ namespace DamageAssesment.Api.Documents.Controllers } } /// - /// Delete document by id. + /// Delete Doculink by id. /// [HttpDelete] [Route("doculinks/{id}")] @@ -214,7 +217,10 @@ namespace DamageAssesment.Api.Documents.Controllers if (result.IsSuccess) { // deleting file from folder - uploadService.Movefile(result.Document.Path); + foreach (var item in result.Document.doclinksAttachments) + { + uploadService.Movefile(item.Path); + } return Ok(result.Document); } return NotFound(); diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/DamageAssesment.Api.DocuLinks.csproj b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/DamageAssesment.Api.DocuLinks.csproj similarity index 95% rename from DamageAssesmentApi/DamageAssesment.Api.Documents/DamageAssesment.Api.DocuLinks.csproj rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks/DamageAssesment.Api.DocuLinks.csproj index dab0e6c..b71afa9 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/DamageAssesment.Api.DocuLinks.csproj +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/DamageAssesment.Api.DocuLinks.csproj @@ -25,8 +25,4 @@ - - - - diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Db/Document.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/Doculink.cs similarity index 60% rename from DamageAssesmentApi/DamageAssesment.Api.Documents/Db/Document.cs rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/Doculink.cs index 5313d72..8fe5f21 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Db/Document.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/Doculink.cs @@ -1,23 +1,21 @@ using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; -namespace DamageAssesment.Api.Documents.Db +namespace DamageAssesment.Api.DocuLinks.Db { - public class Document + public class Doculink { [Key] public int Id { get; set; } [ForeignKey("LinkType")] public int linkTypeId { get; set; } - public LinkType? LinkType { get; set; } - public string docName { get; set; } - - public string url { get; set; } - public string Path { get; set; } public bool IsActive { get; set; } + public bool IsDeleted { get; set; } + public int CustomOrder { get; set; } + //public bool IsAttachments { get; set; } + //public bool IsUrl { get; set; } public DateTime dateCreated { get; set; } public DateTime dateUpdated { get; set; } - } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/DoculinkAttachments.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/DoculinkAttachments.cs new file mode 100644 index 0000000..035ae9b --- /dev/null +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/DoculinkAttachments.cs @@ -0,0 +1,18 @@ +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; + +namespace DamageAssesment.Api.DocuLinks.Db +{ + public class DoculinkAttachments + { + + [Key] + public int Id { get; set; } + [ForeignKey("Document")] + public int DocumentId { get; set; } + public string docName { get; set; } + public string Path { get; set; } + public bool IsAttachments { get; set; } + public int CustomOrder { get; set; } + } +} diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Db/DocumentDbContext.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/DoculinkDbContext.cs similarity index 56% rename from DamageAssesmentApi/DamageAssesment.Api.Documents/Db/DocumentDbContext.cs rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/DoculinkDbContext.cs index 28b1c92..f24303e 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Db/DocumentDbContext.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/DoculinkDbContext.cs @@ -3,33 +3,41 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using System.ComponentModel.DataAnnotations; -namespace DamageAssesment.Api.Documents.Db +namespace DamageAssesment.Api.DocuLinks.Db { - public class DocumentDbContext : DbContext + public class DoculinkDbContext : DbContext { private IConfiguration _Configuration { get; set; } - public DocumentDbContext(DbContextOptions options, IConfiguration configuration) : base(options) + public DoculinkDbContext(DbContextOptions options, IConfiguration configuration) : base(options) { _Configuration = configuration; } protected override void OnConfiguring(DbContextOptionsBuilder options) { // connect to sql server with connection string from app settings - options.UseSqlServer(_Configuration.GetConnectionString("DocumentConnection")); + options.UseSqlServer(_Configuration.GetConnectionString("DoculinConnection")); } - public DbSet Documents { get; set; } + public DbSet Documents { get; set; } public DbSet LinkTypes { get; set; } - public DbSet DocumentsTranslations { get; set; } + public DbSet DocumentsTranslations { get; set; } + public DbSet LinksTranslations { get; set; } + public DbSet DoclinksAttachments { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); - modelBuilder.Entity() + modelBuilder.Entity() .Property(item => item.Id) .ValueGeneratedOnAdd(); modelBuilder.Entity() .Property(item => item.Id) .ValueGeneratedOnAdd(); - modelBuilder.Entity() + modelBuilder.Entity() + .Property(item => item.Id) + .ValueGeneratedOnAdd(); + modelBuilder.Entity() + .Property(item => item.Id) + .ValueGeneratedOnAdd(); + modelBuilder.Entity() .Property(item => item.Id) .ValueGeneratedOnAdd(); } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Db/DocumentsTranslation.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/DoculinkTranslation.cs similarity index 82% rename from DamageAssesmentApi/DamageAssesment.Api.Documents/Db/DocumentsTranslation.cs rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/DoculinkTranslation.cs index b3a31fc..b932f66 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Db/DocumentsTranslation.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/DoculinkTranslation.cs @@ -1,9 +1,9 @@ using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; -namespace DamageAssesment.Api.Documents.Db +namespace DamageAssesment.Api.DocuLinks.Db { - public class DocumentsTranslation + public class DoculinkTranslation { [Key] public int Id { get; set; } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Db/LinkType.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/LinkType.cs similarity index 57% rename from DamageAssesmentApi/DamageAssesment.Api.Documents/Db/LinkType.cs rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/LinkType.cs index f5e1e86..510f9e3 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Db/LinkType.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/LinkType.cs @@ -1,13 +1,12 @@ using System.ComponentModel.DataAnnotations; -namespace DamageAssesment.Api.Documents.Db +namespace DamageAssesment.Api.DocuLinks.Db { public class LinkType { [Key] public int Id { get; set; } - public string TypeText { get; set; } public bool IsActive { get; set; } - public bool IsAttachment { get; set; } + public int CustomOrder { get; set; } } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/LinksTranslation.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/LinksTranslation.cs new file mode 100644 index 0000000..e477743 --- /dev/null +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/LinksTranslation.cs @@ -0,0 +1,15 @@ +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; + +namespace DamageAssesment.Api.DocuLinks.Db +{ + public class LinksTranslation + { + [Key] + public int Id { get; set; } + [ForeignKey("LinkType")] + public int LinkTypeId { get; set; } + public string TypeText { get; set; } + public string Language { get; set; } + } +} diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Interfaces/IAzureBlobService.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Interfaces/IAzureBlobService.cs similarity index 81% rename from DamageAssesmentApi/DamageAssesment.Api.Documents/Interfaces/IAzureBlobService.cs rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Interfaces/IAzureBlobService.cs index d88c827..844945e 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Interfaces/IAzureBlobService.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Interfaces/IAzureBlobService.cs @@ -1,6 +1,6 @@ using Azure.Storage.Blobs.Models; -namespace DamageAssesment.Api.Documents.Interfaces +namespace DamageAssesment.Api.DocuLinks.Interfaces { public interface IAzureBlobService { diff --git a/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Interfaces/IDoculinkProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Interfaces/IDoculinkProvider.cs new file mode 100644 index 0000000..f4f9c84 --- /dev/null +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Interfaces/IDoculinkProvider.cs @@ -0,0 +1,18 @@ +using DamageAssesment.Api.DocuLinks.Models; + +namespace DamageAssesment.Api.DocuLinks.Interfaces +{ + public interface IDoculinkProvider : ILinkTypesProvider + { + Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> GetDocumentAsync(int id, string? linktype, string? language); + Task<(bool IsSuccess, Models.Doculink Document, string ErrorMessage)> GetDocumentByidAsync(int id); + // Task<(bool IsSuccess, IEnumerable documents, string ErrorMessage)> GetDocumnetsAsync(string? language); + Task<(bool IsSuccess, IEnumerable documents, string ErrorMessage)> GetdocumentsByLinkAsync(string? linkType, string? language, bool? isactive); + Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> PostDocumentAsync(Models.Doculink Document); + Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> UpdateDocumentAsync(int id,Models.Doculink Document); + Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> DeleteDocumentAsync(int id); + Task<(bool IsSuccess, int counter, string message)> GetDocumentCounter(); + + + } +} diff --git a/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Interfaces/ILinkTypeProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Interfaces/ILinkTypeProvider.cs new file mode 100644 index 0000000..133ff16 --- /dev/null +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Interfaces/ILinkTypeProvider.cs @@ -0,0 +1,11 @@ +namespace DamageAssesment.Api.DocuLinks.Interfaces +{ + public interface ILinkTypesProvider + { + Task<(bool IsSuccess, Models.ResLinkType LinkType, string ErrorMessage)> GetLinkTypeAsync(int id,string? language); + Task<(bool IsSuccess, IEnumerable LinkTypes, string ErrorMessage)> GetLinkTypesAsync(string? language); + Task<(bool IsSuccess, Models.ResLinkType LinkType, string ErrorMessage)> PostLinkTypeAsync(Models.LinkType LinkType); + Task<(bool IsSuccess, Models.ResLinkType LinkType, string ErrorMessage)> UpdateLinkTypeAsync(int id,Models.LinkType LinkType); + Task<(bool IsSuccess, Models.ResLinkType LinkType, string ErrorMessage)> DeleteLinkTypeAsync(int id); + } +} diff --git a/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Interfaces/IUploadService.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Interfaces/IUploadService.cs new file mode 100644 index 0000000..4219fd6 --- /dev/null +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Interfaces/IUploadService.cs @@ -0,0 +1,12 @@ +using DamageAssesment.Api.DocuLinks.Models; + +namespace DamageAssesment.Api.DocuLinks.Interfaces +{ + public interface IUploadService + { + Models.Doculink UploadDocument( int counter, ReqDoculink documentInfo); + public Models.Doculink UpdateDocuments(int counter, Models.Doculink document, ReqDoculink documentInfo); + void Deletefile(string path); + void Movefile(string path); + } +} diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Migrations/20230828165655_InitialDocumentCreate.Designer.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/20230828165655_InitialDocumentCreate.Designer.cs similarity index 91% rename from DamageAssesmentApi/DamageAssesment.Api.Documents/Migrations/20230828165655_InitialDocumentCreate.Designer.cs rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/20230828165655_InitialDocumentCreate.Designer.cs index ba5ecae..8072057 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Migrations/20230828165655_InitialDocumentCreate.Designer.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/20230828165655_InitialDocumentCreate.Designer.cs @@ -1,6 +1,6 @@ // using System; -using DamageAssesment.Api.Documents.Db; +using DamageAssesment.Api.DocuLinks.Db; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; @@ -9,9 +9,9 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; #nullable disable -namespace DamageAssesment.Api.Documents.Migrations +namespace DamageAssesment.Api.DocuLinks.Migrations { - [DbContext(typeof(DocumentDbContext))] + [DbContext(typeof(DoculinkDbContext))] [Migration("20230828165655_InitialDocumentCreate")] partial class InitialDocumentCreate { @@ -25,7 +25,7 @@ namespace DamageAssesment.Api.Documents.Migrations SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - modelBuilder.Entity("DamageAssesment.Api.Documents.Db.Document", b => + modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.Document", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -70,7 +70,7 @@ namespace DamageAssesment.Api.Documents.Migrations b.ToTable("Documents"); }); - modelBuilder.Entity("DamageAssesment.Api.Documents.Db.LinkType", b => + modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.LinkType", b => { b.Property("Id") .ValueGeneratedOnAdd() diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Migrations/20230828165655_InitialDocumentCreate.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/20230828165655_InitialDocumentCreate.cs similarity index 97% rename from DamageAssesmentApi/DamageAssesment.Api.Documents/Migrations/20230828165655_InitialDocumentCreate.cs rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/20230828165655_InitialDocumentCreate.cs index 3d55b84..741574e 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Migrations/20230828165655_InitialDocumentCreate.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/20230828165655_InitialDocumentCreate.cs @@ -3,7 +3,7 @@ using Microsoft.EntityFrameworkCore.Migrations; #nullable disable -namespace DamageAssesment.Api.Documents.Migrations +namespace DamageAssesment.Api.DocuLinks.Migrations { /// public partial class InitialDocumentCreate : Migration diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Migrations/20230830200432_DocumentTranslation.Designer.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/20230830200432_DocumentTranslation.Designer.cs similarity index 91% rename from DamageAssesmentApi/DamageAssesment.Api.Documents/Migrations/20230830200432_DocumentTranslation.Designer.cs rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/20230830200432_DocumentTranslation.Designer.cs index 9fcc43d..b9006ba 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Migrations/20230830200432_DocumentTranslation.Designer.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/20230830200432_DocumentTranslation.Designer.cs @@ -1,6 +1,6 @@ // using System; -using DamageAssesment.Api.Documents.Db; +using DamageAssesment.Api.DocuLinks.Db; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; @@ -9,9 +9,9 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; #nullable disable -namespace DamageAssesment.Api.Documents.Migrations +namespace DamageAssesment.Api.DocuLinks.Migrations { - [DbContext(typeof(DocumentDbContext))] + [DbContext(typeof(DoculinkDbContext))] [Migration("20230830200432_DocumentTranslation")] partial class DocumentTranslation { @@ -25,7 +25,7 @@ namespace DamageAssesment.Api.Documents.Migrations SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - modelBuilder.Entity("DamageAssesment.Api.Documents.Db.Document", b => + modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.Document", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -62,7 +62,7 @@ namespace DamageAssesment.Api.Documents.Migrations b.ToTable("Documents"); }); - modelBuilder.Entity("DamageAssesment.Api.Documents.Db.DocumentsTranslation", b => + modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.DocumentsTranslation", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -90,7 +90,7 @@ namespace DamageAssesment.Api.Documents.Migrations b.ToTable("DocumentsTranslations"); }); - modelBuilder.Entity("DamageAssesment.Api.Documents.Db.LinkType", b => + modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.LinkType", b => { b.Property("Id") .ValueGeneratedOnAdd() diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Migrations/20230830200432_DocumentTranslation.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/20230830200432_DocumentTranslation.cs similarity index 97% rename from DamageAssesmentApi/DamageAssesment.Api.Documents/Migrations/20230830200432_DocumentTranslation.cs rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/20230830200432_DocumentTranslation.cs index 90f26be..d639539 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Migrations/20230830200432_DocumentTranslation.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/20230830200432_DocumentTranslation.cs @@ -2,7 +2,7 @@ #nullable disable -namespace DamageAssesment.Api.Documents.Migrations +namespace DamageAssesment.Api.DocuLinks.Migrations { /// public partial class DocumentTranslation : Migration diff --git a/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/20230926163717_doculinkUpdate.Designer.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/20230926163717_doculinkUpdate.Designer.cs new file mode 100644 index 0000000..a8fd840 --- /dev/null +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/20230926163717_doculinkUpdate.Designer.cs @@ -0,0 +1,162 @@ +// +using System; +using DamageAssesment.Api.DocuLinks.Db; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace DamageAssesment.Api.DocuLinks.Migrations +{ + [DbContext(typeof(DoculinkDbContext))] + [Migration("20230926163717_doculinkUpdate")] + partial class doculinkUpdate + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.9") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.Doculink", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CustomOrder") + .HasColumnType("int"); + + b.Property("IsActive") + .HasColumnType("bit"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("dateCreated") + .HasColumnType("datetime2"); + + b.Property("dateUpdated") + .HasColumnType("datetime2"); + + b.Property("linkTypeId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Documents"); + }); + + modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.DoculinkAttachments", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CustomOrder") + .HasColumnType("int"); + + b.Property("DocumentId") + .HasColumnType("int"); + + b.Property("IsAttachments") + .HasColumnType("bit"); + + b.Property("Path") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("docName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("DoclinksAttachments"); + }); + + modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.DoculinkTranslation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("DocumentId") + .HasColumnType("int"); + + b.Property("Language") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("DocumentsTranslations"); + }); + + modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.LinkType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CustomOrder") + .HasColumnType("int"); + + b.Property("IsActive") + .HasColumnType("bit"); + + b.HasKey("Id"); + + b.ToTable("LinkTypes"); + }); + + modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.LinksTranslation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Language") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("LinkTypeId") + .HasColumnType("int"); + + b.Property("TypeText") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("LinksTranslations"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/20230926163717_doculinkUpdate.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/20230926163717_doculinkUpdate.cs new file mode 100644 index 0000000..f5df82a --- /dev/null +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/20230926163717_doculinkUpdate.cs @@ -0,0 +1,144 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace DamageAssesment.Api.DocuLinks.Migrations +{ + /// + public partial class doculinkUpdate : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsAttachment", + table: "LinkTypes"); + + migrationBuilder.DropColumn( + name: "TypeText", + table: "LinkTypes"); + + migrationBuilder.DropColumn( + name: "Path", + table: "Documents"); + + migrationBuilder.DropColumn( + name: "docName", + table: "Documents"); + + migrationBuilder.DropColumn( + name: "url", + table: "Documents"); + + migrationBuilder.AddColumn( + name: "CustomOrder", + table: "LinkTypes", + type: "int", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "CustomOrder", + table: "Documents", + type: "int", + nullable: false, + defaultValue: 0); + + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "Documents", + type: "bit", + nullable: false, + defaultValue: false); + + migrationBuilder.CreateTable( + name: "DoclinksAttachments", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + DocumentId = table.Column(type: "int", nullable: false), + docName = table.Column(type: "nvarchar(max)", nullable: false), + Path = table.Column(type: "nvarchar(max)", nullable: false), + IsAttachments = table.Column(type: "bit", nullable: false), + CustomOrder = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_DoclinksAttachments", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "LinksTranslations", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + LinkTypeId = table.Column(type: "int", nullable: false), + TypeText = table.Column(type: "nvarchar(max)", nullable: false), + Language = table.Column(type: "nvarchar(max)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_LinksTranslations", x => x.Id); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "DoclinksAttachments"); + + migrationBuilder.DropTable( + name: "LinksTranslations"); + + migrationBuilder.DropColumn( + name: "CustomOrder", + table: "LinkTypes"); + + migrationBuilder.DropColumn( + name: "CustomOrder", + table: "Documents"); + + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "Documents"); + + migrationBuilder.AddColumn( + name: "IsAttachment", + table: "LinkTypes", + type: "bit", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "TypeText", + table: "LinkTypes", + type: "nvarchar(max)", + nullable: false, + defaultValue: ""); + + migrationBuilder.AddColumn( + name: "Path", + table: "Documents", + type: "nvarchar(max)", + nullable: false, + defaultValue: ""); + + migrationBuilder.AddColumn( + name: "docName", + table: "Documents", + type: "nvarchar(max)", + nullable: false, + defaultValue: ""); + + migrationBuilder.AddColumn( + name: "url", + table: "Documents", + type: "nvarchar(max)", + nullable: false, + defaultValue: ""); + } + } +} diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Migrations/DocumentDbContextModelSnapshot.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/DocumentDbContextModelSnapshot.cs similarity index 63% rename from DamageAssesmentApi/DamageAssesment.Api.Documents/Migrations/DocumentDbContextModelSnapshot.cs rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/DocumentDbContextModelSnapshot.cs index 24681f1..536727e 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Migrations/DocumentDbContextModelSnapshot.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/DocumentDbContextModelSnapshot.cs @@ -1,6 +1,6 @@ // using System; -using DamageAssesment.Api.Documents.Db; +using DamageAssesment.Api.DocuLinks.Db; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; @@ -8,9 +8,9 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; #nullable disable -namespace DamageAssesment.Api.Documents.Migrations +namespace DamageAssesment.Api.DocuLinks.Migrations { - [DbContext(typeof(DocumentDbContext))] + [DbContext(typeof(DoculinkDbContext))] partial class DocumentDbContextModelSnapshot : ModelSnapshot { protected override void BuildModel(ModelBuilder modelBuilder) @@ -22,7 +22,7 @@ namespace DamageAssesment.Api.Documents.Migrations SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - modelBuilder.Entity("DamageAssesment.Api.Documents.Db.Document", b => + modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.Doculink", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -30,12 +30,14 @@ namespace DamageAssesment.Api.Documents.Migrations SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + b.Property("CustomOrder") + .HasColumnType("int"); + b.Property("IsActive") .HasColumnType("bit"); - b.Property("Path") - .IsRequired() - .HasColumnType("nvarchar(max)"); + b.Property("IsDeleted") + .HasColumnType("bit"); b.Property("dateCreated") .HasColumnType("datetime2"); @@ -43,23 +45,45 @@ namespace DamageAssesment.Api.Documents.Migrations b.Property("dateUpdated") .HasColumnType("datetime2"); - b.Property("docName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - b.Property("linkTypeId") .HasColumnType("int"); - b.Property("url") - .IsRequired() - .HasColumnType("nvarchar(max)"); - b.HasKey("Id"); b.ToTable("Documents"); }); - modelBuilder.Entity("DamageAssesment.Api.Documents.Db.DocumentsTranslation", b => + modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.DoculinkAttachments", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CustomOrder") + .HasColumnType("int"); + + b.Property("DocumentId") + .HasColumnType("int"); + + b.Property("IsAttachments") + .HasColumnType("bit"); + + b.Property("Path") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("docName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("DoclinksAttachments"); + }); + + modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.DoculinkTranslation", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -87,7 +111,7 @@ namespace DamageAssesment.Api.Documents.Migrations b.ToTable("DocumentsTranslations"); }); - modelBuilder.Entity("DamageAssesment.Api.Documents.Db.LinkType", b => + modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.LinkType", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -95,11 +119,31 @@ namespace DamageAssesment.Api.Documents.Migrations SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + b.Property("CustomOrder") + .HasColumnType("int"); + b.Property("IsActive") .HasColumnType("bit"); - b.Property("IsAttachment") - .HasColumnType("bit"); + b.HasKey("Id"); + + b.ToTable("LinkTypes"); + }); + + modelBuilder.Entity("DamageAssesment.Api.DocuLinks.Db.LinksTranslation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Language") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("LinkTypeId") + .HasColumnType("int"); b.Property("TypeText") .IsRequired() @@ -107,7 +151,7 @@ namespace DamageAssesment.Api.Documents.Migrations b.HasKey("Id"); - b.ToTable("LinkTypes"); + b.ToTable("LinksTranslations"); }); #pragma warning restore 612, 618 } diff --git a/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/Doculink.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/Doculink.cs new file mode 100644 index 0000000..6fb538b --- /dev/null +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/Doculink.cs @@ -0,0 +1,25 @@ +using DamageAssesment.Api.DocuLinks.Models; +using System.ComponentModel.DataAnnotations; + +namespace DamageAssesment.Api.DocuLinks.Models +{ + public class Doculink : BaseDoculink + { + public List documentsTranslations { get; set; } + } + public class ResDoculink:BaseDoculink + { + public object titles { get; set; } + public object description { get; set; } + public object linktypes { get; set; } + } + public class BaseDoculink + { + public int Id { get; set; } + public int linkTypeId { get; set; } + public bool IsActive { get; set; } + public bool IsDeleted { get; set; } + public List doclinksAttachments { get; set; } + public int CustomOrder { get; set; } + } +} diff --git a/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/DoculinkAttachments.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/DoculinkAttachments.cs new file mode 100644 index 0000000..ce87857 --- /dev/null +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/DoculinkAttachments.cs @@ -0,0 +1,13 @@ +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; + +namespace DamageAssesment.Api.DocuLinks.Models +{ + public class DoculinkAttachments + { + public string docName { get; set; } + public string Path { get; set; } + public bool IsAttachments { get; set; } + public int CustomOrder { get; set; } + } +} diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Models/DocumentsTranslation.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/DoculinkTranslation.cs similarity index 74% rename from DamageAssesmentApi/DamageAssesment.Api.Documents/Models/DocumentsTranslation.cs rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/DoculinkTranslation.cs index f2ca5af..d632557 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Models/DocumentsTranslation.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/DoculinkTranslation.cs @@ -1,9 +1,9 @@ using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; -namespace DamageAssesment.Api.Documents.Models +namespace DamageAssesment.Api.DocuLinks.Models { - public class DocumentsTranslation + public class DoculinkTranslation { public string title { get; set; } public string description { get; set; } diff --git a/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/LinkType.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/LinkType.cs new file mode 100644 index 0000000..37323da --- /dev/null +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/LinkType.cs @@ -0,0 +1,20 @@ +using System.ComponentModel.DataAnnotations; + +namespace DamageAssesment.Api.DocuLinks.Models +{ + public class LinkType : BaseLinkType + { + public List linksTranslations { get; set; } + } + public class BaseLinkType + { + public int Id { get; set; } + public bool IsActive { get; set; } + public int CustomOrder { get; set; } + } + + public class ResLinkType : BaseLinkType + { + public object titles { get; set; } + } +} diff --git a/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/LinksTranslation.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/LinksTranslation.cs new file mode 100644 index 0000000..2008aa8 --- /dev/null +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/LinksTranslation.cs @@ -0,0 +1,11 @@ +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; + +namespace DamageAssesment.Api.DocuLinks.Models +{ + public class LinksTranslation + { + public string TypeText { get; set; } + public string Language { get; set; } + } +} diff --git a/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/ReqDoculink.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/ReqDoculink.cs new file mode 100644 index 0000000..0f2ea17 --- /dev/null +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/ReqDoculink.cs @@ -0,0 +1,22 @@ +using System.ComponentModel.DataAnnotations.Schema; + +namespace DamageAssesment.Api.DocuLinks.Models +{ + public class ReqDoculink + { + public int Id { get; set; } + public int linkTypeId { get; set; } + public List documentsTranslations { get; set; } + public int CustomOrder { get; set; } + public List? Files { get; set; } + } + public class FileModel + { + public string? FileName { get; set; } + public string? FileContent { get; set; } + public string? FileExtension { get; set; } + public int CustomOrder { get; set; } + public string url { get;set; } + public bool IsAttachments { get; set; } + } +} diff --git a/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Profiles/DoculinkProfile.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Profiles/DoculinkProfile.cs new file mode 100644 index 0000000..084638f --- /dev/null +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Profiles/DoculinkProfile.cs @@ -0,0 +1,22 @@ +using AutoMapper; + +namespace DamageAssesment.Api.DocuLinks.Profiles +{ + public class DoculinkProfile : AutoMapper.Profile + { + public DoculinkProfile() + { + CreateMap() ; + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + } + } +} diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Program.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Program.cs similarity index 77% rename from DamageAssesmentApi/DamageAssesment.Api.Documents/Program.cs rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Program.cs index 04b93fe..f28dd76 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Program.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Program.cs @@ -1,6 +1,6 @@ -using DamageAssesment.Api.Documents.Db; -using DamageAssesment.Api.Documents.Interfaces; -using DamageAssesment.Api.Documents.Providers; +using DamageAssesment.Api.DocuLinks.Db; +using DamageAssesment.Api.DocuLinks.Interfaces; +using DamageAssesment.Api.DocuLinks.Providers; using Microsoft.EntityFrameworkCore; using System.Reflection; @@ -19,13 +19,13 @@ builder.Services.AddSwaggerGen(c => // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); -builder.Services.AddScoped(); +builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); //4/30 -builder.Services.AddDbContext(option => +builder.Services.AddDbContext(option => { - option.UseSqlServer("DocumentConnection"); + option.UseSqlServer("DoculinConnection"); }); var app = builder.Build(); diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Properties/launchSettings.json b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Properties/launchSettings.json similarity index 100% rename from DamageAssesmentApi/DamageAssesment.Api.Documents/Properties/launchSettings.json rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Properties/launchSettings.json diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Providers/AzureBlobService.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Providers/AzureBlobService.cs similarity index 93% rename from DamageAssesmentApi/DamageAssesment.Api.Documents/Providers/AzureBlobService.cs rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Providers/AzureBlobService.cs index bc456f5..bfa2ca4 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Providers/AzureBlobService.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Providers/AzureBlobService.cs @@ -2,9 +2,9 @@ using Azure.Storage.Blobs; using Azure.Storage.Blobs.Models; using Azure.Storage.Blobs.Specialized; -using DamageAssesment.Api.Documents.Interfaces; +using DamageAssesment.Api.DocuLinks.Interfaces; -namespace DamageAssesment.Api.Documents.Providers +namespace DamageAssesment.Api.DocuLinks.Providers { public class AzureBlobService: IAzureBlobService { diff --git a/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Providers/DoculinkProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Providers/DoculinkProvider.cs new file mode 100644 index 0000000..cf8bcfe --- /dev/null +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Providers/DoculinkProvider.cs @@ -0,0 +1,531 @@ +using AutoMapper; +using DamageAssesment.Api.DocuLinks.Db; +using DamageAssesment.Api.DocuLinks.Interfaces; +using DamageAssesment.Api.DocuLinks.Models; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using System; +using System.Diagnostics.Eventing.Reader; +using System.Reflection.Metadata; +using System.Xml.Linq; + +namespace DamageAssesment.Api.DocuLinks.Providers +{ + + + public class DoculinkProvider : IDoculinkProvider + { + private DoculinkDbContext DocumentDbContext; + private ILogger logger; + private IUploadService uploadservice; + private IMapper mapper; + + public DoculinkProvider(DoculinkDbContext DocumentDbContext, ILogger logger, IMapper mapper, IUploadService uploadservice) + { + this.DocumentDbContext = DocumentDbContext; + this.logger = logger; + this.mapper = mapper; + this.uploadservice = uploadservice; + SeedData(); + } + + + + private void SeedData() + { + if (!DocumentDbContext.LinkTypes.Any()) + { + DocumentDbContext.LinkTypes.Add(new Db.LinkType() { IsActive = true, CustomOrder = 1 }); + DocumentDbContext.LinkTypes.Add(new Db.LinkType() { IsActive = true, CustomOrder = 2 }); + DocumentDbContext.LinkTypes.Add(new Db.LinkType() { IsActive = true, CustomOrder = 3 }); + DocumentDbContext.LinkTypes.Add(new Db.LinkType() { IsActive = true, CustomOrder = 4 }); + DocumentDbContext.SaveChanges(); + } + if (!DocumentDbContext.LinksTranslations.Any()) + { + DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "Forms", Language = "en", LinkTypeId = 1 }); + DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "Communiques", Language = "en", LinkTypeId = 2 }); + DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "Memos", Language = "en", LinkTypeId = 3 }); + DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "Trainings", Language = "en", LinkTypeId = 4 }); + DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "Formularios", Language = "es", LinkTypeId = 1 }); + DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "Comunicados", Language = "es", LinkTypeId = 2 }); + DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "notas", Language = "es", LinkTypeId = 3 }); + DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "Entrenamientos", Language = "es", LinkTypeId = 4 }); + DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "Formes", Language = "fr", LinkTypeId = 1 }); + DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "Communiqués", Language = "fr", LinkTypeId = 2 }); + DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "Mémos", Language = "fr", LinkTypeId = 3 }); + DocumentDbContext.LinksTranslations.Add(new Db.LinksTranslation() { TypeText = "Formations", Language = "fr", LinkTypeId = 4 }); + DocumentDbContext.SaveChanges(); + } + if (!DocumentDbContext.Documents.Any()) + { + int counter = 0; + for (int i = 1; i <= 4; i++) + { + FileModel fileModel = new FileModel() { url = "www.google"+i+".com", IsAttachments = false, CustomOrder = 1 }; + ReqDoculink documentInfo = new ReqDoculink() { linkTypeId = i,CustomOrder=i, Files = new List() { fileModel } }; + Db.DoculinkTranslation documents = new Db.DoculinkTranslation { DocumentId = i, title = "Test"+i, description = "ss"+i, Language = "en" }; + Models.Doculink document = uploadservice.UploadDocument(counter, documentInfo); + DocumentDbContext.Documents.Add(mapper.Map(document)); + DocumentDbContext.SaveChanges(); + DocumentDbContext.DocumentsTranslations.AddRange(documents); + var dbattachments = mapper.Map, List>(document.doclinksAttachments); + dbattachments.ForEach(a => a.DocumentId = i); + DocumentDbContext.DoclinksAttachments.AddRange(dbattachments); + DocumentDbContext.SaveChanges(); + counter++; + } + } + } + public List GetDocumentTranslations(int id, string? language) + { + List QuestionTranslations; + if (string.IsNullOrEmpty(language)) + { + QuestionTranslations = mapper.Map, List>( + DocumentDbContext.DocumentsTranslations.AsNoTracking().Where(a => a.DocumentId == id).ToList()); + } + else + { + QuestionTranslations = mapper.Map, List>( + DocumentDbContext.DocumentsTranslations.AsNoTracking().Where(a => a.DocumentId == id && a.Language == language).ToList()); + } + return QuestionTranslations; + } + public ResDoculink CreateMultiLanguageObject(List questions) + { + ResDoculink MultiLanguage = new ResDoculink(); + Dictionary dicttitle = new Dictionary(); + Dictionary dictdesc = new Dictionary(); + foreach (Models.DoculinkTranslation item in questions) + { + dicttitle.Add(item.Language, item.title); + dictdesc.Add(item.Language, item.description); + } + MultiLanguage.titles = dicttitle; + MultiLanguage.description = dictdesc; + return MultiLanguage; + } + public List GetLinkTypeTranslations(int id, string? language) + { + List linksTranslations; + if (string.IsNullOrEmpty(language)) + { + linksTranslations = mapper.Map, List>( + DocumentDbContext.LinksTranslations.AsNoTracking().Where(a => a.LinkTypeId == id).ToList()); + } + else + { + linksTranslations = mapper.Map, List>( + DocumentDbContext.LinksTranslations.AsNoTracking().Where(a => a.LinkTypeId == id && a.Language == language).ToList()); + } + return linksTranslations; + } + public object CreateMultiLanguageLinkTypeObject(List links) + { + object MultiLanguage = new object(); + Dictionary dicttitle = new Dictionary(); + foreach (Models.LinksTranslation item in links) + { + dicttitle.Add(item.Language, item.TypeText); + } + MultiLanguage = dicttitle; + return MultiLanguage; + } + public async Task<(bool IsSuccess, IEnumerable documents, string ErrorMessage)> GetdocumentsByLinkAsync(string? linkType, string? language, bool? isactive) + { + + try + { + logger?.LogInformation("Query Question"); + var documents = new List(); + if (String.IsNullOrEmpty(linkType)) + documents = await DocumentDbContext.Documents.AsNoTracking().Where(q => (isactive == null || q.IsActive == isactive.Value)).ToListAsync(); + else + documents = await DocumentDbContext.Documents.AsNoTracking().Where(q => (isactive == null || q.IsActive == isactive.Value) && + q.linkTypeId == (DocumentDbContext.LinksTranslations.AsNoTracking().Where(a => a.TypeText.ToLower() == linkType.ToLower()).Select(a => a.Id).FirstOrDefault())).ToListAsync(); + if (documents != null) + { + var result = mapper.Map, List>(documents); + foreach (var item in result) + { + var multilan = CreateMultiLanguageObject(GetDocumentTranslations(item.Id, language)); + item.titles = multilan.titles; + item.description = multilan.description; + item.linktypes = CreateMultiLanguageLinkTypeObject(GetLinkTypeTranslations(item.linkTypeId, language)); + item.doclinksAttachments = mapper.Map, List>( + DocumentDbContext.DoclinksAttachments.AsNoTracking().Where(a => a.DocumentId == item.Id).ToList()); + } + 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, IEnumerable documents, string ErrorMessage)> GetDocumnetsAsync(string? language) + //{ + + // try + // { + // logger?.LogInformation("Query Question"); + // var documents = await DocumentDbContext.Documents.Include(a => a.LinkType).AsNoTracking().Where(q => q.IsActive).ToListAsync(); + // if (documents != null) + // { + // logger?.LogInformation($"{documents.Count} Document(s) found"); + // var result = mapper.Map, List>(documents); + // foreach (var item in result) + // { + // var multilan = CreateMultiLanguageObject(GetDocumentTranslations(item.Id, language)); + // item.titles = multilan.titles; + // item.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.Doculink Document, string ErrorMessage)> GetDocumentByidAsync(int id) + { + try + { + logger?.LogInformation("Query LinkType"); + var Document = await DocumentDbContext.Documents.AsNoTracking().FirstOrDefaultAsync(q => q.Id == id && q.IsActive); + if (Document != null) + { + logger?.LogInformation($"{Document} customer(s) found"); + var result = mapper.Map(Document); + result.documentsTranslations = mapper.Map, List>( + DocumentDbContext.DocumentsTranslations.Where(a => a.DocumentId == result.Id).ToList()); + + result.doclinksAttachments = mapper.Map, List>( + DocumentDbContext.DoclinksAttachments.AsNoTracking().Where(a => a.DocumentId == id).ToList()); + return (true, result, null); + } + return (false, null, "Not found"); + } + catch (Exception ex) + { + logger?.LogError(ex.ToString()); + return (false, null, ex.Message); + } + } + //added linktype filter + public async Task<(bool IsSuccess, Models.ResDoculink 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.Doculink(); + if (String.IsNullOrEmpty(linkType)) + Document = await DocumentDbContext.Documents.AsNoTracking().Where(q => q.IsActive && q.Id == id).FirstOrDefaultAsync(); + else + Document = await DocumentDbContext.Documents.AsNoTracking().Where(q => q.IsActive && q.Id == id && + q.linkTypeId == (DocumentDbContext.LinksTranslations.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(Document); + var multilan = CreateMultiLanguageObject(GetDocumentTranslations(result.Id, language)); + result.linktypes = CreateMultiLanguageLinkTypeObject(GetLinkTypeTranslations(result.linkTypeId, language)); + result.titles = multilan.titles; + result.description = multilan.description; + result.doclinksAttachments = mapper.Map, List>( + DocumentDbContext.DoclinksAttachments.AsNoTracking().Where(a => a.DocumentId == id).ToList()); + 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.ResDoculink Document, string ErrorMessage)> PostDocumentAsync(Models.Doculink Document) + { + try + { + var document = mapper.Map(Document); + document.dateCreated = DateTime.Now; document.dateUpdated = DateTime.Now; + DocumentDbContext.Documents.Add(document); + DocumentDbContext.SaveChanges(); + var dbtranslation = mapper.Map, List>(Document.documentsTranslations); + dbtranslation.ForEach(i => i.DocumentId = document.Id); + DocumentDbContext.DocumentsTranslations.AddRange(dbtranslation); + var dbattachments = mapper.Map, List>(Document.doclinksAttachments); + dbattachments.ForEach(i => i.DocumentId = document.Id); + DocumentDbContext.DoclinksAttachments.AddRange(dbattachments); + DocumentDbContext.SaveChanges(); + var result = mapper.Map(document); + var multilan = CreateMultiLanguageObject(GetDocumentTranslations(document.Id, "")); + result.linktypes = CreateMultiLanguageLinkTypeObject(GetLinkTypeTranslations(Document.linkTypeId, "")); + result.titles = multilan.titles; + result.description = multilan.description; + result.doclinksAttachments = Document.doclinksAttachments; + return (true, result, null); + } + catch (Exception ex) + { + logger?.LogError(ex.ToString()); + return (false, null, ex.Message); + } + } + + public async Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> UpdateDocumentAsync(int id, Models.Doculink Document) + { + try + { + if (Document != null) + { + var existing = DocumentDbContext.Documents.AsNoTracking().FirstOrDefault(x => x.Id == id); + if (existing != null) + { + Document.Id = existing.Id; + var document = mapper.Map(Document); + document.dateUpdated = DateTime.Now; + DocumentDbContext.Documents.Update(document); + DocumentDbContext.SaveChanges(); + var oldtranslations = DocumentDbContext.DocumentsTranslations.Where(a => a.DocumentId == id).ToList(); + if (oldtranslations != null) + DocumentDbContext.DocumentsTranslations.RemoveRange(oldtranslations); + var oldattachments = DocumentDbContext.DoclinksAttachments.Where(a => a.DocumentId == id).ToList(); + if (oldattachments != null) + DocumentDbContext.DoclinksAttachments.RemoveRange(oldattachments); + var dbtranslation = mapper.Map, List>(Document.documentsTranslations); + dbtranslation.ForEach(i => i.DocumentId = Document.Id); + DocumentDbContext.DocumentsTranslations.AddRange(dbtranslation); + var dbattachments = mapper.Map, List>(Document.doclinksAttachments); + dbattachments.ForEach(i => i.DocumentId = document.Id); + DocumentDbContext.DoclinksAttachments.AddRange(dbattachments); + DocumentDbContext.SaveChanges(); + var result = mapper.Map(document); + var multilan = CreateMultiLanguageObject(GetDocumentTranslations(document.Id, "")); + result.linktypes = CreateMultiLanguageLinkTypeObject(GetLinkTypeTranslations(document.linkTypeId, "")); + result.titles = multilan.titles; + result.description = multilan.description; + result.doclinksAttachments = Document.doclinksAttachments; + return (true, result, "Successful"); + } + else + { + logger?.LogInformation($"{Document} Not found"); + return (false, null, "Not Found"); + } + } + else + { + logger?.LogInformation($"{Document} Bad Request"); + return (false, null, "Bad request"); + } + + } + catch (Exception ex) + { + + logger?.LogError(ex.ToString()); + return (false, null, ex.Message); + } + } + public async Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> DeleteDocumentAsync(int id) + { + + try + { + Db.Doculink Document = DocumentDbContext.Documents.AsNoTracking().Where(a => a.Id == id).FirstOrDefault(); + if (Document == null) + { + return (false, null, "Not Found"); + } + var result = mapper.Map(Document); + var multilan = CreateMultiLanguageObject(GetDocumentTranslations(Document.Id, "")); + result.titles = multilan.titles; + result.description = multilan.description; + result.linktypes = CreateMultiLanguageLinkTypeObject(GetLinkTypeTranslations(result.linkTypeId, "")); + result.doclinksAttachments = mapper.Map, List>( + DocumentDbContext.DoclinksAttachments.AsNoTracking().Where(a => a.DocumentId == id).ToList()); + Document.IsActive = false; + DocumentDbContext.Documents.Update(Document); + DocumentDbContext.SaveChanges(); + return (true, result, $"DocumentId {id} deleted Successfuly"); + } + catch (Exception ex) + { + + logger?.LogError(ex.ToString()); + return (false, null, ex.Message); + } + } + + public async Task<(bool IsSuccess, int counter, string message)> GetDocumentCounter() + { + try + { + int AttachmentId = DocumentDbContext.DoclinksAttachments.Max(a => a.Id); + return (true, AttachmentId, ""); + } + catch (Exception ex) + { + return (false, 0, ex.Message); + } + } + + //Link Type methods + public async Task<(bool IsSuccess, IEnumerable LinkTypes, string ErrorMessage)> GetLinkTypesAsync(string? language) + { + + try + { + logger?.LogInformation("Query Question"); + var LinkType = await DocumentDbContext.LinkTypes.AsNoTracking().Where(q => q.IsActive).ToListAsync(); + if (LinkType != null) + { + logger?.LogInformation($"{LinkType.Count} LinkTypes(s) found"); + var result = mapper.Map, IEnumerable>(LinkType); + foreach (var item in result) + { + item.titles = CreateMultiLanguageLinkTypeObject(GetLinkTypeTranslations(item.Id, language)); + } + 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.ResLinkType LinkType, string ErrorMessage)> GetLinkTypeAsync(int Id, string? language) + { + try + { + logger?.LogInformation("Query LinkType"); + var LinkType = await DocumentDbContext.LinkTypes.AsNoTracking().FirstOrDefaultAsync(q => q.Id == Id && q.IsActive); + if (LinkType != null) + { + logger?.LogInformation($"{LinkType} customer(s) found"); + var result = mapper.Map(LinkType); + result.titles = CreateMultiLanguageLinkTypeObject(GetLinkTypeTranslations(result.Id, language)); + 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.ResLinkType LinkType, string ErrorMessage)> PostLinkTypeAsync(Models.LinkType LinkType) + { + try + { + logger?.LogInformation("Query LinkType"); + if (!LinkTypeExists(LinkType.Id)) + { + var dbLink = mapper.Map(LinkType); + DocumentDbContext.LinkTypes.Add(dbLink); + DocumentDbContext.SaveChanges(); + var dbtranslation = mapper.Map, List>(LinkType.linksTranslations); + dbtranslation.ForEach(i => i.LinkTypeId = dbLink.Id); + DocumentDbContext.LinksTranslations.AddRange(dbtranslation); + DocumentDbContext.SaveChanges(); + var result = mapper.Map(dbLink); + result.titles = CreateMultiLanguageLinkTypeObject(GetLinkTypeTranslations(result.Id, "")); + return (true, result, null); + } + return (false, null, "LinkType is already exits"); + } + catch (Exception ex) + { + logger?.LogError(ex.ToString()); + return (false, null, ex.Message); + } + } + public async Task<(bool IsSuccess, Models.ResLinkType LinkType, string ErrorMessage)> UpdateLinkTypeAsync(int id, Models.LinkType LinkType) + { + try + { + if (LinkType != null) + { + var existing = DocumentDbContext.LinkTypes.AsNoTracking().FirstOrDefault(x => x.Id == id); + if (existing != null) + { + var dbLink = mapper.Map(LinkType); + DocumentDbContext.LinkTypes.Update(dbLink); + DocumentDbContext.SaveChanges(); + var oldtranslations = DocumentDbContext.LinksTranslations.Where(a => a.LinkTypeId == id).ToList(); + if (oldtranslations != null) + DocumentDbContext.LinksTranslations.RemoveRange(oldtranslations); + var dbtranslation = mapper.Map, List>(LinkType.linksTranslations); + dbtranslation.ForEach(i => i.LinkTypeId = dbLink.Id); + DocumentDbContext.LinksTranslations.AddRange(dbtranslation); + DocumentDbContext.SaveChanges(); + var result = mapper.Map(dbLink); + result.titles = CreateMultiLanguageLinkTypeObject(GetLinkTypeTranslations(result.Id, "")); + return (true, result, "Successful"); + } + else + { + logger?.LogInformation($"{LinkType} Not found"); + return (false, null, "Not Found"); + } + } + else + { + logger?.LogInformation($"{LinkType} Bad Request"); + return (false, null, "Bad request"); + } + + } + catch (Exception ex) + { + + logger?.LogError(ex.ToString()); + return (false, null, ex.Message); + } + } + public async Task<(bool IsSuccess, Models.ResLinkType LinkType, string ErrorMessage)> DeleteLinkTypeAsync(int id) + { + + try + { + Db.LinkType LinkType = DocumentDbContext.LinkTypes.AsNoTracking().Where(a => a.Id == id).FirstOrDefault(); + if (LinkType == null) + { + return (false, null, "Not Found"); + } + LinkType.IsActive = false; + var result = mapper.Map(LinkType); + result.titles = CreateMultiLanguageLinkTypeObject(GetLinkTypeTranslations(result.Id, "")); + DocumentDbContext.LinkTypes.Update(LinkType); + DocumentDbContext.SaveChanges(); + return (true, result, $"LinkTypeId {id} deleted Successfuly"); + } + catch (Exception ex) + { + + logger?.LogError(ex.ToString()); + return (false, null, ex.Message); + } + } + private bool LinkTypeExists(int id) + { + return DocumentDbContext.LinkTypes.AsNoTracking().Count(e => e.Id == id) > 0; + } + } +} diff --git a/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Providers/UploadService.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Providers/UploadService.cs new file mode 100644 index 0000000..807a2e0 --- /dev/null +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Providers/UploadService.cs @@ -0,0 +1,142 @@ +using AutoMapper; +using Azure; +using DamageAssesment.Api.DocuLinks.Db; +using DamageAssesment.Api.DocuLinks.Interfaces; +using DamageAssesment.Api.DocuLinks.Models; +using Microsoft.AspNetCore.Http; +using Microsoft.EntityFrameworkCore.Metadata.Internal; +using System.Diagnostics.Metrics; +using System.Net.Http; +using System.Security.AccessControl; +using System.Security.Principal; + +namespace DamageAssesment.Api.DocuLinks.Providers +{ + public class UploadService : IUploadService + { + private ILogger logger; + private IMapper mapper; + private string uploadpath = ""; + private string Deletepath = ""; + public UploadService(IConfiguration configuration, ILogger logger, IMapper mapper) + { + this.logger = logger; + this.mapper = mapper; + uploadpath = configuration.GetValue("Fileupload:folderpath"); + Deletepath = configuration.GetValue("Fileupload:Deletepath"); + } + + public Models.Doculink UploadDocument(int counter, ReqDoculink documentInfo) + { + Models.Doculink Documents = new Models.Doculink(); + List attachments = new List(); + try + { + string path = "", UserfileName=""; + var fullDirectoryPath = Path.Combine(Directory.GetCurrentDirectory(), uploadpath); + if (!Directory.Exists(fullDirectoryPath)) //Create deirectory if does not exist + Directory.CreateDirectory(fullDirectoryPath); + if (documentInfo.Files != null) + { + + foreach (var item in documentInfo.Files) + { + counter++; + if (item.IsAttachments) + { + UserfileName = Path.GetFileName(item.FileName); + var fileName = String.Format("Document_{0}{1}", counter, item.FileExtension); + path = Path.Combine(fullDirectoryPath, fileName); + File.WriteAllBytes(path, Convert.FromBase64String(item.FileContent)); + } + else + path = item.url; + attachments.Add(new Models.DoculinkAttachments { docName=UserfileName,Path=path,IsAttachments=item.IsAttachments,CustomOrder=item.CustomOrder }); + } + } + Documents=new Models.Doculink (){ linkTypeId = documentInfo.linkTypeId, + documentsTranslations = documentInfo.documentsTranslations,doclinksAttachments=attachments, + IsDeleted=false,CustomOrder=documentInfo.CustomOrder, IsActive =true}; + + return Documents; + } + catch (Exception ex) { + return new Models.Doculink(); + } + + + } + public Models.Doculink UpdateDocuments(int counter, Models.Doculink document, ReqDoculink documentInfo) + { + try + { + foreach (var item in document.doclinksAttachments) + { + Movefile(item.Path); + } + var fullDirectoryPath = Path.Combine(Directory.GetCurrentDirectory(), uploadpath); + if (!Directory.Exists(fullDirectoryPath)) //Create deirectory if does not exist + Directory.CreateDirectory(fullDirectoryPath); + + string path = "", UserfileName = ""; + List attachments = new List(); + foreach (var item in documentInfo.Files) + { + counter++; + if (item.IsAttachments) + { + UserfileName = Path.GetFileName(item.FileName); + var fileName = String.Format("Document_{0}{1}", counter, item.FileExtension); + path = Path.Combine(fullDirectoryPath, fileName); + File.WriteAllBytes(path, Convert.FromBase64String(item.FileContent)); + } + else + path = item.url; + attachments.Add(new Models.DoculinkAttachments { docName = UserfileName, Path = path,IsAttachments=item.IsAttachments,CustomOrder=item.CustomOrder }); + } + Models.Doculink Documents = new Models.Doculink() + { + Id = documentInfo.Id, + linkTypeId = documentInfo.linkTypeId, + documentsTranslations=documentInfo.documentsTranslations, + IsActive = true, + IsDeleted=false, + CustomOrder = documentInfo.CustomOrder, + doclinksAttachments = attachments + }; + + return Documents; + } + + catch (Exception ex) { + return new Models.Doculink(); + } + } + public void Deletefile(string path) + { + if (path != "") + { + FileInfo file = new FileInfo(path); + if (file?.Exists??false)//check file exsit or not + { + file.Delete(); + } + } + } + public void Movefile(string path) + { + if (path != "") + { + var pathToSave = Path.Combine(Directory.GetCurrentDirectory(), Deletepath); + if (!Directory.Exists(pathToSave)) //Create deirectory if does not exist + Directory.CreateDirectory(pathToSave); + FileInfo file = new FileInfo(path); + if (file?.Exists ?? false)//check file exsit or not + { + string filename = file.Name.Replace(file.Extension, " ") + DateTime.Now.ToShortDateString().Replace("/","_") + file.Extension; + file.MoveTo(pathToSave+"\\"+ filename); + } + } + } + } +} diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/appsettings.Development.json b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/appsettings.Development.json similarity index 100% rename from DamageAssesmentApi/DamageAssesment.Api.Documents/appsettings.Development.json rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks/appsettings.Development.json diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/appsettings.json b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/appsettings.json similarity index 66% rename from DamageAssesmentApi/DamageAssesment.Api.Documents/appsettings.json rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks/appsettings.json index 843404d..0006765 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/appsettings.json +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/appsettings.json @@ -7,7 +7,7 @@ }, "AllowedHosts": "*", "ConnectionStrings": { - "DocumentConnection": "Server=DESKTOP-OF5DPLQ\\SQLEXPRESS;Database=da_survey_dev;Trusted_Connection=True;TrustServerCertificate=True;" + "DoculinConnection": "Server=DESKTOP-OF5DPLQ\\SQLEXPRESS;Database=da_survey_dev;Trusted_Connection=True;TrustServerCertificate=True;" }, "Fileupload": { "folderpath": "DASA_Documents/Active", diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents.Test/LinkTypeMockData.cs b/DamageAssesmentApi/DamageAssesment.Api.Documents.Test/LinkTypeMockData.cs deleted file mode 100644 index 644b7d5..0000000 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents.Test/LinkTypeMockData.cs +++ /dev/null @@ -1,61 +0,0 @@ -using DamageAssesment.Api.Documents.Models; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net.Mail; -using System.Text; -using System.Threading.Tasks; - -namespace DamageAssesment.Api.Documents.Test -{ - public class LinkTypeMockData - { - - public static async Task<(bool, List, string)> getOkResponse() - { - List list = new List(); - - for (int i = 1; i < 4; i++) - { - list.Add(new Documents.Models.LinkType() - { - Id = i, - TypeText = "sample"+i, - IsActive = true - }); - } - return (true, list, null); - } - public static async Task<(bool, Documents.Models.LinkType, string)> getOkResponse(int Id) - { - var Documents = await getOkResponse(); - var Document = Documents.Item2.FirstOrDefault(s => s.Id == Id); - return (true, Document, null); - } - public static async Task<(bool, Documents.Models.LinkType, string)> getBadRequestResponse() - { - return (false, null, "Bad Request"); - } - - public static async Task<(bool, Documents.Models.LinkType, string)> getNotFoundResponse() - { - return (false, null, "Not Found"); - } - public static async Task<(bool, IEnumerable, string)> getNoContentResponse() - { - IEnumerable list = new List(); - return (false, list, null); - } - - public static async Task getInputLinkData(int id) - { - return new Models.LinkType - { - Id = id, - TypeText = "sample", - IsActive = true - }; - } - - } -} diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents.Test/MockData.cs b/DamageAssesmentApi/DamageAssesment.Api.Documents.Test/MockData.cs deleted file mode 100644 index e1d3f65..0000000 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents.Test/MockData.cs +++ /dev/null @@ -1,122 +0,0 @@ -using DamageAssesment.Api.Documents.Models; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net.Mail; -using System.Text; -using System.Threading.Tasks; - -namespace DamageAssesment.Api.Documents.Test -{ - public class MockData - { - - public static async Task<(bool, List, string)> getOkResponse() - { - List list = new List(); - - for (int i = 1; i < 4; i++) - { - Dictionary dicttitle = new Dictionary(); - Dictionary dictdesc = new Dictionary(); - dicttitle.Add("en", "test"); dicttitle.Add("fr", "tester"); - dictdesc.Add("en", "test"); dictdesc.Add("fr", "tester"); - List documentsTranslations = new List(); - documentsTranslations.Add(new DocumentsTranslation() - { - Language = "en", - title = "tel"+i, - description = "Sample"+i - }); - list.Add(new Documents.Models.MultiLanDocument() - { - - Id = i, - linkTypeId = i, - docName = "sample"+i, - url = "testurl" + i, - Path = "testpath" + i, - IsActive = true, - titles= dicttitle, - description=dictdesc, - dateCreated = DateTime.Now, - dateUpdated = DateTime.Now - }); - } - return (true, list, null); - } - public static async Task<(bool, Documents.Models.MultiLanDocument, string)> getOkResponse(int Id) - { - var Documents = await getOkResponse(); - var Document = Documents.Item2.FirstOrDefault(s => s.Id == Id); - return (true, Document, null); - } - - public static async Task<(bool, Documents.Models.MultiLanDocument, string)> getBadRequestResponse() - { - return (false, null, "Bad Request"); - } - - public static async Task<(bool, Documents.Models.MultiLanDocument, string)> getNotFoundResponse() - { - return (false, null, "Not Found"); - } - public static async Task<(bool, IEnumerable, string)> getNoContentResponse() - { - IEnumerable list = new List(); - return (false, list, null); - } - public static async Task GetDocumentsInfo(int id) - { - FileModel fileModel = new FileModel() { FileName = "Sample", FileContent = "c2FtcGxl", FileExtension = ".txt" }; - return new DocumentInfo() { Id=id, linkTypeId = 1, url = "Sample", File = fileModel }; - } - public static async Task getInputDocumentData() - { - List documentsTranslations = new List(); - documentsTranslations.Add(new DocumentsTranslation() - { - Language = "en", - title = "tel", - description = "Sample" - }); - return new Models.Document - { - Id = 1, - linkTypeId = 1, - docName = "sample", - url = "testurl", - Path = "testpath", - IsActive = true, - documentsTranslations= documentsTranslations, - dateCreated = DateTime.Now, - dateUpdated = DateTime.Now - }; - } - public static async Task> getInputDocumentsData() - { - List documentsTranslations = new List(); - documentsTranslations.Add(new DocumentsTranslation() - { - Language = "en", - title = "tel", - description="Sample" - }); - List Documents = new List(); - Documents.Add(new Models.Document - { - Id = 1, - linkTypeId = 1, - docName = "sample", - url = "testurl", - Path = "testpath", - IsActive = true, - documentsTranslations= documentsTranslations, - dateCreated = DateTime.Now, - dateUpdated = DateTime.Now - }); - return Documents; - } - - } -} diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/DASA_Documents/Active/Document_1.txt b/DamageAssesmentApi/DamageAssesment.Api.Documents/DASA_Documents/Active/Document_1.txt deleted file mode 100644 index eed7e79..0000000 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/DASA_Documents/Active/Document_1.txt +++ /dev/null @@ -1 +0,0 @@ -sample \ No newline at end of file diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Interfaces/IDocumentTypeProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.Documents/Interfaces/IDocumentTypeProvider.cs deleted file mode 100644 index a4f0f97..0000000 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Interfaces/IDocumentTypeProvider.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace DamageAssesment.Api.Documents.Interfaces -{ - public interface ILinkTypesProvider - { - Task<(bool IsSuccess, Models.LinkType LinkType, string ErrorMessage)> GetLinkTypeAsync(int Id); - Task<(bool IsSuccess, IEnumerable LinkTypes, string ErrorMessage)> GetLinkTypesAsync(); - Task<(bool IsSuccess, Models.LinkType LinkType, string ErrorMessage)> PostLinkTypeAsync(Models.LinkType LinkType); - Task<(bool IsSuccess, Models.LinkType LinkType, string ErrorMessage)> UpdateLinkTypeAsync(Models.LinkType LinkType); - Task<(bool IsSuccess, Models.LinkType LinkType, string ErrorMessage)> DeleteLinkTypeAsync(int Id); - } -} diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Interfaces/IDocumentsProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.Documents/Interfaces/IDocumentsProvider.cs deleted file mode 100644 index 58519ec..0000000 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Interfaces/IDocumentsProvider.cs +++ /dev/null @@ -1,18 +0,0 @@ -using DamageAssesment.Api.Documents.Models; - -namespace DamageAssesment.Api.Documents.Interfaces -{ - public interface IDocumentsProvider : ILinkTypesProvider - { - Task<(bool IsSuccess, Models.MultiLanDocument Document, string ErrorMessage)> GetDocumentAsync(int id, string? linktype, string? language); - Task<(bool IsSuccess, Models.Document Document, string ErrorMessage)> GetDocumentByidAsync(int id); - // Task<(bool IsSuccess, IEnumerable documents, string ErrorMessage)> GetDocumnetsAsync(string? language); - Task<(bool IsSuccess, IEnumerable documents, string ErrorMessage)> GetdocumentsByLinkAsync(string? linkType, string? language); - Task<(bool IsSuccess, Models.MultiLanDocument Document, string ErrorMessage)> PostDocumentAsync(Models.Document Document); - 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(); - - - } -} diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Interfaces/IUploadService.cs b/DamageAssesmentApi/DamageAssesment.Api.Documents/Interfaces/IUploadService.cs deleted file mode 100644 index 2b79efe..0000000 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Interfaces/IUploadService.cs +++ /dev/null @@ -1,12 +0,0 @@ -using DamageAssesment.Api.Documents.Models; - -namespace DamageAssesment.Api.Documents.Interfaces -{ - public interface IUploadService - { - Models.Document UploadDocument( int counter, DocumentInfo documentInfo); - public Models.Document UpdateDocuments( Models.Document document, DocumentInfo documentInfo); - void Deletefile(string path); - void Movefile(string path); - } -} diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Models/Document.cs b/DamageAssesmentApi/DamageAssesment.Api.Documents/Models/Document.cs deleted file mode 100644 index 96e49f8..0000000 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Models/Document.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace DamageAssesment.Api.Documents.Models -{ - public class Document : BaseDocument - { - public List 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 linkTypeId { get; set; } - public string docName { get; set; } - - public string url { get; set; } - public string Path { get; set; } - public bool IsActive { get; set; } - public DateTime dateCreated { get; set; } - public DateTime dateUpdated { get; set; } - } -} diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Models/DocumentInfo.cs b/DamageAssesmentApi/DamageAssesment.Api.Documents/Models/DocumentInfo.cs deleted file mode 100644 index 3a5dc3b..0000000 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Models/DocumentInfo.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.ComponentModel.DataAnnotations.Schema; - -namespace DamageAssesment.Api.Documents.Models -{ - public class DocumentInfo - { - public int Id { get; set; } - public int linkTypeId { get; set; } - public string url { get; set; } - public List documentsTranslations { get; set; } - public FileModel? File { get; set; } - } - public class FileModel - { - public string? FileName { get; set; } - public string? FileContent { get; set; } - public string? FileExtension { get; set; } - } -} diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Models/LinkType.cs b/DamageAssesmentApi/DamageAssesment.Api.Documents/Models/LinkType.cs deleted file mode 100644 index 9bbcdbc..0000000 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Models/LinkType.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace DamageAssesment.Api.Documents.Models -{ - public class LinkType - { - public int Id { get; set; } - public string TypeText { get; set; } - public bool IsActive { get; set; } - public bool IsAttachment { get; set; } - } -} diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Profiles/DocumentProfile.cs b/DamageAssesmentApi/DamageAssesment.Api.Documents/Profiles/DocumentProfile.cs deleted file mode 100644 index 5e02b48..0000000 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Profiles/DocumentProfile.cs +++ /dev/null @@ -1,19 +0,0 @@ -using AutoMapper; - -namespace DamageAssesment.Api.Documents.Profiles -{ - public class DocumentProfile : AutoMapper.Profile - { - public DocumentProfile() - { - CreateMap().ForMember(dest => dest.LinkType, - opt => opt.MapFrom(src => src.LinkType.TypeText)); ; - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - } - } -} diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Providers/DocumentsProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.Documents/Providers/DocumentsProvider.cs deleted file mode 100644 index 085d6c3..0000000 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Providers/DocumentsProvider.cs +++ /dev/null @@ -1,434 +0,0 @@ -using AutoMapper; -using DamageAssesment.Api.Documents.Db; -using DamageAssesment.Api.Documents.Interfaces; -using DamageAssesment.Api.Documents.Models; -using Microsoft.AspNetCore.Mvc; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Internal; -using System; -using System.Diagnostics.Eventing.Reader; -using System.Reflection.Metadata; - -namespace DamageAssesment.Api.Documents.Providers -{ - - - public class documentsProvider : IDocumentsProvider - { - private DocumentDbContext DocumentDbContext; - private ILogger logger; - private IUploadService uploadservice; - private IMapper mapper; - - public documentsProvider(DocumentDbContext DocumentDbContext, ILogger logger, IMapper mapper, IUploadService uploadservice) - { - this.DocumentDbContext = DocumentDbContext; - this.logger = logger; - this.mapper = mapper; - this.uploadservice = uploadservice; - SeedData(); - } - - - - private void SeedData() - { - if (!DocumentDbContext.LinkTypes.Any()) - { - DocumentDbContext.LinkTypes.Add(new Db.LinkType() {TypeText = "Forms",IsActive=true, IsAttachment=true }); - DocumentDbContext.LinkTypes.Add(new Db.LinkType() {TypeText = "Communiques",IsActive = true,IsAttachment=false }); - DocumentDbContext.LinkTypes.Add(new Db.LinkType() {TypeText = "Memos",IsActive = true,IsAttachment=true }); - DocumentDbContext.SaveChanges(); - } - if (!DocumentDbContext.Documents.Any()) - { - FileModel fileModel = new FileModel() { FileName = "Sample", FileContent = "c2FtcGxl", FileExtension = ".txt" }; - DocumentInfo documentInfo = new DocumentInfo() { linkTypeId = 1, url = "Sample", File = fileModel }; - Models.Document document = uploadservice.UploadDocument(0, documentInfo); - DocumentDbContext.Documents.Add(mapper.Map(document)); - DocumentDbContext.SaveChanges(); - } - if (!DocumentDbContext.DocumentsTranslations.Any()) - { - Db.DocumentsTranslation documents = new Db.DocumentsTranslation { DocumentId = 1, title = "Test", description = "ss", Language = "en" }; - DocumentDbContext.DocumentsTranslations.Add(documents); - DocumentDbContext.SaveChanges(); - } - } - public List GetDocumentTranslations(int id, string? language) - { - List QuestionTranslations; - if (string.IsNullOrEmpty(language)) - { - QuestionTranslations = mapper.Map, List>( - DocumentDbContext.DocumentsTranslations.AsNoTracking().Where(a => a.DocumentId == id).ToList()); - } - else - { - QuestionTranslations = mapper.Map, List>( - DocumentDbContext.DocumentsTranslations.AsNoTracking().Where(a => a.DocumentId == id && a.Language == language).ToList()); - } - return QuestionTranslations; - } - public MultiLanDocument CreateMultiLanguageObject(List questions) - { - MultiLanDocument MultiLanguage = new MultiLanDocument(); - Dictionary dicttitle = new Dictionary(); - Dictionary dictdesc = new Dictionary(); - 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 documents, string ErrorMessage)> GetdocumentsByLinkAsync(string? linkType, string? language) - { - - try - { - logger?.LogInformation("Query Question"); - var documents=new List(); - if(String.IsNullOrEmpty(linkType)) - documents = await DocumentDbContext.Documents.Include(a=>a.LinkType).AsNoTracking().Where(q => q.IsActive).ToListAsync(); - else - 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(); - if (documents != null) - { - var result = mapper.Map, List>(documents); - foreach (var item in result) - { - var multilan = CreateMultiLanguageObject(GetDocumentTranslations(item.Id, language)); - item.titles = multilan.titles; - item.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, IEnumerable documents, string ErrorMessage)> GetDocumnetsAsync(string? language) - //{ - - // try - // { - // logger?.LogInformation("Query Question"); - // var documents = await DocumentDbContext.Documents.Include(a => a.LinkType).AsNoTracking().Where(q => q.IsActive).ToListAsync(); - // if (documents != null) - // { - // logger?.LogInformation($"{documents.Count} Document(s) found"); - // var result = mapper.Map, List>(documents); - // foreach (var item in result) - // { - // var multilan = CreateMultiLanguageObject(GetDocumentTranslations(item.Id, language)); - // item.titles = multilan.titles; - // item.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.Document Document, string ErrorMessage)> GetDocumentByidAsync(int id) - { - try - { - logger?.LogInformation("Query LinkType"); - var Document = await DocumentDbContext.Documents.Include(a => a.LinkType).AsNoTracking().FirstOrDefaultAsync(q => q.Id == id && q.IsActive); - if (Document != null) - { - logger?.LogInformation($"{Document} customer(s) found"); - var result = mapper.Map(Document); - result.documentsTranslations = mapper.Map, List>( - DocumentDbContext.DocumentsTranslations.Where(a => a.DocumentId == result.Id).ToList()); - return (true, result, null); - } - return (false, null, "Not found"); - } - catch (Exception ex) - { - logger?.LogError(ex.ToString()); - return (false, null, ex.Message); - } - } - //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(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 - { - var document = mapper.Map(Document); - DocumentDbContext.Documents.Add(document); - DocumentDbContext.SaveChanges(); - var dbtranslation = mapper.Map, List>(Document.documentsTranslations); - dbtranslation.ForEach(i => i.DocumentId = document.Id); - DocumentDbContext.DocumentsTranslations.AddRange(dbtranslation); - DocumentDbContext.SaveChanges(); - var result = mapper.Map(document); - var multilan = CreateMultiLanguageObject(GetDocumentTranslations(document.Id, "")); - result.titles = multilan.titles; - result.description = multilan.description; - return (true, result, null); - } - catch (Exception ex) - { - logger?.LogError(ex.ToString()); - return (false, null, ex.Message); - } - } - - public async Task<(bool IsSuccess, Models.MultiLanDocument Document, string ErrorMessage)> UpdateDocumentAsync(int id,Models.Document Document) - { - try - { - if (Document != null) - { - var existing = DocumentDbContext.Documents.AsNoTracking().FirstOrDefault(x => x.Id == id); - if (existing != null) - { - Document.Id = existing.Id; - var document = mapper.Map(Document); - DocumentDbContext.Documents.Update(document); - DocumentDbContext.SaveChanges(); - var oldtranslations = DocumentDbContext.DocumentsTranslations.Where(a => a.DocumentId == Document.Id).ToList(); - if (oldtranslations != null) - DocumentDbContext.DocumentsTranslations.RemoveRange(oldtranslations); - var dbtranslation = mapper.Map, List>(Document.documentsTranslations); - dbtranslation.ForEach(i => i.DocumentId = Document.Id); - DocumentDbContext.DocumentsTranslations.AddRange(dbtranslation); - DocumentDbContext.SaveChanges(); - var result = mapper.Map(document); - var multilan = CreateMultiLanguageObject(GetDocumentTranslations(document.Id, "")); - result.titles = multilan.titles; - result.description = multilan.description; - return (true, result, "Successful"); - } - else - { - logger?.LogInformation($"{Document} Not found"); - return (false, null, "Not Found"); - } - } - else - { - logger?.LogInformation($"{Document} Bad Request"); - return (false, null, "Bad request"); - } - - } - catch (Exception ex) - { - - logger?.LogError(ex.ToString()); - return (false, null, ex.Message); - } - } - public async Task<(bool IsSuccess, Models.MultiLanDocument Document, string ErrorMessage)> DeleteDocumentAsync(int id) - { - - try - { - Db.Document Document = DocumentDbContext.Documents.Include(a => a.LinkType).AsNoTracking().Where(a => a.Id == id).FirstOrDefault(); - if (Document == null) - { - return (false, null, "Not Found"); - } - var result = mapper.Map(Document); - var multilan = CreateMultiLanguageObject(GetDocumentTranslations(Document.Id, "")); - result.titles = multilan.titles; - result.description = multilan.description; - Document.IsActive = false; - DocumentDbContext.Documents.Update(Document); - DocumentDbContext.SaveChanges(); - return (true, result, $"DocumentId {id} deleted Successfuly"); - } - catch (Exception ex) - { - - logger?.LogError(ex.ToString()); - return (false, null, ex.Message); - } - } - - public async Task<(bool IsSuccess, int counter, string message)> GetDocumentCounter() - { - try - { - int AttachmentId = DocumentDbContext.Documents.Max(a => a.Id); - return (true, AttachmentId, ""); - } - catch (Exception ex) - { - return (false, 0, ex.Message); - } - } - - //Link Type methods - public async Task<(bool IsSuccess, IEnumerable LinkTypes, string ErrorMessage)> GetLinkTypesAsync() - { - - try - { - logger?.LogInformation("Query Question"); - var LinkType = await DocumentDbContext.LinkTypes.AsNoTracking().Where(q=>q.IsActive).ToListAsync(); - if (LinkType != null) - { - logger?.LogInformation($"{LinkType.Count} LinkTypes(s) found"); - var result = mapper.Map, IEnumerable>(LinkType); - 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.LinkType LinkType, string ErrorMessage)> GetLinkTypeAsync(int Id) - { - try - { - logger?.LogInformation("Query LinkType"); - var LinkType = await DocumentDbContext.LinkTypes.AsNoTracking().FirstOrDefaultAsync(q => q.Id == Id&&q.IsActive); - if (LinkType != null) - { - logger?.LogInformation($"{LinkType} customer(s) found"); - var result = mapper.Map(LinkType); - 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.LinkType LinkType, string ErrorMessage)> PostLinkTypeAsync(Models.LinkType LinkType) - { - try - { - logger?.LogInformation("Query LinkType"); - if (!LinkTypeExists(LinkType.Id)) - { - var dbLink = mapper.Map(LinkType); - DocumentDbContext.LinkTypes.Add(dbLink); - DocumentDbContext.SaveChanges(); - var result = mapper.Map(dbLink); - return (true, result, null); - } - return (false, null, "LinkType is already exits"); - } - catch (Exception ex) - { - logger?.LogError(ex.ToString()); - return (false, null, ex.Message); - } - } - public async Task<(bool IsSuccess, Models.LinkType LinkType, string ErrorMessage)> UpdateLinkTypeAsync(Models.LinkType LinkType) - { - try - { - if (LinkType != null) - { - var existing = DocumentDbContext.LinkTypes.AsNoTracking().FirstOrDefault(x => x.Id == LinkType.Id); - if (existing != null) - { - var dbLink = mapper.Map(LinkType); - DocumentDbContext.LinkTypes.Update(dbLink); - DocumentDbContext.SaveChanges(); - return (true, mapper.Map(dbLink), "Successful"); - } - else - { - logger?.LogInformation($"{LinkType} Not found"); - return (false, null, "Not Found"); - } - } - else - { - logger?.LogInformation($"{LinkType} Bad Request"); - return (false, null, "Bad request"); - } - - } - catch (Exception ex) - { - - logger?.LogError(ex.ToString()); - return (false, null, ex.Message); - } - } - public async Task<(bool IsSuccess, Models.LinkType LinkType, string ErrorMessage)> DeleteLinkTypeAsync(int Id) - { - - try - { - Db.LinkType LinkType = DocumentDbContext.LinkTypes.AsNoTracking().Where(a => a.Id == Id).FirstOrDefault(); - if (LinkType == null) - { - return (false, null, "Not Found"); - } - LinkType.IsActive = false; - DocumentDbContext.LinkTypes.Update(LinkType); - DocumentDbContext.SaveChanges(); - return (true, mapper.Map(LinkType), $"LinkTypeId {Id} deleted Successfuly"); - } - catch (Exception ex) - { - - logger?.LogError(ex.ToString()); - return (false, null, ex.Message); - } - } - private bool LinkTypeExists(int id) - { - return DocumentDbContext.LinkTypes.AsNoTracking().Count(e => e.Id == id) > 0; - } - } -} diff --git a/DamageAssesmentApi/DamageAssesment.Api.Documents/Providers/UploadService.cs b/DamageAssesmentApi/DamageAssesment.Api.Documents/Providers/UploadService.cs deleted file mode 100644 index 4493274..0000000 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Providers/UploadService.cs +++ /dev/null @@ -1,123 +0,0 @@ -using AutoMapper; -using Azure; -using DamageAssesment.Api.Documents.Db; -using DamageAssesment.Api.Documents.Interfaces; -using DamageAssesment.Api.Documents.Models; -using Microsoft.AspNetCore.Http; -using Microsoft.EntityFrameworkCore.Metadata.Internal; -using System.Diagnostics.Metrics; -using System.Net.Http; -using System.Security.AccessControl; -using System.Security.Principal; - -namespace DamageAssesment.Api.Documents.Providers -{ - public class UploadService : IUploadService - { - private ILogger logger; - private IMapper mapper; - private string uploadpath = ""; - private string Deletepath = ""; - public UploadService(IConfiguration configuration, ILogger logger, IMapper mapper) - { - this.logger = logger; - this.mapper = mapper; - uploadpath = configuration.GetValue("Fileupload:folderpath"); - Deletepath = configuration.GetValue("Fileupload:Deletepath"); - } - - public Models.Document UploadDocument(int counter, DocumentInfo documentInfo) - { - Models.Document Documents = new Models.Document(); - try - { - string path = "", UserfileName=""; - if (documentInfo.File != null) - { - counter++; - var fullDirectoryPath = Path.Combine(Directory.GetCurrentDirectory(), uploadpath); - if (!Directory.Exists(fullDirectoryPath)) //Create deirectory if does not exist - Directory.CreateDirectory(fullDirectoryPath); - UserfileName = Path.GetFileName(documentInfo.File.FileName); - var fileName = String.Format("Document_{0}{1}", counter, documentInfo.File.FileExtension); - path = Path.Combine(fullDirectoryPath, fileName); - File.WriteAllBytes(path, Convert.FromBase64String(documentInfo.File.FileContent)); - } - Documents=new Models.Document (){ linkTypeId = documentInfo.linkTypeId, - documentsTranslations = documentInfo.documentsTranslations, - docName = UserfileName, - url = documentInfo.url, Path = path,IsActive =true,dateCreated=DateTime.Now,dateUpdated=DateTime.Now}; - - return Documents; - } - catch (Exception ex) { - return new Models.Document(); - } - - - } - public Models.Document UpdateDocuments(Models.Document document, DocumentInfo documentInfo) - { - try - { - Deletefile(document.Path); - var fullDirectoryPath = Path.Combine(Directory.GetCurrentDirectory(), uploadpath); - if (!Directory.Exists(fullDirectoryPath)) //Create deirectory if does not exist - Directory.CreateDirectory(fullDirectoryPath); - - string path = "", UserfileName = ""; - if (documentInfo.File != null) - { - UserfileName = Path.GetFileName(documentInfo.File.FileName); - var fileName = String.Format("Document_{0}{1}", documentInfo.Id, documentInfo.File.FileExtension); - path = Path.Combine(fullDirectoryPath, fileName); - File.WriteAllBytes(path, Convert.FromBase64String(documentInfo.File.FileContent)); - } - Models.Document Documents = new Models.Document() - { - Id = documentInfo.Id, - linkTypeId = documentInfo.linkTypeId, - documentsTranslations=documentInfo.documentsTranslations, - docName = UserfileName, - url = documentInfo.url, - Path = path, - IsActive = true, - dateCreated = document.dateCreated, - dateUpdated = DateTime.Now - }; - - return Documents; - } - - catch (Exception ex) { - return new Models.Document(); - } - } - public void Deletefile(string path) - { - if (path != "") - { - FileInfo file = new FileInfo(path); - if (file?.Exists??false)//check file exsit or not - { - file.Delete(); - } - } - } - public void Movefile(string path) - { - if (path != "") - { - var pathToSave = Path.Combine(Directory.GetCurrentDirectory(), Deletepath); - if (!Directory.Exists(pathToSave)) //Create deirectory if does not exist - Directory.CreateDirectory(pathToSave); - FileInfo file = new FileInfo(path); - if (file?.Exists ?? false)//check file exsit or not - { - string filename = file.Name.Replace(file.Extension, " ") + DateTime.Now.ToShortDateString().Replace("/","_") + file.Extension; - file.MoveTo(pathToSave+"\\"+ filename); - } - } - } - } -} diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Controllers/SurveyResponsesController.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Controllers/SurveyResponsesController.cs index e5f3917..22d9f6b 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Controllers/SurveyResponsesController.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Controllers/SurveyResponsesController.cs @@ -1,8 +1,6 @@ using DamageAssesment.Api.SurveyResponses.Interfaces; using DamageAssesment.Api.SurveyResponses.Models; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Configuration; namespace DamageAssesment.Api.SurveyResponses.Controllers { @@ -19,10 +17,12 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers /// GET request for retrieving survey responses. /// - [HttpGet("Responses")] - public async Task GetSurveyResponsesAsync() + [Route("Responses/{employeeid:int}")] + [Route("Responses")] + [HttpGet] + public async Task GetSurveyResponsesAsync(int? employeeid) { - var result = await this.surveyResponseProvider.GetSurveyResponsesAsync(); + var result = await this.surveyResponseProvider.GetSurveyResponsesAsync(employeeid ?? 0); if (result.IsSuccess) { return Ok(result.surveyResponses); @@ -36,11 +36,12 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers /// /// GET request for retrieving survey responses by survey ID. /// - - [HttpGet("Responses/BySurvey/{surveyid}")] - public async Task GetSurveyResponsesAsync(int surveyid) + [Route("Responses/BySurvey/{surveyid:int}/{employeeid:int}")] + [Route("Responses/BySurvey/{surveyid:int}")] + [HttpGet] + public async Task GetSurveyResponsesAsync(int surveyid, int? employeeid) { - var result = await this.surveyResponseProvider.GetSurveyResponsesBySurveyAsync(surveyid); + var result = await this.surveyResponseProvider.GetSurveyResponsesBySurveyAsync(surveyid, employeeid ?? 0); if (result.IsSuccess) { return Ok(result.SurveyResponses); @@ -53,15 +54,16 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers /// The ID of the survey for which responses are to be retrieved. /// The ID of the location for which responses are to be retrieved. - [HttpGet("Responses/{surveyid}/{locationid}")] - public async Task GetSurveyResponsesBySurveyAndLocationAsync(int surveyid, int locationid) + [Route("Responses/{surveyid:int}/{locationid:int}/{employeeid:int}")] + [Route("Responses/{surveyid:int}/{locationid:int}")] + [HttpGet] + public async Task GetSurveyResponsesBySurveyAndLocationAsync(int surveyid, int locationid,int? employeeid) { - var result = await this.surveyResponseProvider.GetSurveyResponsesBySurveyAndLocationAsync(surveyid, locationid); + var result = await this.surveyResponseProvider.GetSurveyResponsesBySurveyAndLocationAsync(surveyid, locationid,employeeid ?? 0); if (result.IsSuccess) { return Ok(result.SurveyResponses); } - return NoContent(); } /// @@ -71,10 +73,12 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers /// The ID of the question for which responses are to be retrieved. /// The answer for which responses are to be retrieved. - [HttpGet("Responses/ByAnswer/{surveyid}/{questionid}/{answer}")] - public async Task GetSurveyResponsesByAnswerAsyncAsync(int surveyid, int questionid, string answer) - { - var result = await surveyResponseProvider.GetResponsesByAnswerAsync(surveyid, questionid, answer); + [Route("Responses/ByAnswer/{surveyid:int}/{questionid:int}/{answer:alpha}/{employeeid:int}")] + [Route("Responses/ByAnswer/{surveyid:int}/{questionid:int}/{answer:alpha}")] + [HttpGet] + public async Task GetSurveyResponsesByAnswerAsyncAsync(int surveyid, int questionid, string answer, int? employeeid) + { + var result = await surveyResponseProvider.GetResponsesByAnswerAsync(surveyid, questionid, answer, employeeid ?? 0); if (result.IsSuccess) { return Ok(result.SurveyResponses); @@ -87,10 +91,12 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers /// /// The ID of the survey for which answers are to be retrieved. - [HttpGet("Responses/ByRegion/{surveyid}")] - public async Task GetAnswersByRegionAsync(int surveyid) + [Route("Responses/ByRegion/{surveyid:int}")] + [Route("Responses/ByRegion/{surveyid:int}/{employeeid}")] + [HttpGet] + public async Task GetAnswersByRegionAsync(int surveyid, int? employeeid) { - var result = await this.surveyResponseProvider.GetAnswersByRegionAsync(surveyid); + var result = await this.surveyResponseProvider.GetAnswersByRegionAsync(surveyid, employeeid ?? 0); if (result.IsSuccess) { return Ok(result.Answers); @@ -101,11 +107,12 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers /// GET request for retrieving survey responses by survey ID and maintenance center. /// /// The ID of the survey for which responses are to be retrieved. - - [HttpGet("Responses/ByMaintenanceCenter/{surveyid}")] - public async Task GetAnswersByMaintenaceCentersync(int surveyid) + [Route("Responses/ByMaintenanceCenter/{surveyid:int}/{employeeid:int}")] + [Route("Responses/ByMaintenanceCenter/{surveyid:int}")] + [HttpGet] + public async Task GetAnswersByMaintenaceCentersync(int surveyid, int? employeeid) { - var result = await this.surveyResponseProvider.GetSurveyResponsesByMaintenanceCenterAsync(surveyid); + var result = await this.surveyResponseProvider.GetSurveyResponsesByMaintenanceCenterAsync(surveyid, employeeid ?? 0); if (result.IsSuccess) { return Ok(result.SurveyResponses); @@ -165,7 +172,7 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers /// /// DELETE request for deleting an existing survey response. /// - + [HttpDelete("Responses/{id}")] public async Task DeleteSurveyResponseAsync(int id) { @@ -191,5 +198,31 @@ namespace DamageAssesment.Api.SurveyResponses.Controllers else return BadRequest(result.ErrorMessage); } + + [Route("Responses/Surveys/active/{employeeid:int}")] + [Route("Responses/Surveys/active/{employeeid:int}/{language:alpha}")] + [HttpGet] + public async Task GetActiveSurveysAsync(int employeeid, string? language) + { + var result = await this.surveyResponseProvider.GetActiveSurveysAsync(employeeid, language); + if (result.IsSuccess) + { + return Ok(result.Surveys); + } + return NoContent(); + } + + [Route("Responses/Surveys/historic/{employeeid:int}")] + [Route("Responses/Surveys/historic/{employeeid:int}/{language:alpha}")] + [HttpGet] + public async Task GetHistoricSurveysAsync(int employeeid, string? language) + { + var result = await this.surveyResponseProvider.GetHistoricSurveysAsync(employeeid, language); + if (result.IsSuccess) + { + return Ok(result.Surveys); + } + return NoContent(); + } } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/DamageAssesment.Api.SurveyResponses.csproj b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/DamageAssesment.Api.Responses.csproj similarity index 100% rename from DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/DamageAssesment.Api.SurveyResponses.csproj rename to DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/DamageAssesment.Api.Responses.csproj diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Interfaces/ISurveyServiceProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Interfaces/ISurveyServiceProvider.cs index 97d6461..2b01d16 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Interfaces/ISurveyServiceProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Interfaces/ISurveyServiceProvider.cs @@ -4,7 +4,7 @@ namespace DamageAssesment.Api.SurveyResponses.Interfaces { public interface ISurveyServiceProvider { - Task> getSurveysAsync(); + Task> getSurveysAsync(string language); Task getSurveyAsync(int surveyId); } } diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Interfaces/ISurveysResponse.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Interfaces/ISurveysResponse.cs index 536353c..2bbab9a 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Interfaces/ISurveysResponse.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Interfaces/ISurveysResponse.cs @@ -5,18 +5,19 @@ namespace DamageAssesment.Api.SurveyResponses.Interfaces { public interface ISurveysResponse { - Task<(bool IsSuccess, dynamic Answers, string ErrorMessage)> GetAnswersByRegionAsync(int surveyId); + Task<(bool IsSuccess, dynamic Answers, string ErrorMessage)> GetAnswersByRegionAsync(int surveyId, int employeeid); Task<(bool IsSuccess, Models.SurveyResponse SurveyResponse, string ErrorMessage)> PostSurveyResponseAsync(Models.SurveyResponse surveyResponse); // Task<(bool IsSuccess,dynamic surveyResponses, string ErrorMessage)> GetSurveyResponseAsync(int responseId); - Task<(bool IsSuccess, dynamic surveyResponses, string ErrorMessage)> GetSurveyResponsesAsync(); + Task<(bool IsSuccess, dynamic surveyResponses, string ErrorMessage)> GetSurveyResponsesAsync(int employeeid); + Task<(bool IsSuccess, dynamic Surveys, string ErrorMessage)> GetActiveSurveysAsync(int employeeid, string language); + Task<(bool IsSuccess, dynamic Surveys, string ErrorMessage)> GetHistoricSurveysAsync(int employeeid, string language); Task<(bool IsSuccess, Models.SurveyResponse SurveyResponse, string ErrorMessage)> PutSurveyResponseAsync(int Id, Models.SurveyResponse surveyResponse); Task<(bool IsSuccess, Models.SurveyResponse SurveyResponse, string ErrorMessage)> DeleteSurveyResponseAsync(int Id); Task<(bool IsSuccess, dynamic SurveyResponse, string ErrorMessage)> GetSurveyResponseByIdAsync(int responseId); - Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesBySurveyAsync(int surveyId); - Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesBySurveyAndLocationAsync(int surveyId, int locationId); - Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesByMaintenanceCenterAsync(int surveyId); - Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetResponsesByAnswerAsync(int surveyId, int questionId, string answer); - + Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesBySurveyAsync(int surveyId, int employeeid); + Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesBySurveyAndLocationAsync(int surveyId, int locationId, int employeeid); + Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesByMaintenanceCenterAsync(int surveyId, int employeeid); + Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetResponsesByAnswerAsync(int surveyId, int questionId, string answer, int employeeid); Task<(bool IsSuccess, Models.SurveyResponse SurveyResponse, string ErrorMessage)> PostSurveyAnswersAsync(Request request); } diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Providers/SurveyResponsesProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Providers/SurveyResponsesProvider.cs index a824a96..6506f6a 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Providers/SurveyResponsesProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Providers/SurveyResponsesProvider.cs @@ -31,7 +31,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers this.questionServiceProvider = questionServiceProvider; this.surveyServiceProvider = surveyServiceProvider; this.mapper = mapper; - // seedData(); + // seedData(); } private void seedData() @@ -49,12 +49,20 @@ namespace DamageAssesment.Api.SurveyResponses.Providers } } - public async Task<(bool IsSuccess, dynamic Answers, string ErrorMessage)> GetAnswersByRegionAsync(int surveyId) + public async Task<(bool IsSuccess, dynamic Answers, string ErrorMessage)> GetAnswersByRegionAsync(int surveyId, int employeeid) { try { logger?.LogInformation("Querying to get SurveyResponse object from DB"); - var listSurveyResponse = surveyResponseDbContext.SurveyResponses.Where(s => s.SurveyId == surveyId); + IQueryable listSurveyResponse = null; + if (employeeid == 0) + { + listSurveyResponse = surveyResponseDbContext.SurveyResponses.Where(s => s.SurveyId == surveyId); + } + else + { + listSurveyResponse = surveyResponseDbContext.SurveyResponses.Where(s => s.SurveyId == surveyId && s.EmployeeId == employeeid); + } if (listSurveyResponse.Any()) { @@ -103,10 +111,58 @@ namespace DamageAssesment.Api.SurveyResponses.Providers return (false, null, ex.Message); } } + + public async Task<(bool IsSuccess, dynamic Surveys, string ErrorMessage)> GetActiveSurveysAsync(int employeeid, string language) + { + try + { + logger?.LogInformation("Querying to get SurveyResponse object from DB"); + //get all the survey that already taken by the employee + var listOfsurveysId = await surveyResponseDbContext.SurveyResponses.Where(x => x.EmployeeId == employeeid).Select(y => y.SurveyId).ToListAsync(); + var surveys = await surveyServiceProvider.getSurveysAsync(language); + if (surveys != null) + { + surveys = surveys.Where(s => s.IsEnabled == true && s.StartDate <= DateTime.Now && s.EndDate >= DateTime.Now).ToList(); + } + if (listOfsurveysId==null || listOfsurveysId.Count == 0) + return (true, surveys, null); - public async Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesBySurveyAsync(int surveyId) + var activeSurveys = surveys.Where(s => s.IsEnabled == true && s.StartDate <= DateTime.Now && s.EndDate >= DateTime.Now && !listOfsurveysId.Contains(s.Id)); + return (true, activeSurveys, null); + } + catch (Exception ex) + { + logger?.LogError(ex.ToString()); + return (false, null, ex.Message); + } + } + + public async Task<(bool IsSuccess, dynamic Surveys, string ErrorMessage)> GetHistoricSurveysAsync(int employeeid, string language) + { + try + { + logger?.LogInformation("Querying to get SurveyResponse object from DB"); + //get all the survey that already taken by the employee + var surveyResponses = await surveyResponseDbContext.SurveyResponses.Where(x => x.EmployeeId == employeeid).ToListAsync(); + var surveys = await surveyServiceProvider.getSurveysAsync(language); + + var historicSurveys = from s in surveys + from r in surveyResponses + where s.Id == r.SurveyId + select s; + + return (true, historicSurveys, null); + } + catch (Exception ex) + { + logger?.LogError(ex.ToString()); + return (false, null, ex.Message); + } + } + + public async Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesBySurveyAsync(int surveyId, int employeeid) { try { @@ -115,7 +171,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers if (survey != null) { - var answers = await getSurveyResponsesBySurveyIdAsync(surveyId); + var answers = await getSurveyResponsesBySurveyIdAsync(surveyId, employeeid); if (answers != null) return (true, answers, "Request Successful."); @@ -137,7 +193,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers } } - public async Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesBySurveyAndLocationAsync(int surveyId, int locationId) + public async Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesBySurveyAndLocationAsync(int surveyId, int locationId, int employeeid) { try { @@ -146,7 +202,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers if (survey != null) { - var answers = await getSurveyResponsesBySurveyIdLocationIdAsync(surveyId, locationId); + var answers = await getSurveyResponsesBySurveyIdLocationIdAsync(surveyId, locationId, employeeid); if (answers != null) return (true, answers, "Request Successful."); @@ -168,7 +224,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers } } - public async Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesByMaintenanceCenterAsync(int surveyId) + public async Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesByMaintenanceCenterAsync(int surveyId, int employeeid) { try { @@ -177,7 +233,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers if (survey != null) { - var answers = await getResultsByMaintenanceCenterAsync(surveyId); + var answers = await getResultsByMaintenanceCenterAsync(surveyId, employeeid); if (answers != null) return (true, answers, "Request Successful."); @@ -199,7 +255,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers } } - public async Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetResponsesByAnswerAsync(int surveyId, int questionId, string answer) + public async Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetResponsesByAnswerAsync(int surveyId, int questionId, string answer, int employeeid) { try { @@ -211,7 +267,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers if (survey != null && question != null && IsCorrectAnswer) { - var answers = await getSurveyResponsesByAnswerAsync(survey, question, answer); + var answers = await getSurveyResponsesByAnswerAsync(survey, question, answer, employeeid); if (answers != null) return (true, answers, "Request Successful."); @@ -234,18 +290,18 @@ namespace DamageAssesment.Api.SurveyResponses.Providers } - public async Task<(bool IsSuccess, dynamic surveyResponses, string ErrorMessage)> GetSurveyResponsesAsync() + public async Task<(bool IsSuccess, dynamic surveyResponses, string ErrorMessage)> GetSurveyResponsesAsync(int employeeid) { try { - var answers = await getAllSurveyResponsesAsync(); + var responses = await getAllSurveyResponsesAsync(employeeid); - if (answers != null) - return (true, answers, "Request Successful."); + if (responses != null) + return (true, responses, "Request Successful."); else { - answers = new List(); - return (true, answers, "Empty object returned"); + responses = new List(); + return (true, responses, "Empty object returned"); } } catch (Exception ex) @@ -356,7 +412,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers answer => answer.SurveyResponseId, surveyResponse => surveyResponse.Id, (answer, surveyResponse) => new - + { answer.Id, answer.QuestionId, @@ -380,18 +436,18 @@ namespace DamageAssesment.Api.SurveyResponses.Providers var result = from answer in surveyAnswers from location in locations where answer.LocationId.Equals(location.Id) - select new + select new { - answer.Id, - answer.QuestionId, - answer.AnswerText, - answer.Comment, - location.RegionId, - LocationId = location.Id, - answer.SurveyResponseId + answer.Id, + answer.QuestionId, + answer.AnswerText, + answer.Comment, + location.RegionId, + LocationId = location.Id, + answer.SurveyResponseId }; - + //group records by answer and region var q = from e in result @@ -399,13 +455,13 @@ namespace DamageAssesment.Api.SurveyResponses.Providers select new { g.Key.RegionId, - Answers = new + Answers = new { g.Key.AnswerText, Counter = g.Count() } }; - + //build the result List resultList = new List(); @@ -413,9 +469,9 @@ namespace DamageAssesment.Api.SurveyResponses.Providers { var answers = from u in q.ToList() where u.RegionId.Equals(region.Id) - select u.Answers; - - resultList.Add(new { RegionId = region.Id, region.Name, region.Abbreviation, Answers = answers}); + select u.Answers; + + resultList.Add(new { RegionId = region.Id, region.Name, region.Abbreviation, Answers = answers }); } //return the object result return new { Regions = resultList }; @@ -471,13 +527,24 @@ namespace DamageAssesment.Api.SurveyResponses.Providers //Method to get Survey Responses by surveyId - private async Task getSurveyResponsesBySurveyIdAsync(int surveyId) + private async Task getSurveyResponsesBySurveyIdAsync(int surveyId, int employeeid) { try { - var surveyResonses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == surveyId).ToListAsync(); + List surveyResonses = null; + Employee employee = null; + List employees = null; + if (employeeid == 0) + { + surveyResonses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == surveyId).ToListAsync(); + employees = await employeeServiceProvider.getEmployeesAsync(); + } + else + { + surveyResonses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == surveyId && x.EmployeeId == employeeid).ToListAsync(); + employee = await employeeServiceProvider.getEmployeeAsync(employeeid); + } - var employees = await employeeServiceProvider.getEmployeesAsync(); var answers = await answerServiceProvider.getAnswersAsync(); var questions = await questionServiceProvider.getQuestionsAsync(); var surveyQuestions = from q in questions where q.SurveyId == surveyId select q; @@ -485,32 +552,70 @@ namespace DamageAssesment.Api.SurveyResponses.Providers //var surveyQuestions = await questionServiceProvider.getSurveyQuestionsAsync(surveyId); var attachments = await attachmentServiceProvider.getAttachmentsAsync(); - var result = from r in surveyResonses - select new - { - r.Id, - r.SurveyId, - r.LocationId, - r.EmployeeId, - r.ClientDevice, - r.KeyAnswerResult, - r.Longitute, - r.Latitude, - Employee = (from e in employees where e.Id == r.EmployeeId select new { e.Id, e.Name, e.BirthDate, e.Email, e.OfficePhoneNumber }).SingleOrDefault(), - answers = from ans in answers - where ans.SurveyResponseId == r.Id - select new - { - ans.Id, - ans.QuestionId, - ans.AnswerText, - ans.Comment, - Questions = (from q in surveyQuestions where q.Id == ans.QuestionId select new { q.Id, q.QuestionNumber, q.CategoryId, q.Text }).SingleOrDefault(), - Attachments = from att in attachments where att.AnswerId == ans.Id select new { att.Id, att.URI } - } - }; - return result; + if (employeeid == 0) + { + var result = from r in surveyResonses + select new + { + r.Id, + r.SurveyId, + r.LocationId, + r.EmployeeId, + r.ClientDevice, + r.KeyAnswerResult, + r.Longitute, + r.Latitude, + Employee = (from e in employees where e.Id == r.EmployeeId select new { e.Id, e.Name, e.BirthDate, e.Email, e.OfficePhoneNumber }).SingleOrDefault(), + answers = from ans in answers + where ans.SurveyResponseId == r.Id + select new + { + ans.Id, + ans.QuestionId, + ans.AnswerText, + ans.Comment, + Questions = (from q in surveyQuestions where q.Id == ans.QuestionId select new { q.Id, q.QuestionNumber, q.CategoryId, q.Text }).SingleOrDefault(), + Attachments = from att in attachments where att.AnswerId == ans.Id select new { att.Id, att.URI } + + } + }; + return result; + } + else + { + object _employee = new { }; + if (employee != null) + { + _employee = new { employee.Id, employee.Name, employee.BirthDate, employee.Email, employee.OfficePhoneNumber }; + } + var result = from r in surveyResonses + select new + { + r.Id, + r.SurveyId, + r.LocationId, + r.EmployeeId, + r.ClientDevice, + r.KeyAnswerResult, + r.Longitute, + r.Latitude, + Employee = _employee, + answers = from ans in answers + where ans.SurveyResponseId == r.Id + select new + { + ans.Id, + ans.QuestionId, + ans.AnswerText, + ans.Comment, + Questions = (from q in questions where q.Id == ans.QuestionId select new { q.Id, q.QuestionNumber, q.CategoryId, q.Text }).SingleOrDefault(), + Attachments = from att in attachments where att.AnswerId == ans.Id select new { att.Id, att.URI } + } + }; + + return result; + } } catch (Exception ex) { @@ -521,13 +626,31 @@ namespace DamageAssesment.Api.SurveyResponses.Providers //Method to get All Survey Responses - private async Task getAllSurveyResponsesAsync() + private async Task getAllSurveyResponsesAsync(int employeeid) { try { - var surveyResonses = await surveyResponseDbContext.SurveyResponses.ToListAsync(); + List surveyResonses = null; + Employee employee = null; + List employees = null; + object _employee = new { }; + if (employeeid == 0) + { + surveyResonses = await surveyResponseDbContext.SurveyResponses.ToListAsync(); + employees = await employeeServiceProvider.getEmployeesAsync(); + } + else + { + surveyResonses = await surveyResponseDbContext.SurveyResponses.Where(x => x.EmployeeId == employeeid).ToListAsync(); + employee = await employeeServiceProvider.getEmployeeAsync(employeeid); + + if (employee != null) + { + _employee = new { employee.Id, employee.Name, employee.BirthDate, employee.Email, employee.OfficePhoneNumber }; + } + } + - var employees = await employeeServiceProvider.getEmployeesAsync(); var answers = await answerServiceProvider.getAnswersAsync(); var questions = await questionServiceProvider.getQuestionsAsync(); var attachments = await attachmentServiceProvider.getAttachmentsAsync(); @@ -543,7 +666,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers r.KeyAnswerResult, r.Longitute, r.Latitude, - Employee = (from e in employees where r.EmployeeId == e.Id select new { e.Id, e.Name, e.BirthDate, e.Email, e.OfficePhoneNumber }).SingleOrDefault(), + Employee = employeeid != 0 ? _employee : (from e in employees where r.EmployeeId == e.Id select new { e.Id, e.Name, e.BirthDate, e.Email, e.OfficePhoneNumber }).SingleOrDefault(), answers = from ans in answers where ans.SurveyResponseId == r.Id select new @@ -557,6 +680,8 @@ namespace DamageAssesment.Api.SurveyResponses.Providers } }; return result; + + } catch (Exception ex) { @@ -567,11 +692,19 @@ namespace DamageAssesment.Api.SurveyResponses.Providers //Method to get Answers By Maintenance Center by surveyId - private async Task getResultsByMaintenanceCenterAsync(int surveyId) + private async Task getResultsByMaintenanceCenterAsync(int surveyId, int employeeid) { try { - var surveyResponses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == surveyId).ToListAsync(); + List surveyResponses = null; + if (employeeid == 0) + { + surveyResponses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == surveyId).ToListAsync(); + } + else + { + surveyResponses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == surveyId && x.EmployeeId == employeeid).ToListAsync(); + } var answers = await answerServiceProvider.getAnswersAsync(); var locations = await locationServiceProvider.getLocationsAsync(); var maintenanceCenters = locations.DistinctBy(m => m.MaintenanceCenter); @@ -602,7 +735,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers select new { g.Key.MaintenanceCenter, - Answers = new + Answers = new { g.Key.AnswerText, Counter = g.Count() @@ -627,13 +760,31 @@ namespace DamageAssesment.Api.SurveyResponses.Providers } //Method to get Survey Responses by surveyId and LocationId - private async Task getSurveyResponsesBySurveyIdLocationIdAsync(int surveyId, int locationId) + private async Task getSurveyResponsesBySurveyIdLocationIdAsync(int surveyId, int locationId, int employeeid) { try { - var surveyResonses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == surveyId && x.LocationId.Equals(locationId)).ToListAsync(); + List surveyResonses = null; + Employee employee = null; + List employees = null; + object _employee = new { }; + + if (employeeid == 0) + { + surveyResonses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == surveyId && x.LocationId == locationId).ToListAsync(); + employees = await employeeServiceProvider.getEmployeesAsync(); + } + else + { + surveyResonses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == surveyId && x.EmployeeId == employeeid && x.LocationId == locationId).ToListAsync(); + employee = await employeeServiceProvider.getEmployeeAsync(employeeid); + + if (employee != null) + { + _employee = new { employee.Id, employee.Name, employee.BirthDate, employee.Email, employee.OfficePhoneNumber }; + } + } - var employees = await employeeServiceProvider.getEmployeesAsync(); var answers = await answerServiceProvider.getAnswersAsync(); var questions = await questionServiceProvider.getQuestionsAsync(); var surveyQuestions = from q in questions where q.SurveyId == surveyId select q; @@ -650,7 +801,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers r.KeyAnswerResult, r.Longitute, r.Latitude, - Employee = (from e in employees where r.EmployeeId == e.Id select new { e.Id, e.Name, e.BirthDate, e.Email, e.OfficePhoneNumber }).SingleOrDefault(), + Employee = employeeid != 0 ? _employee : (from e in employees where r.EmployeeId == e.Id select new { e.Id, e.Name, e.BirthDate, e.Email, e.OfficePhoneNumber }).SingleOrDefault(), answers = from ans in answers where ans.SurveyResponseId == r.Id @@ -665,6 +816,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers } }; return result; + } catch (Exception ex) { @@ -675,13 +827,34 @@ namespace DamageAssesment.Api.SurveyResponses.Providers //Method to get Survey Responses by surveyId questionId and answer - private async Task getSurveyResponsesByAnswerAsync(Survey survey, Question question, string answer) + private async Task getSurveyResponsesByAnswerAsync(Survey survey, Question question, string answer, int employeeid) { try { - var surveyResponses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == survey.Id).ToListAsync(); + List surveyResponses = null; + Employee employee = null; + List employees = null; + object _employee = new { }; + + if (employeeid == 0) + { + surveyResponses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == survey.Id).ToListAsync(); + employees = await employeeServiceProvider.getEmployeesAsync(); + } + else + { + surveyResponses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == survey.Id && x.EmployeeId == employeeid).ToListAsync(); + employee = await employeeServiceProvider.getEmployeeAsync(employeeid); + + if (employee != null) + { + _employee = new { employee.Id, employee.Name, employee.BirthDate, employee.Email, employee.OfficePhoneNumber }; + } + } + + //var surveyResponses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == survey.Id).ToListAsync(); + // var employees = await employeeServiceProvider.getEmployeesAsync(); var answers = await answerServiceProvider.getAnswersAsync(); - var employees = await employeeServiceProvider.getEmployeesAsync(); var attachments = await attachmentServiceProvider.getAttachmentsAsync(); var result = from r in surveyResponses @@ -695,7 +868,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers r.KeyAnswerResult, r.Longitute, r.Latitude, - Employee = (from e in employees where r.EmployeeId == e.Id select new { e.Id, e.Name, e.BirthDate, e.Email, e.OfficePhoneNumber }).SingleOrDefault(), + Employee = employeeid != 0 ? _employee : (from e in employees where r.EmployeeId == e.Id select new { e.Id, e.Name, e.BirthDate, e.Email, e.OfficePhoneNumber }).SingleOrDefault(), answers = from ans in answers where ans.SurveyResponseId == r.Id && ans.QuestionId == question.Id @@ -758,7 +931,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers { if (request != null) { - var response = await PostSurveyResponseAsync(new Models.SurveyResponse { SurveyId = request.SurveyId, EmployeeId = request.EmployeeId, LocationId = request.LocationId, ClientDevice = request.ClientDevice, KeyAnswerResult = request.KeyAnswerResult, Latitude = Convert.ToDouble(request.Latitude), Longitute = Convert.ToDouble(request.Longitute), CreatedDate=DateTime.Now }); + var response = await PostSurveyResponseAsync(new Models.SurveyResponse { SurveyId = request.SurveyId, EmployeeId = request.EmployeeId, LocationId = request.LocationId, ClientDevice = request.ClientDevice, KeyAnswerResult = request.KeyAnswerResult, Latitude = Convert.ToDouble(request.Latitude), Longitute = Convert.ToDouble(request.Longitute), CreatedDate = DateTime.Now }); if (response.IsSuccess) { var surveyResponse = response.SurveyResponse; diff --git a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/SurveyServiceProvider.cs b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/SurveyServiceProvider.cs index c9df4db..19c081a 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/SurveyServiceProvider.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/Services/SurveyServiceProvider.cs @@ -4,16 +4,18 @@ using Newtonsoft.Json; namespace DamageAssesment.Api.SurveyResponses.Services { - public class SurveyServiceProvider :ServiceProviderBase, ISurveyServiceProvider + public class SurveyServiceProvider : ServiceProviderBase, ISurveyServiceProvider { public SurveyServiceProvider(IConfiguration configuration, IHttpUtil httpUtil, ILogger logger) : base(configuration, httpUtil, logger, configuration.GetValue("RessourceSettings:Survey"), configuration.GetValue("EndPointSettings:SurveyUrlBase")) { } - public async Task> getSurveysAsync() + public async Task> getSurveysAsync(string language) { try { + if (!string.IsNullOrEmpty(language)) + url = url + "/" + language; var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null); var surveys = JsonConvert.DeserializeObject>(responseJsonString); @@ -36,7 +38,7 @@ namespace DamageAssesment.Api.SurveyResponses.Services var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null); var survey = JsonConvert.DeserializeObject(responseJsonString); - if (survey == null ) + if (survey == null) return null; else return survey; } diff --git a/DamageAssesmentApi/DamageAssesment.Api.Surveys.Test/DamageAssesment.Api.Survey.Test.csproj b/DamageAssesmentApi/DamageAssesment.Api.Surveys.Test/DamageAssesment.Api.Surveys.Test.csproj similarity index 96% rename from DamageAssesmentApi/DamageAssesment.Api.Surveys.Test/DamageAssesment.Api.Survey.Test.csproj rename to DamageAssesmentApi/DamageAssesment.Api.Surveys.Test/DamageAssesment.Api.Surveys.Test.csproj index c4ecd6b..22a4563 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Surveys.Test/DamageAssesment.Api.Survey.Test.csproj +++ b/DamageAssesmentApi/DamageAssesment.Api.Surveys.Test/DamageAssesment.Api.Surveys.Test.csproj @@ -24,7 +24,7 @@ - + diff --git a/DamageAssesmentApi/DamageAssesment.Api.Surveys/Controllers/SurveysController.cs b/DamageAssesmentApi/DamageAssesment.Api.Surveys/Controllers/SurveysController.cs index 7853716..1821c2f 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Surveys/Controllers/SurveysController.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Surveys/Controllers/SurveysController.cs @@ -15,7 +15,6 @@ namespace DamageAssesment.Api.Surveys.Controllers /// /// GET request for retrieving surveys. /// - [Route("Surveys")] [Route("Surveys/{language:alpha}")] [HttpGet] @@ -47,7 +46,6 @@ namespace DamageAssesment.Api.Surveys.Controllers /// /// POST request for creating a new survey. /// - [HttpPost("Surveys")] public async Task PostSurveysAsync(Models.Survey survey) { @@ -61,8 +59,6 @@ namespace DamageAssesment.Api.Surveys.Controllers /// /// PUT request for updating an existing survey (surveyId,Updated Survey data). /// - - [HttpPut("Surveys/{id}")] public async Task PutSurveysAsync(int id, Models.Survey survey) { diff --git a/DamageAssesmentApi/DamageAssesment.Api.Surveys/DamageAssesment.Api.Survey.csproj b/DamageAssesmentApi/DamageAssesment.Api.Surveys/DamageAssesment.Api.Surveys.csproj similarity index 100% rename from DamageAssesmentApi/DamageAssesment.Api.Surveys/DamageAssesment.Api.Survey.csproj rename to DamageAssesmentApi/DamageAssesment.Api.Surveys/DamageAssesment.Api.Surveys.csproj diff --git a/DamageAssesmentApi/DamageAssesment.SurveyResponses.Test/DamageAssesment.Api.SurveyResponses.Test.csproj b/DamageAssesmentApi/DamageAssesment.SurveyResponses.Test/DamageAssesment.Api.Responses.Test.csproj similarity index 95% rename from DamageAssesmentApi/DamageAssesment.SurveyResponses.Test/DamageAssesment.Api.SurveyResponses.Test.csproj rename to DamageAssesmentApi/DamageAssesment.SurveyResponses.Test/DamageAssesment.Api.Responses.Test.csproj index a384a67..03b9b5c 100644 --- a/DamageAssesmentApi/DamageAssesment.SurveyResponses.Test/DamageAssesment.Api.SurveyResponses.Test.csproj +++ b/DamageAssesmentApi/DamageAssesment.SurveyResponses.Test/DamageAssesment.Api.Responses.Test.csproj @@ -24,7 +24,7 @@ - + diff --git a/DamageAssesmentApi/DamageAssesment.SurveyResponses.Test/SurveyResponsesServiceTest.cs b/DamageAssesmentApi/DamageAssesment.SurveyResponses.Test/SurveyResponsesServiceTest.cs index 47685a5..ffb8a4a 100644 --- a/DamageAssesmentApi/DamageAssesment.SurveyResponses.Test/SurveyResponsesServiceTest.cs +++ b/DamageAssesmentApi/DamageAssesment.SurveyResponses.Test/SurveyResponsesServiceTest.cs @@ -3,10 +3,9 @@ using DamageAssesment.Api.SurveyResponses.Interfaces; using DamageAssesment.Api.SurveyResponses.Models; using DamageAssesment.Api.SurveyResponses.Test; using Microsoft.AspNetCore.Mvc; -using Microsoft.EntityFrameworkCore.Infrastructure; using Moq; using Xunit; -using Xunit.Sdk; + namespace DamageAssesment.SurveyResponses.Test { @@ -23,9 +22,9 @@ namespace DamageAssesment.SurveyResponses.Test { SurveyResponse mockRequestObject = await MockData.getSurveyResponseObject(); var mockResponse = await MockData.getOkResponse(mockRequestObject); - mockSurveyResponseService.Setup(service => service.GetSurveyResponsesAsync()).ReturnsAsync(mockResponse); + mockSurveyResponseService.Setup(service => service.GetSurveyResponsesAsync(1)).ReturnsAsync(mockResponse); var surveyResponseProvider = new SurveyResponsesController(mockSurveyResponseService.Object); - var result = (OkObjectResult)await surveyResponseProvider.GetSurveyResponsesAsync(); + var result = (OkObjectResult)await surveyResponseProvider.GetSurveyResponsesAsync(1); Assert.Equal(200, result.StatusCode); } @@ -33,9 +32,9 @@ namespace DamageAssesment.SurveyResponses.Test public async Task GetSurveyResponsesAsync_ShouldReturnStatusCode204() { var mockResponse = await MockData.getResponse(); - mockSurveyResponseService.Setup(service => service.GetSurveyResponsesAsync()).ReturnsAsync(mockResponse); + mockSurveyResponseService.Setup(service => service.GetSurveyResponsesAsync(1)).ReturnsAsync(mockResponse); var surveyResponseProvider = new SurveyResponsesController(mockSurveyResponseService.Object); - var result = (BadRequestObjectResult)await surveyResponseProvider.GetSurveyResponsesAsync(); + var result = (BadRequestObjectResult)await surveyResponseProvider.GetSurveyResponsesAsync(1); Assert.Equal(400, result.StatusCode); } @@ -44,7 +43,7 @@ namespace DamageAssesment.SurveyResponses.Test { SurveyResponse mockRequestObject = await MockData.getSurveyResponseObject(); var mockResponse = await MockData.getOkResponse(); - mockSurveyResponseService.Setup(service => service.GetSurveyResponsesBySurveyAsync(1)).ReturnsAsync(mockResponse); + mockSurveyResponseService.Setup(service => service.GetSurveyResponsesBySurveyAsync(1,1)).ReturnsAsync(mockResponse); var surveyResponseProvider = new SurveyResponsesController(mockSurveyResponseService.Object); var result = (OkObjectResult)await surveyResponseProvider.GetSurveyResponsesAsync(1); Assert.Equal(200, result.StatusCode); @@ -54,7 +53,7 @@ namespace DamageAssesment.SurveyResponses.Test public async Task GetSurveyResponsesBySurveyAsync_ShouldReturnStatusCode204() { var mockResponse = await MockData.getResponse(); - mockSurveyResponseService.Setup(service => service.GetSurveyResponsesBySurveyAsync(1)).ReturnsAsync(mockResponse); + mockSurveyResponseService.Setup(service => service.GetSurveyResponsesBySurveyAsync(1,1)).ReturnsAsync(mockResponse); var surveyResponseProvider = new SurveyResponsesController(mockSurveyResponseService.Object); var result = (NoContentResult)await surveyResponseProvider.GetSurveyResponsesAsync(1); Assert.Equal(204, result.StatusCode); @@ -68,9 +67,9 @@ namespace DamageAssesment.SurveyResponses.Test { SurveyResponse mockRequestObject = await MockData.getSurveyResponseObject(); var mockResponse = await MockData.getOkResponse(); - mockSurveyResponseService.Setup(service => service.GetSurveyResponsesBySurveyAndLocationAsync(1, 1)).ReturnsAsync(mockResponse); + mockSurveyResponseService.Setup(service => service.GetSurveyResponsesBySurveyAndLocationAsync(1, 1,1)).ReturnsAsync(mockResponse); var surveyResponseProvider = new SurveyResponsesController(mockSurveyResponseService.Object); - var result = (OkObjectResult)await surveyResponseProvider.GetSurveyResponsesBySurveyAndLocationAsync(1, 1); + var result = (OkObjectResult)await surveyResponseProvider.GetSurveyResponsesBySurveyAndLocationAsync(1, 1,1); Assert.Equal(200, result.StatusCode); } @@ -78,9 +77,9 @@ namespace DamageAssesment.SurveyResponses.Test public async Task GetSurveyResponsesBySurveyLocationAsync_ShouldReturnStatusCode204() { var mockResponse = await MockData.getResponse(); - mockSurveyResponseService.Setup(service => service.GetSurveyResponsesBySurveyAndLocationAsync(1, 1)).ReturnsAsync(mockResponse); + mockSurveyResponseService.Setup(service => service.GetSurveyResponsesBySurveyAndLocationAsync(1, 1, 1)).ReturnsAsync(mockResponse); var surveyResponseProvider = new SurveyResponsesController(mockSurveyResponseService.Object); - var result = (NoContentResult)await surveyResponseProvider.GetSurveyResponsesBySurveyAndLocationAsync(1, 1); + var result = (NoContentResult)await surveyResponseProvider.GetSurveyResponsesBySurveyAndLocationAsync(1, 1, 1); Assert.Equal(204, result.StatusCode); } @@ -89,9 +88,9 @@ namespace DamageAssesment.SurveyResponses.Test { SurveyResponse mockRequestObject = await MockData.getSurveyResponseObject(); var mockResponse = await MockData.getOkResponse(); - mockSurveyResponseService.Setup(service => service.GetResponsesByAnswerAsync(1, 1, "Yes")).ReturnsAsync(mockResponse); + mockSurveyResponseService.Setup(service => service.GetResponsesByAnswerAsync(1, 1, "Yes",1)).ReturnsAsync(mockResponse); var surveyResponseProvider = new SurveyResponsesController(mockSurveyResponseService.Object); - var result = (OkObjectResult)await surveyResponseProvider.GetSurveyResponsesByAnswerAsyncAsync(1, 1, "Yes"); + var result = (OkObjectResult)await surveyResponseProvider.GetSurveyResponsesByAnswerAsyncAsync(1, 1, "Yes",1); Assert.Equal(200, result.StatusCode); } @@ -99,9 +98,9 @@ namespace DamageAssesment.SurveyResponses.Test public async Task GetSurveyResponsesBySurveyQuestionAnswerAsync_ShouldReturnStatusCode204() { var mockResponse = await MockData.getResponse(); - mockSurveyResponseService.Setup(service => service.GetResponsesByAnswerAsync(1, 1, "Yes")).ReturnsAsync(mockResponse); + mockSurveyResponseService.Setup(service => service.GetResponsesByAnswerAsync(1, 1, "Yes", 1)).ReturnsAsync(mockResponse); var surveyResponseProvider = new SurveyResponsesController(mockSurveyResponseService.Object); - var result = (NoContentResult)await surveyResponseProvider.GetSurveyResponsesByAnswerAsyncAsync(1, 1, "Yes"); + var result = (NoContentResult)await surveyResponseProvider.GetSurveyResponsesByAnswerAsyncAsync(1, 1, "Yes",1); Assert.Equal(204, result.StatusCode); } @@ -111,9 +110,9 @@ namespace DamageAssesment.SurveyResponses.Test { SurveyResponse mockRequestObject = await MockData.getSurveyResponseObject(); var mockResponse = await MockData.getOkResponse(); - mockSurveyResponseService.Setup(service => service.GetAnswersByRegionAsync(1)).ReturnsAsync(mockResponse); + mockSurveyResponseService.Setup(service => service.GetAnswersByRegionAsync(1,1)).ReturnsAsync(mockResponse); var surveyResponseProvider = new SurveyResponsesController(mockSurveyResponseService.Object); - var result = (OkObjectResult)await surveyResponseProvider.GetAnswersByRegionAsync(1); + var result = (OkObjectResult)await surveyResponseProvider.GetAnswersByRegionAsync(1, 1); Assert.Equal(200, result.StatusCode); } @@ -121,9 +120,9 @@ namespace DamageAssesment.SurveyResponses.Test public async Task GetSurveyResponsesByRegionSurveyAsync_ShouldReturnStatusCode204() { var mockResponse = await MockData.getResponse(); - mockSurveyResponseService.Setup(service => service.GetAnswersByRegionAsync(1)).ReturnsAsync(mockResponse); + mockSurveyResponseService.Setup(service => service.GetAnswersByRegionAsync(1, 1)).ReturnsAsync(mockResponse); var surveyResponseProvider = new SurveyResponsesController(mockSurveyResponseService.Object); - var result = (NoContentResult)await surveyResponseProvider.GetAnswersByRegionAsync(1); + var result = (NoContentResult)await surveyResponseProvider.GetAnswersByRegionAsync(1, 1); Assert.Equal(204, result.StatusCode); } @@ -132,9 +131,9 @@ namespace DamageAssesment.SurveyResponses.Test { SurveyResponse mockRequestObject = await MockData.getSurveyResponseObject(); var mockResponse = await MockData.getOkResponse(); - mockSurveyResponseService.Setup(service => service.GetSurveyResponsesByMaintenanceCenterAsync(1)).ReturnsAsync(mockResponse); + mockSurveyResponseService.Setup(service => service.GetSurveyResponsesByMaintenanceCenterAsync(1, 1)).ReturnsAsync(mockResponse); var surveyResponseProvider = new SurveyResponsesController(mockSurveyResponseService.Object); - var result = (OkObjectResult)await surveyResponseProvider.GetAnswersByMaintenaceCentersync(1); + var result = (OkObjectResult)await surveyResponseProvider.GetAnswersByMaintenaceCentersync(1, 1); Assert.Equal(200, result.StatusCode); } @@ -142,9 +141,9 @@ namespace DamageAssesment.SurveyResponses.Test public async Task GetSurveyResponsesMaintenanceCenterSurveyAsync_ShouldReturnStatusCode204() { var mockResponse = await MockData.getResponse(); - mockSurveyResponseService.Setup(service => service.GetSurveyResponsesByMaintenanceCenterAsync(1)).ReturnsAsync(mockResponse); + mockSurveyResponseService.Setup(service => service.GetSurveyResponsesByMaintenanceCenterAsync(1, 1)).ReturnsAsync(mockResponse); var surveyResponseProvider = new SurveyResponsesController(mockSurveyResponseService.Object); - var result = (NoContentResult)await surveyResponseProvider.GetAnswersByMaintenaceCentersync(1); + var result = (NoContentResult)await surveyResponseProvider.GetAnswersByMaintenaceCentersync(1, 1); Assert.Equal(204, result.StatusCode); } diff --git a/DamageAssesmentApi/DamageAssesment.sln b/DamageAssesmentApi/DamageAssesment.sln index 808ff69..b92b664 100644 --- a/DamageAssesmentApi/DamageAssesment.sln +++ b/DamageAssesmentApi/DamageAssesment.sln @@ -17,19 +17,19 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.Locations", "DamageAssesment.Api.Locations\DamageAssesment.Api.Locations.csproj", "{746C67BF-9949-4361-B5D2-358C7607750E}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.SurveyResponses", "DamageAssesment.Api.SurveyResponses\DamageAssesment.Api.SurveyResponses.csproj", "{D11808FE-AD1C-4BA6-87FD-9D18B2DC81F2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.Responses", "DamageAssesment.Api.SurveyResponses\DamageAssesment.Api.Responses.csproj", "{D11808FE-AD1C-4BA6-87FD-9D18B2DC81F2}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.Questions.Test", "DamageAssesment.Api.QuestionsTest\DamageAssesment.Api.Questions.Test.csproj", "{35CD9231-034D-4999-BCFC-1786DD007ED2}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.Survey.Test", "DamageAssesment.Api.Surveys.Test\DamageAssesment.Api.Survey.Test.csproj", "{ADFB79E3-83C9-454F-A070-49D167BD28CC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.Surveys.Test", "DamageAssesment.Api.Surveys.Test\DamageAssesment.Api.Surveys.Test.csproj", "{ADFB79E3-83C9-454F-A070-49D167BD28CC}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.SurveyResponses.Test", "DamageAssesment.SurveyResponses.Test\DamageAssesment.Api.SurveyResponses.Test.csproj", "{6F4B9C9D-CE5D-421A-876F-57D0FEDF8049}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.Responses.Test", "DamageAssesment.SurveyResponses.Test\DamageAssesment.Api.Responses.Test.csproj", "{6F4B9C9D-CE5D-421A-876F-57D0FEDF8049}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.Attachments.Test", "DamageAssesment.Api.Attachments.Test\DamageAssesment.Api.Attachments.Test.csproj", "{730E5718-FCE1-42C0-AB76-EA020896A788}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.Locations.Test", "DamageAssesment.Api.Locations.Test\DamageAssesment.Api.Locations.Test.csproj", "{DA68AE47-6825-41ED-9107-5151822FB083}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.Survey", "DamageAssesment.Api.Surveys\DamageAssesment.Api.Survey.csproj", "{55481AED-6801-47DB-A176-A6FA92002081}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.Surveys", "DamageAssesment.Api.Surveys\DamageAssesment.Api.Surveys.csproj", "{55481AED-6801-47DB-A176-A6FA92002081}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.Answers.Test", "DamageAssesment.Api.Answers.Test\DamageAssesment.Api.Answers.Test.csproj", "{594A47AC-DF50-47E5-903D-A856CADDF573}" EndProject @@ -37,9 +37,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.Employe EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.Employees.Test", "DamageAssesment.Api.Employees.Test\DamageAssesment.Api.Employees.Test.csproj", "{D6BF9AE9-72FA-4726-A326-35A35D27FFB8}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.DocuLinks", "DamageAssesment.Api.Documents\DamageAssesment.Api.DocuLinks.csproj", "{977C1053-9D63-4153-B61B-C3D2F1010F9F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.DocuLinks", "DamageAssesment.Api.DocuLinks\DamageAssesment.Api.DocuLinks.csproj", "{D356A3C9-B275-4B1A-9B1B-F48600E85E4F}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.DocuLinks.Test", "DamageAssesment.Api.Documents.Test\DamageAssesment.Api.DocuLinks.Test.csproj", "{884BA4AC-9170-49B1-BD6B-850B350C95C0}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.DocuLinks.Test", "DamageAssesment.Api.DocuLinks.Test\DamageAssesment.Api.DocuLinks.Test.csproj", "{A7F17ED7-71D2-4FD0-87E5-D83415078FC0}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -103,14 +103,14 @@ Global {D6BF9AE9-72FA-4726-A326-35A35D27FFB8}.Debug|Any CPU.Build.0 = Debug|Any CPU {D6BF9AE9-72FA-4726-A326-35A35D27FFB8}.Release|Any CPU.ActiveCfg = Release|Any CPU {D6BF9AE9-72FA-4726-A326-35A35D27FFB8}.Release|Any CPU.Build.0 = Release|Any CPU - {977C1053-9D63-4153-B61B-C3D2F1010F9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {977C1053-9D63-4153-B61B-C3D2F1010F9F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {977C1053-9D63-4153-B61B-C3D2F1010F9F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {977C1053-9D63-4153-B61B-C3D2F1010F9F}.Release|Any CPU.Build.0 = Release|Any CPU - {884BA4AC-9170-49B1-BD6B-850B350C95C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {884BA4AC-9170-49B1-BD6B-850B350C95C0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {884BA4AC-9170-49B1-BD6B-850B350C95C0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {884BA4AC-9170-49B1-BD6B-850B350C95C0}.Release|Any CPU.Build.0 = Release|Any CPU + {D356A3C9-B275-4B1A-9B1B-F48600E85E4F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D356A3C9-B275-4B1A-9B1B-F48600E85E4F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D356A3C9-B275-4B1A-9B1B-F48600E85E4F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D356A3C9-B275-4B1A-9B1B-F48600E85E4F}.Release|Any CPU.Build.0 = Release|Any CPU + {A7F17ED7-71D2-4FD0-87E5-D83415078FC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A7F17ED7-71D2-4FD0-87E5-D83415078FC0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A7F17ED7-71D2-4FD0-87E5-D83415078FC0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A7F17ED7-71D2-4FD0-87E5-D83415078FC0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Postman-backend-dev-tests/Damage Assessment API Tests.postman_collection.json b/Postman-backend-dev-tests/Damage Assessment API Tests.postman_collection.json new file mode 100644 index 0000000..9f8e8a3 --- /dev/null +++ b/Postman-backend-dev-tests/Damage Assessment API Tests.postman_collection.json @@ -0,0 +1,2112 @@ +{ + "info": { + "_postman_id": "1facadda-be71-4b53-b028-3100e261e0d3", + "name": "Damage Assessment API Tests", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", + "_exporter_id": "2845111" + }, + "item": [ + { + "name": "Setup", + "item": [ + { + "name": "New Request", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "pm.test(\"Domain variable is set\", function() {", + " pm.expect(pm.environment.has(\"domain\")).to.be.true;", + " pm.expect(pm.environment.get(\"domain\")).to.be.not.empty;", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.has(\"domain\") || !pm.environment.get(\"domain\")) {", + " pm.environment.set(\"domain\", \"https://dev-services.damageassessment.net/\");", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "https://dev-services.damageassessment.net/answers", + "protocol": "https", + "host": [ + "dev-services", + "damageassessment", + "net" + ], + "path": [ + "answers" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Answers", + "item": [ + { + "name": "Get Requests", + "item": [ + { + "name": "Get Answers", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "pm.test(\"No errors in Pre-request Script\", function() {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "tests[\"200 Unauthorized POST request\"] = responseCode.code === 200;", + "pm.test(\"Response status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});", + "", + "", + "pm.test(\"Response is an array\", function () {", + " pm.expect(pm.response.json()).to.be.an('array');", + "});", + "", + "", + "pm.test(\"Response array is empty\", function () {", + " const responseData = pm.response.json();", + " ", + " pm.expect(responseData).to.be.an('array');", + " pm.expect(responseData).to.have.lengthOf(0);", + "});", + "", + "", + "pm.test(\"Response time is less than 200ms\", function () {", + " pm.expect(pm.response.responseTime).to.be.below(200);", + "});", + "", + "", + "pm.test(\"Response does not contain any errors or error messages\", function () {", + " const responseData = pm.response.json();", + "", + " pm.expect(responseData).to.be.an('array');", + " pm.expect(responseData).to.have.lengthOf(0, \"Response should not contain any errors or error messages\");", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}answers", + "host": [ + "{{domain}}answers" + ] + } + }, + "response": [] + }, + { + "name": "Get Answers By Id", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "tests[\"200 Unauthorized POST request\"] = responseCode.code === 200;" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}answers/1", + "host": [ + "{{domain}}answers" + ], + "path": [ + "1" + ] + } + }, + "response": [] + }, + { + "name": "Get Answers By Reponse Id", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "tests[\"200 Unauthorized POST request\"] = responseCode.code === 200;" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}answers/byresponse/1", + "host": [ + "{{domain}}answers" + ], + "path": [ + "byresponse", + "1" + ] + } + }, + "response": [] + }, + { + "name": "Get Answers By Question Id", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "tests[\"200 Unauthorized POST request\"] = responseCode.code === 200;" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}answers/byquestion/1", + "host": [ + "{{domain}}answers" + ], + "path": [ + "byquestion", + "1" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Put Answers", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "tests[\"200 Unauthorized POST request\"] = responseCode.code === 200;" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "PUT", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1,\n \"questionId\": 1,\n \"answerText\": \"string\",\n \"comment\": \"string\",\n \"surveyResponseId\": 1\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{domain}}answers", + "host": [ + "{{domain}}answers" + ] + } + }, + "response": [] + }, + { + "name": "Post Answers", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "tests[\"200 Unauthorized POST request\"] = responseCode.code === 200;" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"id\": 1,\n \"questionId\": 1,\n \"answerText\": \"string\",\n \"comment\": \"string\",\n \"surveyResponseId\": 1\n}" + }, + "url": { + "raw": "{{domain}}answers", + "host": [ + "{{domain}}answers" + ] + } + }, + "response": [] + }, + { + "name": "Delete Answers by Id", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "tests[\"200 Unauthorized POST request\"] = responseCode.code === 200;" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{domain}}answers/1", + "host": [ + "{{domain}}answers" + ], + "path": [ + "1" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Employees", + "item": [ + { + "name": "Get Requests", + "item": [ + { + "name": "Get Employees", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "", + "pm.test(\"No errors in Pre-request Script\", function() {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "", + "tests[\"Response code is 200 OK\"] = responseCode.code === 200;", + "", + "// This assumes jsonData.items is sorted and you want the next ID.", + "var nextId;", + "if (jsonData && jsonData.length > 0) {", + " lastId = _.last(jsonData).id", + " nextId = lastId + 1;", + " pm.environment.set(\"lastEmployeeId\", lastId);", + " pm.environment.set(\"nextEmployeeId\", nextId);", + "} else {", + " console.log(\"No items found in the response or invalid response format\");", + "}", + "" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}employees", + "host": [ + "{{domain}}employees" + ] + } + }, + "response": [] + }, + { + "name": "Get Employees By Id", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "tests[\"Response code is 200 OK\"] = responseCode.code === 200;", + "", + "pm.test(\"Employee name matches\", function() {", + " var expectedName = pm.environment.get(\"employeeName\");", + " pm.expect(jsonData.name).to.eql(expectedName);", + "});", + "", + "pm.test(\"Birth date matches\", function() {", + " var expectedBirthDate = pm.environment.get(\"randomBirthDate\");", + " pm.expect(jsonData.birthDate).to.eql(expectedBirthDate);", + "});", + "", + "pm.test(\"Phone number matches\", function() {", + " var expectedPhoneNumber = pm.environment.get(\"randomPhoneNumber\");", + " pm.expect(jsonData.officePhoneNumber).to.eql(expectedPhoneNumber);", + "});", + "", + "pm.test(\"Email matches\", function() {", + " var expectedEmail = pm.environment.get(\"randomEmail\");", + " pm.expect(jsonData.email).to.eql(expectedEmail);", + "});", + "", + "pm.test(\"Activity status matches\", function() {", + " var expectedIsActive = pm.environment.get(\"randomBoolean\");", + " pm.expect(jsonData.isActive).to.eql(expectedIsActive === \"true\");", + "});", + "", + "pm.test(\"Preferred language matches\", function() {", + " var expectedLanguage = pm.environment.get(\"randomLanguage\");", + " pm.expect(jsonData.preferredLanguage).to.eql(expectedLanguage);", + "});", + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}employees/{{lastEmployeeId}}", + "host": [ + "{{domain}}employees" + ], + "path": [ + "{{lastEmployeeId}}" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Add Employee", + "item": [ + { + "name": "Post Employees", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "tests[\"200 Unauthorized POST request\"] = responseCode.code === 200;", + "" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "function pad(number, digits) {", + " return String(number).padStart(digits, '0');", + "}", + "", + "// Random year between 1980 and 2000", + "var randomYear = Math.floor(Math.random() * (2000 - 1980 + 1) + 1980);", + "", + "// Random month between 1 and 12", + "var randomMonth = Math.floor(Math.random() * 12) + 1;", + "", + "// Days per month (considering leap year for February)", + "var daysInMonth = [31, (randomYear % 4 === 0 && (randomYear % 100 !== 0 || randomYear % 400 === 0)) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];", + "", + "// Random day based on month", + "var randomDay = Math.floor(Math.random() * daysInMonth[randomMonth - 1]) + 1;", + "", + "// Random time components", + "var randomHour = Math.floor(Math.random() * 24);", + "var randomMinute = Math.floor(Math.random() * 60);", + "var randomSecond = Math.floor(Math.random() * 60);", + "var randomMillisecond = Math.floor(Math.random() * 10000000); // 7 digits", + "", + "// Construct the date string", + "var randomBirthDate = randomYear + '-' +", + " pad(randomMonth, 2) + '-' +", + " pad(randomDay, 2) + 'T' +", + " pad(randomHour, 2) + ':' +", + " pad(randomMinute, 2) + ':' +", + " pad(randomSecond, 2) + '.' +", + " pad(randomMillisecond, 7) + '+00:00';", + "", + "// Array of possible languages", + "var languages = [\"en\", \"fr\", \"de\", \"ht\", \"es\"];", + "var randomLanguage = languages[Math.floor(Math.random() * languages.length)];", + "", + "// Use Postman's built-in dynamic variables", + "var firstName = pm.variables.replaceIn(\"{{$randomFirstName}}\");", + "var lastName = pm.variables.replaceIn(\"{{$randomLastName}}\");", + "var phoneNumber = pm.variables.replaceIn(\"{{$randomPhoneNumber}}\");", + "var email = pm.variables.replaceIn(\"{{$randomEmail}}\");", + "var randomBoolean = pm.variables.replaceIn(\"{{$randomBoolean}}\"); // This will return \"true\" or \"false\" as a string", + "", + "// Set the environment variables", + "pm.environment.set(\"employeeName\", firstName + \" \" + lastName);", + "pm.environment.set(\"randomPhoneNumber\", phoneNumber);", + "pm.environment.set(\"randomBirthDate\", randomBirthDate);", + "pm.environment.set(\"randomEmail\", email);", + "pm.environment.set(\"randomBoolean\", randomBoolean);", + "pm.environment.set(\"randomLanguage\", randomLanguage);", + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"id\": {{nextEmployeeId}},\n \"employeeCode\": \"{{$randomBankAccount}}\",\n \"name\": \"{{employeeName}}\",\n \"birthDate\": \"{{randomBirthDate}}\",\n \"officePhoneNumber\": \"{{randomPhoneNumber}}\",\n \"email\": \"{{randomEmail}}\",\n \"isActive\": {{$randomBoolean}},\n \"preferredLanguage\": \"{{randomLanguage}}\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{domain}}employees", + "host": [ + "{{domain}}employees" + ] + } + }, + "response": [] + }, + { + "name": "Verify Add", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "tests[\"Response code is 200 OK\"] = responseCode.code === 200;", + "", + "pm.test(\"Employee name matches\", function() {", + " var expectedName = pm.environment.get(\"employeeName\");", + " pm.expect(jsonData.name).to.eql(expectedName);", + "});", + "", + "pm.test(\"Birth date matches\", function() {", + " var expectedBirthDate = pm.environment.get(\"randomBirthDate\");", + " pm.expect(jsonData.birthDate).to.eql(expectedBirthDate);", + "});", + "", + "pm.test(\"Phone number matches\", function() {", + " var expectedPhoneNumber = pm.environment.get(\"randomPhoneNumber\");", + " pm.expect(jsonData.officePhoneNumber).to.eql(expectedPhoneNumber);", + "});", + "", + "pm.test(\"Email matches\", function() {", + " var expectedEmail = pm.environment.get(\"randomEmail\");", + " pm.expect(jsonData.email).to.eql(expectedEmail);", + "});", + "", + "pm.test(\"Activity status matches\", function() {", + " var expectedIsActive = pm.environment.get(\"randomBoolean\");", + " pm.expect(jsonData.isActive).to.eql(expectedIsActive === \"true\");", + "});", + "", + "pm.test(\"Preferred language matches\", function() {", + " var expectedLanguage = pm.environment.get(\"randomLanguage\");", + " pm.expect(jsonData.preferredLanguage).to.eql(expectedLanguage);", + "});", + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}employees/{{nextEmployeeId}}", + "host": [ + "{{domain}}employees" + ], + "path": [ + "{{nextEmployeeId}}" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Update Employee", + "item": [ + { + "name": "Put Employees", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "tests[\"200 Unauthorized POST request\"] = responseCode.code === 200;", + "" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "function pad(number, digits) {", + " return String(number).padStart(digits, '0');", + "}", + "", + "// Random year between 1980 and 2000", + "var randomYear = Math.floor(Math.random() * (2000 - 1980 + 1) + 1980);", + "", + "// Random month between 1 and 12", + "var randomMonth = Math.floor(Math.random() * 12) + 1;", + "", + "// Days per month (considering leap year for February)", + "var daysInMonth = [31, (randomYear % 4 === 0 && (randomYear % 100 !== 0 || randomYear % 400 === 0)) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];", + "", + "// Random day based on month", + "var randomDay = Math.floor(Math.random() * daysInMonth[randomMonth - 1]) + 1;", + "", + "// Random time components", + "var randomHour = Math.floor(Math.random() * 24);", + "var randomMinute = Math.floor(Math.random() * 60);", + "var randomSecond = Math.floor(Math.random() * 60);", + "var randomMillisecond = Math.floor(Math.random() * 10000000); // 7 digits", + "", + "// Construct the date string", + "var randomBirthDate = randomYear + '-' +", + " pad(randomMonth, 2) + '-' +", + " pad(randomDay, 2) + 'T' +", + " pad(randomHour, 2) + ':' +", + " pad(randomMinute, 2) + ':' +", + " pad(randomSecond, 2) + '.' +", + " pad(randomMillisecond, 7) + '+00:00';", + "", + "// Array of possible languages", + "var languages = [\"en\", \"fr\", \"de\", \"ht\", \"es\"];", + "var randomLanguage = languages[Math.floor(Math.random() * languages.length)];", + "", + "// Use Postman's built-in dynamic variables", + "var firstName = pm.variables.replaceIn(\"{{$randomFirstName}}\");", + "var lastName = pm.variables.replaceIn(\"{{$randomLastName}}\");", + "var phoneNumber = pm.variables.replaceIn(\"{{$randomPhoneNumber}}\");", + "var email = pm.variables.replaceIn(\"{{$randomEmail}}\");", + "var randomBoolean = pm.variables.replaceIn(\"{{$randomBoolean}}\"); // This will return \"true\" or \"false\" as a string", + "", + "// Set the environment variables", + "pm.environment.set(\"employeeName\", firstName + \" \" + lastName);", + "pm.environment.set(\"randomPhoneNumber\", phoneNumber);", + "pm.environment.set(\"randomBirthDate\", randomBirthDate);", + "pm.environment.set(\"randomEmail\", email);", + "pm.environment.set(\"randomBoolean\", randomBoolean);", + "pm.environment.set(\"randomLanguage\", randomLanguage);", + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "PUT", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"id\": {{nextEmployeeId}},\n \"employeeCode\": \"{{$randomBankAccount}}\",\n \"name\": \"{{employeeName}}\",\n \"birthDate\": \"{{randomBirthDate}}\",\n \"officePhoneNumber\": \"{{randomPhoneNumber}}\",\n \"email\": \"{{randomEmail}}\",\n \"isActive\": {{$randomBoolean}},\n \"preferredLanguage\": \"{{randomLanguage}}\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{domain}}employees", + "host": [ + "{{domain}}employees" + ] + } + }, + "response": [] + }, + { + "name": "Verify Update", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "tests[\"Response code is 200 OK\"] = responseCode.code === 200;", + "", + "pm.test(\"Employee name matches\", function() {", + " var expectedName = pm.environment.get(\"employeeName\");", + " pm.expect(jsonData.name).to.eql(expectedName);", + "});", + "", + "pm.test(\"Birth date matches\", function() {", + " var expectedBirthDate = pm.environment.get(\"randomBirthDate\");", + " pm.expect(jsonData.birthDate).to.eql(expectedBirthDate);", + "});", + "", + "pm.test(\"Phone number matches\", function() {", + " var expectedPhoneNumber = pm.environment.get(\"randomPhoneNumber\");", + " pm.expect(jsonData.officePhoneNumber).to.eql(expectedPhoneNumber);", + "});", + "", + "pm.test(\"Email matches\", function() {", + " var expectedEmail = pm.environment.get(\"randomEmail\");", + " pm.expect(jsonData.email).to.eql(expectedEmail);", + "});", + "", + "pm.test(\"Activity status matches\", function() {", + " var expectedIsActive = pm.environment.get(\"randomBoolean\");", + " pm.expect(jsonData.isActive).to.eql(expectedIsActive === \"true\");", + "});", + "", + "pm.test(\"Preferred language matches\", function() {", + " var expectedLanguage = pm.environment.get(\"randomLanguage\");", + " pm.expect(jsonData.preferredLanguage).to.eql(expectedLanguage);", + "});", + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}employees/{{nextEmployeeId}}", + "host": [ + "{{domain}}employees" + ], + "path": [ + "{{nextEmployeeId}}" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "Delete Employee", + "item": [ + { + "name": "Delete Employees", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "tests[\"Response code is 200 OK\"] = responseCode.code === 200;", + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{domain}}employees/{{nextEmployeeId}}", + "host": [ + "{{domain}}employees" + ], + "path": [ + "{{nextEmployeeId}}" + ] + } + }, + "response": [] + } + ] + } + ] + }, + { + "name": "Questions", + "item": [ + { + "name": "Get Requests", + "item": [ + { + "name": "Get Questions", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "pm.test(\"No errors in Pre-request Script\", function () {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "tests[\"200 Unauthorized POST request\"] = responseCode.code === 200;", + "pm.test(\"Response status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});", + "", + "", + "pm.test(\"Response is an array\", function () {", + " pm.expect(pm.response.json()).to.be.an('array');", + "});", + "", + "", + "pm.test(\"Check if id is a non-negative integer\", function () {", + " const responseData = pm.response.json();", + "", + " pm.expect(responseData).to.be.an('array').that.is.not.empty;", + "", + " responseData.forEach(function (question) {", + " pm.expect(question.id).to.be.a('number').that.is.greaterThan(-1);", + " });", + "});", + "", + "", + "pm.test(\"QuestionNumber is a non-negative integer\", function () {", + " const responseData = pm.response.json();", + "", + " pm.expect(responseData).to.be.an('array').and.to.have.lengthOf.at.least(1);", + "", + " responseData.forEach(function (question) {", + " pm.expect(question.questionNumber).to.be.a('number').and.to.be.at.least(0);", + " });", + "});", + "", + "", + "pm.test(\"surveyId is a non-negative integer\", function () {", + " const responseData = pm.response.json();", + "", + " pm.expect(responseData).to.be.an('array');", + "", + " responseData.forEach(function (question) {", + " pm.expect(question.surveyId).to.be.a('number');", + " pm.expect(question.surveyId).to.be.at.least(0);", + " });", + "});", + "", + "", + "", + "", + "pm.test(\"Response status code is 200\", function () {", + " pm.expect(pm.response.code).to.equal(200);", + "});", + "", + "", + "pm.test(\"Response is an array\", function () {", + " const responseData = pm.response.json();", + "", + " pm.expect(responseData).to.be.an('array');", + "});", + "", + "", + "pm.test(\"Each question has a non-negative integer id\", function () {", + " const responseData = pm.response.json();", + "", + " pm.expect(responseData).to.be.an('array');", + "", + " responseData.forEach(function (question) {", + " pm.expect(question.id).to.be.a('number');", + " pm.expect(question.id).to.be.at.least(0);", + " });", + "});", + "", + "", + "pm.test(\"Each question has a non-negative integer questionNumber\", function () {", + " const responseData = pm.response.json();", + "", + " pm.expect(responseData).to.be.an('array');", + " responseData.forEach(function (question) {", + " pm.expect(question.questionNumber).to.be.a('number');", + " pm.expect(question.questionNumber).to.be.at.least(0);", + " });", + "});", + "", + "", + "pm.test(\"Each question has a non-negative integer surveyId\", function () {", + " const responseData = pm.response.json();", + "", + " pm.expect(responseData).to.be.an('array');", + "", + " responseData.forEach(function (question) {", + " pm.expect(question.surveyId).to.be.a('number');", + " pm.expect(question.surveyId).to.be.at.least(0);", + " });", + "});", + "", + "" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}questions", + "host": [ + "{{domain}}questions" + ] + } + }, + "response": [] + }, + { + "name": "Get Questions By Language", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "pm.test(\"No errors in Pre-request Script\", function() {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "tests[\"200 Unauthorized POST request\"] = responseCode.code === 200;", + "pm.test(\"Response status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}questions/en", + "host": [ + "{{domain}}questions" + ], + "path": [ + "en" + ] + } + }, + "response": [] + }, + { + "name": "Get Questions By Id and Language", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "pm.test(\"No errors in Pre-request Script\", function() {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "tests[\"200 Unauthorized POST request\"] = responseCode.code === 200;", + "pm.test(\"Response status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}questions/1/en", + "host": [ + "{{domain}}questions" + ], + "path": [ + "1", + "en" + ] + } + }, + "response": [] + }, + { + "name": "Get Questions By Id", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "pm.test(\"No errors in Pre-request Script\", function() {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "tests[\"200 Unauthorized POST request\"] = responseCode.code === 200;", + "pm.test(\"Response status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}questions/1", + "host": [ + "{{domain}}questions" + ], + "path": [ + "1" + ] + } + }, + "response": [] + }, + { + "name": "Get Questions By Survey Id", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "pm.test(\"No errors in Pre-request Script\", function() {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "tests[\"200 Unauthorized POST request\"] = responseCode.code === 200;", + "pm.test(\"Response status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}questions/bysurvey/1", + "host": [ + "{{domain}}questions" + ], + "path": [ + "bysurvey", + "1" + ] + } + }, + "response": [] + }, + { + "name": "Get Questions By Survey Id and Language", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "pm.test(\"No errors in Pre-request Script\", function() {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "tests[\"200 Unauthorized POST request\"] = responseCode.code === 200;", + "pm.test(\"Response status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}questions/bysurvey/1/en", + "host": [ + "{{domain}}questions" + ], + "path": [ + "bysurvey", + "1", + "en" + ] + } + }, + "response": [] + }, + { + "name": "Get Questions Categories", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "pm.test(\"No errors in Pre-request Script\", function() {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "tests[\"200 Unauthorized POST request\"] = responseCode.code === 200;", + "pm.test(\"Response status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}questions/categories", + "host": [ + "{{domain}}questions" + ], + "path": [ + "categories" + ] + } + }, + "response": [] + }, + { + "name": "Get Questions Categories Language", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "pm.test(\"No errors in Pre-request Script\", function() {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "tests[\"200 Unauthorized POST request\"] = responseCode.code === 200;", + "pm.test(\"Response status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}questions/categories/en", + "host": [ + "{{domain}}questions" + ], + "path": [ + "categories", + "en" + ] + } + }, + "response": [] + }, + { + "name": "Get Questions Categories By Id", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "pm.test(\"No errors in Pre-request Script\", function() {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "tests[\"200 Unauthorized POST request\"] = responseCode.code === 200;", + "pm.test(\"Response status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}questions/categories/1", + "host": [ + "{{domain}}questions" + ], + "path": [ + "categories", + "1" + ] + } + }, + "response": [] + }, + { + "name": "Get Questions Categories By Id and Lanuage", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "pm.test(\"No errors in Pre-request Script\", function() {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "tests[\"200 Unauthorized POST request\"] = responseCode.code === 200;", + "pm.test(\"Response status code is 200\", function () {", + " pm.response.to.have.status(200);", + "});" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}questions/categories/en/1", + "host": [ + "{{domain}}questions" + ], + "path": [ + "categories", + "en", + "1" + ] + } + }, + "response": [] + } + ] + } + ] + }, + { + "name": "Locations", + "item": [] + }, + { + "name": "Surveys", + "item": [ + { + "name": "Get Requests", + "item": [ + { + "name": "Get Surveys", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "", + "pm.test(\"No errors in Pre-request Script\", function() {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "", + "tests[\"Response code is 200 OK\"] = responseCode.code === 200;", + "", + "" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}surveys", + "host": [ + "{{domain}}surveys" + ] + } + }, + "response": [] + }, + { + "name": "Get Surveys By Language", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "", + "pm.test(\"No errors in Pre-request Script\", function() {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "", + "tests[\"Response code is 200 OK\"] = responseCode.code === 200;", + "", + "" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}surveys/en", + "host": [ + "{{domain}}surveys" + ], + "path": [ + "en" + ] + } + }, + "response": [] + }, + { + "name": "Get Surveys By Id", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "", + "pm.test(\"No errors in Pre-request Script\", function() {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "", + "tests[\"Response code is 200 OK\"] = responseCode.code === 200;", + "", + "" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}surveys/1", + "host": [ + "{{domain}}surveys" + ], + "path": [ + "1" + ] + } + }, + "response": [] + }, + { + "name": "Get Surveys By Id and Language", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "", + "pm.test(\"No errors in Pre-request Script\", function() {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "", + "tests[\"Response code is 200 OK\"] = responseCode.code === 200;", + "", + "" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}surveys/1/en", + "host": [ + "{{domain}}surveys" + ], + "path": [ + "1", + "en" + ] + } + }, + "response": [] + } + ] + } + ] + }, + { + "name": "SurveyResponses", + "item": [ + { + "name": "Get Requests", + "item": [ + { + "name": "Get Responses", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "", + "pm.test(\"No errors in Pre-request Script\", function() {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "", + "tests[\"Response code is 200 OK\"] = responseCode.code === 200;", + "", + "" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}responses", + "host": [ + "{{domain}}responses" + ] + } + }, + "response": [] + }, + { + "name": "Get Responses By Survey Id", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "", + "pm.test(\"No errors in Pre-request Script\", function() {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "", + "tests[\"Response code is 200 OK\"] = responseCode.code === 200;", + "", + "" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}responses/bysurvey/1", + "host": [ + "{{domain}}responses" + ], + "path": [ + "bysurvey", + "1" + ] + } + }, + "response": [] + }, + { + "name": "Get Responses By Survey Id and Location Id", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "", + "pm.test(\"No errors in Pre-request Script\", function() {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "", + "tests[\"Response code is 200 OK\"] = responseCode.code === 200;", + "", + "" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}responses/1/1", + "host": [ + "{{domain}}responses" + ], + "path": [ + "1", + "1" + ] + } + }, + "response": [] + }, + { + "name": "Get Responses Survey Id and Question Id and Answer Id", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "", + "pm.test(\"No errors in Pre-request Script\", function() {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "", + "tests[\"Response code is 200 OK\"] = responseCode.code === 200;", + "", + "" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}responses/byanswer/1/1/1", + "host": [ + "{{domain}}responses" + ], + "path": [ + "byanswer", + "1", + "1", + "1" + ] + } + }, + "response": [] + }, + { + "name": "Get Responses By Region", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "", + "pm.test(\"No errors in Pre-request Script\", function() {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "", + "tests[\"Response code is 200 OK\"] = responseCode.code === 200;", + "", + "" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}responses/byregion/1", + "host": [ + "{{domain}}responses" + ], + "path": [ + "byregion", + "1" + ] + } + }, + "response": [] + }, + { + "name": "Get Responses By Maintenance Center", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "", + "pm.test(\"No errors in Pre-request Script\", function() {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "", + "tests[\"Response code is 200 OK\"] = responseCode.code === 200;", + "", + "" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}responses/bymaintenancecenter/1", + "host": [ + "{{domain}}responses" + ], + "path": [ + "bymaintenancecenter", + "1" + ] + } + }, + "response": [] + }, + { + "name": "Get Responses By Response Id", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "", + "", + "pm.test(\"No errors in Pre-request Script\", function() {", + " pm.expect(pm.environment.get(\"preRequestError\")).to.be.undefined;", + "});", + "", + "", + "tests[\"Response code is 200 OK\"] = responseCode.code === 200;", + "", + "" + ], + "type": "text/javascript" + } + }, + { + "listen": "prerequest", + "script": { + "exec": [ + "if (!pm.environment.get(\"domain\")) {", + " console.error(\"Error: Domain is missing!\");", + "", + " // Set an error flag", + " pm.environment.set(\"preRequestError\", \"Domain is missing!\");", + "", + " // Change request URL to prevent it from sending", + " pm.request.url = \"http://invalid-url-to-prevent-sending.com\";", + "}" + ], + "type": "text/javascript" + } + } + ], + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}responses/bymaintenancecenter/1", + "host": [ + "{{domain}}responses" + ], + "path": [ + "bymaintenancecenter", + "1" + ] + } + }, + "response": [] + } + ] + } + ] + }, + { + "name": "Attachments", + "item": [] + }, + { + "name": "UserAccess", + "item": [] + } + ] +} \ No newline at end of file