199 lines
5.6 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|