From 78ed96237d788bbe27336cbdd07d49ce95d8f579 Mon Sep 17 00:00:00 2001 From: Qais Yousuf Date: Fri, 8 Mar 2024 11:20:36 +0100 Subject: [PATCH] Survey Models Created --- Data/SurveyContext.cs | 26 ++ Model/Answer.cs | 18 + Model/Question.cs | 24 ++ Model/QuestionType.cs | 25 ++ Model/QuestionTypeEntities.cs | 17 + Model/Questionnaire.cs | 16 + Services/Implemnetation/AddressRepository.cs | 4 +- Services/Implemnetation/FooterRepository.cs | 23 ++ .../Implemnetation/QuestionnaireRepository.cs | 58 +++ .../Implemnetation/SocialMediaRepository.cs | 2 +- Services/Interaces/IAddressRepository.cs | 4 +- Services/Interaces/IFooterRepository.cs | 2 + .../Interaces/IQuestionnaireRepository.cs | 22 ++ .../Admin/Controllers/FooterController.cs | 165 +++++++- .../Controllers/QuestionnaireController.cs | 81 ++++ Web/Areas/Admin/Views/Address/Index.cshtml | 2 +- Web/Areas/Admin/Views/Banner/Index.cshtml | 6 +- Web/Areas/Admin/Views/Footer/Create.cshtml | 2 +- Web/Areas/Admin/Views/Footer/Delete.cshtml | 175 +++++++++ Web/Areas/Admin/Views/Footer/Edit.cshtml | 106 +++++ Web/Areas/Admin/Views/Footer/Index.cshtml | 12 +- .../Admin/Views/Questionnaire/Create.cshtml | 108 +++++ .../Admin/Views/Questionnaire/Index.cshtml | 47 +++ .../Admin/Views/Shared/_AdminLayout.cshtml | 4 + .../Admin/Views/SocialMedia/Index.cshtml | 6 +- Web/Areas/Admin/Views/_ViewImports.cshtml | 1 + Web/Extesions/ServicesExtesions.cs | 4 + ...240307153635_SurveyModelsAdded.Designer.cs | 371 ++++++++++++++++++ .../20240307153635_SurveyModelsAdded.cs | 108 +++++ Web/Migrations/SurveyContextModelSnapshot.cs | 112 ++++++ Web/Program.cs | 4 +- .../FooterVm/FooterDeleteViewModel.cs | 43 ++ Web/ViewModel/FooterVm/FooterEditViewModel.cs | 43 ++ .../FooterVm/InserFooterViewModel.cs | 8 +- .../QuestionnaireVM/QuestionnaireViewModel.cs | 19 + Web/wwwroot/css/site.css | 5 + 36 files changed, 1638 insertions(+), 35 deletions(-) create mode 100644 Model/Answer.cs create mode 100644 Model/Question.cs create mode 100644 Model/QuestionType.cs create mode 100644 Model/QuestionTypeEntities.cs create mode 100644 Model/Questionnaire.cs create mode 100644 Services/Implemnetation/QuestionnaireRepository.cs create mode 100644 Services/Interaces/IQuestionnaireRepository.cs create mode 100644 Web/Areas/Admin/Controllers/QuestionnaireController.cs create mode 100644 Web/Areas/Admin/Views/Footer/Delete.cshtml create mode 100644 Web/Areas/Admin/Views/Footer/Edit.cshtml create mode 100644 Web/Areas/Admin/Views/Questionnaire/Create.cshtml create mode 100644 Web/Areas/Admin/Views/Questionnaire/Index.cshtml create mode 100644 Web/Migrations/20240307153635_SurveyModelsAdded.Designer.cs create mode 100644 Web/Migrations/20240307153635_SurveyModelsAdded.cs create mode 100644 Web/ViewModel/FooterVm/FooterDeleteViewModel.cs create mode 100644 Web/ViewModel/FooterVm/FooterEditViewModel.cs create mode 100644 Web/ViewModel/QuestionnaireVM/QuestionnaireViewModel.cs diff --git a/Data/SurveyContext.cs b/Data/SurveyContext.cs index e102c04..e4933bb 100644 --- a/Data/SurveyContext.cs +++ b/Data/SurveyContext.cs @@ -26,6 +26,13 @@ namespace Data public DbSet FooterSocialMedias { get; set; } + public DbSet Questionnaires { get; set; } + + public DbSet Questions { get; set; } + public DbSet Answers { get; set; } + + public DbSet QuestionTypeEntities { get; set; } + protected override void OnModelCreating(ModelBuilder modelBuilder) { @@ -43,7 +50,26 @@ namespace Data .HasForeignKey(fsm => fsm.SocialId); + modelBuilder.Entity() + .HasKey(q => q.Id); + modelBuilder.Entity() + .HasMany(q => q.Questions) + .WithOne(qn => qn.Questionnaire) + .HasForeignKey(qn => qn.QuestionnaireId) + .OnDelete(DeleteBehavior.Cascade); + + modelBuilder.Entity() + .HasOne(q => q.Questionnaire) + .WithMany(qn => qn.Questions) + .HasForeignKey(q => q.QuestionnaireId) + .OnDelete(DeleteBehavior.Cascade); + + modelBuilder.Entity() + .HasKey(a => a.Id); + + modelBuilder.Entity() + .HasKey(t => t.Id); base.OnModelCreating(modelBuilder); } diff --git a/Model/Answer.cs b/Model/Answer.cs new file mode 100644 index 0000000..8e6783b --- /dev/null +++ b/Model/Answer.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Model +{ + public class Answer + { + public int Id { get; set; } + public string? Text { get; set; } + public int QuestionId { get; set; } // Foreign key for Question + [ForeignKey("QuestionId")] + public Question? Question { get; set; } + } +} diff --git a/Model/Question.cs b/Model/Question.cs new file mode 100644 index 0000000..9aa9724 --- /dev/null +++ b/Model/Question.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Model +{ + public class Question + { + public int Id { get; set; } + public string? Text { get; set; } + public QuestionType Type { get; set; } + + // Foreign key for Questionnaire + + public int QuestionnaireId { get; set; } // Foreign key for Questionnaire + [ForeignKey("QuestionnaireId")] + public Questionnaire? Questionnaire { get; set; } + + public List? Answers { get; set; } + } +} diff --git a/Model/QuestionType.cs b/Model/QuestionType.cs new file mode 100644 index 0000000..dcb5b75 --- /dev/null +++ b/Model/QuestionType.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Model +{ + public enum QuestionType + { + Text, + CheckBox, + TrueFalse, + Multiple_choice, + Rating, + Likert, + Matrix, + Open_ended, + Demographic, + Ranking, + Image, + Slider + + } +} diff --git a/Model/QuestionTypeEntities.cs b/Model/QuestionTypeEntities.cs new file mode 100644 index 0000000..e6ff547 --- /dev/null +++ b/Model/QuestionTypeEntities.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Model +{ + public class QuestionTypeEntities + { + + + public int Id { get; set; } + public QuestionType Type { get; set; } + + } +} diff --git a/Model/Questionnaire.cs b/Model/Questionnaire.cs new file mode 100644 index 0000000..7ea572d --- /dev/null +++ b/Model/Questionnaire.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Model +{ + public class Questionnaire + { + public int Id { get; set; } + public string? Title { get; set; } + public string? Description { get; set; } + public List? Questions { get; set; } + } +} diff --git a/Services/Implemnetation/AddressRepository.cs b/Services/Implemnetation/AddressRepository.cs index b43dcba..ecef870 100644 --- a/Services/Implemnetation/AddressRepository.cs +++ b/Services/Implemnetation/AddressRepository.cs @@ -31,14 +31,14 @@ namespace Services.Implemnetation await _context.SaveChangesAsync(); } - public void Delete(int id) + public void Delete(int? id) { var addresId = GetAddressById(id); _context.Addresss.Remove(addresId); } - public Address GetAddressById(int id) + public Address GetAddressById(int? id) { return _context.Addresss.AsNoTracking().Where(x => x.Id == id).FirstOrDefault(); } diff --git a/Services/Implemnetation/FooterRepository.cs b/Services/Implemnetation/FooterRepository.cs index 3b14201..74ee943 100644 --- a/Services/Implemnetation/FooterRepository.cs +++ b/Services/Implemnetation/FooterRepository.cs @@ -49,12 +49,35 @@ namespace Services.Implemnetation public void Update(Footer footer) { + _context.Footers.Update(footer); + //_context.Entry(footer).State = EntityState.Modified; + + + //foreach (var fsm in footer.FooterSocialMedias) + //{ + // var existingEntity = _context.ChangeTracker.Entries() + // .FirstOrDefault(e => e.Entity.FooterId == fsm.FooterId && e.Entity.SocialId == fsm.SocialId); + + // if (existingEntity != null) + // { + // _context.Entry(existingEntity.Entity).State = EntityState.Detached; + // } + + // _context.Entry(fsm).State = EntityState.Modified; + //} } public List