* Added Blazor Client Configured PublicAPI CORS to allow traffic from client * Make admin page home page; remove extra pages Add CatalogType list endpoint * Wired up Types and Brands in the API and the admin list page * Adding a custom HttpClient to talk securely to API * Ardalis/blazor (#419) * Login added * AuthService will handel http request secure and not secure. * Logout added * CatalogBrandService in it is own service * Get token from localstorage when refresh. * used GetAsync * Fixed Login and Logout switch. * CatalogItemService added * CatalogTypeService added & Auth for CatalogType. using not used removed. * Made BlazorComponent and BlazorLayoutComponent for refresh. Index now small enough to be in one file. * Removed the service from program main and use lazy singleton. * used OnInitialized * Refactoring and detecting login status in login.razor * Refactoring login to redirect if user is already logged in * Blazor login with MVC (#420) * Blazor login with MVC * return back the PasswordSignInAsync in Login page * CRUD added (#422) * CRUD added * Unit Test changed to meet new redirect /admin * CreateCatalogItemRequest added. * Action caption added. * Validation added for name and price. * Updated port of api Redirect to returnUrl from login * Add username to /admin; link to my profile * Working on authorization of /admin * Working on custom auth locking down /admin page * Microsoft authorize working.Login.razor removed.Login from SignInMana… (#425) * Microsoft authorize working.Login.razor removed.Login from SignInManager and create token from it.unit test fixed. * GetTokenFromController function used in CustomAuthStateProvider * Cleaned up button styles Refactored to use codebehind for List component Updated Not Authorized view Co-authored-by: Shady Nagy <shadynagi@gmail.com>
62 lines
2.4 KiB
C#
62 lines
2.4 KiB
C#
using Ardalis.ApiEndpoints;
|
|
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.eShopWeb.ApplicationCore.Constants;
|
|
using Microsoft.eShopWeb.ApplicationCore.Entities;
|
|
using Microsoft.eShopWeb.ApplicationCore.Exceptions;
|
|
using Microsoft.eShopWeb.ApplicationCore.Interfaces;
|
|
using Swashbuckle.AspNetCore.Annotations;
|
|
using System;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Microsoft.eShopWeb.PublicApi.CatalogItemEndpoints
|
|
{
|
|
[Authorize(Roles = AuthorizationConstants.Roles.ADMINISTRATORS, AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
|
|
public class Update : BaseAsyncEndpoint<UpdateCatalogItemRequest, UpdateCatalogItemResponse>
|
|
{
|
|
private readonly IAsyncRepository<CatalogItem> _itemRepository;
|
|
private readonly IUriComposer _uriComposer;
|
|
|
|
public Update(IAsyncRepository<CatalogItem> itemRepository, IUriComposer uriComposer)
|
|
{
|
|
_itemRepository = itemRepository;
|
|
_uriComposer = uriComposer;
|
|
|
|
}
|
|
|
|
[HttpPut("api/catalog-items")]
|
|
[SwaggerOperation(
|
|
Summary = "Updates a Catalog Item",
|
|
Description = "Updates a Catalog Item",
|
|
OperationId = "catalog-items.update",
|
|
Tags = new[] { "CatalogItemEndpoints" })
|
|
]
|
|
public override async Task<ActionResult<UpdateCatalogItemResponse>> HandleAsync(UpdateCatalogItemRequest request)
|
|
{
|
|
var response = new UpdateCatalogItemResponse(request.CorrelationId());
|
|
|
|
var existingItem = await _itemRepository.GetByIdAsync(request.Id);
|
|
|
|
existingItem.UpdateDetails(request.Name, request.Description, request.Price);
|
|
existingItem.UpdateBrand(request.CatalogBrandId);
|
|
existingItem.UpdateType(request.CatalogTypeId);
|
|
|
|
await _itemRepository.UpdateAsync(existingItem);
|
|
|
|
var dto = new CatalogItemDto
|
|
{
|
|
Id = existingItem.Id,
|
|
CatalogBrandId = existingItem.CatalogBrandId,
|
|
CatalogTypeId = existingItem.CatalogTypeId,
|
|
Description = existingItem.Description,
|
|
Name = existingItem.Name,
|
|
PictureUri = _uriComposer.ComposePicUri(existingItem.PictureUri),
|
|
Price = existingItem.Price
|
|
};
|
|
response.CatalogItem = dto;
|
|
return response;
|
|
}
|
|
}
|
|
}
|