diff --git a/survey-beta/Controllers/SurveyController.cs b/survey-beta/Controllers/SurveyController.cs new file mode 100644 index 0000000..0ca1514 --- /dev/null +++ b/survey-beta/Controllers/SurveyController.cs @@ -0,0 +1,19 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using survey_beta.DataBaseContext; +using survey_beta.DTOs.Default; +using survey_beta.Mappers; +using survey_beta.Models; +using survey_beta.Services; + +namespace survey_beta.Controllers +{ + [Route("api/Surveys")] + [ApiController] + public class SurveyController : ControllerBase + { + + } +} diff --git a/survey-beta/Controllers/UsersController.cs b/survey-beta/Controllers/UsersController.cs new file mode 100644 index 0000000..502c513 --- /dev/null +++ b/survey-beta/Controllers/UsersController.cs @@ -0,0 +1,11 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; + +namespace survey_beta.Controllers +{ + [Route("api/Users")] + [ApiController] + public class UsersController : ControllerBase + { + } +} diff --git a/survey-beta/DTOs/Create/CreateAnswerDto.cs b/survey-beta/DTOs/Create/CreateAnswerDto.cs deleted file mode 100644 index 5fce9c5..0000000 --- a/survey-beta/DTOs/Create/CreateAnswerDto.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace survey_beta.DTOs.Create -{ - public class CreateAnswerDto - { - public string ResponseId { get; set; } - public string QuestionId { get; set; } - public string ChoiceId { get; set; } - } -} diff --git a/survey-beta/DTOs/Create/CreateChoiceDto.cs b/survey-beta/DTOs/Create/CreateChoiceDto.cs index 0da9a56..ee52977 100644 --- a/survey-beta/DTOs/Create/CreateChoiceDto.cs +++ b/survey-beta/DTOs/Create/CreateChoiceDto.cs @@ -4,6 +4,5 @@ { public string Letter { get; set; } public string Content { get; set; } - public string QuestionId { get; set; } = Guid.NewGuid().ToString(); } } diff --git a/survey-beta/DTOs/Create/CreateQuestionDto.cs b/survey-beta/DTOs/Create/CreateQuestionDto.cs index daf6778..530e76e 100644 --- a/survey-beta/DTOs/Create/CreateQuestionDto.cs +++ b/survey-beta/DTOs/Create/CreateQuestionDto.cs @@ -4,6 +4,6 @@ { public string Content { get; set; } public string SurveyId { get; set; } = Guid.NewGuid().ToString(); - public ICollection Choices { get; set; } + public List Choices { get; set; } } } diff --git a/survey-beta/DTOs/Create/CreateResponseDto.cs b/survey-beta/DTOs/Create/CreateResponseDto.cs index b3c9dc4..2ab5695 100644 --- a/survey-beta/DTOs/Create/CreateResponseDto.cs +++ b/survey-beta/DTOs/Create/CreateResponseDto.cs @@ -4,6 +4,6 @@ { public string IpAddress { get; set; } public string SurveyId { get; set; } - public ICollection Answers { get; set; } + public List Answers { get; set; } } } diff --git a/survey-beta/DTOs/Create/CreateSurveyDto.cs b/survey-beta/DTOs/Create/CreateSurveyDto.cs index 142d738..0c59ad4 100644 --- a/survey-beta/DTOs/Create/CreateSurveyDto.cs +++ b/survey-beta/DTOs/Create/CreateSurveyDto.cs @@ -7,6 +7,6 @@ public string Description { get; set; } public string Category { get; set; } public DateTime ExpirationDate { get; set; } - public ICollection Questions { get; set; } + public List Questions { get; set; } } } diff --git a/survey-beta/DTOs/Default/AnswerDto.cs b/survey-beta/DTOs/Default/AnswerDto.cs deleted file mode 100644 index 0dc7ced..0000000 --- a/survey-beta/DTOs/Default/AnswerDto.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace survey_beta.DTOs.Default -{ - public class AnswerDto - { - public string Id { get; set; } - public string ResponseId { get; set; } - public string QuestionId { get; set; } - public string ChoiceId { get; set; } - } -} diff --git a/survey-beta/DTOs/Default/ChoiceDto.cs b/survey-beta/DTOs/Default/ChoiceDto.cs index 546acd7..45f9186 100644 --- a/survey-beta/DTOs/Default/ChoiceDto.cs +++ b/survey-beta/DTOs/Default/ChoiceDto.cs @@ -2,7 +2,7 @@ { public class ChoiceDto { - public string Id { get; set; } + public string Id { get; set; } = Guid.NewGuid().ToString(); public string Letter { get; set; } public string Content { get; set; } public string QuestionId { get; set; } diff --git a/survey-beta/DTOs/Default/QuestionDto.cs b/survey-beta/DTOs/Default/QuestionDto.cs index c9ca914..ac063f0 100644 --- a/survey-beta/DTOs/Default/QuestionDto.cs +++ b/survey-beta/DTOs/Default/QuestionDto.cs @@ -5,6 +5,6 @@ public string Id { get; set; } public string Content { get; set; } public string SurveyId { get; set; } - public ICollection Choices { get; set; } + public List Choices { get; set; } } } diff --git a/survey-beta/DTOs/Default/ResponseDto.cs b/survey-beta/DTOs/Default/ResponseDto.cs index 8b7b5c4..c236a7f 100644 --- a/survey-beta/DTOs/Default/ResponseDto.cs +++ b/survey-beta/DTOs/Default/ResponseDto.cs @@ -5,6 +5,6 @@ public string Id { get; set; } public string IpAddress { get; set; } public string SurveyId { get; set; } - public ICollection Answers { get; set; } + public List Answers { get; set; } } } diff --git a/survey-beta/DTOs/Default/SurveyDto.cs b/survey-beta/DTOs/Default/SurveyDto.cs index 4fa587b..1324cb6 100644 --- a/survey-beta/DTOs/Default/SurveyDto.cs +++ b/survey-beta/DTOs/Default/SurveyDto.cs @@ -9,7 +9,6 @@ public DateTime ExpirationDate { get; set; } public bool IsPublished { get; set; } public string AuthorId { get; set; } - public ICollection Questions { get; set; } - public ICollection Responses { get; set; } + public List Questions { get; set; } } } diff --git a/survey-beta/DTOs/Default/UserDto.cs b/survey-beta/DTOs/Default/UserDto.cs index da5964c..aecb9d4 100644 --- a/survey-beta/DTOs/Default/UserDto.cs +++ b/survey-beta/DTOs/Default/UserDto.cs @@ -6,6 +6,5 @@ public string? Email { get; set; } public string? Username { get; set; } public string? Fullname { get; set; } - public ICollection AuthoredSurveys { get; set; } } } diff --git a/survey-beta/DataBaseContext/AppDbContext.cs b/survey-beta/DataBaseContext/AppDbContext.cs index fa9ada9..a6b3f69 100644 --- a/survey-beta/DataBaseContext/AppDbContext.cs +++ b/survey-beta/DataBaseContext/AppDbContext.cs @@ -1,10 +1,11 @@ -using Microsoft.AspNetCore.Identity.EntityFrameworkCore; + +using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using survey_beta.Models; namespace survey_beta.DataBaseContext { - public class AppDbContext : IdentityDbContext + public class AppDbContext : Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityDbContext { public override DbSet Users { get; set; } diff --git a/survey-beta/Migrations/20250126102512_intit.Designer.cs b/survey-beta/Migrations/20250126102512_intit.Designer.cs new file mode 100644 index 0000000..83d72c9 --- /dev/null +++ b/survey-beta/Migrations/20250126102512_intit.Designer.cs @@ -0,0 +1,307 @@ +// +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("20250126102512_intit")] + partial class intit + { + /// + 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("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.HasKey("Id"); + + b.HasIndex("SurveyId"); + + b.ToTable("Questions"); + }); + + modelBuilder.Entity("survey_beta.Models.Response", b => + { + b.Property("Id") + .HasColumnType("text"); + + 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") + .HasColumnType("text"); + + b.Property("Email") + .HasColumnType("text"); + + b.Property("EmailConfirmed") + .HasColumnType("boolean"); + + b.Property("Fullname") + .HasColumnType("text"); + + b.Property("LockoutEnabled") + .HasColumnType("boolean"); + + b.Property("LockoutEnd") + .HasColumnType("timestamp with time zone"); + + b.Property("NormalizedEmail") + .HasColumnType("text"); + + b.Property("NormalizedUserName") + .HasColumnType("text"); + + 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") + .HasColumnType("text"); + + b.Property("Username") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("User"); + }); + + 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("Responses") + .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"); + + b.Navigation("Responses"); + }); + + modelBuilder.Entity("survey_beta.Models.User", b => + { + b.Navigation("Surveys"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/survey-beta/Migrations/20250126102512_intit.cs b/survey-beta/Migrations/20250126102512_intit.cs new file mode 100644 index 0000000..881f454 --- /dev/null +++ b/survey-beta/Migrations/20250126102512_intit.cs @@ -0,0 +1,212 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace survey_beta.Migrations +{ + /// + public partial class intit : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "User", + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + Username = table.Column(type: "text", nullable: true), + Fullname = table.Column(type: "text", nullable: true), + Email = table.Column(type: "text", nullable: true), + PasswordHash = table.Column(type: "text", nullable: true), + UserName = table.Column(type: "text", nullable: true), + NormalizedUserName = table.Column(type: "text", nullable: true), + NormalizedEmail = table.Column(type: "text", nullable: true), + EmailConfirmed = table.Column(type: "boolean", nullable: false), + SecurityStamp = table.Column(type: "text", nullable: true), + ConcurrencyStamp = table.Column(type: "text", nullable: true), + PhoneNumber = table.Column(type: "text", nullable: true), + PhoneNumberConfirmed = table.Column(type: "boolean", nullable: false), + TwoFactorEnabled = table.Column(type: "boolean", nullable: false), + LockoutEnd = table.Column(type: "timestamp with time zone", nullable: true), + LockoutEnabled = table.Column(type: "boolean", nullable: false), + AccessFailedCount = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_User", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Surveys", + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + Title = table.Column(type: "text", nullable: false), + Description = table.Column(type: "text", nullable: false), + Category = table.Column(type: "text", nullable: false), + ExpirationDate = table.Column(type: "timestamp with time zone", nullable: false), + IsPublished = table.Column(type: "boolean", nullable: false), + AuthorId = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Surveys", x => x.Id); + table.ForeignKey( + name: "FK_Surveys_User_AuthorId", + column: x => x.AuthorId, + principalTable: "User", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Questions", + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + Content = table.Column(type: "text", nullable: false), + SurveyId = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Questions", x => x.Id); + table.ForeignKey( + name: "FK_Questions_Surveys_SurveyId", + column: x => x.SurveyId, + principalTable: "Surveys", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Responses", + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + IpAddress = table.Column(type: "text", nullable: false), + SurveyId = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Responses", x => x.Id); + table.ForeignKey( + name: "FK_Responses_Surveys_SurveyId", + column: x => x.SurveyId, + principalTable: "Surveys", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Choices", + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + Letter = table.Column(type: "text", nullable: false), + Content = table.Column(type: "text", nullable: false), + QuestionId = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Choices", x => x.Id); + table.ForeignKey( + name: "FK_Choices_Questions_QuestionId", + column: x => x.QuestionId, + principalTable: "Questions", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Answers", + columns: table => new + { + Id = table.Column(type: "text", nullable: false), + ResponseId = table.Column(type: "text", nullable: false), + QuestionId = table.Column(type: "text", nullable: false), + ChoiceId = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Answers", x => x.Id); + table.ForeignKey( + name: "FK_Answers_Choices_ChoiceId", + column: x => x.ChoiceId, + principalTable: "Choices", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Answers_Questions_QuestionId", + column: x => x.QuestionId, + principalTable: "Questions", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Answers_Responses_ResponseId", + column: x => x.ResponseId, + principalTable: "Responses", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_Answers_ChoiceId", + table: "Answers", + column: "ChoiceId"); + + migrationBuilder.CreateIndex( + name: "IX_Answers_QuestionId", + table: "Answers", + column: "QuestionId"); + + migrationBuilder.CreateIndex( + name: "IX_Answers_ResponseId", + table: "Answers", + column: "ResponseId"); + + migrationBuilder.CreateIndex( + name: "IX_Choices_QuestionId", + table: "Choices", + column: "QuestionId"); + + migrationBuilder.CreateIndex( + name: "IX_Questions_SurveyId", + table: "Questions", + column: "SurveyId"); + + migrationBuilder.CreateIndex( + name: "IX_Responses_SurveyId", + table: "Responses", + column: "SurveyId"); + + migrationBuilder.CreateIndex( + name: "IX_Surveys_AuthorId", + table: "Surveys", + column: "AuthorId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Answers"); + + migrationBuilder.DropTable( + name: "Choices"); + + migrationBuilder.DropTable( + name: "Responses"); + + migrationBuilder.DropTable( + name: "Questions"); + + migrationBuilder.DropTable( + name: "Surveys"); + + migrationBuilder.DropTable( + name: "User"); + } + } +} diff --git a/survey-beta/Migrations/AppDbContextModelSnapshot.cs b/survey-beta/Migrations/AppDbContextModelSnapshot.cs new file mode 100644 index 0000000..56c2571 --- /dev/null +++ b/survey-beta/Migrations/AppDbContextModelSnapshot.cs @@ -0,0 +1,304 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using survey_beta.DataBaseContext; + +#nullable disable + +namespace survey_beta.Migrations +{ + [DbContext(typeof(AppDbContext))] + partial class AppDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.1") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + 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.HasKey("Id"); + + b.HasIndex("SurveyId"); + + b.ToTable("Questions"); + }); + + modelBuilder.Entity("survey_beta.Models.Response", b => + { + b.Property("Id") + .HasColumnType("text"); + + 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") + .HasColumnType("text"); + + b.Property("Email") + .HasColumnType("text"); + + b.Property("EmailConfirmed") + .HasColumnType("boolean"); + + b.Property("Fullname") + .HasColumnType("text"); + + b.Property("LockoutEnabled") + .HasColumnType("boolean"); + + b.Property("LockoutEnd") + .HasColumnType("timestamp with time zone"); + + b.Property("NormalizedEmail") + .HasColumnType("text"); + + b.Property("NormalizedUserName") + .HasColumnType("text"); + + 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") + .HasColumnType("text"); + + b.Property("Username") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("User"); + }); + + 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("Responses") + .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"); + + b.Navigation("Responses"); + }); + + modelBuilder.Entity("survey_beta.Models.User", b => + { + b.Navigation("Surveys"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/survey-beta/Program.cs b/survey-beta/Program.cs index 3a214fc..29f3776 100644 --- a/survey-beta/Program.cs +++ b/survey-beta/Program.cs @@ -5,21 +5,31 @@ using survey_beta.Models; using survey_beta.Services; var builder = WebApplication.CreateBuilder(args); - // Add services to the container builder.Services.AddDbContext(options => options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection"))); builder.Services.AddControllers(); -builder.Services.AddEndpointsApiExplorer(); - -var app = builder.Build(); - -// Configure the HTTP request pipeline. +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddEndpointsApiExplorer(); +builder.Services.AddSwaggerGen(); builder.Services.AddIdentity() .AddEntityFrameworkStores() .AddDefaultTokenProviders(); -builder.Services.AddScoped(); + +builder.Services.AddScoped(); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.UseSwagger(); + app.UseSwaggerUI(); +} +app.UseHttpsRedirection(); + +app.MapControllers(); app.UseHttpsRedirection(); diff --git a/survey-beta/Services/AnalyticsServices.cs b/survey-beta/Services/AnalyticsServices.cs new file mode 100644 index 0000000..abcb232 --- /dev/null +++ b/survey-beta/Services/AnalyticsServices.cs @@ -0,0 +1,6 @@ +namespace survey_beta.Services +{ + public class AnalyticsServices + { + } +} diff --git a/survey-beta/Services/ResponsesServices.cs b/survey-beta/Services/ResponsesServices.cs new file mode 100644 index 0000000..b39be27 --- /dev/null +++ b/survey-beta/Services/ResponsesServices.cs @@ -0,0 +1,6 @@ +namespace survey_beta.Services +{ + public class ResponsesServices + { + } +} diff --git a/survey-beta/Services/SurveyServices.cs b/survey-beta/Services/SurveyServices.cs new file mode 100644 index 0000000..831eb1d --- /dev/null +++ b/survey-beta/Services/SurveyServices.cs @@ -0,0 +1,6 @@ +namespace survey_beta.Services +{ + public class SurveyServices + { + } +} diff --git a/survey-beta/Services/UsersServices.cs b/survey-beta/Services/UsersServices.cs new file mode 100644 index 0000000..b48f51e --- /dev/null +++ b/survey-beta/Services/UsersServices.cs @@ -0,0 +1,6 @@ +namespace survey_beta.Services +{ + public class UsersServices + { + } +}