From 2e8c61f3e3a260ac8763b3c75f4fdaa64190e117 Mon Sep 17 00:00:00 2001 From: "m.bengashier" Date: Sun, 2 Feb 2025 13:26:44 +0200 Subject: [PATCH] PATCH --- .../Controllers/ResponsesController.cs | 3 +- survey-beta/Controllers/SurveyController.cs | 10 +- survey-beta/Controllers/UsersController.cs | 6 +- survey-beta/DTOs/Create/CreateResponseDto.cs | 2 +- survey-beta/DTOs/Default/AnswerDto.cs | 1 + survey-beta/DTOs/Default/QuestionDto.cs | 2 +- survey-beta/DTOs/Default/ResponseDto.cs | 2 +- survey-beta/DTOs/Default/SurveyDto.cs | 2 +- .../DTOs/Response/CreatorResponseDto.cs | 4 +- survey-beta/DTOs/Response/ResponseDto.cs | 1 + survey-beta/DTOs/Update/SurveyStats.cs | 6 +- survey-beta/Mappers/ResponseMapper.cs | 4 +- survey-beta/Mappers/UserInfoDto.cs | 6 - .../20250131221823_responses.Designer.cs | 510 +----------------- .../20250202101403_reomveIp.Designer.cs | 491 +++++++++++++++++ .../Migrations/20250202101403_reomveIp.cs | 29 + .../Migrations/AppDbContextModelSnapshot.cs | 4 - survey-beta/Models/Answer.cs | 14 +- survey-beta/Models/Response.cs | 6 +- survey-beta/Models/Survey.cs | 2 +- survey-beta/Properties/launchSettings.json | 2 +- survey-beta/Services/ResponsesServices.cs | 24 +- survey-beta/Services/SurveyServices.cs | 21 +- survey-beta/appsettings.json | 2 +- 24 files changed, 589 insertions(+), 565 deletions(-) delete mode 100644 survey-beta/Mappers/UserInfoDto.cs create mode 100644 survey-beta/Migrations/20250202101403_reomveIp.Designer.cs create mode 100644 survey-beta/Migrations/20250202101403_reomveIp.cs diff --git a/survey-beta/Controllers/ResponsesController.cs b/survey-beta/Controllers/ResponsesController.cs index cb5ad31..51cd30e 100644 --- a/survey-beta/Controllers/ResponsesController.cs +++ b/survey-beta/Controllers/ResponsesController.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using survey_beta.DTOs.Response; +using survey_beta.Models; namespace survey_beta.Controllers { @@ -16,7 +17,7 @@ namespace survey_beta.Controllers } [HttpPost("add")] - public IActionResult AddResponse([FromBody] CreatorResponseDto request) + public IActionResult AddResponse([FromBody] ResponseDto request) { try { diff --git a/survey-beta/Controllers/SurveyController.cs b/survey-beta/Controllers/SurveyController.cs index ed38803..6587a64 100644 --- a/survey-beta/Controllers/SurveyController.cs +++ b/survey-beta/Controllers/SurveyController.cs @@ -50,7 +50,7 @@ public class SurveyController : ControllerBase return Ok(result); } - [Authorize] + //[Authorize] [HttpPost] public async Task> CreateSurvey([FromBody] CreateSurveyDto request) { @@ -65,7 +65,7 @@ public class SurveyController : ControllerBase } } - [Authorize] + //[Authorize] [HttpPut] public async Task UpdateSurvey([FromBody] UpdateSurveyDto request) { @@ -74,7 +74,7 @@ public class SurveyController : ControllerBase return NoContent(); } - [Authorize] + //[Authorize] [HttpPatch("publish/{id}")] public async Task PublishSurvey(string id) { @@ -83,7 +83,7 @@ public class SurveyController : ControllerBase return NoContent(); } - [Authorize] + //[Authorize] [HttpPatch("unpublish/{id}")] public async Task UnpublishSurvey(string id) { @@ -92,7 +92,7 @@ public class SurveyController : ControllerBase return NoContent(); } - [Authorize] + //[Authorize] [HttpDelete("{id}")] public async Task DeleteSurvey(string id) { diff --git a/survey-beta/Controllers/UsersController.cs b/survey-beta/Controllers/UsersController.cs index 1b457bd..1005caf 100644 --- a/survey-beta/Controllers/UsersController.cs +++ b/survey-beta/Controllers/UsersController.cs @@ -41,7 +41,7 @@ public class UserController : ControllerBase return Unauthorized(ex.Message); } } - [Authorize] + //[Authorize] [HttpGet("{id}")] public async Task GetUserById(string id) { @@ -55,7 +55,7 @@ public class UserController : ControllerBase return NotFound(new { message = ex.Message }); } } - [Authorize] + //[Authorize] [HttpGet("by-username/{username}")] public async Task GetUserByUsername(string username) { @@ -69,7 +69,7 @@ public class UserController : ControllerBase return NotFound(new { message = ex.Message }); } } - [Authorize] + //[Authorize] [HttpGet("All-Users")] public async Task GetAllUsers() { diff --git a/survey-beta/DTOs/Create/CreateResponseDto.cs b/survey-beta/DTOs/Create/CreateResponseDto.cs index 1f91a7f..1e52617 100644 --- a/survey-beta/DTOs/Create/CreateResponseDto.cs +++ b/survey-beta/DTOs/Create/CreateResponseDto.cs @@ -4,7 +4,7 @@ { public string IpAddress { get; set; } public string SurveyId { get; set; } - public string Id { get; set; } + public string Id { get; set; } = Guid.NewGuid().ToString(); public string? Answer { get; set; } } } diff --git a/survey-beta/DTOs/Default/AnswerDto.cs b/survey-beta/DTOs/Default/AnswerDto.cs index df12bcc..09debf4 100644 --- a/survey-beta/DTOs/Default/AnswerDto.cs +++ b/survey-beta/DTOs/Default/AnswerDto.cs @@ -2,6 +2,7 @@ { public class AnswerDto { + public string Id { get; set; } = Guid.NewGuid().ToString(); public string Question { get; set; } public string AnswerText { get; set; } public string ResponseId { get; set; } diff --git a/survey-beta/DTOs/Default/QuestionDto.cs b/survey-beta/DTOs/Default/QuestionDto.cs index ac063f0..4b919ec 100644 --- a/survey-beta/DTOs/Default/QuestionDto.cs +++ b/survey-beta/DTOs/Default/QuestionDto.cs @@ -2,7 +2,7 @@ { public class QuestionDto { - public string Id { get; set; } + public string Id { get; set; } = Guid.NewGuid().ToString(); public string Content { get; set; } public string SurveyId { get; set; } public List Choices { get; set; } diff --git a/survey-beta/DTOs/Default/ResponseDto.cs b/survey-beta/DTOs/Default/ResponseDto.cs index 43226c1..dad8c85 100644 --- a/survey-beta/DTOs/Default/ResponseDto.cs +++ b/survey-beta/DTOs/Default/ResponseDto.cs @@ -2,7 +2,7 @@ { public class ResponseDto { - public string Id { get; set; } + public string Id { get; set; } = Guid.NewGuid().ToString(); public string IpAddress { get; set; } public string SurveyId { get; set; } public string Answer { get; set; } diff --git a/survey-beta/DTOs/Default/SurveyDto.cs b/survey-beta/DTOs/Default/SurveyDto.cs index 1324cb6..8a4a73b 100644 --- a/survey-beta/DTOs/Default/SurveyDto.cs +++ b/survey-beta/DTOs/Default/SurveyDto.cs @@ -2,7 +2,7 @@ { public class SurveyDto { - public string Id { get; set; } + public string Id { get; set; } = Guid.NewGuid().ToString(); public string Title { get; set; } public string Description { get; set; } public string Category { get; set; } diff --git a/survey-beta/DTOs/Response/CreatorResponseDto.cs b/survey-beta/DTOs/Response/CreatorResponseDto.cs index f922c9c..a9b81d3 100644 --- a/survey-beta/DTOs/Response/CreatorResponseDto.cs +++ b/survey-beta/DTOs/Response/CreatorResponseDto.cs @@ -3,8 +3,8 @@ namespace survey_beta.DTOs.Response public class CreatorResponseDto { public string Id { get; set; } - public string IpAddress { get; set; } + // public string? IpAddress { get; set; } public string SurveyId { get; set; } - public List Answers { get; set; } + //public List Answers { get; set; } } } diff --git a/survey-beta/DTOs/Response/ResponseDto.cs b/survey-beta/DTOs/Response/ResponseDto.cs index 8f48e94..9b7bf88 100644 --- a/survey-beta/DTOs/Response/ResponseDto.cs +++ b/survey-beta/DTOs/Response/ResponseDto.cs @@ -5,5 +5,6 @@ public string Id { get; set; } public string IpAddress { get; set; } public string SurveyId { get; set; } + public string Response { get; set; } } } diff --git a/survey-beta/DTOs/Update/SurveyStats.cs b/survey-beta/DTOs/Update/SurveyStats.cs index fd13eb8..3a02421 100644 --- a/survey-beta/DTOs/Update/SurveyStats.cs +++ b/survey-beta/DTOs/Update/SurveyStats.cs @@ -2,9 +2,9 @@ { public class SurveyStats { - public string SurveyId { get; set; } + public string? SurveyId { get; set; } public int TotalResponses { get; set; } - public Dictionary AnswerFrequency { get; set; } - public Dictionary QuestionFrequency { get; set; } + public Dictionary? AnswerFrequency { get; set; } + public Dictionary? QuestionFrequency { get; set; } } } diff --git a/survey-beta/Mappers/ResponseMapper.cs b/survey-beta/Mappers/ResponseMapper.cs index c6f94c7..0f7aca3 100644 --- a/survey-beta/Mappers/ResponseMapper.cs +++ b/survey-beta/Mappers/ResponseMapper.cs @@ -11,7 +11,7 @@ namespace survey_beta.Mappers return new ResponseDto { Id = response.Id, - IpAddress = response.IpAddress, + // IpAddress = response.IpAddress, SurveyId = response.SurveyId }; } @@ -21,7 +21,7 @@ namespace survey_beta.Mappers return new Response { Id = Guid.NewGuid().ToString(), - IpAddress = dto.IpAddress, + //IpAddress = dto.IpAddress, SurveyId = dto.SurveyId }; } diff --git a/survey-beta/Mappers/UserInfoDto.cs b/survey-beta/Mappers/UserInfoDto.cs deleted file mode 100644 index a052b46..0000000 --- a/survey-beta/Mappers/UserInfoDto.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace survey_beta.Mappers -{ - public class UserInfoDto - { - } -} diff --git a/survey-beta/Migrations/20250131221823_responses.Designer.cs b/survey-beta/Migrations/20250131221823_responses.Designer.cs index 03f06ee..5f28270 100644 --- a/survey-beta/Migrations/20250131221823_responses.Designer.cs +++ b/survey-beta/Migrations/20250131221823_responses.Designer.cs @@ -1,509 +1 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; -using survey_beta.DataBaseContext; - -#nullable disable - -namespace survey_beta.Migrations -{ - [DbContext(typeof(AppDbContext))] - [Migration("20250131221823_responses")] - partial class responses - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.1") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => - { - b.Property("Id") - .HasColumnType("text"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("text"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex"); - - b.ToTable("AspNetRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ClaimType") - .HasColumnType("text"); - - b.Property("ClaimValue") - .HasColumnType("text"); - - b.Property("RoleId") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetRoleClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ClaimType") - .HasColumnType("text"); - - b.Property("ClaimValue") - .HasColumnType("text"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasColumnType("text"); - - b.Property("ProviderKey") - .HasColumnType("text"); - - b.Property("ProviderDisplayName") - .HasColumnType("text"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserLogins", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("text"); - - b.Property("RoleId") - .HasColumnType("text"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetUserRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("text"); - - b.Property("LoginProvider") - .HasColumnType("text"); - - b.Property("Name") - .HasColumnType("text"); - - b.Property("Value") - .HasColumnType("text"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AspNetUserTokens", (string)null); - }); - - modelBuilder.Entity("survey_beta.Models.Answer", b => - { - b.Property("Id") - .HasColumnType("text"); - - b.Property("ChoiceId") - .IsRequired() - .HasColumnType("text"); - - b.Property("QuestionId") - .IsRequired() - .HasColumnType("text"); - - b.Property("ResponseId") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("ChoiceId"); - - b.HasIndex("QuestionId"); - - b.HasIndex("ResponseId"); - - b.ToTable("Answers"); - }); - - modelBuilder.Entity("survey_beta.Models.Choice", b => - { - b.Property("Id") - .HasColumnType("text"); - - b.Property("Content") - .IsRequired() - .HasColumnType("text"); - - b.Property("Letter") - .IsRequired() - .HasColumnType("text"); - - b.Property("QuestionId") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("QuestionId"); - - b.ToTable("Choices"); - }); - - modelBuilder.Entity("survey_beta.Models.Question", b => - { - b.Property("Id") - .HasColumnType("text"); - - b.Property("Content") - .IsRequired() - .HasColumnType("text"); - - b.Property("SurveyId") - .IsRequired() - .HasColumnType("text"); - - b.Property("Text") - .IsRequired() - .HasColumnType("text"); - - b.Property("Type") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("SurveyId"); - - b.ToTable("Questions"); - }); - - modelBuilder.Entity("survey_beta.Models.Response", b => - { - b.Property("Id") - .HasColumnType("text"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("IpAddress") - .IsRequired() - .HasColumnType("text"); - - b.Property("SurveyId") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("SurveyId"); - - b.ToTable("Responses"); - }); - - modelBuilder.Entity("survey_beta.Models.Survey", b => - { - b.Property("Id") - .HasColumnType("text"); - - b.Property("AuthorId") - .IsRequired() - .HasColumnType("text"); - - b.Property("Category") - .IsRequired() - .HasColumnType("text"); - - b.Property("Description") - .IsRequired() - .HasColumnType("text"); - - b.Property("ExpirationDate") - .HasColumnType("timestamp with time zone"); - - b.Property("IsPublished") - .HasColumnType("boolean"); - - b.Property("Title") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("AuthorId"); - - b.ToTable("Surveys"); - }); - - modelBuilder.Entity("survey_beta.Models.User", b => - { - b.Property("Id") - .HasColumnType("text"); - - b.Property("AccessFailedCount") - .HasColumnType("integer"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("text"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("EmailConfirmed") - .HasColumnType("boolean"); - - b.Property("Fullname") - .IsRequired() - .HasColumnType("text"); - - b.Property("LockoutEnabled") - .HasColumnType("boolean"); - - b.Property("LockoutEnd") - .HasColumnType("timestamp with time zone"); - - b.Property("NormalizedEmail") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("NormalizedUserName") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.Property("PasswordHash") - .HasColumnType("text"); - - b.Property("PhoneNumber") - .HasColumnType("text"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("boolean"); - - b.Property("SecurityStamp") - .HasColumnType("text"); - - b.Property("TwoFactorEnabled") - .HasColumnType("boolean"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("character varying(256)"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedEmail") - .HasDatabaseName("EmailIndex"); - - b.HasIndex("NormalizedUserName") - .IsUnique() - .HasDatabaseName("UserNameIndex"); - - b.ToTable("AspNetUsers", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("survey_beta.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("survey_beta.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("survey_beta.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("survey_beta.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("survey_beta.Models.Answer", b => - { - b.HasOne("survey_beta.Models.Choice", "Choice") - .WithMany() - .HasForeignKey("ChoiceId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("survey_beta.Models.Question", "Question") - .WithMany() - .HasForeignKey("QuestionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("survey_beta.Models.Response", "Response") - .WithMany("Answers") - .HasForeignKey("ResponseId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Choice"); - - b.Navigation("Question"); - - b.Navigation("Response"); - }); - - modelBuilder.Entity("survey_beta.Models.Choice", b => - { - b.HasOne("survey_beta.Models.Question", "Question") - .WithMany("Choices") - .HasForeignKey("QuestionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Question"); - }); - - modelBuilder.Entity("survey_beta.Models.Question", b => - { - b.HasOne("survey_beta.Models.Survey", "Survey") - .WithMany("Questions") - .HasForeignKey("SurveyId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Survey"); - }); - - modelBuilder.Entity("survey_beta.Models.Response", b => - { - b.HasOne("survey_beta.Models.Survey", "Survey") - .WithMany() - .HasForeignKey("SurveyId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Survey"); - }); - - modelBuilder.Entity("survey_beta.Models.Survey", b => - { - b.HasOne("survey_beta.Models.User", "Author") - .WithMany("Surveys") - .HasForeignKey("AuthorId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Author"); - }); - - modelBuilder.Entity("survey_beta.Models.Question", b => - { - b.Navigation("Choices"); - }); - - modelBuilder.Entity("survey_beta.Models.Response", b => - { - b.Navigation("Answers"); - }); - - modelBuilder.Entity("survey_beta.Models.Survey", b => - { - b.Navigation("Questions"); - }); - - modelBuilder.Entity("survey_beta.Models.User", b => - { - b.Navigation("Surveys"); - }); -#pragma warning restore 612, 618 - } - } -} + \ No newline at end of file diff --git a/survey-beta/Migrations/20250202101403_reomveIp.Designer.cs b/survey-beta/Migrations/20250202101403_reomveIp.Designer.cs new file mode 100644 index 0000000..6f4187e --- /dev/null +++ b/survey-beta/Migrations/20250202101403_reomveIp.Designer.cs @@ -0,0 +1,491 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using survey_beta.DataBaseContext; + +#nullable disable + +namespace survey_beta.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20250202101403_reomveIp")] + partial class reomveIp + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.1") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("text"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex"); + + b.ToTable("AspNetRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("text"); + + b.Property("ClaimValue") + .HasColumnType("text"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("text"); + + b.Property("ClaimValue") + .HasColumnType("text"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("text"); + + b.Property("ProviderKey") + .HasColumnType("text"); + + b.Property("ProviderDisplayName") + .HasColumnType("text"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("text"); + + b.Property("RoleId") + .HasColumnType("text"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("text"); + + b.Property("LoginProvider") + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("Value") + .HasColumnType("text"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("survey_beta.Models.Answer", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("ChoiceId") + .IsRequired() + .HasColumnType("text"); + + b.Property("QuestionId") + .IsRequired() + .HasColumnType("text"); + + b.Property("ResponseId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ChoiceId"); + + b.HasIndex("QuestionId"); + + b.HasIndex("ResponseId"); + + b.ToTable("Answers"); + }); + + modelBuilder.Entity("survey_beta.Models.Choice", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Content") + .HasColumnType("text"); + + b.Property("Letter") + .HasColumnType("text"); + + b.Property("QuestionId") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("QuestionId"); + + b.ToTable("Choices"); + }); + + modelBuilder.Entity("survey_beta.Models.Question", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Content") + .HasColumnType("text"); + + b.Property("SurveyId") + .HasColumnType("text"); + + b.Property("Text") + .HasColumnType("text"); + + b.Property("Type") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("SurveyId"); + + b.ToTable("Questions"); + }); + + modelBuilder.Entity("survey_beta.Models.Response", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("SurveyId") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("SurveyId"); + + b.ToTable("Responses"); + }); + + modelBuilder.Entity("survey_beta.Models.Survey", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("AuthorId") + .HasColumnType("text"); + + b.Property("Category") + .HasColumnType("text"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("ExpirationDate") + .HasColumnType("timestamp with time zone"); + + b.Property("IsPublished") + .HasColumnType("boolean"); + + b.Property("Title") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("AuthorId"); + + b.ToTable("Surveys"); + }); + + modelBuilder.Entity("survey_beta.Models.User", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("AccessFailedCount") + .HasColumnType("integer"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("text"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("boolean"); + + b.Property("Fullname") + .IsRequired() + .HasColumnType("text"); + + b.Property("LockoutEnabled") + .HasColumnType("boolean"); + + b.Property("LockoutEnd") + .HasColumnType("timestamp with time zone"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("PasswordHash") + .HasColumnType("text"); + + b.Property("PhoneNumber") + .HasColumnType("text"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("boolean"); + + b.Property("SecurityStamp") + .HasColumnType("text"); + + b.Property("TwoFactorEnabled") + .HasColumnType("boolean"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex"); + + b.ToTable("AspNetUsers", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("survey_beta.Models.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("survey_beta.Models.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("survey_beta.Models.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("survey_beta.Models.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("survey_beta.Models.Answer", b => + { + b.HasOne("survey_beta.Models.Choice", "Choice") + .WithMany() + .HasForeignKey("ChoiceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("survey_beta.Models.Question", "Question") + .WithMany() + .HasForeignKey("QuestionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("survey_beta.Models.Response", "Response") + .WithMany("Answers") + .HasForeignKey("ResponseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Choice"); + + b.Navigation("Question"); + + b.Navigation("Response"); + }); + + modelBuilder.Entity("survey_beta.Models.Choice", b => + { + b.HasOne("survey_beta.Models.Question", "Question") + .WithMany("Choices") + .HasForeignKey("QuestionId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("Question"); + }); + + modelBuilder.Entity("survey_beta.Models.Question", b => + { + b.HasOne("survey_beta.Models.Survey", "Survey") + .WithMany("Questions") + .HasForeignKey("SurveyId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("Survey"); + }); + + modelBuilder.Entity("survey_beta.Models.Response", b => + { + b.HasOne("survey_beta.Models.Survey", "Survey") + .WithMany() + .HasForeignKey("SurveyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Survey"); + }); + + modelBuilder.Entity("survey_beta.Models.Survey", b => + { + b.HasOne("survey_beta.Models.User", "Author") + .WithMany("Surveys") + .HasForeignKey("AuthorId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("Author"); + }); + + modelBuilder.Entity("survey_beta.Models.Question", b => + { + b.Navigation("Choices"); + }); + + modelBuilder.Entity("survey_beta.Models.Response", b => + { + b.Navigation("Answers"); + }); + + modelBuilder.Entity("survey_beta.Models.Survey", b => + { + b.Navigation("Questions"); + }); + + modelBuilder.Entity("survey_beta.Models.User", b => + { + b.Navigation("Surveys"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/survey-beta/Migrations/20250202101403_reomveIp.cs b/survey-beta/Migrations/20250202101403_reomveIp.cs new file mode 100644 index 0000000..56bff9f --- /dev/null +++ b/survey-beta/Migrations/20250202101403_reomveIp.cs @@ -0,0 +1,29 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace survey_beta.Migrations +{ + /// + public partial class reomveIp : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IpAddress", + table: "Responses"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IpAddress", + table: "Responses", + type: "text", + nullable: false, + defaultValue: ""); + } + } +} diff --git a/survey-beta/Migrations/AppDbContextModelSnapshot.cs b/survey-beta/Migrations/AppDbContextModelSnapshot.cs index 9a56779..0e2e9a3 100644 --- a/survey-beta/Migrations/AppDbContextModelSnapshot.cs +++ b/survey-beta/Migrations/AppDbContextModelSnapshot.cs @@ -235,10 +235,6 @@ namespace survey_beta.Migrations b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); - b.Property("IpAddress") - .IsRequired() - .HasColumnType("text"); - b.Property("SurveyId") .IsRequired() .HasColumnType("text"); diff --git a/survey-beta/Models/Answer.cs b/survey-beta/Models/Answer.cs index dc22123..662fa95 100644 --- a/survey-beta/Models/Answer.cs +++ b/survey-beta/Models/Answer.cs @@ -4,12 +4,12 @@ namespace survey_beta.Models { public class Answer { - public string Id { get; set; } = Guid.NewGuid().ToString(); - public string ResponseId { get; set; } - public Response Response { get; set; } - public string QuestionId { get; set; } - public Question Question { get; set; } - public string ChoiceId { get; set; } - public Choice Choice { get; set; } + public string? Id { get; set; } = Guid.NewGuid().ToString(); + public string? ResponseId { get; set; } + public Response? Response { get; set; } + public string? QuestionId { get; set; } + public Question? Question { get; set; } + public string? ChoiceId { get; set; } + public Choice? Choice { get; set; } } } diff --git a/survey-beta/Models/Response.cs b/survey-beta/Models/Response.cs index 219e015..b58af4c 100644 --- a/survey-beta/Models/Response.cs +++ b/survey-beta/Models/Response.cs @@ -6,9 +6,9 @@ namespace survey_beta.Models public class Response { public string Id { get; set; } = Guid.NewGuid().ToString(); - public string IpAddress { get; set; } - public string SurveyId { get; set; } - public Survey Survey { get; set; } + //public string IpAddress { get; set; } + public string? SurveyId { get; set; } + public Survey? Survey { get; set; } public DateTime CreatedAt { get; set; } = DateTime.UtcNow; public ICollection Answers { get; set; } = new List(); } diff --git a/survey-beta/Models/Survey.cs b/survey-beta/Models/Survey.cs index 18a7fed..95dca73 100644 --- a/survey-beta/Models/Survey.cs +++ b/survey-beta/Models/Survey.cs @@ -13,6 +13,6 @@ namespace survey_beta.Models public bool IsPublished { get; set; } public string? AuthorId { get; set; } public User? Author { get; set; } - public ICollection Questions { get; set; } + public ICollection? Questions { get; set; } } } diff --git a/survey-beta/Properties/launchSettings.json b/survey-beta/Properties/launchSettings.json index 085c92c..88a8891 100644 --- a/survey-beta/Properties/launchSettings.json +++ b/survey-beta/Properties/launchSettings.json @@ -23,7 +23,7 @@ "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, - "launchUrl": "weatherforecast", + "launchUrl": "swagger", "applicationUrl": "https://localhost:7002;http://localhost:5036", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/survey-beta/Services/ResponsesServices.cs b/survey-beta/Services/ResponsesServices.cs index e76d1de..9e3e099 100644 --- a/survey-beta/Services/ResponsesServices.cs +++ b/survey-beta/Services/ResponsesServices.cs @@ -1,13 +1,9 @@ using Microsoft.EntityFrameworkCore; using survey_beta.DataBaseContext; -using survey_beta.DTOs.Default; using survey_beta.DTOs.Response; using survey_beta.Models; -using System; -using System.Collections.Generic; -using System.Linq; -public class ResponsesService +public class ResponsesService { private readonly AppDbContext _context; private readonly AnalyticsServices _analyticsService; @@ -17,23 +13,27 @@ public class ResponsesService _context = context; _analyticsService = analyticsService; } - public void AddResponse(CreatorResponseDto request) + + public void AddResponse(ResponseDto request) { - var answers = request.Answers.Select(a => new AnswerDto - { - Question = a.Question, - AnswerText = a.AnswerText - }).ToList(); var response = new Response { SurveyId = request.SurveyId, Id = request.Id, - CreatedAt = DateTime.UtcNow + CreatedAt = DateTime.UtcNow, + + // CreatedAt = DateTime.UtcNow, + //IpAddress= request.IpAddress + //Answers = request.Answers.Select(a => new Answer + //{ + + // }).ToList() }; _context.Responses.Add(response); _context.SaveChanges(); } + public List GetSurveyResponses(string surveyId) { return _context.Responses diff --git a/survey-beta/Services/SurveyServices.cs b/survey-beta/Services/SurveyServices.cs index 96dd394..0d3a232 100644 --- a/survey-beta/Services/SurveyServices.cs +++ b/survey-beta/Services/SurveyServices.cs @@ -1,7 +1,10 @@ using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using survey_beta.DataBaseContext; using survey_beta.DTOs.Create; +using survey_beta.DTOs.Default; +using survey_beta.DTOs.Response; using survey_beta.DTOs.Update; using survey_beta.Models; using System.Security.Claims; @@ -9,10 +12,12 @@ using System.Security.Claims; public class SurveyService { private readonly AppDbContext _context; + private readonly ResponsesService _responsesService; - public SurveyService(AppDbContext context) + public SurveyService(AppDbContext context, ResponsesService responsesService) { _context = context; + _responsesService = responsesService; } public async Task GetSurveyByIdAsync(string id) @@ -89,4 +94,18 @@ public class SurveyService await _context.SaveChangesAsync(); return true; } + public async Task SubmitSurveyResponseAsync(string surveyId, survey_beta.DTOs.Response.ResponseDto responseDto) + { + var survey = await _context.Surveys + .Include(s => s.Questions) + .FirstOrDefaultAsync(s => s.Id == surveyId); + + if (survey == null) + { + return false; + } + _responsesService.AddResponse(responseDto); + + return true; + } } diff --git a/survey-beta/appsettings.json b/survey-beta/appsettings.json index c2dfd0f..d27c04d 100644 --- a/survey-beta/appsettings.json +++ b/survey-beta/appsettings.json @@ -6,6 +6,6 @@ }, "AllowedHosts": "*", "ConnectionStrings": { - "DefaultConnection": "Host=localhost;Database=SurveyBeta;Username=postgres;Password=MAJEDali645" + "DefaultConnection": "Host=localhost;Database=SurveyBeta;Username=postgres;Password=102030" } } \ No newline at end of file