From 8d386af40a758b75175405692443c461d5dcda3b Mon Sep 17 00:00:00 2001 From: Reginald CHERENFANT JASMIN Date: Thu, 14 Sep 2023 11:57:23 -0500 Subject: [PATCH 1/5] Changing Microservice name from Survey to Surveys --- ...ey.Test.csproj => DamageAssesment.Api.Surveys.Test.csproj} | 2 +- ...t.Api.Survey.csproj => DamageAssesment.Api.Surveys.csproj} | 0 DamageAssesmentApi/DamageAssesment.sln | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) rename DamageAssesmentApi/DamageAssesment.Api.Surveys.Test/{DamageAssesment.Api.Survey.Test.csproj => DamageAssesment.Api.Surveys.Test.csproj} (96%) rename DamageAssesmentApi/DamageAssesment.Api.Surveys/{DamageAssesment.Api.Survey.csproj => DamageAssesment.Api.Surveys.csproj} (100%) 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/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.sln b/DamageAssesmentApi/DamageAssesment.sln index 808ff69..0cb2d7c 100644 --- a/DamageAssesmentApi/DamageAssesment.sln +++ b/DamageAssesmentApi/DamageAssesment.sln @@ -21,7 +21,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.SurveyR 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}" EndProject @@ -29,7 +29,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DamageAssesment.Api.Attachm 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 From a0033ca045d3f676ecfba336a31fe83a0a1cdefe Mon Sep 17 00:00:00 2001 From: Reginald Cherenfant Jasmin Date: Thu, 21 Sep 2023 00:58:29 -0400 Subject: [PATCH 2/5] Add EmployeeId as filter in the endpoints, add endpoints to get all active and historical surveys for a particular employee --- .../Controllers/SurveyResponsesController.cs | 83 +++-- ...j => DamageAssesment.Api.Responses.csproj} | 0 .../Interfaces/ISurveyServiceProvider.cs | 2 +- .../Interfaces/ISurveysResponse.cs | 15 +- .../Providers/SurveyResponsesProvider.cs | 325 ++++++++++++++---- .../Services/SurveyServiceProvider.cs | 8 +- .../Controllers/SurveysController.cs | 4 - ...DamageAssesment.Api.Responses.Test.csproj} | 2 +- .../SurveyResponsesServiceTest.cs | 47 ++- DamageAssesmentApi/DamageAssesment.sln | 4 +- 10 files changed, 347 insertions(+), 143 deletions(-) rename DamageAssesmentApi/DamageAssesment.Api.SurveyResponses/{DamageAssesment.Api.SurveyResponses.csproj => DamageAssesment.Api.Responses.csproj} (100%) rename DamageAssesmentApi/DamageAssesment.SurveyResponses.Test/{DamageAssesment.Api.SurveyResponses.Test.csproj => DamageAssesment.Api.Responses.Test.csproj} (95%) 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 1f82d8c..03eada1 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() @@ -48,12 +48,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()) { @@ -102,10 +110,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 { @@ -114,7 +170,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."); @@ -136,7 +192,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 { @@ -145,7 +201,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."); @@ -167,7 +223,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 { @@ -176,7 +232,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."); @@ -198,7 +254,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 { @@ -210,7 +266,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."); @@ -233,18 +289,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) @@ -355,7 +411,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers answer => answer.SurveyResponseId, surveyResponse => surveyResponse.Id, (answer, surveyResponse) => new - + { answer.Id, answer.QuestionId, @@ -379,18 +435,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 @@ -398,13 +454,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(); @@ -412,9 +468,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 }; @@ -470,13 +526,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; @@ -484,32 +551,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) { @@ -520,13 +625,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(); @@ -542,7 +665,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 @@ -556,6 +679,8 @@ namespace DamageAssesment.Api.SurveyResponses.Providers } }; return result; + + } catch (Exception ex) { @@ -566,11 +691,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); @@ -601,7 +734,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers select new { g.Key.MaintenanceCenter, - Answers = new + Answers = new { g.Key.AnswerText, Counter = g.Count() @@ -626,13 +759,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; @@ -649,7 +800,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 @@ -664,6 +815,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers } }; return result; + } catch (Exception ex) { @@ -674,13 +826,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 @@ -694,7 +867,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 @@ -757,7 +930,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/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.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 0cb2d7c..6c53f2d 100644 --- a/DamageAssesmentApi/DamageAssesment.sln +++ b/DamageAssesmentApi/DamageAssesment.sln @@ -17,13 +17,13 @@ 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.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 From 8833fca7348882bc17c86eb74b538e3f55b72d89 Mon Sep 17 00:00:00 2001 From: Jason Walker Date: Thu, 21 Sep 2023 17:52:13 -0500 Subject: [PATCH 3/5] Adding in tests for the endpoints after creation Having tests on our code is essential, but it's equally crucial to ensure that all endpoints function correctly with each deployment. Once these validations are in place, we can integrate them into Jenkins during the build process to ensure that our releases are free of bugs. --- ...sessment API Tests.postman_collection.json | 739 ++++++++++++++++++ 1 file changed, 739 insertions(+) create mode 100644 Postman-backend-dev-tests/Damage Assessment API Tests.postman_collection.json 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..b7dad9c --- /dev/null +++ b/Postman-backend-dev-tests/Damage Assessment API Tests.postman_collection.json @@ -0,0 +1,739 @@ +{ + "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 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": "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": "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": "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 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) {", + " nextId = _.last(jsonData).id + 1;", + " 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": "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": "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/{{nextEmployeeId}}", + "host": [ + "{{domain}}employees" + ], + "path": [ + "{{nextEmployeeId}}" + ] + } + }, + "response": [] + }, + { + "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": "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/{{nextEmployeeId}}", + "host": [ + "{{domain}}employees" + ], + "path": [ + "{{nextEmployeeId}}" + ] + } + }, + "response": [] + }, + { + "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": [] + } + ] + } + ] +} \ No newline at end of file From 9dcd9d243e5b1af01f358e1d804a70bcde427804 Mon Sep 17 00:00:00 2001 From: Jason Walker Date: Thu, 21 Sep 2023 23:13:21 -0500 Subject: [PATCH 4/5] Created Groupings and added a few more Tests should be grouped so that they can create, update, then eventually delete the data. All the Gets are grouped together, but then later on you may need them to preform the CRUD operations. --- ...sessment API Tests.postman_collection.json | 2469 +++++++++++++---- 1 file changed, 1921 insertions(+), 548 deletions(-) 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 index b7dad9c..9f8e8a3 100644 --- a/Postman-backend-dev-tests/Damage Assessment API Tests.postman_collection.json +++ b/Postman-backend-dev-tests/Damage Assessment API Tests.postman_collection.json @@ -60,81 +60,178 @@ "name": "Answers", "item": [ { - "name": "Get Answers", - "event": [ + "name": "Get Requests", + "item": [ { - "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" - } + "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": [] }, { - "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" - } + "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": [] } - ], - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{domain}}answers", - "host": [ - "{{domain}}answers" - ] - } - }, - "response": [] + ] }, { "name": "Put Answers", @@ -203,98 +300,6 @@ }, "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": "Delete Answers by Id", "event": [ @@ -331,409 +336,1777 @@ "name": "Employees", "item": [ { - "name": "Get Employees", - "event": [ + "name": "Get Requests", + "item": [ { - "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) {", - " nextId = _.last(jsonData).id + 1;", - " 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": "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" + "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" + } } - } - }, - "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/{{nextEmployeeId}}", - "host": [ - "{{domain}}employees" ], - "path": [ - "{{nextEmployeeId}}" - ] - } - }, - "response": [] - }, - { - "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" + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{domain}}employees", + "host": [ + "{{domain}}employees" + ] } - } + }, + "response": [] }, - "url": { - "raw": "{{domain}}employees", - "host": [ - "{{domain}}employees" - ] + { + "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": [] } - }, - "response": [] + ] }, { - "name": "Get Employees By Id", - "event": [ + "name": "Add Employee", + "item": [ { - "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" + "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" + } + } ], - "path": [ - "{{nextEmployeeId}}" - ] + "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": [] } - }, - "response": [] + ] }, { - "name": "Delete Employees", - "event": [ + "name": "Update Employee", + "item": [ { - "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" + "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" + } + } ], - "path": [ - "{{nextEmployeeId}}" - ] + "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": [] } - }, - "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 From f2c1d477498268565a7e4cb75f21e35cd1869a88 Mon Sep 17 00:00:00 2001 From: uppuv Date: Fri, 22 Sep 2023 11:52:17 -0400 Subject: [PATCH 5/5] doculink changes --- ...sesment - Backup.Api.DocuLinks.Test.csproj | 27 + .../DamageAssesment.Api.DocuLinks.Test.csproj | 2 +- .../DoculinkServiceTest.cs} | 161 +++--- .../LinkTypeMockData.cs | 71 +++ .../MockData.cs | 137 +++++ .../Controllers/DoculinkController.cs} | 110 ++-- .../DamageAssesment.Api.DocuLinks.csproj | 4 - .../Db/Doculink.cs} | 14 +- .../Db/DoculinkAttachments.cs | 18 + .../Db/DoculinkDbContext.cs | 38 ++ .../Db/DoculinkTranslation.cs} | 4 +- .../Db/LinkType.cs | 5 +- .../Db/LinksTranslation.cs | 15 + .../Interfaces/IAzureBlobService.cs | 2 +- .../Interfaces/IDoculinkProvider.cs | 18 + .../Interfaces/ILinkTypeProvider.cs | 11 + .../Interfaces/IUploadService.cs | 12 + ...28165655_InitialDocumentCreate.Designer.cs | 10 +- .../20230828165655_InitialDocumentCreate.cs | 2 +- ...0830200432_DocumentTranslation.Designer.cs | 12 +- .../20230830200432_DocumentTranslation.cs | 2 +- .../DocumentDbContextModelSnapshot.cs | 12 +- .../Models/Doculink.cs | 25 + .../Models/DoculinkAttachments.cs | 13 + .../Models/DoculinkTranslation.cs} | 4 +- .../Models/LinkType.cs | 20 + .../Models/LinksTranslation.cs | 11 + .../Models/ReqDoculink.cs | 22 + .../Profiles/DoculinkProfile.cs | 22 + .../Program.cs | 10 +- .../Properties/launchSettings.json | 0 .../Providers/AzureBlobService.cs | 4 +- .../Providers/DoculinkProvider.cs | 531 ++++++++++++++++++ .../Providers/UploadService.cs | 142 +++++ .../appsettings.Development.json | 0 .../appsettings.json | 0 .../LinkTypeMockData.cs | 61 -- .../MockData.cs | 122 ---- .../DASA_Documents/Active/Document_1.txt | 1 - .../Db/DocumentDbContext.cs | 30 - .../Interfaces/IDocumentTypeProvider.cs | 11 - .../Interfaces/IDocumentsProvider.cs | 18 - .../Interfaces/IUploadService.cs | 12 - .../Models/Document.cs | 28 - .../Models/DocumentInfo.cs | 19 - .../Models/LinkType.cs | 12 - .../Profiles/DocumentProfile.cs | 19 - .../Providers/DocumentsProvider.cs | 434 -------------- .../Providers/UploadService.cs | 123 ---- DamageAssesmentApi/DamageAssesment.sln | 20 +- 50 files changed, 1321 insertions(+), 1080 deletions(-) create mode 100644 DamageAssesmentApi/DamageAssesment.Api.DocuLinks.Test/DamageAssesment - Backup.Api.DocuLinks.Test.csproj rename DamageAssesmentApi/{DamageAssesment.Api.Documents.Test => DamageAssesment.Api.DocuLinks.Test}/DamageAssesment.Api.DocuLinks.Test.csproj (93%) rename DamageAssesmentApi/{DamageAssesment.Api.Documents.Test/DocumentsServiceTest.cs => DamageAssesment.Api.DocuLinks.Test/DoculinkServiceTest.cs} (67%) create mode 100644 DamageAssesmentApi/DamageAssesment.Api.DocuLinks.Test/LinkTypeMockData.cs create mode 100644 DamageAssesmentApi/DamageAssesment.Api.DocuLinks.Test/MockData.cs rename DamageAssesmentApi/{DamageAssesment.Api.Documents/Controllers/DocumentsController.cs => DamageAssesment.Api.DocuLinks/Controllers/DoculinkController.cs} (67%) rename DamageAssesmentApi/{DamageAssesment.Api.Documents => DamageAssesment.Api.DocuLinks}/DamageAssesment.Api.DocuLinks.csproj (95%) rename DamageAssesmentApi/{DamageAssesment.Api.Documents/Db/Document.cs => DamageAssesment.Api.DocuLinks/Db/Doculink.cs} (60%) create mode 100644 DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/DoculinkAttachments.cs create mode 100644 DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/DoculinkDbContext.cs rename DamageAssesmentApi/{DamageAssesment.Api.Documents/Db/DocumentsTranslation.cs => DamageAssesment.Api.DocuLinks/Db/DoculinkTranslation.cs} (82%) rename DamageAssesmentApi/{DamageAssesment.Api.Documents => DamageAssesment.Api.DocuLinks}/Db/LinkType.cs (57%) create mode 100644 DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/LinksTranslation.cs rename DamageAssesmentApi/{DamageAssesment.Api.Documents => DamageAssesment.Api.DocuLinks}/Interfaces/IAzureBlobService.cs (81%) create mode 100644 DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Interfaces/IDoculinkProvider.cs create mode 100644 DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Interfaces/ILinkTypeProvider.cs create mode 100644 DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Interfaces/IUploadService.cs rename DamageAssesmentApi/{DamageAssesment.Api.Documents => DamageAssesment.Api.DocuLinks}/Migrations/20230828165655_InitialDocumentCreate.Designer.cs (91%) rename DamageAssesmentApi/{DamageAssesment.Api.Documents => DamageAssesment.Api.DocuLinks}/Migrations/20230828165655_InitialDocumentCreate.cs (97%) rename DamageAssesmentApi/{DamageAssesment.Api.Documents => DamageAssesment.Api.DocuLinks}/Migrations/20230830200432_DocumentTranslation.Designer.cs (91%) rename DamageAssesmentApi/{DamageAssesment.Api.Documents => DamageAssesment.Api.DocuLinks}/Migrations/20230830200432_DocumentTranslation.cs (97%) rename DamageAssesmentApi/{DamageAssesment.Api.Documents => DamageAssesment.Api.DocuLinks}/Migrations/DocumentDbContextModelSnapshot.cs (91%) create mode 100644 DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/Doculink.cs create mode 100644 DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/DoculinkAttachments.cs rename DamageAssesmentApi/{DamageAssesment.Api.Documents/Models/DocumentsTranslation.cs => DamageAssesment.Api.DocuLinks/Models/DoculinkTranslation.cs} (74%) create mode 100644 DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/LinkType.cs create mode 100644 DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/LinksTranslation.cs create mode 100644 DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Models/ReqDoculink.cs create mode 100644 DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Profiles/DoculinkProfile.cs rename DamageAssesmentApi/{DamageAssesment.Api.Documents => DamageAssesment.Api.DocuLinks}/Program.cs (80%) rename DamageAssesmentApi/{DamageAssesment.Api.Documents => DamageAssesment.Api.DocuLinks}/Properties/launchSettings.json (100%) rename DamageAssesmentApi/{DamageAssesment.Api.Documents => DamageAssesment.Api.DocuLinks}/Providers/AzureBlobService.cs (93%) create mode 100644 DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Providers/DoculinkProvider.cs create mode 100644 DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Providers/UploadService.cs rename DamageAssesmentApi/{DamageAssesment.Api.Documents => DamageAssesment.Api.DocuLinks}/appsettings.Development.json (100%) rename DamageAssesmentApi/{DamageAssesment.Api.Documents => DamageAssesment.Api.DocuLinks}/appsettings.json (100%) delete mode 100644 DamageAssesmentApi/DamageAssesment.Api.Documents.Test/LinkTypeMockData.cs delete mode 100644 DamageAssesmentApi/DamageAssesment.Api.Documents.Test/MockData.cs delete mode 100644 DamageAssesmentApi/DamageAssesment.Api.Documents/DASA_Documents/Active/Document_1.txt delete mode 100644 DamageAssesmentApi/DamageAssesment.Api.Documents/Db/DocumentDbContext.cs delete mode 100644 DamageAssesmentApi/DamageAssesment.Api.Documents/Interfaces/IDocumentTypeProvider.cs delete mode 100644 DamageAssesmentApi/DamageAssesment.Api.Documents/Interfaces/IDocumentsProvider.cs delete mode 100644 DamageAssesmentApi/DamageAssesment.Api.Documents/Interfaces/IUploadService.cs delete mode 100644 DamageAssesmentApi/DamageAssesment.Api.Documents/Models/Document.cs delete mode 100644 DamageAssesmentApi/DamageAssesment.Api.Documents/Models/DocumentInfo.cs delete mode 100644 DamageAssesmentApi/DamageAssesment.Api.Documents/Models/LinkType.cs delete mode 100644 DamageAssesmentApi/DamageAssesment.Api.Documents/Profiles/DocumentProfile.cs delete mode 100644 DamageAssesmentApi/DamageAssesment.Api.Documents/Providers/DocumentsProvider.cs delete mode 100644 DamageAssesmentApi/DamageAssesment.Api.Documents/Providers/UploadService.cs 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.DocuLinks/Db/DoculinkDbContext.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/DoculinkDbContext.cs new file mode 100644 index 0000000..e3fdccc --- /dev/null +++ b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Db/DoculinkDbContext.cs @@ -0,0 +1,38 @@ +using Microsoft.AspNetCore.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using System.ComponentModel.DataAnnotations; + +namespace DamageAssesment.Api.DocuLinks.Db +{ + public class DoculinkDbContext : DbContext + { + public DoculinkDbContext(DbContextOptions options) : base(options) + { + } + public DbSet Documents { get; set; } + public DbSet LinkTypes { 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() + .Property(item => item.Id) + .ValueGeneratedOnAdd(); + modelBuilder.Entity() + .Property(item => item.Id) + .ValueGeneratedOnAdd(); + 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.Documents/Migrations/DocumentDbContextModelSnapshot.cs b/DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/DocumentDbContextModelSnapshot.cs similarity index 91% rename from DamageAssesmentApi/DamageAssesment.Api.Documents/Migrations/DocumentDbContextModelSnapshot.cs rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Migrations/DocumentDbContextModelSnapshot.cs index 24681f1..a692f80 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.Document", b => { b.Property("Id") .ValueGeneratedOnAdd() @@ -59,7 +59,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() @@ -87,7 +87,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.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 80% rename from DamageAssesmentApi/DamageAssesment.Api.Documents/Program.cs rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks/Program.cs index c9db54e..f25927c 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,11 +19,11 @@ 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.UseInMemoryDatabase("DocumentConnection"); }); 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 100% rename from DamageAssesmentApi/DamageAssesment.Api.Documents/appsettings.json rename to DamageAssesmentApi/DamageAssesment.Api.DocuLinks/appsettings.json 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/Db/DocumentDbContext.cs b/DamageAssesmentApi/DamageAssesment.Api.Documents/Db/DocumentDbContext.cs deleted file mode 100644 index 4df2f77..0000000 --- a/DamageAssesmentApi/DamageAssesment.Api.Documents/Db/DocumentDbContext.cs +++ /dev/null @@ -1,30 +0,0 @@ -using Microsoft.AspNetCore.Identity; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Configuration; -using System.ComponentModel.DataAnnotations; - -namespace DamageAssesment.Api.Documents.Db -{ - public class DocumentDbContext : DbContext - { - public DocumentDbContext(DbContextOptions options) : base(options) - { - } - public DbSet Documents { get; set; } - public DbSet LinkTypes { get; set; } - public DbSet DocumentsTranslations { get; set; } - protected override void OnModelCreating(ModelBuilder modelBuilder) - { - base.OnModelCreating(modelBuilder); - 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/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.sln b/DamageAssesmentApi/DamageAssesment.sln index 6c53f2d..b92b664 100644 --- a/DamageAssesmentApi/DamageAssesment.sln +++ b/DamageAssesmentApi/DamageAssesment.sln @@ -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