using ForumContracts.BindingModels; using ForumContracts.BusinessLogicContracts; using ForumContracts.SearchModels; using ForumContracts.ViewModels; using ForumDatabaseImplement.Models; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace ForumRestApi.Controllers { [Route("api/[controller]/[action]")] [ApiController] public class MainController : Controller { private readonly ILogger _logger; private readonly IAnswerLogic _answer; private readonly IQuestionLogic _question; private readonly ICategoryLogic _category; public MainController(ILogger logger, IAnswerLogic answer, IQuestionLogic question, ICategoryLogic category) { _logger = logger; _answer = answer; _question = question; _category = category; } [HttpGet] public List? GetCategoryList() { try { return _category.ReadList(null); } catch (Exception ex) { _logger.LogError(ex, "Ошибка получения списка категорий"); throw; } } [HttpGet] public List? GetAnswersByQuestion(int questionId) { try { return _answer.ReadList(new AnswerSearchModel { QuestionId = questionId }); } catch (Exception ex) { _logger.LogError(ex, "Ошибка получения списка ответов вопроса id ={ questionId}", questionId); throw; } } [HttpGet] public CategoryViewModel? GetCategory(int categoryId) { try { return _category.ReadElement(new CategorySearchModel { Id = categoryId }); } catch (Exception ex) { _logger.LogError(ex, "Ошибка получения категории по id={categoryId}", categoryId); throw; } } [HttpGet] public List? GetQuestionsByUser(int userId) { try { return _question.ReadList(new QuestionSearchModel { UserId = userId }); } catch (Exception ex) { _logger.LogError(ex, "Ошибка получения списка вопросов пользователя id ={ userId}", userId); throw; } } [HttpGet] public List? HardRequest(DateTime dateFrom,DateTime dateTo) { try { return _question.HardRequest(new QuestionSearchModel { DateFrom=dateFrom, DateTo=dateTo }); } catch (Exception ex) { _logger.LogError(ex, "Ошибка получения списка вопросов"); throw; } } [HttpGet] public List? GetQuestionsByCategory(int categoryId) { try { return _question.ReadList(new QuestionSearchModel { CategoryId = categoryId }); } catch (Exception ex) { _logger.LogError(ex, "Ошибка получения списка вопросов категории id ={ categoryId}", categoryId); throw; } } [HttpPost] public void DeleteQuestion(QuestionBindingModel model) { try { _question.Delete(model); } catch (Exception ex) { _logger.LogError(ex, "Ошибка удаления вопроса"); throw; } } [HttpPost] public void DeleteAnswer(AnswerBindingModel model) { try { _answer.Delete(model); } catch (Exception ex) { _logger.LogError(ex, "Ошибка удаления ответа"); throw; } } [HttpPost] public void CreateCategory(CategoryBindingModel model) { try { _category.Create(model); } catch (Exception ex) { _logger.LogError(ex, "Ошибка создания категории"); throw; } } [HttpPost] public void CreateAnswer(AnswerBindingModel model) { try { _answer.Create(model); } catch (Exception ex) { _logger.LogError(ex, "Ошибка создания ответа"); throw; } } [HttpPost] public void CreateQuestion(QuestionBindingModel model) { try { _question.Create(model); } catch (Exception ex) { _logger.LogError(ex, "Ошибка создания вопроса"); throw; } } } }