using System;
using System.Threading.Tasks;
using AutoMapper;
using DevHive.Services.Interfaces;
using DevHive.Services.Models;
using DevHive.Web.Models.Comment;
using DevHive.Web.Models.Feed;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace DevHive.Web.Controllers
{
///
/// All endpoints for interacting with the feed layer
///
[ApiController]
[Route("/api/[controller]")]
[Authorize(Roles = "User,Admin")]
public class FeedController
{
private readonly IFeedService _feedService;
private readonly IMapper _mapper;
public FeedController(IFeedService feedService, IMapper mapper)
{
this._feedService = feedService;
this._mapper = mapper;
}
///
/// Query posts for user's feed
///
/// The user's Id, whose feed is begin queried
/// Page parametars
/// A page of the feed
[HttpPost]
[Route("GetPosts")]
public async Task GetPosts(Guid userId, [FromBody] GetPageWebModel getPageWebModel)
{
GetPageServiceModel getPageServiceModel = this._mapper.Map(getPageWebModel);
getPageServiceModel.UserId = userId;
ReadPageServiceModel readPageServiceModel = await this._feedService.GetPage(getPageServiceModel);
ReadPageWebModel readPageWebModel = this._mapper.Map(readPageServiceModel);
return new OkObjectResult(readPageWebModel);
}
///
/// Query a user profile's posts
///
/// The user's username, whose posts are being queried
/// Page parametars
/// A page of the user's posts
[HttpPost]
[Route("GetUserPosts")]
[AllowAnonymous]
public async Task GetUserPosts(string username, [FromBody] GetPageWebModel getPageWebModel)
{
GetPageServiceModel getPageServiceModel = this._mapper.Map(getPageWebModel);
getPageServiceModel.Username = username;
ReadPageServiceModel readPageServiceModel = await this._feedService.GetUserPage(getPageServiceModel);
ReadPageWebModel readPageWebModel = this._mapper.Map(readPageServiceModel);
return new OkObjectResult(readPageWebModel);
}
}
}