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); } } }