diff --git a/survey-beta/Controllers/AnalyticsController.cs b/survey-beta/Controllers/AnalyticsController.cs index 1ac4221..012bd18 100644 --- a/survey-beta/Controllers/AnalyticsController.cs +++ b/survey-beta/Controllers/AnalyticsController.cs @@ -1,6 +1,8 @@ -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc; +using survey_beta.Models; +using System; +using System.Threading.Tasks; +using survey_beta.DTOs.Update; namespace survey_beta.Controllers { @@ -8,23 +10,37 @@ namespace survey_beta.Controllers [ApiController] public class AnalyticsController : ControllerBase { - private readonly AnalyticsServices _analyticsServices; + private readonly AnalyticsServices _analyticsService; - public AnalyticsController(AnalyticsServices analyticsServices) + public AnalyticsController(AnalyticsServices analyticsService) { - _analyticsServices = analyticsServices; + _analyticsService = analyticsService; } - [HttpGet("survey/{surveyId}")] - public IActionResult GetSurveyAnalytics(string surveyId) + + [HttpGet("{surveyId}/statistics")] + public async Task> GetSurveyStatistics(string surveyId) { - var analytics = _analyticsServices.GetAggregatedSurveyResponses(surveyId); - if (analytics == null) return NotFound("Survey analytics not found."); - return Ok(analytics); + if (string.IsNullOrWhiteSpace(surveyId)) + return BadRequest(new { error = "Survey ID is required." }); + + var statistics = await Task.Run(() => _analyticsService.GetAggregatedSurveyResponses(surveyId)); + + if (statistics == null) + return NotFound(new { error = "No data available for the given survey." }); + + return Ok(statistics); } - [HttpGet("export/{surveyId}")] - public async Task ExportSurveyData(string surveyId) + [HttpGet("{surveyId}/export")] + public async Task ExportSurveyStatistics(string surveyId) { - return await _analyticsServices.ExportResponsesToCsv(surveyId); + if (string.IsNullOrWhiteSpace(surveyId)) + return BadRequest(new { error = "Survey ID is required." }); + var fileResult = await _analyticsService.ExportResponsesToCsv(surveyId); + + if (fileResult == null) + return NotFound(new { error = "No data available to export." }); + + return fileResult; } } -} \ No newline at end of file +} diff --git a/survey-beta/Controllers/ResponsesController.cs b/survey-beta/Controllers/ResponsesController.cs index 0bdd621..b8482eb 100644 --- a/survey-beta/Controllers/ResponsesController.cs +++ b/survey-beta/Controllers/ResponsesController.cs @@ -23,7 +23,7 @@ namespace survey_beta.Controllers try { await _responsesService.AddResponseAsync(request); - return Ok(new { message = "Response added successfully." }); + return Ok(new { message = "Your response has been submitted successfully." }); } catch (Exception ex) { diff --git a/survey-beta/Controllers/UsersController.cs b/survey-beta/Controllers/UsersController.cs index 5958863..d3b1e2d 100644 --- a/survey-beta/Controllers/UsersController.cs +++ b/survey-beta/Controllers/UsersController.cs @@ -38,7 +38,7 @@ public class UserController : ControllerBase } catch (Exception ex) { - return Unauthorized(ex.Message); + return Unauthorized(new { error = "Invalid credentials. Please check your username and password." }); } } //[Authorize] @@ -81,7 +81,7 @@ public class UserController : ControllerBase { var users = await _usersServices.GetUserByIdAsync(id); if (users == null) - return NotFound(); + return NotFound(new { message = "The specified user does not exist." }); var result = await _usersServices.DeleteUsersAsync(id); return Ok(result); } diff --git a/survey-beta/Program.cs b/survey-beta/Program.cs index 1091699..9d892d4 100644 --- a/survey-beta/Program.cs +++ b/survey-beta/Program.cs @@ -87,5 +87,4 @@ app.UseHttpsRedirection(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); - app.Run(); diff --git a/survey-beta/Services/AnalyticsServices.cs b/survey-beta/Services/AnalyticsServices.cs index 37d48c8..f82663f 100644 --- a/survey-beta/Services/AnalyticsServices.cs +++ b/survey-beta/Services/AnalyticsServices.cs @@ -1,4 +1,5 @@ using AutoMapper; +using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using survey_beta.DataBaseContext; @@ -33,7 +34,6 @@ public class AnalyticsServices SaveAnalytics(surveyId, analyticsData); } - private SurveyStats CalculateAnalytics(List responses) { var answerFrequency = new Dictionary(); @@ -89,7 +89,6 @@ public class AnalyticsServices return CalculateAnalytics(responses); } - public async Task ExportResponsesToCsv(string surveyId) { var responses = await _context.Responses @@ -100,21 +99,43 @@ public class AnalyticsServices .ThenInclude(a => a.Choice) .ToListAsync(); + if (!responses.Any()) + { + return null; + } var csvLines = new List { - "ResponseId,Question,ChoiceText" + "Survey Analysis", + $"Total Responses: {responses.Count}", + "", + "ResponseId,Question,ChoiceText,ChoiceCount,ChoicePercentage" }; - + var choiceStats = responses + .SelectMany(r => r.Answers) + .Where(a => a.Choice != null) + .GroupBy(a => new { a.Question.Content, a.Choice.Letter }) + .Select(g => new + { + Question = g.Key.Content, + Choice = g.Key.Letter, + Count = g.Count(), + Percentage = (double)g.Count() / responses.Count * 100 + }) + .OrderByDescending(s => s.Count) + .ToList(); foreach (var response in responses) { foreach (var answer in response.Answers) { var questionText = answer.Question.Content; - csvLines.Add($"{response.Id},{questionText}"); + var choiceText = answer.Choice?.Letter ?? "N/A"; + + var choiceStat = choiceStats.FirstOrDefault(s => s.Question == questionText && s.Choice == choiceText); + + csvLines.Add($"{response.Id},{questionText},{choiceText},{choiceStat?.Count ?? 0},{choiceStat?.Percentage.ToString("0.00") ?? "0"}%"); } } - - var fileName = "Survey_Responses.csv"; + var fileName = $"Survey_{surveyId}_Analysis.csv"; var fileBytes = Encoding.UTF8.GetBytes(string.Join(Environment.NewLine, csvLines)); return new FileContentResult(fileBytes, "text/csv") diff --git a/survey-beta/Services/ResponsesServices.cs b/survey-beta/Services/ResponsesServices.cs index ec7c7da..597619f 100644 --- a/survey-beta/Services/ResponsesServices.cs +++ b/survey-beta/Services/ResponsesServices.cs @@ -29,15 +29,11 @@ public class ResponsesService CreatedAt = DateTime.UtcNow, }; - foreach (var answer in responseDto.Answers) + response.Answers = responseDto.Answers.Select(answer => new Answer { - var answerEntity = new Answer - { - QuestionId = answer.QuestionId, - ResponseId = response.Id - }; - response.Answers.Add(answerEntity); - } + QuestionId = answer.QuestionId, + ResponseId = response.Id + }).ToList(); await _context.Responses.AddAsync(response); await _context.SaveChangesAsync(); diff --git a/survey-beta/Services/SurveyServices.cs b/survey-beta/Services/SurveyServices.cs index d9e1fb5..e6f78b5 100644 --- a/survey-beta/Services/SurveyServices.cs +++ b/survey-beta/Services/SurveyServices.cs @@ -121,17 +121,17 @@ public class SurveyService await _context.SaveChangesAsync(); return true; } - public async Task DeleteSurveyAsync(string id) + public async Task DeleteSurveyAsync(string id, CancellationToken cancellationToken) { - var survey = await _context.Surveys.AsNoTracking() + var survey = await _context.Surveys .Include(s => s.Questions) - .ThenInclude(q => q.Choices) - .FirstOrDefaultAsync(s => s.Id == id); + .ThenInclude(q => q.Choices) + .FirstOrDefaultAsync(s => s.Id == id, cancellationToken); if (survey == null) return false; _context.Surveys.Remove(survey); - await _context.SaveChangesAsync(); + await _context.SaveChangesAsync(cancellationToken); return true; } } diff --git a/survey-beta/Services/UsersServices.cs b/survey-beta/Services/UsersServices.cs index 895ffaa..93dc79d 100644 --- a/survey-beta/Services/UsersServices.cs +++ b/survey-beta/Services/UsersServices.cs @@ -36,9 +36,11 @@ public class UsersServices var result = await _userManager.CreateAsync(user, createUserDto.Password); if (!result.Succeeded) { - throw new Exception("Failed to create user: " + string.Join(", ", result.Errors.Select(e => e.Description))); + if (!result.Succeeded) + { + throw new Exception("Failed to create user. Please check your inputs and try again."); + } } - var userDto = _mapper.Map(user); userDto.Token = GenerateJwtToken(user); @@ -85,13 +87,17 @@ public class UsersServices } private string GenerateJwtToken(User user) { - var claims = new[] - { - new Claim(JwtRegisteredClaimNames.Sub, user.UserName), - new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), - new Claim(ClaimTypes.Email, user.Email), - new Claim(ClaimTypes.Name, user.Fullname) - }; + var userRoles = _userManager.GetRolesAsync(user).Result; + + var claims = new List + { + new Claim(JwtRegisteredClaimNames.Sub, user.UserName), + new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), + new Claim(ClaimTypes.Email, user.Email), + new Claim(ClaimTypes.Name, user.Fullname) + }; + + claims.AddRange(userRoles.Select(role => new Claim(ClaimTypes.Role, role))); var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Key"])); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); @@ -100,7 +106,7 @@ public class UsersServices issuer: _configuration["Jwt:Issuer"], audience: _configuration["Jwt:Audience"], claims: claims, - expires: DateTime.Now.AddMinutes(30), + expires: DateTime.UtcNow.AddMinutes(30), signingCredentials: creds); return new JwtSecurityTokenHandler().WriteToken(token); diff --git a/survey-beta/bin/Debug/net8.0/CsvHelper.dll b/survey-beta/bin/Debug/net8.0/CsvHelper.dll new file mode 100644 index 0000000..7a4a0fa Binary files /dev/null and b/survey-beta/bin/Debug/net8.0/CsvHelper.dll differ diff --git a/survey-beta/bin/Debug/net8.0/survey-beta.deps.json b/survey-beta/bin/Debug/net8.0/survey-beta.deps.json index c3480f8..8e333bf 100644 --- a/survey-beta/bin/Debug/net8.0/survey-beta.deps.json +++ b/survey-beta/bin/Debug/net8.0/survey-beta.deps.json @@ -9,6 +9,7 @@ "survey-beta/1.0.0": { "dependencies": { "AutoMapper.Extensions.Microsoft.DependencyInjection": "12.0.0", + "CsvHelper": "33.0.1", "EntityFramework": "6.5.1", "Microsoft.AspNet.Identity.EntityFramework": "2.2.4", "Microsoft.AspNetCore.Authentication.JwtBearer": "8.0.0", @@ -48,6 +49,14 @@ } } }, + "CsvHelper/33.0.1": { + "runtime": { + "lib/net8.0/CsvHelper.dll": { + "assemblyVersion": "33.0.0.0", + "fileVersion": "33.0.1.24" + } + } + }, "EntityFramework/6.5.1": { "dependencies": { "Microsoft.CSharp": "4.7.0", @@ -1125,6 +1134,13 @@ "path": "automapper.extensions.microsoft.dependencyinjection/12.0.0", "hashPath": "automapper.extensions.microsoft.dependencyinjection.12.0.0.nupkg.sha512" }, + "CsvHelper/33.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-fev4lynklAU2A9GVMLtwarkwaanjSYB4wUqO2nOJX5hnzObORzUqVLe+bDYCUyIIRQM4o5Bsq3CcyJR89iMmEQ==", + "path": "csvhelper/33.0.1", + "hashPath": "csvhelper.33.0.1.nupkg.sha512" + }, "EntityFramework/6.5.1": { "type": "package", "serviceable": true, diff --git a/survey-beta/bin/Debug/net8.0/survey-beta.dll b/survey-beta/bin/Debug/net8.0/survey-beta.dll index 8227454..d328062 100644 Binary files a/survey-beta/bin/Debug/net8.0/survey-beta.dll and b/survey-beta/bin/Debug/net8.0/survey-beta.dll differ diff --git a/survey-beta/bin/Debug/net8.0/survey-beta.exe b/survey-beta/bin/Debug/net8.0/survey-beta.exe index 8a35331..afff366 100644 Binary files a/survey-beta/bin/Debug/net8.0/survey-beta.exe and b/survey-beta/bin/Debug/net8.0/survey-beta.exe differ diff --git a/survey-beta/bin/Debug/net8.0/survey-beta.pdb b/survey-beta/bin/Debug/net8.0/survey-beta.pdb index 5a4e1a9..57508c7 100644 Binary files a/survey-beta/bin/Debug/net8.0/survey-beta.pdb and b/survey-beta/bin/Debug/net8.0/survey-beta.pdb differ diff --git a/survey-beta/obj/Debug/net8.0/ApiEndpoints.json b/survey-beta/obj/Debug/net8.0/ApiEndpoints.json index 724d7d8..46ec7ec 100644 --- a/survey-beta/obj/Debug/net8.0/ApiEndpoints.json +++ b/survey-beta/obj/Debug/net8.0/ApiEndpoints.json @@ -1,8 +1,8 @@ [ { "ContainingType": "survey_beta.Controllers.AnalyticsController", - "Method": "ExportSurveyData", - "RelativePath": "api/Analytics/export/{surveyId}", + "Method": "ExportSurveyStatistics", + "RelativePath": "api/Analytics/{surveyId}/export", "HttpMethod": "GET", "IsController": true, "Order": 0, @@ -17,8 +17,8 @@ }, { "ContainingType": "survey_beta.Controllers.AnalyticsController", - "Method": "GetSurveyAnalytics", - "RelativePath": "api/Analytics/survey/{surveyId}", + "Method": "GetSurveyStatistics", + "RelativePath": "api/Analytics/{surveyId}/statistics", "HttpMethod": "GET", "IsController": true, "Order": 0, @@ -29,7 +29,17 @@ "IsRequired": true } ], - "ReturnTypes": [] + "ReturnTypes": [ + { + "Type": "survey_beta.DTOs.Update.SurveyStats", + "MediaTypes": [ + "text/plain", + "application/json", + "text/json" + ], + "StatusCode": 200 + } + ] }, { "ContainingType": "survey_beta.Controllers.ResponseController", diff --git a/survey-beta/obj/Debug/net8.0/apphost.exe b/survey-beta/obj/Debug/net8.0/apphost.exe index 8a35331..afff366 100644 Binary files a/survey-beta/obj/Debug/net8.0/apphost.exe and b/survey-beta/obj/Debug/net8.0/apphost.exe differ diff --git a/survey-beta/obj/Debug/net8.0/ref/survey-beta.dll b/survey-beta/obj/Debug/net8.0/ref/survey-beta.dll index 9c4d34e..90df236 100644 Binary files a/survey-beta/obj/Debug/net8.0/ref/survey-beta.dll and b/survey-beta/obj/Debug/net8.0/ref/survey-beta.dll differ diff --git a/survey-beta/obj/Debug/net8.0/refint/survey-beta.dll b/survey-beta/obj/Debug/net8.0/refint/survey-beta.dll index 9c4d34e..90df236 100644 Binary files a/survey-beta/obj/Debug/net8.0/refint/survey-beta.dll and b/survey-beta/obj/Debug/net8.0/refint/survey-beta.dll differ diff --git a/survey-beta/obj/Debug/net8.0/survey-beta.AssemblyInfo.cs b/survey-beta/obj/Debug/net8.0/survey-beta.AssemblyInfo.cs index ed1b0a8..56c6ff2 100644 --- a/survey-beta/obj/Debug/net8.0/survey-beta.AssemblyInfo.cs +++ b/survey-beta/obj/Debug/net8.0/survey-beta.AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("survey-beta")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+b9036d8b7a60afe583ac07dee1c8d53204b07278")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+5c735417f244b7740bc440f2ef03d57b0374188b")] [assembly: System.Reflection.AssemblyProductAttribute("survey-beta")] [assembly: System.Reflection.AssemblyTitleAttribute("survey-beta")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/survey-beta/obj/Debug/net8.0/survey-beta.AssemblyInfoInputs.cache b/survey-beta/obj/Debug/net8.0/survey-beta.AssemblyInfoInputs.cache index 092f7cc..b59ee1a 100644 --- a/survey-beta/obj/Debug/net8.0/survey-beta.AssemblyInfoInputs.cache +++ b/survey-beta/obj/Debug/net8.0/survey-beta.AssemblyInfoInputs.cache @@ -1 +1 @@ -881624211deead8316978ca8e0f7ecf013b98335c33420e117fca69e5d45c51f +7225f480dc7507f33e7c1dff9d1d2efef5e1b397dfeeaeb8ca8ea4374e21a387 diff --git a/survey-beta/obj/Debug/net8.0/survey-beta.assets.cache b/survey-beta/obj/Debug/net8.0/survey-beta.assets.cache index e0a81a7..8cd1cf1 100644 Binary files a/survey-beta/obj/Debug/net8.0/survey-beta.assets.cache and b/survey-beta/obj/Debug/net8.0/survey-beta.assets.cache differ diff --git a/survey-beta/obj/Debug/net8.0/survey-beta.csproj.AssemblyReference.cache b/survey-beta/obj/Debug/net8.0/survey-beta.csproj.AssemblyReference.cache index d5f6cb9..26a7e99 100644 Binary files a/survey-beta/obj/Debug/net8.0/survey-beta.csproj.AssemblyReference.cache and b/survey-beta/obj/Debug/net8.0/survey-beta.csproj.AssemblyReference.cache differ diff --git a/survey-beta/obj/Debug/net8.0/survey-beta.csproj.CoreCompileInputs.cache b/survey-beta/obj/Debug/net8.0/survey-beta.csproj.CoreCompileInputs.cache index e85b7f6..9d0c280 100644 --- a/survey-beta/obj/Debug/net8.0/survey-beta.csproj.CoreCompileInputs.cache +++ b/survey-beta/obj/Debug/net8.0/survey-beta.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -bf4cfa75951d95a308acd245137187f2446062728bd32c1ef69e8cdd119ba91a +3879eb678b07b384c518e4050cdef22466b66afa8fee5cacbe2c485af19a45f3 diff --git a/survey-beta/obj/Debug/net8.0/survey-beta.csproj.FileListAbsolute.txt b/survey-beta/obj/Debug/net8.0/survey-beta.csproj.FileListAbsolute.txt index f1ad8cb..beac348 100644 --- a/survey-beta/obj/Debug/net8.0/survey-beta.csproj.FileListAbsolute.txt +++ b/survey-beta/obj/Debug/net8.0/survey-beta.csproj.FileListAbsolute.txt @@ -334,3 +334,4 @@ C:\Users\alioa\Source\Repos\survey-beta2\survey-beta\obj\Debug\net8.0\refint\sur C:\Users\alioa\Source\Repos\survey-beta2\survey-beta\obj\Debug\net8.0\survey-beta.pdb C:\Users\alioa\Source\Repos\survey-beta2\survey-beta\obj\Debug\net8.0\survey-beta.genruntimeconfig.cache C:\Users\alioa\Source\Repos\survey-beta2\survey-beta\obj\Debug\net8.0\ref\survey-beta.dll +C:\Users\alioa\Source\Repos\survey-beta2\survey-beta\bin\Debug\net8.0\CsvHelper.dll diff --git a/survey-beta/obj/Debug/net8.0/survey-beta.dll b/survey-beta/obj/Debug/net8.0/survey-beta.dll index 8227454..d328062 100644 Binary files a/survey-beta/obj/Debug/net8.0/survey-beta.dll and b/survey-beta/obj/Debug/net8.0/survey-beta.dll differ diff --git a/survey-beta/obj/Debug/net8.0/survey-beta.pdb b/survey-beta/obj/Debug/net8.0/survey-beta.pdb index 5a4e1a9..57508c7 100644 Binary files a/survey-beta/obj/Debug/net8.0/survey-beta.pdb and b/survey-beta/obj/Debug/net8.0/survey-beta.pdb differ diff --git a/survey-beta/obj/project.assets.json b/survey-beta/obj/project.assets.json index 59ddc6f..05502e9 100644 --- a/survey-beta/obj/project.assets.json +++ b/survey-beta/obj/project.assets.json @@ -31,6 +31,19 @@ "lib/netstandard2.1/AutoMapper.Extensions.Microsoft.DependencyInjection.dll": {} } }, + "CsvHelper/33.0.1": { + "type": "package", + "compile": { + "lib/net8.0/CsvHelper.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/CsvHelper.dll": { + "related": ".xml" + } + } + }, "EntityFramework/6.5.1": { "type": "package", "dependencies": { @@ -1797,6 +1810,34 @@ "lib/netstandard2.1/AutoMapper.Extensions.Microsoft.DependencyInjection.dll" ] }, + "CsvHelper/33.0.1": { + "sha512": "fev4lynklAU2A9GVMLtwarkwaanjSYB4wUqO2nOJX5hnzObORzUqVLe+bDYCUyIIRQM4o5Bsq3CcyJR89iMmEQ==", + "type": "package", + "path": "csvhelper/33.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "csvhelper.33.0.1.nupkg.sha512", + "csvhelper.nuspec", + "lib/net462/CsvHelper.dll", + "lib/net462/CsvHelper.xml", + "lib/net47/CsvHelper.dll", + "lib/net47/CsvHelper.xml", + "lib/net48/CsvHelper.dll", + "lib/net48/CsvHelper.xml", + "lib/net6.0/CsvHelper.dll", + "lib/net6.0/CsvHelper.xml", + "lib/net7.0/CsvHelper.dll", + "lib/net7.0/CsvHelper.xml", + "lib/net8.0/CsvHelper.dll", + "lib/net8.0/CsvHelper.xml", + "lib/netstandard2.0/CsvHelper.dll", + "lib/netstandard2.0/CsvHelper.xml", + "lib/netstandard2.1/CsvHelper.dll", + "lib/netstandard2.1/CsvHelper.xml" + ] + }, "EntityFramework/6.5.1": { "sha512": "sQRP2lWg1i3aAGWqdliAM8zrGx7LHMUk+9/MoxUjwfTZYGMXvZ2JYZTlyTm1PqDxvn3c9E3U76TWDON7Y5+CVA==", "type": "package", @@ -5159,6 +5200,7 @@ "projectFileDependencyGroups": { "net8.0": [ "AutoMapper.Extensions.Microsoft.DependencyInjection >= 12.0.0", + "CsvHelper >= 33.0.1", "EntityFramework >= 6.5.1", "Microsoft.AspNet.Identity.EntityFramework >= 2.2.4", "Microsoft.AspNetCore.Authentication.JwtBearer >= 8.0.0", @@ -5221,6 +5263,10 @@ "target": "Package", "version": "[12.0.0, )" }, + "CsvHelper": { + "target": "Package", + "version": "[33.0.1, )" + }, "EntityFramework": { "target": "Package", "version": "[6.5.1, )" diff --git a/survey-beta/obj/project.nuget.cache b/survey-beta/obj/project.nuget.cache index fc383aa..b536a54 100644 --- a/survey-beta/obj/project.nuget.cache +++ b/survey-beta/obj/project.nuget.cache @@ -1,11 +1,12 @@ { "version": 2, - "dgSpecHash": "Q9FP2JQ+UXs=", + "dgSpecHash": "H2wNZ0h/QSI=", "success": true, "projectFilePath": "C:\\Users\\alioa\\Source\\Repos\\survey-beta2\\survey-beta\\survey-beta.csproj", "expectedPackageFiles": [ "C:\\Users\\alioa\\.nuget\\packages\\automapper\\12.0.0\\automapper.12.0.0.nupkg.sha512", "C:\\Users\\alioa\\.nuget\\packages\\automapper.extensions.microsoft.dependencyinjection\\12.0.0\\automapper.extensions.microsoft.dependencyinjection.12.0.0.nupkg.sha512", + "C:\\Users\\alioa\\.nuget\\packages\\csvhelper\\33.0.1\\csvhelper.33.0.1.nupkg.sha512", "C:\\Users\\alioa\\.nuget\\packages\\entityframework\\6.5.1\\entityframework.6.5.1.nupkg.sha512", "C:\\Users\\alioa\\.nuget\\packages\\humanizer.core\\2.14.1\\humanizer.core.2.14.1.nupkg.sha512", "C:\\Users\\alioa\\.nuget\\packages\\microsoft.aspnet.identity.core\\2.2.4\\microsoft.aspnet.identity.core.2.2.4.nupkg.sha512", diff --git a/survey-beta/obj/survey-beta.csproj.nuget.dgspec.json b/survey-beta/obj/survey-beta.csproj.nuget.dgspec.json index b64de26..66af4bf 100644 --- a/survey-beta/obj/survey-beta.csproj.nuget.dgspec.json +++ b/survey-beta/obj/survey-beta.csproj.nuget.dgspec.json @@ -50,6 +50,10 @@ "target": "Package", "version": "[12.0.0, )" }, + "CsvHelper": { + "target": "Package", + "version": "[33.0.1, )" + }, "EntityFramework": { "target": "Package", "version": "[6.5.1, )" diff --git a/survey-beta/survey-beta.csproj b/survey-beta/survey-beta.csproj index 9156955..fc9b17c 100644 --- a/survey-beta/survey-beta.csproj +++ b/survey-beta/survey-beta.csproj @@ -9,6 +9,7 @@ + @@ -25,9 +26,4 @@ - - - - -