Add more web api methods on catalog.api. Implement pagination featue.
This commit is contained in:
parent
fbf6adbf66
commit
da2282783b
@ -3,10 +3,11 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers
|
|||||||
{
|
{
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.eShopOnContainers.Services.Catalog.API.Model;
|
using Microsoft.eShopOnContainers.Services.Catalog.API.Infrastructure;
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using ViewModel;
|
||||||
|
|
||||||
[Route("api/v1/[controller]")]
|
[Route("api/v1/[controller]")]
|
||||||
public class CatalogController : ControllerBase
|
public class CatalogController : ControllerBase
|
||||||
@ -18,29 +19,71 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers
|
|||||||
_context = context;
|
_context = context;
|
||||||
}
|
}
|
||||||
|
|
||||||
// GET api/v1/[controller]/all
|
// GET api/v1/[controller]/items/[?pageSize=3&pageIndex=10]
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Route("[action]")]
|
[Route("[action]")]
|
||||||
public async Task<IActionResult> All()
|
public async Task<IActionResult> Items(int pageSize = 10, int pageIndex = 0)
|
||||||
{
|
{
|
||||||
var items = await _context.CatalogItems
|
var totalItems = await _context.CatalogItems
|
||||||
|
.LongCountAsync();
|
||||||
|
|
||||||
|
var itemsOnPage = await _context.CatalogItems
|
||||||
|
.Skip(pageSize * pageIndex)
|
||||||
|
.Take(pageSize)
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
var model = new PaginatedItemsViewModel<CatalogItem>(
|
||||||
|
pageIndex, pageSize, totalItems, itemsOnPage);
|
||||||
|
|
||||||
|
return Ok(model);
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET api/v1/[controller]/FindCatalogItemByName/samplename
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("[action]/{name:minlength(1)}")]
|
||||||
|
public async Task<IActionResult> Items(string name, int pageSize = 10, int pageIndex = 0)
|
||||||
|
{
|
||||||
|
|
||||||
|
var totalItems = await _context.CatalogItems
|
||||||
|
.Where(c => c.Name.StartsWith(name))
|
||||||
|
.LongCountAsync();
|
||||||
|
|
||||||
|
var itemsOnPage = await _context.CatalogItems
|
||||||
|
.Where(c => c.Name.StartsWith(name))
|
||||||
|
.Skip(pageSize * pageIndex)
|
||||||
|
.Take(pageSize)
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
var model = new PaginatedItemsViewModel<CatalogItem>(
|
||||||
|
pageIndex, pageSize, totalItems, itemsOnPage);
|
||||||
|
|
||||||
|
return Ok(model);
|
||||||
|
}
|
||||||
|
|
||||||
|
// GET api/v1/[controller]/CatalogTypes
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
[Route("[action]")]
|
||||||
|
public async Task<IActionResult> CatalogTypes()
|
||||||
|
{
|
||||||
|
var items = await _context.CatalogTypes
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|
||||||
return Ok(items);
|
return Ok(items);
|
||||||
}
|
}
|
||||||
|
|
||||||
// GET api/v1/[controller]/FindByName/samplename
|
// GET api/v1/[controller]/CatalogBrands
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Route("FindByName/{name:minlength(1)}")]
|
[Route("[action]")]
|
||||||
public async Task<IActionResult> Find(string name)
|
public async Task<IActionResult> CatalogBrands()
|
||||||
{
|
{
|
||||||
var items = await _context.CatalogItems
|
var items = await _context.CatalogBrands
|
||||||
.Where(c => c.Name.StartsWith(name, StringComparison.CurrentCultureIgnoreCase))
|
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|
||||||
return Ok();
|
return Ok(items);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
namespace Microsoft.eShopOnContainers.Services.Catalog.API.Infrastructure
|
||||||
|
{
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
|
||||||
|
public class CatalogBrand
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
public string Brand { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,86 @@
|
|||||||
|
namespace Microsoft.eShopOnContainers.Services.Catalog.API.Infrastructure
|
||||||
|
{
|
||||||
|
using EntityFrameworkCore.Metadata.Builders;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Npgsql.EntityFrameworkCore.PostgreSQL;
|
||||||
|
|
||||||
|
public class CatalogContext : DbContext
|
||||||
|
{
|
||||||
|
public CatalogContext(DbContextOptions options) : base(options)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public DbSet<CatalogItem> CatalogItems { get; set; }
|
||||||
|
|
||||||
|
public DbSet<CatalogBrand> CatalogBrands { get; set; }
|
||||||
|
|
||||||
|
public DbSet<CatalogType> CatalogTypes { get; set; }
|
||||||
|
|
||||||
|
protected override void OnModelCreating(ModelBuilder builder)
|
||||||
|
{
|
||||||
|
builder.HasSequence("idseqcatalog")
|
||||||
|
.StartsAt(1)
|
||||||
|
.IncrementsBy(1);
|
||||||
|
|
||||||
|
builder.HasSequence("idseqcatalogbrand")
|
||||||
|
.StartsAt(1)
|
||||||
|
.IncrementsBy(1);
|
||||||
|
|
||||||
|
builder.HasSequence("idseqcatalogtype")
|
||||||
|
.StartsAt(1)
|
||||||
|
.IncrementsBy(1);
|
||||||
|
|
||||||
|
builder.Entity<CatalogItem>(ConfigureCatalogItem);
|
||||||
|
builder.Entity<CatalogBrand>(ConfigureCatalogBrand);
|
||||||
|
builder.Entity<CatalogType>(ConfigureCatalogType);
|
||||||
|
|
||||||
|
builder.HasPostgresExtension("uuid-ossp");
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigureCatalogItem(EntityTypeBuilder<CatalogItem> builder)
|
||||||
|
{
|
||||||
|
builder.ForNpgsqlToTable("catalog");
|
||||||
|
|
||||||
|
builder.Property(ci => ci.Id)
|
||||||
|
.HasDefaultValueSql("nextval('idseqcatalog')")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
builder.Property(ci => ci.Name)
|
||||||
|
.IsRequired(true)
|
||||||
|
.HasMaxLength(50);
|
||||||
|
|
||||||
|
builder.Property(ci => ci.Price)
|
||||||
|
.IsRequired(true);
|
||||||
|
|
||||||
|
builder.Property(ci => ci.PictureUri)
|
||||||
|
.IsRequired(false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigureCatalogBrand(EntityTypeBuilder<CatalogBrand> builder)
|
||||||
|
{
|
||||||
|
builder.ForNpgsqlToTable("catalogbrand");
|
||||||
|
|
||||||
|
builder.Property(cb => cb.Id)
|
||||||
|
.HasDefaultValueSql("nextval('idseqcatalogbrand')")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
builder.Property(cb => cb.Brand)
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigureCatalogType(EntityTypeBuilder<CatalogType> builder)
|
||||||
|
{
|
||||||
|
builder.ForNpgsqlToTable("catalogtype");
|
||||||
|
|
||||||
|
builder.Property(cb => cb.Id)
|
||||||
|
.HasDefaultValueSql("nextval('idseqcatalogtype')")
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
builder.Property(cb => cb.Type)
|
||||||
|
.IsRequired()
|
||||||
|
.HasMaxLength(100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,75 @@
|
|||||||
|
namespace Microsoft.eShopOnContainers.Services.Catalog.API.Infrastructure
|
||||||
|
{
|
||||||
|
using Microsoft.AspNetCore.Builder;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
public class CatalogContextSeed
|
||||||
|
{
|
||||||
|
public static async Task SeedAsync(IApplicationBuilder applicationBuilder)
|
||||||
|
{
|
||||||
|
var context = (CatalogContext)applicationBuilder
|
||||||
|
.ApplicationServices.GetService(typeof(CatalogContext));
|
||||||
|
|
||||||
|
using (context)
|
||||||
|
{
|
||||||
|
context.Database.EnsureCreated();
|
||||||
|
|
||||||
|
if (!context.CatalogBrands.Any())
|
||||||
|
{
|
||||||
|
context.CatalogBrands.AddRange(
|
||||||
|
GetPreconfiguredCatalogBrands());
|
||||||
|
|
||||||
|
await context.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!context.CatalogTypes.Any())
|
||||||
|
{
|
||||||
|
context.CatalogTypes.AddRange(
|
||||||
|
GetPreconfiguredCatalogTypes());
|
||||||
|
|
||||||
|
await context.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!context.CatalogItems.Any())
|
||||||
|
{
|
||||||
|
context.CatalogItems.AddRange(
|
||||||
|
GetPreconfiguredItems());
|
||||||
|
|
||||||
|
await context.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static IEnumerable<CatalogBrand> GetPreconfiguredCatalogBrands()
|
||||||
|
{
|
||||||
|
return new List<CatalogBrand>()
|
||||||
|
{
|
||||||
|
new CatalogBrand() { Brand="Azure"},
|
||||||
|
new CatalogBrand() { Brand = "Visual Studio" }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
static IEnumerable<CatalogType> GetPreconfiguredCatalogTypes()
|
||||||
|
{
|
||||||
|
return new List<CatalogType>()
|
||||||
|
{
|
||||||
|
new CatalogType() { Type="Mug"},
|
||||||
|
new CatalogType() { Type = "T-Shirt" }
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
static IEnumerable<CatalogItem> GetPreconfiguredItems()
|
||||||
|
{
|
||||||
|
return new List<CatalogItem>()
|
||||||
|
{
|
||||||
|
new CatalogItem() { CatalogTypeId=2,CatalogBrandId=2, Description = "Roslyn Red T-Shirt", Name = "Roslyn Red T-Shirt", Price = 12, PictureUri = "https://fakeimg.pl/370x240/EEEEEE/000/?text=RoslynRedT-Shirt" },
|
||||||
|
new CatalogItem() { CatalogTypeId=1,CatalogBrandId=2, Description = "Cupt Black & White Mug", Name = "Cupt Black & White Mug", Price= 17, PictureUri = "https://fakeimg.pl/370x240/EEEEEE/000/?text=CuptBlack&WhiteMug" },
|
||||||
|
new CatalogItem() { CatalogTypeId=2,CatalogBrandId=2, Description = "Prism White T-Shirt", Name = "Prism White T-Shirt", Price = 12, PictureUri = "http://fakeimg.pl/370x240/EEEEEE/000/?text=.PrismWhiteT-Shirt" },
|
||||||
|
new CatalogItem() { CatalogTypeId=2,CatalogBrandId=1, Description = ".NET Bot Black Sweatshirt", Name = ".NET Bot Black Sweatshirt", Price = 19.5M, PictureUri = "http://fakeimg.pl/370x240/EEEEEE/000/?text=.NETBotBlack" },
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
namespace Microsoft.eShopOnContainers.Services.Catalog.API.Model
|
namespace Microsoft.eShopOnContainers.Services.Catalog.API.Infrastructure
|
||||||
{
|
{
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
@ -14,6 +14,14 @@
|
|||||||
|
|
||||||
public string PictureUri { get; set; }
|
public string PictureUri { get; set; }
|
||||||
|
|
||||||
|
public int CatalogTypeId { get; set; }
|
||||||
|
|
||||||
|
public CatalogType CatalogType { get; set; }
|
||||||
|
|
||||||
|
public int CatalogBrandId { get; set; }
|
||||||
|
|
||||||
|
public CatalogBrand CatalogBrand { get; set; }
|
||||||
|
|
||||||
public CatalogItem() { }
|
public CatalogItem() { }
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
namespace Microsoft.eShopOnContainers.Services.Catalog.API.Infrastructure
|
||||||
|
{
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
public class CatalogType
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
public string Type { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -1,46 +0,0 @@
|
|||||||
namespace Microsoft.eShopOnContainers.Services.Catalog.API.Model
|
|
||||||
{
|
|
||||||
using EntityFrameworkCore.Metadata.Builders;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Npgsql.EntityFrameworkCore.PostgreSQL;
|
|
||||||
|
|
||||||
public class CatalogContext : DbContext
|
|
||||||
{
|
|
||||||
public CatalogContext(DbContextOptions options) : base(options)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public DbSet<CatalogItem> CatalogItems { get; set; }
|
|
||||||
|
|
||||||
protected override void OnModelCreating(ModelBuilder builder)
|
|
||||||
{
|
|
||||||
builder.HasSequence("idseq")
|
|
||||||
.StartsAt(1)
|
|
||||||
.IncrementsBy(1);
|
|
||||||
|
|
||||||
builder.Entity<CatalogItem>(ConfigureCatalogItem);
|
|
||||||
|
|
||||||
builder.HasPostgresExtension("uuid-ossp");
|
|
||||||
}
|
|
||||||
|
|
||||||
void ConfigureCatalogItem(EntityTypeBuilder<CatalogItem> builder)
|
|
||||||
{
|
|
||||||
builder.ForNpgsqlToTable("catalog");
|
|
||||||
|
|
||||||
builder.Property(ci => ci.Id)
|
|
||||||
.HasDefaultValueSql("nextval('idseq')")
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
builder.Property(ci => ci.Name)
|
|
||||||
.IsRequired(true)
|
|
||||||
.HasMaxLength(50);
|
|
||||||
|
|
||||||
builder.Property(ci => ci.Price)
|
|
||||||
.IsRequired(true);
|
|
||||||
|
|
||||||
builder.Property(ci => ci.PictureUri)
|
|
||||||
.IsRequired(false);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,67 +0,0 @@
|
|||||||
namespace Microsoft.eShopOnContainers.Services.Catalog.API.Model
|
|
||||||
{
|
|
||||||
using Microsoft.AspNetCore.Builder;
|
|
||||||
using Model;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
public class CatalogContextSeed
|
|
||||||
{
|
|
||||||
public static async Task SeedAsync(IApplicationBuilder applicationBuilder)
|
|
||||||
{
|
|
||||||
var context = (CatalogContext)applicationBuilder
|
|
||||||
.ApplicationServices.GetService(typeof(CatalogContext));
|
|
||||||
|
|
||||||
using (context)
|
|
||||||
{
|
|
||||||
context.Database.EnsureCreated();
|
|
||||||
|
|
||||||
if (!context.CatalogItems.Any())
|
|
||||||
{
|
|
||||||
context.CatalogItems.AddRange(
|
|
||||||
GetPreconfiguredItems());
|
|
||||||
|
|
||||||
await context.SaveChangesAsync();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static IEnumerable<CatalogItem> GetPreconfiguredItems()
|
|
||||||
{
|
|
||||||
return new List<CatalogItem>()
|
|
||||||
{
|
|
||||||
new CatalogItem() { Description = "Roslyn Red T-Shirt", Name = "Roslyn Red T-Shirt", Price = 12, PictureUri = "https://fakeimg.pl/370x240/EEEEEE/000/?text=RoslynRedT-Shirt" },
|
|
||||||
new CatalogItem() { Description = "Cupt Black & White Mug", Name = "Cupt Black & White Mug", Price= 17, PictureUri = "https://fakeimg.pl/370x240/EEEEEE/000/?text=CuptBlack&WhiteMug" },
|
|
||||||
new CatalogItem() { Description = "Prism White T-Shirt", Name = "Prism White T-Shirt", Price = 12, PictureUri = "http://fakeimg.pl/370x240/EEEEEE/000/?text=.PrismWhiteT-Shirt" },
|
|
||||||
new CatalogItem() { Description = ".NET Bot Black Sweatshirt", Name = ".NET Bot Black Sweatshirt", Price = 19.5M, PictureUri = "http://fakeimg.pl/370x240/EEEEEE/000/?text=.NETBotBlack" },
|
|
||||||
new CatalogItem() { Description = "Roslyn Red T-Shirt", Name = "Roslyn Red T-Shirt", Price = 12, PictureUri = "http://fakeimg.pl/370x240/EEEEEE/000/?text=RoslynRedT-Shirt" },
|
|
||||||
new CatalogItem() { Description = "Cupt Black & White Mug", Name = "Cupt Black & White Mug", Price= 17, PictureUri = "https://fakeimg.pl/370x240/EEEEEE/000/?text=CuptBlack&WhiteMug" },
|
|
||||||
new CatalogItem() { Description = "Prism White T-Shirt", Name = "Prism White T-Shirt", Price = 12, PictureUri = "http://fakeimg.pl/370x240/EEEEEE/000/?text=.PrismWhiteT-Shirt" },
|
|
||||||
new CatalogItem() { Description = ".NET Bot Black Sweatshirt", Name = ".NET Bot Black Sweatshirt", Price = 19.5M, PictureUri = "http://fakeimg.pl/370x240/EEEEEE/000/?text=.NETBotBlack" },
|
|
||||||
new CatalogItem() { Description = "Roslyn Red T-Shirt", Name = "Roslyn Red T-Shirt", Price = 12, PictureUri = "http://fakeimg.pl/370x240/EEEEEE/000/?text=RoslynRedT-Shirt" },
|
|
||||||
new CatalogItem() { Description = "Cupt Black & White Mug", Name = "Cupt Black & White Mug", Price= 17, PictureUri = "https://fakeimg.pl/370x240/EEEEEE/000/?text=CuptBlack&WhiteMug" },
|
|
||||||
new CatalogItem() { Description = "Prism White T-Shirt", Name = "Prism White T-Shirt", Price = 12, PictureUri = "http://fakeimg.pl/370x240/EEEEEE/000/?text=.PrismWhiteT-Shirt" },
|
|
||||||
new CatalogItem() { Description = ".NET Bot Black Sweatshirt", Name = ".NET Bot Black Sweatshirt", Price = 19.5M, PictureUri = "http://fakeimg.pl/370x240/EEEEEE/000/?text=.NETBotBlack" },
|
|
||||||
new CatalogItem() { Description = "Roslyn Red T-Shirt", Name = "Roslyn Red T-Shirt", Price = 12, PictureUri = "http://fakeimg.pl/370x240/EEEEEE/000/?text=RoslynRedT-Shirt" },
|
|
||||||
new CatalogItem() { Description = "Cupt Black & White Mug", Name = "Cupt Black & White Mug", Price= 17, PictureUri = "https://fakeimg.pl/370x240/EEEEEE/000/?text=CuptBlack&WhiteMug" },
|
|
||||||
new CatalogItem() { Description = "Prism White T-Shirt", Name = "Prism White T-Shirt", Price = 12, PictureUri = "http://fakeimg.pl/370x240/EEEEEE/000/?text=.PrismWhiteT-Shirt" },
|
|
||||||
new CatalogItem() { Description = ".NET Bot Black Sweatshirt", Name = ".NET Bot Black Sweatshirt", Price = 19.5M, PictureUri = "http://fakeimg.pl/370x240/EEEEEE/000/?text=.NETBotBlack" },
|
|
||||||
new CatalogItem() { Description = "Roslyn Red T-Shirt", Name = "Roslyn Red T-Shirt", Price = 12, PictureUri = "http://fakeimg.pl/370x240/EEEEEE/000/?text=RoslynRedT-Shirt" },
|
|
||||||
new CatalogItem() { Description = "Cupt Black & White Mug", Name = "Cupt Black & White Mug", Price= 17, PictureUri = "https://fakeimg.pl/370x240/EEEEEE/000/?text=CuptBlack&WhiteMug" },
|
|
||||||
new CatalogItem() { Description = "Prism White T-Shirt", Name = "Prism White T-Shirt", Price = 12, PictureUri = "http://fakeimg.pl/370x240/EEEEEE/000/?text=.PrismWhiteT-Shirt" },
|
|
||||||
new CatalogItem() { Description = ".NET Bot Black Sweatshirt", Name = ".NET Bot Black Sweatshirt", Price = 19.5M, PictureUri = "http://fakeimg.pl/370x240/EEEEEE/000/?text=.NETBotBlack" },
|
|
||||||
new CatalogItem() { Description = "Roslyn Red T-Shirt", Name = "Roslyn Red T-Shirt", Price = 12, PictureUri = "http://fakeimg.pl/370x240/EEEEEE/000/?text=RoslynRedT-Shirt" },
|
|
||||||
new CatalogItem() { Description = "Cupt Black & White Mug", Name = "Cupt Black & White Mug", Price= 17, PictureUri = "https://fakeimg.pl/370x240/EEEEEE/000/?text=CuptBlack&WhiteMug" },
|
|
||||||
new CatalogItem() { Description = "Prism White T-Shirt", Name = "Prism White T-Shirt", Price = 12, PictureUri = "http://fakeimg.pl/370x240/EEEEEE/000/?text=.PrismWhiteT-Shirt" },
|
|
||||||
new CatalogItem() { Description = ".NET Bot Black Sweatshirt", Name = ".NET Bot Black Sweatshirt", Price = 19.5M, PictureUri = "http://fakeimg.pl/370x240/EEEEEE/000/?text=.NETBotBlack" },
|
|
||||||
new CatalogItem() { Description = "Roslyn Red T-Shirt", Name = "Roslyn Red T-Shirt", Price = 12, PictureUri = "http://fakeimg.pl/370x240/EEEEEE/000/?text=RoslynRedT-Shirt" },
|
|
||||||
new CatalogItem() { Description = "Cupt Black & White Mug", Name = "Cupt Black & White Mug", Price= 17, PictureUri = "https://fakeimg.pl/370x240/EEEEEE/000/?text=CuptBlack&WhiteMug" },
|
|
||||||
new CatalogItem() { Description = "Prism White T-Shirt", Name = "Prism White T-Shirt", Price = 12, PictureUri = "http://fakeimg.pl/370x240/EEEEEE/000/?text=.PrismWhiteT-Shirt" },
|
|
||||||
new CatalogItem() { Description = ".NET Bot Black Sweatshirt", Name = ".NET Bot Black Sweatshirt", Price = 19.5M, PictureUri = "http://fakeimg.pl/370x240/EEEEEE/000/?text=.NETBotBlack" }
|
|
||||||
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -4,7 +4,7 @@ using Microsoft.AspNetCore.Mvc.ApiExplorer;
|
|||||||
using Microsoft.AspNetCore.Mvc.Formatters;
|
using Microsoft.AspNetCore.Mvc.Formatters;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.eShopOnContainers.Services.Catalog.API.Model;
|
using Microsoft.eShopOnContainers.Services.Catalog.API.Infrastructure;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
namespace Microsoft.eShopOnContainers.Services.Catalog.API.ViewModel
|
||||||
|
{
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
|
||||||
|
public class PaginatedItemsViewModel<TEntity> where TEntity : class
|
||||||
|
{
|
||||||
|
public int PageIndex { get; private set; }
|
||||||
|
|
||||||
|
public int PageSize { get; private set; }
|
||||||
|
|
||||||
|
public long Count { get; private set; }
|
||||||
|
|
||||||
|
public IEnumerable<TEntity> Data { get; private set; }
|
||||||
|
|
||||||
|
public PaginatedItemsViewModel(int pageIndex, int pageSize, long count, IEnumerable<TEntity> data)
|
||||||
|
{
|
||||||
|
this.PageIndex = pageIndex;
|
||||||
|
this.PageSize = pageSize;
|
||||||
|
this.Count = count;
|
||||||
|
this.Data = data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user