Skip to content

Commit d1708b4

Browse files
committed
Merge branch 'feature/display-marketing-banner-mvc' into dev
2 parents a537e68 + ed97efa commit d1708b4

14 files changed

Lines changed: 197 additions & 126 deletions

File tree

src/Services/Marketing/Marketing.API/Controllers/CampaignsController.cs

Lines changed: 38 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
namespace Microsoft.eShopOnContainers.Services.Marketing.API.Controllers
22
{
3-
using Infrastructure.Repositories;
4-
using Microsoft.AspNetCore.Mvc;
5-
using Microsoft.eShopOnContainers.Services.Marketing.API.Infrastructure;
6-
using System.Threading.Tasks;
7-
using Microsoft.eShopOnContainers.Services.Marketing.API.Model;
8-
using Microsoft.EntityFrameworkCore;
9-
using Microsoft.eShopOnContainers.Services.Marketing.API.Dto;
10-
using System.Collections.Generic;
11-
using Microsoft.AspNetCore.Authorization;
123
using System;
134
using System.Linq;
14-
using Microsoft.Extensions.Options;
5+
using System.Collections.Generic;
6+
using Infrastructure.Repositories;
7+
using AspNetCore.Mvc;
8+
using Infrastructure;
9+
using System.Threading.Tasks;
10+
using Model;
11+
using EntityFrameworkCore;
12+
using Dto;
13+
using AspNetCore.Authorization;
14+
using Extensions.Options;
15+
using Microsoft.eShopOnContainers.Services.Marketing.API.ViewModel;
1516

1617
[Route("api/v1/[controller]")]
1718
[Authorize]
@@ -124,37 +125,43 @@ public async Task<IActionResult> Delete(int id)
124125
}
125126

126127
[HttpGet("user/{userId:guid}")]
127-
public async Task<IActionResult> GetCampaignsByUserId(Guid userId)
128+
public async Task<IActionResult> GetCampaignsByUserId(Guid userId, int pageSize = 10, int pageIndex = 0)
128129
{
129130
var marketingData = await _marketingDataRepository.GetAsync(userId.ToString());
130131

131-
if (marketingData is null)
132-
{
133-
return NotFound();
134-
}
135-
136132
var campaignDtoList = new List<CampaignDTO>();
137133

138-
//Get User Location Campaign
139-
foreach(var userLocation in marketingData.Locations)
134+
if (marketingData != null)
140135
{
141-
var userCampaignList = await _context.Rules
142-
.OfType<UserLocationRule>()
143-
.Include(c => c.Campaign)
144-
.Where(c => c.Campaign.From <= DateTime.Now
145-
&& c.Campaign.To >= DateTime.Now
146-
&& c.LocationId == userLocation.LocationId)
147-
.Select(c => c.Campaign)
148-
.ToListAsync();
149-
150-
if (userCampaignList != null && userCampaignList.Any())
136+
//Get User Location Campaign
137+
foreach (var userLocation in marketingData.Locations)
151138
{
152-
var userCampaignDtoList = MapCampaignModelListToDtoList(userCampaignList);
153-
campaignDtoList.AddRange(userCampaignDtoList);
139+
var userCampaignList = await _context.Rules
140+
.OfType<UserLocationRule>()
141+
.Include(c => c.Campaign)
142+
.Where(c => c.Campaign.From <= DateTime.Now
143+
&& c.Campaign.To >= DateTime.Now
144+
&& c.LocationId == userLocation.LocationId)
145+
.Select(c => c.Campaign)
146+
.ToListAsync();
147+
148+
if (userCampaignList != null && userCampaignList.Any())
149+
{
150+
var userCampaignDtoList = MapCampaignModelListToDtoList(userCampaignList);
151+
campaignDtoList.AddRange(userCampaignDtoList);
152+
}
154153
}
155154
}
156155

157-
return Ok(campaignDtoList);
156+
var totalItems = campaignDtoList.Count();
157+
campaignDtoList = campaignDtoList
158+
.Skip(pageSize * pageIndex)
159+
.Take(pageSize).ToList();
160+
161+
var model = new PaginatedItemsViewModel<CampaignDTO>(
162+
pageIndex, pageSize, totalItems, campaignDtoList);
163+
164+
return Ok(model);
158165
}
159166

160167

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
namespace Microsoft.eShopOnContainers.Services.Marketing.API.ViewModel
2+
{
3+
using System.Collections.Generic;
4+
5+
public class PaginatedItemsViewModel<TEntity> where TEntity : class
6+
{
7+
public int PageIndex { get; private set; }
8+
9+
public int PageSize { get; private set; }
10+
11+
public long Count { get; private set; }
12+
13+
public IEnumerable<TEntity> Data { get; private set; }
14+
15+
public PaginatedItemsViewModel(int pageIndex, int pageSize, long count, IEnumerable<TEntity> data)
16+
{
17+
this.PageIndex = pageIndex;
18+
this.PageSize = pageSize;
19+
this.Count = count;
20+
this.Data = data;
21+
}
22+
}
23+
}
Lines changed: 24 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,42 @@
11
namespace Microsoft.eShopOnContainers.WebMVC.Controllers
22
{
3-
using Microsoft.AspNetCore.Authorization;
4-
using Microsoft.AspNetCore.Mvc;
5-
using Microsoft.eShopOnContainers.WebMVC.Models;
6-
using Microsoft.eShopOnContainers.WebMVC.Services;
7-
using Microsoft.eShopOnContainers.WebMVC.ViewModels;
8-
using System.Collections.Generic;
3+
using AspNetCore.Authorization;
4+
using AspNetCore.Mvc;
5+
using Services;
6+
using ViewModels;
97
using System.Threading.Tasks;
8+
using System;
9+
using ViewModels.Pagination;
10+
using global::WebMVC.ViewModels;
1011

1112
[Authorize]
1213
public class CampaignsController : Controller
1314
{
14-
private ICampaignService _campaignService;
15+
private readonly ICampaignService _campaignService;
1516

1617
public CampaignsController(ICampaignService campaignService) =>
1718
_campaignService = campaignService;
1819

19-
public async Task<IActionResult> Index()
20+
public async Task<IActionResult> Index(int page = 0, int pageSize = 10)
2021
{
21-
var campaignDtoList = await _campaignService.GetCampaigns();
22+
var campaignList = await _campaignService.GetCampaigns(pageSize, page);
2223

23-
if(campaignDtoList is null)
24+
var vm = new CampaignViewModel()
2425
{
25-
return View();
26-
}
26+
CampaignItems = campaignList.Data,
27+
PaginationInfo = new PaginationInfo()
28+
{
29+
ActualPage = page,
30+
ItemsPerPage = pageSize,
31+
TotalItems = campaignList.Count,
32+
TotalPages = (int)Math.Ceiling(((decimal)campaignList.Count / pageSize))
33+
}
34+
};
2735

28-
var campaignList = MapCampaignModelListToDtoList(campaignDtoList);
36+
vm.PaginationInfo.Next = (vm.PaginationInfo.ActualPage == vm.PaginationInfo.TotalPages - 1) ? "is-disabled" : "";
37+
vm.PaginationInfo.Previous = (vm.PaginationInfo.ActualPage == 0) ? "is-disabled" : "";
2938

30-
return View(campaignList);
39+
return View(vm);
3140
}
3241

3342
public async Task<IActionResult> Details(int id)
@@ -39,7 +48,7 @@ public async Task<IActionResult> Details(int id)
3948
return NotFound();
4049
}
4150

42-
var campaign = new Campaign
51+
var campaign = new CampaignItem
4352
{
4453
Id = campaignDto.Id,
4554
Name = campaignDto.Name,
@@ -51,30 +60,5 @@ public async Task<IActionResult> Details(int id)
5160

5261
return View(campaign);
5362
}
54-
55-
private List<Campaign> MapCampaignModelListToDtoList(IEnumerable<CampaignDTO> campaignDtoList)
56-
{
57-
var campaignList = new List<Campaign>();
58-
59-
foreach(var campaignDto in campaignDtoList)
60-
{
61-
campaignList.Add(MapCampaignDtoToModel(campaignDto));
62-
}
63-
64-
return campaignList;
65-
}
66-
67-
private Campaign MapCampaignDtoToModel(CampaignDTO campaign)
68-
{
69-
return new Campaign
70-
{
71-
Id = campaign.Id,
72-
Name = campaign.Name,
73-
Description = campaign.Description,
74-
From = campaign.From,
75-
To = campaign.To,
76-
PictureUri = campaign.PictureUri
77-
};
78-
}
7963
}
8064
}

src/Web/WebMVC/Infrastructure/API.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,9 @@ public static string GetAllTypes(string baseUri)
8484

8585
public static class Marketing
8686
{
87-
public static string GetAllCampaigns(string baseUri, Guid userId)
87+
public static string GetAllCampaigns(string baseUri, string userId, int take, int page)
8888
{
89-
return $"{baseUri}user/{userId}";
89+
return $"{baseUri}user/{userId}?pageSize={take}&pageIndex={page}";
9090
}
9191

9292
public static string GetAllCampaignById(string baseUri, int id)
@@ -95,4 +95,4 @@ public static string GetAllCampaignById(string baseUri, int id)
9595
}
9696
}
9797
}
98-
}
98+
}

src/Web/WebMVC/Services/CampaignService.cs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
namespace Microsoft.eShopOnContainers.WebMVC.Services
22
{
33
using global::WebMVC.Infrastructure;
4-
using Microsoft.AspNetCore.Authentication;
5-
using Microsoft.AspNetCore.Http;
6-
using Microsoft.eShopOnContainers.BuildingBlocks.Resilience.Http;
7-
using Microsoft.eShopOnContainers.WebMVC.Models;
4+
using AspNetCore.Authentication;
5+
using AspNetCore.Http;
6+
using BuildingBlocks.Resilience.Http;
7+
using ViewModels;
88
using Microsoft.Extensions.Logging;
99
using Microsoft.Extensions.Options;
1010
using Newtonsoft.Json;
1111
using System;
12-
using System.Collections.Generic;
1312
using System.Threading.Tasks;
1413

1514
public class CampaignService : ICampaignService
@@ -31,28 +30,28 @@ public CampaignService(IOptionsSnapshot<AppSettings> settings, IHttpClient httpC
3130
_httpContextAccesor = httpContextAccesor ?? throw new ArgumentNullException(nameof(httpContextAccesor));
3231
}
3332

34-
public async Task<IEnumerable<CampaignDTO>> GetCampaigns()
33+
public async Task<Campaign> GetCampaigns(int pageSize, int pageIndex)
3534
{
3635
var userId = GetUserIdentity();
37-
var allCampaignItemsUri = API.Marketing.GetAllCampaigns(_remoteServiceBaseUrl, Guid.Parse(userId));
36+
var allCampaignItemsUri = API.Marketing.GetAllCampaigns(_remoteServiceBaseUrl,
37+
userId, pageSize, pageIndex);
3838

3939
var authorizationToken = await GetUserTokenAsync();
4040
var dataString = await _apiClient.GetStringAsync(allCampaignItemsUri, authorizationToken);
4141

42-
var response = JsonConvert.DeserializeObject<IEnumerable<CampaignDTO>>(dataString);
42+
var response = JsonConvert.DeserializeObject<Campaign>(dataString);
4343

4444
return response;
4545
}
4646

47-
public async Task<CampaignDTO> GetCampaignById(int id)
47+
public async Task<CampaignItem> GetCampaignById(int id)
4848
{
49-
var userId = GetUserIdentity();
5049
var campaignByIdItemUri = API.Marketing.GetAllCampaignById(_remoteServiceBaseUrl, id);
5150

5251
var authorizationToken = await GetUserTokenAsync();
5352
var dataString = await _apiClient.GetStringAsync(campaignByIdItemUri, authorizationToken);
5453

55-
var response = JsonConvert.DeserializeObject<CampaignDTO>(dataString);
54+
var response = JsonConvert.DeserializeObject<CampaignItem>(dataString);
5655

5756
return response;
5857
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
namespace Microsoft.eShopOnContainers.WebMVC.Services
22
{
3-
using Microsoft.eShopOnContainers.WebMVC.Models;
43
using System.Collections.Generic;
54
using System.Threading.Tasks;
5+
using ViewModels;
66

77
public interface ICampaignService
88
{
9-
Task<IEnumerable<CampaignDTO>> GetCampaigns();
9+
Task<Campaign> GetCampaigns(int pageSize, int pageIndex);
1010

11-
Task<CampaignDTO> GetCampaignById(int id);
11+
Task<CampaignItem> GetCampaignById(int id);
1212
}
1313
}
Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,12 @@
11
namespace Microsoft.eShopOnContainers.WebMVC.ViewModels
22
{
3-
using System;
3+
using System.Collections.Generic;
44

55
public class Campaign
66
{
7-
public int Id { get; set; }
8-
9-
public string Name { get; set; }
10-
11-
public string Description { get; set; }
12-
13-
public DateTime From { get; set; }
14-
15-
public DateTime To { get; set; }
16-
17-
public string PictureUri { get; set; }
7+
public int PageIndex { get; set; }
8+
public int PageSize { get; set; }
9+
public int Count { get; set; }
10+
public List<CampaignItem> Data { get; set; }
1811
}
1912
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
namespace Microsoft.eShopOnContainers.WebMVC.Models
1+
namespace Microsoft.eShopOnContainers.WebMVC.ViewModels
22
{
33
using System;
44

5-
public class CampaignDTO
5+
public class CampaignItem
66
{
77
public int Id { get; set; }
88

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
namespace WebMVC.ViewModels
2+
{
3+
using System.Collections.Generic;
4+
using Microsoft.eShopOnContainers.WebMVC.ViewModels;
5+
using Microsoft.eShopOnContainers.WebMVC.ViewModels.Pagination;
6+
7+
public class CampaignViewModel
8+
{
9+
public IEnumerable<CampaignItem> CampaignItems { get; set; }
10+
public PaginationInfo PaginationInfo { get; set; }
11+
}
12+
}

src/Web/WebMVC/Views/Campaigns/Details.cshtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
@{
22
ViewData["Title"] = "Campaign details";
3-
@model Microsoft.eShopOnContainers.WebMVC.ViewModels.Campaign
3+
@model CampaignItem
44
}
55
<section class="esh-campaigns-hero">
66
<div class="container">

0 commit comments

Comments
 (0)