示例#1
0
        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));
        }
示例#2
0
        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());
        }
示例#3
0
        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));
        }