Skip to content

Commit b11c48b

Browse files
committed
add-controllers. Ревью. Исправить логику проверки существования объекта. Дополнить условия обновления полей. Формирование нового ID вынести в репозиторий.
1 parent 5e25fa8 commit b11c48b

File tree

6 files changed

+73
-61
lines changed

6 files changed

+73
-61
lines changed

src/main/java/ru/practicum/shareit/item/repository/ItemRepository.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import ru.practicum.shareit.item.model.Item;
44

55
import java.util.List;
6+
import java.util.Optional;
67

78
public interface ItemRepository {
89

@@ -14,7 +15,9 @@ public interface ItemRepository {
1415

1516
Item updateItem(Item item);
1617

17-
Item getItemById(Long itemId);
18+
Optional<Item> getItemById(Long itemId);
1819

1920
List<Item> searchItemsByText(String text);
21+
22+
Long getNewItemId();
2023
}

src/main/java/ru/practicum/shareit/item/repository/ItemRepositoryImpl.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package ru.practicum.shareit.item.repository;
22

33
import org.springframework.stereotype.Repository;
4-
import ru.practicum.shareit.exception.NotFoundException;
54
import ru.practicum.shareit.item.model.Item;
65

76
import java.util.*;
@@ -36,8 +35,8 @@ public Item updateItem(Item item) {
3635
}
3736

3837
@Override
39-
public Item getItemById(Long itemId) {
40-
return getItemByIdWithCheck(itemId);
38+
public Optional<Item> getItemById(Long itemId) {
39+
return Optional.ofNullable(items.get(itemId));
4140
}
4241

4342
@Override
@@ -52,11 +51,11 @@ private Boolean containsIgnoreCase(String text, String containsText) {
5251
return text.toLowerCase().contains(containsText.toLowerCase());
5352
}
5453

55-
private Item getItemByIdWithCheck(Long itemId) {
56-
Item itemById = items.get(itemId);
57-
if (itemById == null) {
58-
throw new NotFoundException("Вещь с ID = " + itemId + " не найдена.");
59-
}
60-
return itemById;
54+
@Override
55+
public Long getNewItemId() {
56+
return getItems().stream()
57+
.map(Item::getId)
58+
.max(Long::compareTo)
59+
.orElse(0L) + 1;
6160
}
6261
}

src/main/java/ru/practicum/shareit/item/service/ItemServiceImpl.java

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import lombok.extern.slf4j.Slf4j;
55
import org.springframework.stereotype.Service;
66
import ru.practicum.shareit.exception.NotAccessException;
7+
import ru.practicum.shareit.exception.NotFoundException;
78
import ru.practicum.shareit.item.dto.ItemDto;
89
import ru.practicum.shareit.item.mapper.ItemMapper;
910
import ru.practicum.shareit.item.model.Item;
@@ -27,7 +28,8 @@ public class ItemServiceImpl implements ItemService {
2728
@Override
2829
public List<ItemDto> getItemsByUserId(Long userId) {
2930
log.info("Поиск вещей пользователя с ID = {}", userId);
30-
userRepository.getUserById(userId);
31+
userRepository.getUserById(userId)
32+
.orElseThrow(() -> new NotFoundException("Пользователь с ID = " + userId + " не найден"));
3133
List<Item> itemsByUserId = itemRepository.getItemsByUserId(userId);
3234
return itemsByUserId.stream()
3335
.map(ItemMapper::toItemDto)
@@ -37,27 +39,35 @@ public List<ItemDto> getItemsByUserId(Long userId) {
3739
@Override
3840
public ItemDto createItem(ItemDto itemDto, Long userId) {
3941
log.info("Создание вещи у пользователя с ID = {}", userId);
40-
User user = userRepository.getUserById(userId);
42+
User user = userRepository.getUserById(userId)
43+
.orElseThrow(() -> new NotFoundException("Пользователь с ID = " + userId + " не найден"));
4144
return ItemMapper.toItemDto(
42-
itemRepository.createItem(ItemMapper.toItem(getNewItemId(), itemDto, user, null)));
45+
itemRepository.createItem(
46+
ItemMapper.toItem(
47+
itemRepository.getNewItemId(), itemDto, user, null)));
4348
}
4449

4550
@Override
4651
public ItemDto updateItem(ItemDto itemDto, Long itemId, Long userId) {
4752
log.info("Обновление вещи у пользователя с ID = {}", userId);
48-
Item findItem = itemRepository.getItemById(itemId);
53+
Item findItem = itemRepository.getItemById(itemId)
54+
.orElseThrow(() -> new NotFoundException("Вещь с ID = " + itemId + " не найдена"));
4955
checkUser(findItem, userId);
50-
userRepository.getUserById(userId);
51-
findItem.setName(itemDto.getName() != null ? itemDto.getName() : findItem.getName());
52-
findItem.setDescription(itemDto.getDescription() != null ? itemDto.getDescription() : findItem.getDescription());
56+
userRepository.getUserById(userId)
57+
.orElseThrow(() -> new NotFoundException("Пользователь с ID = " + userId + " не найден"));
58+
findItem.setName(itemDto.getName() == null || itemDto.getName().isBlank() ?
59+
findItem.getName() : itemDto.getName());
60+
findItem.setDescription(itemDto.getDescription() == null || itemDto.getDescription().isBlank() ?
61+
findItem.getDescription() : itemDto.getDescription());
5362
findItem.setAvailable(itemDto.getAvailable() != null ? itemDto.getAvailable() : findItem.getAvailable());
5463
return ItemMapper.toItemDto(itemRepository.updateItem(findItem));
5564
}
5665

5766
@Override
5867
public ItemDto getItemById(Long itemId) {
5968
log.info("Запрос вещи с ID = {}", itemId);
60-
Item item = itemRepository.getItemById(itemId);
69+
Item item = itemRepository.getItemById(itemId)
70+
.orElseThrow(() -> new NotFoundException("Вещь с ID = " + itemId + " не найдена"));
6171
return ItemMapper.toItemDto(item);
6272
}
6373

@@ -78,11 +88,4 @@ private void checkUser(Item item, Long userIdFromRequest) {
7888
}
7989
}
8090

81-
private Long getNewItemId() {
82-
return itemRepository.getItems().stream()
83-
.map(Item::getId)
84-
.max(Long::compareTo)
85-
.orElse(0L) + 1;
86-
}
87-
8891
}

src/main/java/ru/practicum/shareit/user/repository/UserRepository.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,21 @@
33
import ru.practicum.shareit.user.model.User;
44

55
import java.util.List;
6+
import java.util.Optional;
67

78
public interface UserRepository {
89

910
List<User> getUsers();
1011

11-
User getUserById(Long userId);
12+
Optional<User> getUserById(Long userId);
1213

1314
User createUser(User user);
1415

1516
User updateUser(User user);
1617

1718
void deleteUserById(Long userId);
19+
20+
Long getNewUserId();
21+
22+
void checkEmail(String email);
1823
}

src/main/java/ru/practicum/shareit/user/repository/UserRepositoryImpl.java

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
package ru.practicum.shareit.user.repository;
22

33
import org.springframework.stereotype.Repository;
4-
import ru.practicum.shareit.exception.NotFoundException;
4+
import ru.practicum.shareit.exception.AlreadyExistException;
55
import ru.practicum.shareit.user.model.User;
66

7-
import java.util.ArrayList;
8-
import java.util.HashMap;
9-
import java.util.List;
10-
import java.util.Map;
7+
import java.util.*;
118

129
@Repository
1310
public class UserRepositoryImpl implements UserRepository {
@@ -20,8 +17,8 @@ public List<User> getUsers() {
2017
}
2118

2219
@Override
23-
public User getUserById(Long userId) {
24-
return getUserByIdWithCheck(userId);
20+
public Optional<User> getUserById(Long userId) {
21+
return Optional.ofNullable(users.get(userId));
2522
}
2623

2724
@Override
@@ -41,11 +38,20 @@ public void deleteUserById(Long userId) {
4138
users.remove(userId);
4239
}
4340

44-
private User getUserByIdWithCheck(Long userId) {
45-
User userById = users.get(userId);
46-
if (userById == null) {
47-
throw new NotFoundException("Пользователь с ID = " + userId + " не найден.");
41+
@Override
42+
public Long getNewUserId() {
43+
return getUsers().stream()
44+
.map(User::getId)
45+
.max(Long::compareTo)
46+
.orElse(0L) + 1;
47+
}
48+
49+
@Override
50+
public void checkEmail(String email) {
51+
if (getUsers().stream()
52+
.map(User::getEmail)
53+
.anyMatch(email::equals)) {
54+
throw new AlreadyExistException("Пользователь с почтой " + email + " уже существует");
4855
}
49-
return userById;
5056
}
5157
}

src/main/java/ru/practicum/shareit/user/service/UserServiceImpl.java

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import lombok.AllArgsConstructor;
44
import lombok.extern.slf4j.Slf4j;
55
import org.springframework.stereotype.Service;
6-
import ru.practicum.shareit.exception.AlreadyExistException;
6+
import ru.practicum.shareit.exception.NotFoundException;
77
import ru.practicum.shareit.user.dto.UserDto;
88
import ru.practicum.shareit.user.mapper.UserMapper;
99
import ru.practicum.shareit.user.model.User;
@@ -19,45 +19,41 @@ public class UserServiceImpl implements UserService {
1919
@Override
2020
public UserDto getUserById(Long userId) {
2121
log.info("Запрос пользователя с ID = {}", userId);
22-
User userById = userRepository.getUserById(userId);
22+
User userById = userRepository.getUserById(userId)
23+
.orElseThrow(() -> new NotFoundException("Пользователь с ID = " + userId + " не найден"));
2324
return UserMapper.toUserDto(userById);
2425
}
2526

2627
@Override
2728
public UserDto createUser(UserDto userDto) {
2829
log.info("Создание пользователя");
29-
checkEmail(userDto.getEmail());
30-
return UserMapper.toUserDto(userRepository.createUser(UserMapper.toUser(userDto, getNewUserId())));
30+
userRepository.checkEmail(userDto.getEmail());
31+
return UserMapper.toUserDto(
32+
userRepository.createUser(
33+
UserMapper.toUser(
34+
userDto, userRepository.getNewUserId())));
3135
}
3236

3337
@Override
3438
public UserDto updateUser(UserDto userDto, Long userId) {
3539
log.info("Обновление пользователя с ID = {}", userId);
36-
User findUser = userRepository.getUserById(userId);
37-
if (userDto.getEmail() != null) checkEmail(userDto.getEmail());
38-
findUser.setEmail(userDto.getEmail() != null ? userDto.getEmail() : findUser.getEmail());
39-
findUser.setName(userDto.getName() != null ? userDto.getName() : findUser.getName());
40+
User findUser = userRepository.getUserById(userId)
41+
.orElseThrow(() -> new NotFoundException("Пользователь с ID = " + userId + " не найден"));
42+
if (userDto.getEmail() != null && !userDto.getEmail().equals(findUser.getEmail())) {
43+
userRepository.checkEmail(userDto.getEmail());
44+
}
45+
findUser.setEmail(userDto.getEmail() == null || userDto.getEmail().isBlank() ?
46+
findUser.getEmail() : userDto.getEmail());
47+
findUser.setName(userDto.getName() == null || userDto.getName().isBlank() ?
48+
findUser.getName() : userDto.getName());
4049
return UserMapper.toUserDto(userRepository.updateUser(findUser));
4150
}
4251

4352
@Override
4453
public void deleteUserById(Long userId) {
4554
log.info("Удаление пользователя с ID = {}", userId);
55+
userRepository.getUserById(userId)
56+
.orElseThrow(() -> new NotFoundException("Пользователь с ID = " + userId + " не найден"));
4657
userRepository.deleteUserById(userId);
4758
}
48-
49-
private Long getNewUserId() {
50-
return userRepository.getUsers().stream()
51-
.map(User::getId)
52-
.max(Long::compareTo)
53-
.orElse(0L) + 1;
54-
}
55-
56-
private void checkEmail(String email) {
57-
if (userRepository.getUsers().stream()
58-
.map(User::getEmail)
59-
.anyMatch(email::equals)) {
60-
throw new AlreadyExistException("Пользователь с почтой " + email + " уже существует");
61-
}
62-
}
6359
}

0 commit comments

Comments
 (0)