Continued Validation Checking

This commit is contained in:
Charles Showalter 2022-05-20 11:09:24 -07:00
parent 9bc0fc3848
commit 762066f13d
8 changed files with 94 additions and 4 deletions

View File

@ -81,6 +81,11 @@ namespace API.Controllers
[HttpPost("register")]
public async Task<ActionResult<UserDto>> Register(RegisterDto registerDto)
{
if(CheckEmailExistsAsync(registerDto.Email).Result.Value)
{
return new BadRequestObjectResult(new ApiValidationErrorResponse{Errors = new []{"Email address is in use"}});
}
var user = new AppUser
{
DisplayName = registerDto.DisplayName,

View File

@ -1,3 +1,5 @@
using API.Dtos;
using AutoMapper;
using Core.Entities;
using Core.Interfaces;
using Microsoft.AspNetCore.Mvc;
@ -7,8 +9,10 @@ namespace API.Controllers
public class BasketController : BaseApiController
{
private readonly IBasketRepository _basketRepository;
public BasketController(IBasketRepository basketRepository)
private readonly IMapper _mapper;
public BasketController(IBasketRepository basketRepository, IMapper mapper)
{
_mapper = mapper;
_basketRepository = basketRepository;
}
@ -20,9 +24,10 @@ namespace API.Controllers
}
[HttpPost]
public async Task<ActionResult<CustomerBasket>> UpdateBasket(CustomerBasket basket)
public async Task<ActionResult<CustomerBasket>> UpdateBasket(CustomerBasketDto basket)
{
var updatedBasket = await _basketRepository.UpdateBasketAsync(basket);
var customerBasket = _mapper.Map<CustomerBasketDto, CustomerBasket>(basket);
var updatedBasket = await _basketRepository.UpdateBasketAsync(customerBasket);
return Ok(updatedBasket);
}

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
@ -7,11 +8,22 @@ namespace API.Dtos
{
public class AddressDto
{
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
[Required]
public string Street { get; set; }
[Required]
public string City { get; set; }
[Required]
public string State { get; set; }
[Required]
public string ZipCode { get; set; }
}
}

30
API/Dtos/BasketItemDto.cs Normal file
View File

@ -0,0 +1,30 @@
using System.ComponentModel.DataAnnotations;
namespace API.Dtos
{
public class BasketItemDto
{
[Required]
public int Id { get; set; }
[Required]
public string productName { get; set; }
[Required]
[Range(0.1, double.MaxValue, ErrorMessage = "Price must be greather than 0")]
public decimal Price { get; set; }
[Required]
[Range(1, double.MaxValue, ErrorMessage = "Quantity must be at least 1")]
public int Quantity { get; set; }
[Required]
public string PictureUrl { get; set; }
[Required]
public string Brand { get; set; }
[Required]
public string Type { get; set; }
}
}

View File

@ -0,0 +1,11 @@
using System.ComponentModel.DataAnnotations;
namespace API.Dtos
{
public class CustomerBasketDto
{
[Required]
public string Id { get; set; }
public List<BasketItemDto> Items { get; set; }
}
}

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
@ -7,8 +8,15 @@ namespace API.Dtos
{
public class RegisterDto
{
[Required]
public string DisplayName { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[RegularExpression("(?=^.{6,10}$)(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&amp;*()_+}{&quot;:;'?/&gt;.&lt;,])(?!.*\\s).*$", ErrorMessage = "Password does not meet complexity. Password must have 1 Uppercase, 1 Lowercase, 1 Number, 1 Special Character and at least 6 characeters.")]
public string Password { get; set; }
}
}

View File

@ -8,7 +8,24 @@ namespace API.Extensions
{
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebAPIv5", Version = "v1" });
c.SwaggerDoc("v1", new OpenApiInfo { Title = "SkitNet API", Version = "v1" });
var securitySchema = new OpenApiSecurityScheme
{
Description = "JWT Auth Bearer Scheme",
Name = "Authorization",
In = ParameterLocation.Header,
Type = SecuritySchemeType.Http,
Scheme = "bearer",
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "Bearer"
}
};
c.AddSecurityDefinition("Bearer", securitySchema);
var securityRequirements = new OpenApiSecurityRequirement {{securitySchema, new[]{"Bearer"}}};
c.AddSecurityRequirement(securityRequirements);
});
return services;

View File

@ -15,6 +15,8 @@ namespace API.Helpers
.ForMember(d => d.PictureUrl, o => o.MapFrom<ProductUrlResolver>());
CreateMap<Address, AddressDto>().ReverseMap();
CreateMap<CustomerBasketDto, CustomerBasket>();
CreateMap<BasketItemDto, BasketItem>();
}
}
}