From 6e8d6cebdd834a596d3f05e4774cf9ab6abeb06e Mon Sep 17 00:00:00 2001 From: shept Date: Wed, 16 Apr 2025 18:04:55 +0500 Subject: [PATCH] added basic services --- .../Repositories/IQuestionRepository.cs | 2 +- SurveyLib.Core/Services/IQuestionService.cs | 7 +-- SurveyLib.Core/Services/ISurveyService.cs | 10 ++-- .../Repositories/QuestionRepository.cs | 4 +- .../Services/QuestionService.cs | 43 +++++++++++++++++ .../Services/SurveyService.cs | 46 +++++++++++++++++++ 6 files changed, 100 insertions(+), 12 deletions(-) create mode 100644 SurveyLib.Infrastructure.EFCore/Services/QuestionService.cs create mode 100644 SurveyLib.Infrastructure.EFCore/Services/SurveyService.cs diff --git a/SurveyLib.Core/Repositories/IQuestionRepository.cs b/SurveyLib.Core/Repositories/IQuestionRepository.cs index 9afe14b..3f30cf5 100644 --- a/SurveyLib.Core/Repositories/IQuestionRepository.cs +++ b/SurveyLib.Core/Repositories/IQuestionRepository.cs @@ -4,5 +4,5 @@ namespace SurveyLib.Core.Repositories; public interface IQuestionRepository : IGenericRepository { - public IEnumerable GetQuestionsBySurveyId(int surveyId); + public Task> GetQuestionsBySurveyId(int surveyId); } \ No newline at end of file diff --git a/SurveyLib.Core/Services/IQuestionService.cs b/SurveyLib.Core/Services/IQuestionService.cs index af0d6d5..c0417aa 100644 --- a/SurveyLib.Core/Services/IQuestionService.cs +++ b/SurveyLib.Core/Services/IQuestionService.cs @@ -4,8 +4,9 @@ namespace SurveyLib.Core.Services; public interface IQuestionService { - Task AddQuestionAsync(QuestionBase question); - Task UpdateQuestionAsync(QuestionBase question); - Task DeleteQuestionAsync(int id); + Task AddQuestionAsync(QuestionBase question); + Task UpdateQuestionAsync(QuestionBase question); + Task DeleteQuestionAsync(int id); + Task GetQuestionByIdAsync(int id); Task> GetQuestionsBySurveyIdAsync(int surveyId); } \ No newline at end of file diff --git a/SurveyLib.Core/Services/ISurveyService.cs b/SurveyLib.Core/Services/ISurveyService.cs index 6ec6d55..c6d0b29 100644 --- a/SurveyLib.Core/Services/ISurveyService.cs +++ b/SurveyLib.Core/Services/ISurveyService.cs @@ -4,11 +4,9 @@ namespace SurveyLib.Core.Services; public interface ISurveyService { - Task AddSurveyAsync(Survey survey); - Task UpdateSurveyAsync(Survey survey); - Task DeleteSurveyAsync(int id); + Task AddSurveyAsync(Survey survey); + Task UpdateSurveyAsync(Survey survey); + Task DeleteSurveyAsync(int id); Task> GetSurveysAsync(); - Task GetSurveyByIdAsync(int id); - Task GetSurveyWithQuestionsByIdAsync(int id); - Task GetSurveyWithAnswersByIdAsync(int id); + Task GetSurveyAsync(int id); } \ No newline at end of file diff --git a/SurveyLib.Infrastructure.EFCore/Repositories/QuestionRepository.cs b/SurveyLib.Infrastructure.EFCore/Repositories/QuestionRepository.cs index 425fc27..59ca2f7 100644 --- a/SurveyLib.Infrastructure.EFCore/Repositories/QuestionRepository.cs +++ b/SurveyLib.Infrastructure.EFCore/Repositories/QuestionRepository.cs @@ -42,8 +42,8 @@ public class QuestionRepository : IQuestionRepository await _context.SaveChangesAsync(); } - public IEnumerable GetQuestionsBySurveyId(int surveyId) + public async Task> GetQuestionsBySurveyId(int surveyId) { - return _context.Questions.Where(q => q.SurveyId == surveyId); + return await _context.Questions.Where(q => q.SurveyId == surveyId).ToListAsync(); } } \ No newline at end of file diff --git a/SurveyLib.Infrastructure.EFCore/Services/QuestionService.cs b/SurveyLib.Infrastructure.EFCore/Services/QuestionService.cs new file mode 100644 index 0000000..795546d --- /dev/null +++ b/SurveyLib.Infrastructure.EFCore/Services/QuestionService.cs @@ -0,0 +1,43 @@ +using SurveyLib.Core.Models; +using SurveyLib.Core.Repositories; +using SurveyLib.Core.Services; + +namespace SurveyLib.Infrastructure.EFCore.Services; + +public class QuestionService : IQuestionService +{ + private readonly IQuestionRepository _questionRepository; + + public QuestionService(IQuestionRepository questionRepository) + { + _questionRepository = questionRepository; + } + + public async Task AddQuestionAsync(QuestionBase question) + { + await _questionRepository.AddAsync(question); + } + + public async Task UpdateQuestionAsync(QuestionBase question) + { + await _questionRepository.UpdateAsync(question); + } + + public async Task DeleteQuestionAsync(int id) + { + var question = await GetQuestionByIdAsync(id); + + await _questionRepository.DeleteAsync(question); + } + + public async Task GetQuestionByIdAsync(int id) + { + var question = await _questionRepository.GetByIdAsync(id) ?? throw new NullReferenceException(); + return question; + } + + public async Task> GetQuestionsBySurveyIdAsync(int surveyId) + { + return await _questionRepository.GetQuestionsBySurveyId(surveyId); + } +} \ No newline at end of file diff --git a/SurveyLib.Infrastructure.EFCore/Services/SurveyService.cs b/SurveyLib.Infrastructure.EFCore/Services/SurveyService.cs new file mode 100644 index 0000000..52133db --- /dev/null +++ b/SurveyLib.Infrastructure.EFCore/Services/SurveyService.cs @@ -0,0 +1,46 @@ +using SurveyLib.Core.Models; +using SurveyLib.Core.Repositories; +using SurveyLib.Core.Services; + +namespace SurveyLib.Infrastructure.EFCore.Services; + +public class SurveyService : ISurveyService +{ + private readonly ISurveyRepository _surveyRepository; + + public SurveyService(ISurveyRepository surveyRepository) + { + _surveyRepository = surveyRepository; + } + + public async Task AddSurveyAsync(Survey survey) + { + await _surveyRepository.AddAsync(survey); + } + + public async Task UpdateSurveyAsync(Survey survey) + { + await _surveyRepository.UpdateAsync(survey); + } + + 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); + } + + public async Task> GetSurveysAsync() + { + return await _surveyRepository.GetAllAsync(); + } + + public async Task GetSurveyAsync(int id) + { + return await _surveyRepository.GetByIdAsync(id); + } +} \ No newline at end of file