From f43005ad7a8a64311fd6501fb7e3a99d1de298a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elena=20Guzm=C3=A1n=20Blanco?= Date: Tue, 10 Mar 2026 21:46:23 +0100 Subject: [PATCH 1/3] =?UTF-8?q?=E2=9C=A8=20Add=20functionality=20for=20man?= =?UTF-8?q?aging=20user=20favorite=20activities?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IActivityService.cs | 3 + .../TaleEngine.Application/ActivityService.cs | 99 +++++++++- .../Commands/ActivityCommands.cs | 10 + .../Contracts/IActivityCommands.cs | 2 + .../Contracts/IActivityQueries.cs | 1 + .../Queries/ActivityQueries.cs | 9 + .../Repositories/IActivityRepository.cs | 2 +- .../Repositories/ActivityRepository.cs | 14 +- .../Controllers/V1/ActivityControllerTests.cs | 173 ++++++++++++++++++ .../Controllers/V1/ActivityController.cs | 47 ++++- 10 files changed, 347 insertions(+), 13 deletions(-) diff --git a/TaleEngine/TaleEngine.Application.Contracts/IActivityService.cs b/TaleEngine/TaleEngine.Application.Contracts/IActivityService.cs index 67240b7..cea8854 100644 --- a/TaleEngine/TaleEngine.Application.Contracts/IActivityService.cs +++ b/TaleEngine/TaleEngine.Application.Contracts/IActivityService.cs @@ -11,6 +11,9 @@ public interface IActivityService List GetPendingActivities(int editionId); List GetLastThreeActivities(int editionId); IEnumerable GetActiveActivitiesFiltered(int typeId, int editionId, List timeframes, string title, int skipByPagination, int activitiesPerPage, int userFav = default); + List GetFavouriteActivitiesByUser(int userId, int editionId); + bool AddFavouriteActivity(int activityId, int userId); + bool RemoveFavouriteActivity(int activityId, int userId); int ChangeActivityStatus(int activityId, int statusId); int DeleteActivity(int activityId); diff --git a/TaleEngine/TaleEngine.Application/ActivityService.cs b/TaleEngine/TaleEngine.Application/ActivityService.cs index 768560a..360f6a4 100644 --- a/TaleEngine/TaleEngine.Application/ActivityService.cs +++ b/TaleEngine/TaleEngine.Application/ActivityService.cs @@ -67,6 +67,98 @@ public IEnumerable GetActiveActivitiesFiltered(int typeId, int e return query; } + public List GetFavouriteActivitiesByUser(int userId, int editionId) + { + if (userId == default || editionId == default) + { + return new List(); + } + + return GetFavActivitiesFiltered(0, editionId, null, null, userId).ToList(); + } + + public bool AddFavouriteActivity(int activityId, int userId) + { + try + { + var user = _unitOfWork.UserRepository.GetById(userId); + var activity = _unitOfWork.ActivityRepository.GetById(activityId); + + if (user == null || activity == null) + { + return false; + } + + activity = _unitOfWork.ActivityRepository.GetAllIncludeFavs(activity.EditionId) + .FirstOrDefault(a => a.Id == activityId); + + if (activity == null) + { + return false; + } + + if (activity.UsersFav == null) + { + activity.UsersFav = new List(); + } + + if (activity.UsersFav.Any(u => u.Id == userId)) + { + return false; + } + + activity.UsersFav.Add(user); + + _unitOfWork.ActivityRepository.Update(activity); + _unitOfWork.ActivityRepository.Save(); + + return true; + } + catch (Exception) + { + return false; + } + } + + public bool RemoveFavouriteActivity(int activityId, int userId) + { + try + { + var activity = _unitOfWork.ActivityRepository.GetById(activityId); + + if (activity == null) + { + return false; + } + + activity = _unitOfWork.ActivityRepository.GetAllIncludeFavs(activity.EditionId) + .FirstOrDefault(a => a.Id == activityId); + + if (activity?.UsersFav == null) + { + return false; + } + + var userToRemove = activity.UsersFav.FirstOrDefault(u => u.Id == userId); + + if (userToRemove == null) + { + return false; + } + + activity.UsersFav.Remove(userToRemove); + + _unitOfWork.ActivityRepository.Update(activity); + _unitOfWork.ActivityRepository.Save(); + + return true; + } + catch (Exception) + { + return false; + } + } + public int DeleteActivity(int activityId) { try @@ -195,13 +287,14 @@ private IEnumerable GetActiveActivitiesWithFilter(int type, List private IEnumerable GetFavActivitiesFiltered(int type, int editionId, List timeframes, string title, int userFav) { - var user = _unitOfWork.UserRepository.GetById(userFav); - var activeStatus = _activityStatusService .GetById((int)ActivityStatusEnum.ACT); var query = _unitOfWork.ActivityRepository.GetAllIncludeFavs(editionId) - .Where(a => a.UsersFav.Contains(user) && a.StatusId == activeStatus.Id); + .Where(a => a.EditionId == editionId + && a.StatusId == activeStatus.Id + && a.UsersFav != null + && a.UsersFav.Any(u => u.Id == userFav)); return ApplyActivityFilters(query, type, timeframes, title); } diff --git a/TaleEngine/TaleEngine.Bussiness/Commands/ActivityCommands.cs b/TaleEngine/TaleEngine.Bussiness/Commands/ActivityCommands.cs index f0c97e1..efded1c 100644 --- a/TaleEngine/TaleEngine.Bussiness/Commands/ActivityCommands.cs +++ b/TaleEngine/TaleEngine.Bussiness/Commands/ActivityCommands.cs @@ -140,5 +140,15 @@ public bool LeaveActivityCommand(ActivityEnrollmentRequest request) { return _activityService.RemoveUserFromActivity(request.ActivityId, request.UserId); } + + public bool AddFavouriteActivityCommand(ActivityEnrollmentRequest request) + { + return _activityService.AddFavouriteActivity(request.ActivityId, request.UserId); + } + + public bool RemoveFavouriteActivityCommand(ActivityEnrollmentRequest request) + { + return _activityService.RemoveFavouriteActivity(request.ActivityId, request.UserId); + } } } \ No newline at end of file diff --git a/TaleEngine/TaleEngine.Bussiness/Contracts/IActivityCommands.cs b/TaleEngine/TaleEngine.Bussiness/Contracts/IActivityCommands.cs index 8e21ed3..dc9bdaa 100644 --- a/TaleEngine/TaleEngine.Bussiness/Contracts/IActivityCommands.cs +++ b/TaleEngine/TaleEngine.Bussiness/Contracts/IActivityCommands.cs @@ -12,5 +12,7 @@ public interface IActivityCommands void ChangeActivityStatusCommand(int activityId, int statusId); ActivityEnrollmentResult EnrollInActivityCommand(ActivityEnrollmentRequest request); bool LeaveActivityCommand(ActivityEnrollmentRequest request); + bool AddFavouriteActivityCommand(ActivityEnrollmentRequest request); + bool RemoveFavouriteActivityCommand(ActivityEnrollmentRequest request); } } diff --git a/TaleEngine/TaleEngine.Bussiness/Contracts/IActivityQueries.cs b/TaleEngine/TaleEngine.Bussiness/Contracts/IActivityQueries.cs index b6d062c..a832bbd 100644 --- a/TaleEngine/TaleEngine.Bussiness/Contracts/IActivityQueries.cs +++ b/TaleEngine/TaleEngine.Bussiness/Contracts/IActivityQueries.cs @@ -10,6 +10,7 @@ public interface IActivityQueries List ActiveActivitiesQuery(int editionId); List PendingActivitiesQuery(int editionId); ActivityFilteredResult ActiveActivitiesFilteredQuery(ActivityFilterRequest activityFilterRequest, int userId = default); + List FavouriteActivitiesByUserQuery(int userId, int editionId); List LastThreeActivitiesQuery(int editionId); WaitingListResult GetWaitingListQuery(int activityId); int? GetUserPositionInWaitingListQuery(int activityId, int userId); diff --git a/TaleEngine/TaleEngine.Bussiness/Queries/ActivityQueries.cs b/TaleEngine/TaleEngine.Bussiness/Queries/ActivityQueries.cs index b4c2c90..849f3b3 100644 --- a/TaleEngine/TaleEngine.Bussiness/Queries/ActivityQueries.cs +++ b/TaleEngine/TaleEngine.Bussiness/Queries/ActivityQueries.cs @@ -84,6 +84,15 @@ public List LastThreeActivitiesQuery(int edition) return result; } + public List FavouriteActivitiesByUserQuery(int userId, int editionId) + { + var activities = _activityService.GetFavouriteActivitiesByUser(userId, editionId); + + var models = ActivityMapper.MapEntityToDto(activities); + + return models; + } + public WaitingListResult GetWaitingListQuery(int activityId) { var activity = _activityService.GetById(activityId); diff --git a/TaleEngine/TaleEngine.Data.Contracts/Repositories/IActivityRepository.cs b/TaleEngine/TaleEngine.Data.Contracts/Repositories/IActivityRepository.cs index c914ed7..8e5618c 100644 --- a/TaleEngine/TaleEngine.Data.Contracts/Repositories/IActivityRepository.cs +++ b/TaleEngine/TaleEngine.Data.Contracts/Repositories/IActivityRepository.cs @@ -5,7 +5,7 @@ namespace TaleEngine.Data.Contracts.Repositories { public interface IActivityRepository : IGenericRepository { - List GetAllIncludeFavs(int eventId); + List GetAllIncludeFavs(int editionId); List GetEventActivities(int eventId); List GetActivitiesByStatus(int edition, int status); List GetActiveActivitiesFiltered(int status, int type, int edition, string title, int skip, int activitiesPerPage); diff --git a/TaleEngine/TaleEngine.Data/Repositories/ActivityRepository.cs b/TaleEngine/TaleEngine.Data/Repositories/ActivityRepository.cs index e90cf41..d26cfd4 100644 --- a/TaleEngine/TaleEngine.Data/Repositories/ActivityRepository.cs +++ b/TaleEngine/TaleEngine.Data/Repositories/ActivityRepository.cs @@ -93,12 +93,18 @@ public int GetTotalActivities(int status, int type, int edition, string title) throw new System.NotImplementedException(); } - public List GetAllIncludeFavs(int eventId) + public List GetAllIncludeFavs(int editionId) { - return _context.Activities + var query = _context.Activities .Include(a => a.UsersFav) - .Where(a => !a.IsDeleted) - .ToList(); + .Where(a => !a.IsDeleted); + + if (editionId != default) + { + query = query.Where(a => a.EditionId == editionId); + } + + return query.ToList(); } public List GetAllIncludeEnrollments(int activityId) diff --git a/TaleEngine/TaleEngine.Testing/Controllers/V1/ActivityControllerTests.cs b/TaleEngine/TaleEngine.Testing/Controllers/V1/ActivityControllerTests.cs index 9358220..54e070f 100644 --- a/TaleEngine/TaleEngine.Testing/Controllers/V1/ActivityControllerTests.cs +++ b/TaleEngine/TaleEngine.Testing/Controllers/V1/ActivityControllerTests.cs @@ -365,6 +365,179 @@ public void ChangeActivityStatus_Success() commands.Verify(x => x.ChangeActivityStatusCommand(dto.StatusId, dto.ActivityId), Times.Once); } + [Fact] + public void GetFavouriteActivitiesByUser_Success() + { + // Arrange + int userId = 1; + int editionId = 2; + Mock commands = new(); + Mock queries = new(); + List dto = new() + { + new ActivityDto() + }; + + queries.Setup(x => x.FavouriteActivitiesByUserQuery(userId, editionId)) + .Returns(dto); + + ActivityController target = new(commands.Object, queries.Object); + + // Act + IActionResult result = target.GetFavouriteActivitiesByUser(userId, editionId); + + // Assert + var resultAsObjResult = result as ObjectResult; + + result.Should().NotBeNull(); + resultAsObjResult.StatusCode.Should().Be(StatusCodes.Status200OK); + + queries.Verify(x => x.FavouriteActivitiesByUserQuery(userId, editionId), Times.Once); + } + + [Fact] + public void GetFavouriteActivitiesByUser_EmptyResult_Success() + { + // Arrange + int userId = 1; + int editionId = 2; + Mock commands = new(); + Mock queries = new(); + List dto = new(); + + queries.Setup(x => x.FavouriteActivitiesByUserQuery(userId, editionId)) + .Returns(dto); + + ActivityController target = new(commands.Object, queries.Object); + + // Act + IActionResult result = target.GetFavouriteActivitiesByUser(userId, editionId); + + // Assert + var resultAsObjResult = result as StatusCodeResult; + + result.Should().NotBeNull(); + resultAsObjResult.StatusCode.Should().Be(StatusCodes.Status204NoContent); + + queries.Verify(x => x.FavouriteActivitiesByUserQuery(userId, editionId), Times.Once); + } + + [Fact] + public void AddFavouriteActivity_Success() + { + // Arrange + Mock commands = new(); + Mock queries = new(); + ActivityEnrollmentRequest request = new() + { + ActivityId = 1, + UserId = 1 + }; + + commands.Setup(x => x.AddFavouriteActivityCommand(request)) + .Returns(true); + + ActivityController target = new(commands.Object, queries.Object); + + // Act + IActionResult result = target.AddFavouriteActivity(request); + + // Assert + var resultAsObjResult = result as ObjectResult; + + result.Should().NotBeNull(); + resultAsObjResult.StatusCode.Should().Be(StatusCodes.Status200OK); + + commands.Verify(x => x.AddFavouriteActivityCommand(request), Times.Once); + } + + [Fact] + public void AddFavouriteActivity_Fail_Success() + { + // Arrange + Mock commands = new(); + Mock queries = new(); + ActivityEnrollmentRequest request = new() + { + ActivityId = 1, + UserId = 1 + }; + + commands.Setup(x => x.AddFavouriteActivityCommand(request)) + .Returns(false); + + ActivityController target = new(commands.Object, queries.Object); + + // Act + IActionResult result = target.AddFavouriteActivity(request); + + // Assert + var resultAsObjResult = result as ObjectResult; + + result.Should().NotBeNull(); + resultAsObjResult.StatusCode.Should().Be(StatusCodes.Status400BadRequest); + + commands.Verify(x => x.AddFavouriteActivityCommand(request), Times.Once); + } + + [Fact] + public void RemoveFavouriteActivity_Success() + { + // Arrange + Mock commands = new(); + Mock queries = new(); + ActivityEnrollmentRequest request = new() + { + ActivityId = 1, + UserId = 1 + }; + + commands.Setup(x => x.RemoveFavouriteActivityCommand(request)) + .Returns(true); + + ActivityController target = new(commands.Object, queries.Object); + + // Act + IActionResult result = target.RemoveFavouriteActivity(request); + + // Assert + var resultAsObjResult = result as ObjectResult; + + result.Should().NotBeNull(); + resultAsObjResult.StatusCode.Should().Be(StatusCodes.Status200OK); + + commands.Verify(x => x.RemoveFavouriteActivityCommand(request), Times.Once); + } + + [Fact] + public void RemoveFavouriteActivity_Fail_Success() + { + // Arrange + Mock commands = new(); + Mock queries = new(); + ActivityEnrollmentRequest request = new() + { + ActivityId = 1, + UserId = 1 + }; + + commands.Setup(x => x.RemoveFavouriteActivityCommand(request)) + .Returns(false); + + ActivityController target = new(commands.Object, queries.Object); + + // Act + IActionResult result = target.RemoveFavouriteActivity(request); + + // Assert + var resultAsObjResult = result as ObjectResult; + + result.Should().NotBeNull(); + resultAsObjResult.StatusCode.Should().Be(StatusCodes.Status400BadRequest); + + commands.Verify(x => x.RemoveFavouriteActivityCommand(request), Times.Once); + } + [Fact] public void GetActivitiesFiltered_Success() { diff --git a/TaleEngine/TaleEngine/Controllers/V1/ActivityController.cs b/TaleEngine/TaleEngine/Controllers/V1/ActivityController.cs index f839ca1..8f4f29b 100644 --- a/TaleEngine/TaleEngine/Controllers/V1/ActivityController.cs +++ b/TaleEngine/TaleEngine/Controllers/V1/ActivityController.cs @@ -71,14 +71,25 @@ public IActionResult GetActivitiesFiltered([FromBody] ActivityFilterRequest acti return Ok(result); } - [HttpPut("[action]")] - public IActionResult GetFavouriteActivitiesFiltered([FromBody] ActivityFilterRequest activityFilterRequest) + [HttpPut("[action]/{userId}")] + public IActionResult GetFavouriteActivitiesFiltered(int userId, [FromBody] ActivityFilterRequest activityFilterRequest) { - int userId = 1; - var result = _queries.ActiveActivitiesFilteredQuery(activityFilterRequest, userId); - if (result == null) + if (result == null || result.Activities == null || result.Activities.Count == 0) + { + return NoContent(); + } + + return Ok(result); + } + + [HttpGet("[action]/{userId}/{editionId}")] + public IActionResult GetFavouriteActivitiesByUser(int userId, int editionId) + { + var result = _queries.FavouriteActivitiesByUserQuery(userId, editionId); + + if (result == null || result.Count == 0) { return NoContent(); } @@ -162,6 +173,32 @@ public IActionResult LeaveActivity([FromBody] ActivityEnrollmentRequest request) return Ok(new { message = "Successfully left activity" }); } + [HttpPost("[action]")] + public IActionResult AddFavouriteActivity([FromBody] ActivityEnrollmentRequest request) + { + var result = _command.AddFavouriteActivityCommand(request); + + if (!result) + { + return BadRequest(new { message = "Failed to add favourite activity" }); + } + + return Ok(new { message = "Activity added to favourites" }); + } + + [HttpPost("[action]")] + public IActionResult RemoveFavouriteActivity([FromBody] ActivityEnrollmentRequest request) + { + var result = _command.RemoveFavouriteActivityCommand(request); + + if (!result) + { + return BadRequest(new { message = "Failed to remove favourite activity" }); + } + + return Ok(new { message = "Activity removed from favourites" }); + } + [HttpGet("[action]/{activityId}")] public IActionResult GetWaitingList(int activityId) { From 6fcc75fbc2f7b6d051f056e8e8791d3ed1b35851 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elena=20Guzm=C3=A1n=20Blanco?= Date: Tue, 31 Mar 2026 10:02:26 +0200 Subject: [PATCH 2/3] =?UTF-8?q?=F0=9F=94=A7=20Update=20SDK=20version=20to?= =?UTF-8?q?=2010.0.201=20in=20global.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- global.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global.json b/global.json index afb001f..b89e824 100644 --- a/global.json +++ b/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "10.0.100" + "version": "10.0.201" } } \ No newline at end of file From 20a2fb5eced2073956c09bf49c8cb2601d4bfbf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elena=20Guzm=C3=A1n=20Blanco?= Date: Wed, 1 Apr 2026 09:43:04 +0200 Subject: [PATCH 3/3] =?UTF-8?q?=F0=9F=90=9B=20Refactor=20activity=20filter?= =?UTF-8?q?ing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IActivityService.cs | 2 +- .../TaleEngine.Application/ActivityService.cs | 2 +- .../ActivityQueriesPaginationTests.cs | 69 +++++++++++++++++++ .../Queries/ActivityQueries.cs | 11 ++- 4 files changed, 79 insertions(+), 5 deletions(-) create mode 100644 TaleEngine/TaleEngine.Business.Testing/ActivityQueriesPaginationTests.cs diff --git a/TaleEngine/TaleEngine.Application.Contracts/IActivityService.cs b/TaleEngine/TaleEngine.Application.Contracts/IActivityService.cs index cea8854..d9f8b0d 100644 --- a/TaleEngine/TaleEngine.Application.Contracts/IActivityService.cs +++ b/TaleEngine/TaleEngine.Application.Contracts/IActivityService.cs @@ -10,7 +10,7 @@ public interface IActivityService List GetActiveActivities(int editionId); List GetPendingActivities(int editionId); List GetLastThreeActivities(int editionId); - IEnumerable GetActiveActivitiesFiltered(int typeId, int editionId, List timeframes, string title, int skipByPagination, int activitiesPerPage, int userFav = default); + IEnumerable GetActiveActivitiesFiltered(int typeId, int editionId, List timeframes, string title, int userFav = default); List GetFavouriteActivitiesByUser(int userId, int editionId); bool AddFavouriteActivity(int activityId, int userId); bool RemoveFavouriteActivity(int activityId, int userId); diff --git a/TaleEngine/TaleEngine.Application/ActivityService.cs b/TaleEngine/TaleEngine.Application/ActivityService.cs index 360f6a4..bc36ea6 100644 --- a/TaleEngine/TaleEngine.Application/ActivityService.cs +++ b/TaleEngine/TaleEngine.Application/ActivityService.cs @@ -51,7 +51,7 @@ public List GetPendingActivities(int editionId) } public IEnumerable GetActiveActivitiesFiltered(int typeId, int editionId, - List timeFrames, string title, int skipByPagination, int activitiesPerPage, int userFav = default) + List timeFrames, string title, int userFav = default) { IEnumerable query; diff --git a/TaleEngine/TaleEngine.Business.Testing/ActivityQueriesPaginationTests.cs b/TaleEngine/TaleEngine.Business.Testing/ActivityQueriesPaginationTests.cs new file mode 100644 index 0000000..6cde4ca --- /dev/null +++ b/TaleEngine/TaleEngine.Business.Testing/ActivityQueriesPaginationTests.cs @@ -0,0 +1,69 @@ +using FluentAssertions; +using Moq; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using TaleEngine.API.Contracts.Dtos.Requests; +using TaleEngine.CQRS.Queries; +using TaleEngine.Data.Contracts.Entities; +using TaleEngine.Services.Contracts; +using Xunit; + +namespace TaleEngine.CQRS.Testing +{ + [ExcludeFromCodeCoverage] + public class ActivityQueriesPaginationTests + { + [Fact] + public void ActiveActivitiesFilteredQuery_ShouldApplyPaginationAndCalculateTotalPages() + { + // Arrange + const int editionId = 1; + const int userId = 10; + + var request = new ActivityFilterRequest + { + EditionId = editionId, + Page = 1, + Title = string.Empty, + TimeFrames = new List() + }; + + var editionServiceMock = new Mock(); + var activityServiceMock = new Mock(); + + var allFilteredActivities = Enumerable.Range(1, 7) + .Select(i => new ActivityEntity + { + Id = i, + Title = $"Activity {i}", + EditionId = editionId + }) + .ToList(); + + editionServiceMock.Setup(x => x.GetById(editionId)) + .Returns(new EditionEntity { Id = editionId }); + + activityServiceMock.Setup(x => x.GetActiveActivitiesFiltered( + request.TypeId, + editionId, + request.TimeFrames, + request.Title, + userId)) + .Returns(allFilteredActivities); + + var target = new ActivityQueries(activityServiceMock.Object, editionServiceMock.Object); + + // Act + var result = target.ActiveActivitiesFilteredQuery(request, userId); + + // Assert + result.Should().NotBeNull(); + result.CurrentPage.Should().Be(1); + result.TotalPages.Should().Be(3); + result.Activities.Should().NotBeNull(); + result.Activities.Should().HaveCount(3); + result.Activities.Select(a => a.Id).Should().Equal(new[] { 4, 5, 6 }); + } + } +} diff --git a/TaleEngine/TaleEngine.Bussiness/Queries/ActivityQueries.cs b/TaleEngine/TaleEngine.Bussiness/Queries/ActivityQueries.cs index 849f3b3..700213b 100644 --- a/TaleEngine/TaleEngine.Bussiness/Queries/ActivityQueries.cs +++ b/TaleEngine/TaleEngine.Bussiness/Queries/ActivityQueries.cs @@ -55,10 +55,15 @@ public ActivityFilteredResult ActiveActivitiesFilteredQuery(ActivityFilterReques int skipByPagination = request.Page * ACTIVITIESPERPAGE; var activitiesQueried = _activityService.GetActiveActivitiesFiltered(request.TypeId, currentEdition.Id, - request.TimeFrames, request.Title, skipByPagination, ACTIVITIESPERPAGE, userId); + request.TimeFrames, request.Title, userId); - var totalActivities = activitiesQueried.Count(); - var activities = activitiesQueried.ToList(); + var filteredActivities = activitiesQueried.ToList(); + var totalActivities = filteredActivities.Count; + + var activities = filteredActivities + .Skip(skipByPagination) + .Take(ACTIVITIESPERPAGE) + .ToList(); var models = ActivityMapper.MapEntityToDto(activities);