Merge remote-tracking branch 'upstream/dev' into dev
This commit is contained in:
commit
e113e29571
@ -2,7 +2,7 @@
|
||||
{
|
||||
public class CatalogSettings
|
||||
{
|
||||
public string PicBaseUrl { get;set;}
|
||||
public string PicBaseUrl { get; set; }
|
||||
|
||||
public string EventBusConnection { get; set; }
|
||||
|
||||
|
@ -37,7 +37,7 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers
|
||||
[ProducesResponseType(typeof(PaginatedItemsViewModel<CatalogItem>), (int)HttpStatusCode.OK)]
|
||||
[ProducesResponseType(typeof(IEnumerable<CatalogItem>), (int)HttpStatusCode.OK)]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest)]
|
||||
public async Task<IActionResult> ItemsAsync([FromQuery]int pageSize = 10, [FromQuery]int pageIndex = 0, string ids = null)
|
||||
public async Task<IActionResult> ItemsAsync([FromQuery] int pageSize = 10, [FromQuery] int pageIndex = 0, string ids = null)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(ids))
|
||||
{
|
||||
@ -126,7 +126,7 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers
|
||||
[HttpGet]
|
||||
[Route("items/withname/{name:minlength(1)}")]
|
||||
[ProducesResponseType(typeof(PaginatedItemsViewModel<CatalogItem>), (int)HttpStatusCode.OK)]
|
||||
public async Task<ActionResult<PaginatedItemsViewModel<CatalogItem>>> ItemsWithNameAsync(string name, [FromQuery]int pageSize = 10, [FromQuery]int pageIndex = 0)
|
||||
public async Task<ActionResult<PaginatedItemsViewModel<CatalogItem>>> ItemsWithNameAsync(string name, [FromQuery] int pageSize = 10, [FromQuery] int pageIndex = 0)
|
||||
{
|
||||
var totalItems = await _catalogContext.CatalogItems
|
||||
.Where(c => c.Name.StartsWith(name))
|
||||
@ -147,7 +147,7 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers
|
||||
[HttpGet]
|
||||
[Route("items/type/{catalogTypeId}/brand/{catalogBrandId:int?}")]
|
||||
[ProducesResponseType(typeof(PaginatedItemsViewModel<CatalogItem>), (int)HttpStatusCode.OK)]
|
||||
public async Task<ActionResult<PaginatedItemsViewModel<CatalogItem>>> ItemsByTypeIdAndBrandIdAsync(int catalogTypeId, int? catalogBrandId, [FromQuery]int pageSize = 10, [FromQuery]int pageIndex = 0)
|
||||
public async Task<ActionResult<PaginatedItemsViewModel<CatalogItem>>> ItemsByTypeIdAndBrandIdAsync(int catalogTypeId, int? catalogBrandId, [FromQuery] int pageSize = 10, [FromQuery] int pageIndex = 0)
|
||||
{
|
||||
var root = (IQueryable<CatalogItem>)_catalogContext.CatalogItems;
|
||||
|
||||
@ -175,7 +175,7 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers
|
||||
[HttpGet]
|
||||
[Route("items/type/all/brand/{catalogBrandId:int?}")]
|
||||
[ProducesResponseType(typeof(PaginatedItemsViewModel<CatalogItem>), (int)HttpStatusCode.OK)]
|
||||
public async Task<ActionResult<PaginatedItemsViewModel<CatalogItem>>> ItemsByBrandIdAsync(int? catalogBrandId, [FromQuery]int pageSize = 10, [FromQuery]int pageIndex = 0)
|
||||
public async Task<ActionResult<PaginatedItemsViewModel<CatalogItem>>> ItemsByBrandIdAsync(int? catalogBrandId, [FromQuery] int pageSize = 10, [FromQuery] int pageIndex = 0)
|
||||
{
|
||||
var root = (IQueryable<CatalogItem>)_catalogContext.CatalogItems;
|
||||
|
||||
@ -220,7 +220,7 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers
|
||||
[HttpPut]
|
||||
[ProducesResponseType((int)HttpStatusCode.NotFound)]
|
||||
[ProducesResponseType((int)HttpStatusCode.Created)]
|
||||
public async Task<ActionResult> UpdateProductAsync([FromBody]CatalogItem productToUpdate)
|
||||
public async Task<ActionResult> UpdateProductAsync([FromBody] CatalogItem productToUpdate)
|
||||
{
|
||||
var catalogItem = await _catalogContext.CatalogItems.SingleOrDefaultAsync(i => i.Id == productToUpdate.Id);
|
||||
|
||||
@ -259,7 +259,7 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers
|
||||
[Route("items")]
|
||||
[HttpPost]
|
||||
[ProducesResponseType((int)HttpStatusCode.Created)]
|
||||
public async Task<ActionResult> CreateProductAsync([FromBody]CatalogItem product)
|
||||
public async Task<ActionResult> CreateProductAsync([FromBody] CatalogItem product)
|
||||
{
|
||||
var item = new CatalogItem
|
||||
{
|
||||
|
@ -19,6 +19,7 @@ namespace Catalog.API.Grpc
|
||||
private readonly CatalogContext _catalogContext;
|
||||
private readonly CatalogSettings _settings;
|
||||
private readonly ILogger _logger;
|
||||
|
||||
public CatalogService(CatalogContext dbContext, IOptions<CatalogSettings> settings, ILogger<CatalogService> logger)
|
||||
{
|
||||
_settings = settings.Value;
|
||||
|
@ -19,7 +19,7 @@
|
||||
builder.ApplyConfiguration(new CatalogBrandEntityTypeConfiguration());
|
||||
builder.ApplyConfiguration(new CatalogTypeEntityTypeConfiguration());
|
||||
builder.ApplyConfiguration(new CatalogItemEntityTypeConfiguration());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -27,7 +27,7 @@
|
||||
{
|
||||
public CatalogContext CreateDbContext(string[] args)
|
||||
{
|
||||
var optionsBuilder = new DbContextOptionsBuilder<CatalogContext>()
|
||||
var optionsBuilder = new DbContextOptionsBuilder<CatalogContext>()
|
||||
.UseSqlServer("Server=.;Initial Catalog=Microsoft.eShopOnContainers.Services.CatalogDb;Integrated Security=true");
|
||||
|
||||
return new CatalogContext(optionsBuilder.Options);
|
||||
|
@ -19,7 +19,7 @@
|
||||
|
||||
public class CatalogContextSeed
|
||||
{
|
||||
public async Task SeedAsync(CatalogContext context,IWebHostEnvironment env,IOptions<CatalogSettings> settings,ILogger<CatalogContextSeed> logger)
|
||||
public async Task SeedAsync(CatalogContext context, IWebHostEnvironment env, IOptions<CatalogSettings> settings, ILogger<CatalogContextSeed> logger)
|
||||
{
|
||||
var policy = CreatePolicy(logger, nameof(CatalogContextSeed));
|
||||
|
||||
@ -73,7 +73,7 @@
|
||||
try
|
||||
{
|
||||
string[] requiredHeaders = { "catalogbrand" };
|
||||
csvheaders = GetHeaders( csvFileCatalogBrands, requiredHeaders );
|
||||
csvheaders = GetHeaders(csvFileCatalogBrands, requiredHeaders);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -128,7 +128,7 @@
|
||||
try
|
||||
{
|
||||
string[] requiredHeaders = { "catalogtype" };
|
||||
csvheaders = GetHeaders( csvFileCatalogTypes, requiredHeaders );
|
||||
csvheaders = GetHeaders(csvFileCatalogTypes, requiredHeaders);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -183,7 +183,7 @@
|
||||
{
|
||||
string[] requiredHeaders = { "catalogtypename", "catalogbrandname", "description", "name", "price", "picturefilename" };
|
||||
string[] optionalheaders = { "availablestock", "restockthreshold", "maxstockthreshold", "onreorder" };
|
||||
csvheaders = GetHeaders(csvFileCatalogItems, requiredHeaders, optionalheaders );
|
||||
csvheaders = GetHeaders(csvFileCatalogItems, requiredHeaders, optionalheaders);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -196,7 +196,7 @@
|
||||
|
||||
return File.ReadAllLines(csvFileCatalogItems)
|
||||
.Skip(1) // skip header row
|
||||
.Select(row => Regex.Split(row, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)") )
|
||||
.Select(row => Regex.Split(row, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)"))
|
||||
.SelectTry(column => CreateCatalogItem(column, csvheaders, catalogTypeIdLookup, catalogBrandIdLookup))
|
||||
.OnCaughtException(ex => { logger.LogError(ex, "EXCEPTION ERROR: {Message}", ex.Message); return null; })
|
||||
.Where(x => x != null);
|
||||
@ -243,7 +243,7 @@
|
||||
string availableStockString = column[availableStockIndex].Trim('"').Trim();
|
||||
if (!String.IsNullOrEmpty(availableStockString))
|
||||
{
|
||||
if ( int.TryParse(availableStockString, out int availableStock))
|
||||
if (int.TryParse(availableStockString, out int availableStock))
|
||||
{
|
||||
catalogItem.AvailableStock = availableStock;
|
||||
}
|
||||
@ -370,7 +370,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
private AsyncRetryPolicy CreatePolicy( ILogger<CatalogContextSeed> logger, string prefix,int retries = 3)
|
||||
private AsyncRetryPolicy CreatePolicy(ILogger<CatalogContextSeed> logger, string prefix, int retries = 3)
|
||||
{
|
||||
return Policy.Handle<SqlException>().
|
||||
WaitAndRetryAsync(
|
||||
|
@ -12,7 +12,7 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace Catalog.API.IntegrationEvents
|
||||
{
|
||||
public class CatalogIntegrationEventService : ICatalogIntegrationEventService,IDisposable
|
||||
public class CatalogIntegrationEventService : ICatalogIntegrationEventService, IDisposable
|
||||
{
|
||||
private readonly Func<DbConnection, IIntegrationEventLogService> _integrationEventLogServiceFactory;
|
||||
private readonly IEventBus _eventBus;
|
||||
@ -73,7 +73,7 @@ namespace Catalog.API.IntegrationEvents
|
||||
{
|
||||
(_eventLogService as IDisposable)?.Dispose();
|
||||
}
|
||||
|
||||
|
||||
disposedValue = true;
|
||||
}
|
||||
}
|
||||
|
@ -11,7 +11,7 @@
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
public class OrderStatusChangedToAwaitingValidationIntegrationEventHandler :
|
||||
public class OrderStatusChangedToAwaitingValidationIntegrationEventHandler :
|
||||
IIntegrationEventHandler<OrderStatusChangedToAwaitingValidationIntegrationEvent>
|
||||
{
|
||||
private readonly CatalogContext _catalogContext;
|
||||
|
@ -7,7 +7,7 @@
|
||||
using Serilog.Context;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
public class OrderStatusChangedToPaidIntegrationEventHandler :
|
||||
public class OrderStatusChangedToPaidIntegrationEventHandler :
|
||||
IIntegrationEventHandler<OrderStatusChangedToPaidIntegrationEvent>
|
||||
{
|
||||
private readonly CatalogContext _catalogContext;
|
||||
|
@ -6,7 +6,7 @@
|
||||
// An Event is “something that has happened in the past”, therefore its name has to be past tense
|
||||
// An Integration Event is an event that can cause side effects to other microservices, Bounded-Contexts or external systems.
|
||||
public class ProductPriceChangedIntegrationEvent : IntegrationEvent
|
||||
{
|
||||
{
|
||||
public int ProductId { get; private set; }
|
||||
|
||||
public decimal NewPrice { get; private set; }
|
||||
|
@ -81,7 +81,7 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API
|
||||
{
|
||||
c.SwaggerEndpoint($"{ (!string.IsNullOrEmpty(pathBase) ? pathBase : string.Empty) }/swagger/v1/swagger.json", "Catalog.API V1");
|
||||
});
|
||||
|
||||
|
||||
app.UseRouting();
|
||||
app.UseCors("CorsPolicy");
|
||||
app.UseEndpoints(endpoints =>
|
||||
|
@ -15,10 +15,10 @@
|
||||
|
||||
public PaginatedItemsViewModel(int pageIndex, int pageSize, long count, IEnumerable<TEntity> data)
|
||||
{
|
||||
this.PageIndex = pageIndex;
|
||||
this.PageSize = pageSize;
|
||||
this.Count = count;
|
||||
this.Data = data;
|
||||
PageIndex = pageIndex;
|
||||
PageSize = pageSize;
|
||||
Count = count;
|
||||
Data = data;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user