199 lines
5.6 KiB
C#

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<MainController> logger, IAnswerLogic answer, IQuestionLogic question, ICategoryLogic category)
{
_logger = logger;
_answer = answer;
_question = question;
_category = category;
}
[HttpGet]
public List<CategoryViewModel>? GetCategoryList()
{
try
{
return _category.ReadList(null);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка получения списка категорий");
throw;
}
}
[HttpGet]
public List<AnswerViewModel>? 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<QuestionViewModel>? GetQuestionsByUser(int userId)
{
try
{
return _question.ReadList(new QuestionSearchModel
{
UserId = userId
});
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка получения списка вопросов пользователя id ={ userId}", userId);
throw;
}
}
[HttpGet]
public List<QuestionViewModel>? 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<QuestionViewModel>? 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;
}
}
}
}