Skip to content

Lesson2.2#9

Open
Sla-als wants to merge 7 commits intomainfrom
lesson2.2
Open

Lesson2.2#9
Sla-als wants to merge 7 commits intomainfrom
lesson2.2

Conversation

@Sla-als
Copy link
Copy Markdown
Owner

@Sla-als Sla-als commented Feb 13, 2021

1 задание

1.1. В таблицу users и
orders добавил поле

address varchar(255),

1.2. В классе User, Order добавил поле

@Column(name = "address")
private String address;

1.3. В index.html добавил форму и кнопку для ввода адреса

    <form ng-submit="confirmAddress()">
        <div class="form-group row">
            <div class="form-group col">
                <input class="form-control" type="text" ng-model="order.address"
                       class="form-control" id="inputAddress" placeholder="Куда доставить заказ?">
            </div>
            <div class="form-group col">
                <button class="btn btn-primary" type="submit">Cохранить адрес</button>
            </div>
        </div>
    </form>

1.4. В index.js добавил функцию (заменил createOrder с get)

$scope.createOrder= function (){
$http({
url:contextPath + '/api/v1/orders/create',
method: 'POST',
params:{
address: $scope.order ? $scope.order.address : null,
},
}).then(function successCallback(response) {
$scope.order.address = null;
$scope.showMyOrders();
$scope.showCart();
},function errorCallback(response) {
window.alert("Error!");
})
}

1.5. В OrderController создал метод

@PostMapping("/create")
@ResponseStatus(HttpStatus.CREATED)
public void setAddressOrder(@RequestParam String address, Principal principal) {
    User user = userService.findByUsername(principal.getName()).orElseThrow(() -> new ResourceNotFoundException("User not found"));
    orderService.createFromUserCart(user,address);
}

1.6. В OrderService изменил метод, добавив поле String address

public Order createFromUserCart(User user, String address) {
Order order = new Order(cart, user);
order.setAddress(address);
order = orderRepository.save(order);
cart.clear();
return order;

1.7. В конструкторе Order добавил проверку, что корзина не пуста, чтобы не оформлять заказ с нулевой стоимостью

 if (items.isEmpty()){
    throw new ResourceNotFoundException("Cart empty");
    }

2. Пользователь создается в первый раз, после запуска сессии, потом север почему-то не отвечает на создание нового пользователя

2.1 js, html

$scope.register= function (){
    $http({
        url:contextPath + '/register',
        method: 'POST',
        params:{
            username: $scope.user ? $scope.user.username: null,
            password: $scope.user ? $scope.user.password: null
        },
    }).then(function successCallback(response) {
        //$scope.tryToAuth();
        window.alert("OK!");
    },function errorCallback(response) {
        window.alert("ErrorAuthenification");
    })
}

    <form class="form-register" ng-submit="register()" style="max-width: 350px; padding: 15px; margin: 0 auto;">

        <h1 class="h3 mb-3 font-weight-normal">Регистрация</h1>
        <label for="inputUsername" class="sr-only">Придумайте имя пользователя</label>
        <input type="text" ng-model="user.username" id="createUsername" class="form-control"
               placeholder="Имя пользователя" style="margin-bottom: 10px;" required="">
        <label for="inputPassword" class="sr-only">Задайте пароль</label>
        <input type="password" ng-model="user.password" id="createPassword" class="form-control"
               placeholder="Пароль"
               style="margin-bottom: 10px;" required="">
        <label for="inputPassword" class="sr-only">Email</label>
        <input type="email" ng-model="user.email" id="createEmail" class="form-control" placeholder="email"
               style="margin-bottom: 10px;">
        <button class="btn btn-lg btn-primary btn-block" type="submit">Зарегистрироваться</button>
        <p class="mt-5 mb-3 text-muted">© GeekBrains 2021</p>

    </form>

2.2 Сделал метод в AuthController (Dto пока убрал)

@PostMapping("/register")
public User createUser(@RequestBody User userDto) {
   return userService.saveUser(userDto);

}

2.3 Метод в UserDetailsService

Заинжектил securityConfig и пришлось ставить аннотацию @lazy над классом JwtRequestFilter, иначе дедлок.
private final SecurityConfig securityConfig;

public User saveUser(User userDto){
Optional userFromDB = userRepository.findByUsername(userDto.getUsername());
if (!userFromDB.isEmpty()) {
throw new ResourceNotFoundException("User find!");
}
userDto.setRoles(Collections.singleton(new Role(1L,"ROLE_USER")));
userDto.setPassword(securityConfig.passwordEncoder().encode(userDto.getPassword()));
userDto.setEmail("default@mail.ru");
return userRepository.save(userDto);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant