using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using AutoMapper; using DevHive.Data.Interfaces.Repositories; using DevHive.Data.Models; using DevHive.Services.Interfaces; using DevHive.Services.Models; using DevHive.Services.Models.Post.Post; namespace DevHive.Services.Services { public class FeedService : IFeedService { private readonly IMapper _mapper; private readonly IFeedRepository _feedRepository; private readonly IUserRepository _userRepository; public FeedService(IFeedRepository feedRepository, IUserRepository userRepository, IMapper mapper) { this._feedRepository = feedRepository; this._userRepository = userRepository; this._mapper = mapper; } public async Task GetPage(GetPageServiceModel model) { User user = await this._userRepository.GetByIdAsync(model.UserId) ?? throw new ArgumentException("User doesn't exist!"); List friendsList = user.Friends.ToList(); if (friendsList.Count == 0) throw new ArgumentException("User has no friends to get feed from!"); List posts = await this._feedRepository .GetFriendsPosts(friendsList, model.FirstRequestIssued, model.PageNumber, model.PageSize); if (posts.Count <= 0) throw new ArgumentException("No friends of user have posted anything yet!"); ReadPageServiceModel readPageServiceModel = new(); foreach (Post post in posts) readPageServiceModel.Posts.Add(this._mapper.Map(post)); return readPageServiceModel; } } }