public async Task <IActionResult> CreateBook(BookDto book) { if (ModelState.IsValid) { var dbBook = _mapper.Map <Book>(book); dbBook.Id = GuidCreator.CreateGuid(); var result = await _repository.AddItemAsync(dbBook); if (result > 0) { _logger.LogInformation($"New book with id {dbBook.Id} successfully created."); return(Ok()); } _logger.LogError($"Failed to create new book, book info: name {dbBook.Name}, author {dbBook.Author}, genre {dbBook.Genre}, price: {dbBook.Cost}."); return(StatusCode(500)); } _logger.LogError("Invalid request model, some fields are missed or have invalid format."); return(BadRequest(ModelState.Values)); }
public async Task <IActionResult> LoginUser(UserLoginForm loginForm) { var user = await _userManager.FindByNameAsync(loginForm.UserName); var result = await _signInManager.CheckPasswordSignInAsync(user, loginForm.Password, false); if (result.Succeeded) { var appUser = await _userManager.Users.FirstOrDefaultAsync( u => u.NormalizedUserName == loginForm.UserName.ToUpper()); var roles = await _userManager.GetRolesAsync(appUser); var userProfile = _mapper.Map <UserProfileDto>(appUser); var tokenKey = _securityConfigurations.tokenKey; var issuer = _securityConfigurations.Issuer; var appKey = _securityConfigurations.appKey; var token = TokensGenerator.GenerateJwtToken(appUser, roles, tokenKey, issuer); var refreshToken = TokensGenerator.GenerateRefreshToken(); HttpContext.AddCookies(token, appKey); HttpContext.AddCookies(refreshToken, $"{appKey}Refresh"); var existingToken = await _tokenRepository.FindItemAsync( t => t.UserId == appUser.Id && t.DeviceName == Request.Headers["device-info"].ToString()); if (existingToken != null) { _logger.LogWarning($"User with Id {appUser.Id} has already logged in from this device, old refresh token will be removed."); await _tokenRepository.RemoveItemAsync(existingToken); _logger.LogInformation($"Old refresh token for user with Id {appUser.Id} removed from database."); } await _tokenRepository.AddItemAsync( new RefreshToken { Id = GuidCreator.CreateGuid(), TokenValue = refreshToken, DeviceName = Request.Headers["device-info"], UserId = appUser.Id }); _logger.LogInformation($"User with id {appUser.Id} successfully logged in."); return(Ok(new { user = userProfile, token, refreshToken })); } return(Unauthorized()); }
public async Task <IActionResult> PlaceOrder(OrderForCreateDto orderForCreate) { if (ModelState.IsValid) { var bookId = Guid.Parse(orderForCreate.BookId); var book = await _booksRepository.GetItemByIdAsync(bookId); var user = await _userManager.FindByNameAsync(orderForCreate.UserName); var existingOrder = _repository.FindItemAsync( o => o.UserId == user.Id && o.BookId == bookId && o.OrderDate.ToShortDateString() == DateTime.Today.ToShortDateString()); if (existingOrder != null) { _logger.LogWarning($"This user {user.Id} has already order book with id {bookId} today."); } var order = new Order { Id = GuidCreator.CreateGuid(), BookId = book.Id, UserId = user.Id, OrderCost = book.Cost, OrderDate = DateTime.UtcNow, DeliveryAdress = $"city:{user.City}, adress(post office #): {user.DeliveryAdress}." }; var result = await _repository.AddItemAsync(order); if (result > 0) { _logger.LogInformation($"New book with id {order.Id} successfully created."); return(Ok()); } _logger.LogError($"Failed to place new order, order info: bookId {book.Id}, userId {user.Id}."); return(StatusCode(500)); } _logger.LogError("Invalid request model, some fields are missed or have invalid format."); return(BadRequest(ModelState.Values)); }