diff --git a/SurveyLib.Core/Models/Survey.cs b/SurveyLib.Core/Models/Survey.cs index 93c88ba..0e71664 100644 --- a/SurveyLib.Core/Models/Survey.cs +++ b/SurveyLib.Core/Models/Survey.cs @@ -7,6 +7,7 @@ public class Survey public string Description { get; set; } public int? CreatedBy { get; set; } + public DateTime CreatedAt { get; set; } = DateTime.UtcNow; public ICollection Questions { get; set; } public ICollection Completions { get; set; } diff --git a/SurveyLib.Core/Repositories/IAnswerRepository.cs b/SurveyLib.Core/Repositories/IAnswerRepository.cs index 65e0e0e..59d2213 100644 --- a/SurveyLib.Core/Repositories/IAnswerRepository.cs +++ b/SurveyLib.Core/Repositories/IAnswerRepository.cs @@ -4,5 +4,5 @@ namespace SurveyLib.Core.Repositories; public interface IAnswerRepository : IGenericRepository { - + Task DeleteAsync(int questionId, int completionId); } \ No newline at end of file diff --git a/SurveyLib.Core/Repositories/IAnswerVariantsRepository.cs b/SurveyLib.Core/Repositories/IAnswerVariantsRepository.cs new file mode 100644 index 0000000..079b01c --- /dev/null +++ b/SurveyLib.Core/Repositories/IAnswerVariantsRepository.cs @@ -0,0 +1,8 @@ +using SurveyLib.Core.Models; + +namespace SurveyLib.Core.Repositories; + +public interface IAnswerVariantsRepository : IGenericRepository +{ + Task> GetAnswerVariantsByQuestionIdAsync(int questionId); +} \ No newline at end of file diff --git a/SurveyLib.Core/Repositories/IGenericRepository.cs b/SurveyLib.Core/Repositories/IGenericRepository.cs index b13c749..10f71ad 100644 --- a/SurveyLib.Core/Repositories/IGenericRepository.cs +++ b/SurveyLib.Core/Repositories/IGenericRepository.cs @@ -8,5 +8,5 @@ public interface IGenericRepository where T : class Task> GetAllAsync(); Task AddAsync(T entity); Task UpdateAsync(T entity); - Task DeleteAsync(T entity); + Task DeleteAsync(int id); } diff --git a/SurveyLib.Infrastructure.EFCore/Data/SurveyDbContext.cs b/SurveyLib.Infrastructure.EFCore/Data/SurveyDbContext.cs index f505684..33cd5ed 100644 --- a/SurveyLib.Infrastructure.EFCore/Data/SurveyDbContext.cs +++ b/SurveyLib.Infrastructure.EFCore/Data/SurveyDbContext.cs @@ -7,12 +7,14 @@ namespace SurveyLib.Infrastructure.EFCore.Data; public class SurveyDbContext : DbContext { public DbSet Surveys { get; set; } - + public DbSet Questions { get; set; } public DbSet SingleAnswerQuestions { get; set; } public DbSet MultipleAnswerQuestions { get; set; } public DbSet TextQuestions { get; set; } - + + public DbSet AnswerVariants { get; set; } + public DbSet Completions { get; set; } public DbSet Answers { get; set; } diff --git a/SurveyLib.Infrastructure.EFCore/Repositories/AnswerRepository.cs b/SurveyLib.Infrastructure.EFCore/Repositories/AnswerRepository.cs index c57a470..4a84d49 100644 --- a/SurveyLib.Infrastructure.EFCore/Repositories/AnswerRepository.cs +++ b/SurveyLib.Infrastructure.EFCore/Repositories/AnswerRepository.cs @@ -36,9 +36,15 @@ public class AnswerRepository : IAnswerRepository await _context.SaveChangesAsync(); } - public async Task DeleteAsync(Answer entity) + public async Task DeleteAsync(int id) { - _context.Answers.Remove(entity); + throw new NotImplementedException(); + } + + public async Task DeleteAsync(int questionId, int completionId) + { + await _context.Answers.Where(a => a.QuestionId == questionId && a.CompletionId == completionId) + .ExecuteDeleteAsync(); await _context.SaveChangesAsync(); } } \ No newline at end of file diff --git a/SurveyLib.Infrastructure.EFCore/Repositories/AnswerVariantsRepository.cs b/SurveyLib.Infrastructure.EFCore/Repositories/AnswerVariantsRepository.cs new file mode 100644 index 0000000..43e092e --- /dev/null +++ b/SurveyLib.Infrastructure.EFCore/Repositories/AnswerVariantsRepository.cs @@ -0,0 +1,49 @@ +using Microsoft.EntityFrameworkCore; +using SurveyLib.Core.Models; +using SurveyLib.Core.Repositories; +using SurveyLib.Infrastructure.EFCore.Data; + +namespace SurveyLib.Infrastructure.EFCore.Repositories; + +public class AnswerVariantsRepository : IAnswerVariantsRepository +{ + private readonly SurveyDbContext _context; + + public AnswerVariantsRepository(SurveyDbContext context) + { + _context = context; + } + + public async Task GetByIdAsync(int id) + { + return await _context.AnswerVariants.FindAsync(id); + } + + public async Task> GetAllAsync() + { + return await _context.AnswerVariants.ToListAsync(); + } + + public async Task AddAsync(AnswerVariant entity) + { + await _context.AnswerVariants.AddAsync(entity); + await _context.SaveChangesAsync(); + } + + public async Task UpdateAsync(AnswerVariant entity) + { + _context.AnswerVariants.Update(entity); + await _context.SaveChangesAsync(); + } + + public async Task DeleteAsync(int id) + { + await _context.AnswerVariants.Where(av => av.Id == id).ExecuteDeleteAsync(); + await _context.SaveChangesAsync(); + } + + public async Task> GetAnswerVariantsByQuestionIdAsync(int questionId) + { + return await _context.AnswerVariants.Where(av => av.QuestionId == questionId).ToListAsync(); + } +} \ No newline at end of file diff --git a/SurveyLib.Infrastructure.EFCore/Repositories/CompletionRepository.cs b/SurveyLib.Infrastructure.EFCore/Repositories/CompletionRepository.cs index 1ef5ab6..5082e34 100644 --- a/SurveyLib.Infrastructure.EFCore/Repositories/CompletionRepository.cs +++ b/SurveyLib.Infrastructure.EFCore/Repositories/CompletionRepository.cs @@ -36,9 +36,9 @@ public class CompletionRepository : ICompletionRepository await _context.SaveChangesAsync(); } - public async Task DeleteAsync(Completion entity) + public async Task DeleteAsync(int id) { - _context.Completions.Remove(entity); + await _context.Completions.Where(c => c.Id == id).ExecuteDeleteAsync(); await _context.SaveChangesAsync(); } } \ No newline at end of file diff --git a/SurveyLib.Infrastructure.EFCore/Repositories/QuestionRepository.cs b/SurveyLib.Infrastructure.EFCore/Repositories/QuestionRepository.cs index 5a8b82e..0890a19 100644 --- a/SurveyLib.Infrastructure.EFCore/Repositories/QuestionRepository.cs +++ b/SurveyLib.Infrastructure.EFCore/Repositories/QuestionRepository.cs @@ -36,9 +36,9 @@ public class QuestionRepository : IQuestionRepository await _context.SaveChangesAsync(); } - public async Task DeleteAsync(QuestionBase entity) + public async Task DeleteAsync(int id) { - _context.Questions.Remove(entity); + await _context.Questions.Where(q => q.Id == id).ExecuteDeleteAsync(); await _context.SaveChangesAsync(); } diff --git a/SurveyLib.Infrastructure.EFCore/Repositories/SurveyRepository.cs b/SurveyLib.Infrastructure.EFCore/Repositories/SurveyRepository.cs index cc48ddf..91fe549 100644 --- a/SurveyLib.Infrastructure.EFCore/Repositories/SurveyRepository.cs +++ b/SurveyLib.Infrastructure.EFCore/Repositories/SurveyRepository.cs @@ -36,9 +36,9 @@ public class SurveyRepository : ISurveyRepository await _context.SaveChangesAsync(); } - public async Task DeleteAsync(Survey entity) + public async Task DeleteAsync(int id) { - _context.Surveys.Remove(entity); + await _context.Surveys.Where(s => s.Id == id).ExecuteDeleteAsync(); await _context.SaveChangesAsync(); } diff --git a/SurveyLib.Infrastructure.EFCore/SurveyLib.Infrastructure.EFCore.csproj b/SurveyLib.Infrastructure.EFCore/SurveyLib.Infrastructure.EFCore.csproj index 016f8b3..4e65a24 100644 --- a/SurveyLib.Infrastructure.EFCore/SurveyLib.Infrastructure.EFCore.csproj +++ b/SurveyLib.Infrastructure.EFCore/SurveyLib.Infrastructure.EFCore.csproj @@ -16,8 +16,4 @@ - - - - diff --git a/SurveyLib.Services/Services/QuestionService.cs b/SurveyLib.Services/Services/QuestionService.cs index e6a42dc..5c7eb24 100644 --- a/SurveyLib.Services/Services/QuestionService.cs +++ b/SurveyLib.Services/Services/QuestionService.cs @@ -25,9 +25,7 @@ public class QuestionService : IQuestionService public async Task DeleteQuestionAsync(int id) { - var question = await GetQuestionByIdAsync(id); - - await _questionRepository.DeleteAsync(question); + await _questionRepository.DeleteAsync(id); } public async Task GetQuestionByIdAsync(int id) diff --git a/SurveyLib.Services/Services/SurveyService.cs b/SurveyLib.Services/Services/SurveyService.cs index b71b6b4..80fc1be 100644 --- a/SurveyLib.Services/Services/SurveyService.cs +++ b/SurveyLib.Services/Services/SurveyService.cs @@ -25,13 +25,7 @@ public class SurveyService : ISurveyService public async Task DeleteSurveyAsync(int id) { - var survey = await _surveyRepository.GetByIdAsync(id); - if (survey == null) - { - throw new NullReferenceException($"Survey with id: {id} was not found"); - } - - await _surveyRepository.DeleteAsync(survey); + await _surveyRepository.DeleteAsync(id); } public async Task> GetSurveysAsync()