Skip to content

Commit 6987872

Browse files
committed
fix 1
1 parent 75b2ec1 commit 6987872

40 files changed

Lines changed: 389 additions & 246 deletions

src/main/java/ru/practicum/shareit/booking/controller/BookingController.java

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,31 @@
33
import jakarta.validation.Valid;
44
import lombok.RequiredArgsConstructor;
55
import org.springframework.web.bind.annotation.*;
6-
import ru.practicum.shareit.booking.dto.BookingDto;
6+
import ru.practicum.shareit.booking.dto.BookingCreateRequest;
7+
import ru.practicum.shareit.booking.dto.BookingResponseDto;
8+
import ru.practicum.shareit.booking.dto.BookingUpdateRequest;
79
import ru.practicum.shareit.booking.service.BookingService;
810

9-
/**
10-
* TODO Sprint add-bookings.
11-
*/
12-
1311
@RestController
1412
@RequestMapping(path = "/bookings")
1513
@RequiredArgsConstructor
1614
public class BookingController {
1715
private final BookingService bookingService;
1816

1917
@PostMapping
20-
public BookingDto createBooking(@Valid @RequestBody BookingDto bookingDto,
21-
@RequestHeader("X-Sharer-User-Id") Long bookerId) {
22-
return bookingService.createBooking(bookingDto, bookerId);
18+
public BookingResponseDto createBooking(@Valid @RequestBody BookingCreateRequest createRequest,
19+
@RequestHeader("X-Sharer-User-Id") Long bookerId) {
20+
return bookingService.createBooking(createRequest, bookerId);
2321
}
2422

2523
@PatchMapping("/{bookingId}")
26-
public BookingDto updateBooking(@PathVariable Long bookingId,
27-
@RequestBody BookingDto bookingDto) {
28-
return bookingService.updateBooking(bookingId, bookingDto);
24+
public BookingResponseDto updateBooking(@PathVariable Long bookingId,
25+
@RequestBody BookingUpdateRequest updateRequest) {
26+
return bookingService.updateBooking(bookingId, updateRequest);
2927
}
3028

3129
@GetMapping("/{bookingId}")
32-
public BookingDto getBookingById(@PathVariable Long bookingId) {
30+
public BookingResponseDto getBookingById(@PathVariable Long bookingId) {
3331
return bookingService.getBookingById(bookingId);
3432
}
35-
}
33+
}

src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java renamed to src/main/java/ru/practicum/shareit/booking/dto/BookingCreateRequest.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,21 @@
66
import lombok.AllArgsConstructor;
77
import lombok.Data;
88
import lombok.NoArgsConstructor;
9-
import ru.practicum.shareit.booking.model.BookingStatus;
109

1110
import java.time.LocalDateTime;
1211

13-
/**
14-
* TODO Sprint add-bookings.
15-
*/
16-
1712
@Data
1813
@NoArgsConstructor
1914
@AllArgsConstructor
20-
public class BookingDto {
15+
public class BookingCreateRequest {
16+
@NotNull(message = "ID вещи обязателен")
17+
private Long itemId;
18+
2119
@NotNull(message = "Дата начала бронирования обязательна")
2220
@FutureOrPresent(message = "Дата начала должна быть в будущем")
2321
private LocalDateTime start;
2422

2523
@NotNull(message = "Дата окончания бронирования обязательна")
2624
@Future(message = "Дата окончания бронирования должна быть в будущем")
2725
private LocalDateTime end;
28-
29-
@NotNull(message = "ID вещи обязателен")
30-
private Long itemId;
31-
private Long bookerId;
32-
private BookingStatus status;
3326
}

src/main/java/ru/practicum/shareit/booking/dto/BookingMapper.java

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,36 @@
55
import ru.practicum.shareit.user.model.User;
66

77
public class BookingMapper {
8-
public static BookingDto toBookingDto(Booking booking) {
9-
return new BookingDto(
10-
booking.getStart(),
11-
booking.getEnd(),
12-
booking.getItem() != null ? booking.getItem().getId() : null,
13-
booking.getBooker() != null ? booking.getBooker().getId() : null,
14-
booking.getStatus()
15-
);
8+
9+
public static BookingResponseDto toResponseDto(Booking booking) {
10+
BookingResponseDto dto = new BookingResponseDto();
11+
dto.setId(booking.getId());
12+
dto.setStart(booking.getStart());
13+
dto.setEnd(booking.getEnd());
14+
dto.setItemId(booking.getItem() != null ? booking.getItem().getId() : null);
15+
dto.setBookerId(booking.getBooker() != null ? booking.getBooker().getId() : null);
16+
dto.setStatus(booking.getStatus());
17+
return dto;
1618
}
1719

18-
public static Booking fromBookingDto(BookingDto bookingDto, Item item, User booker) {
20+
public static Booking fromCreateRequest(BookingCreateRequest bookingCreateRequest, Item item, User booker) {
1921
Booking booking = new Booking();
20-
booking.setStart(bookingDto.getStart());
21-
booking.setEnd(bookingDto.getEnd());
22+
booking.setStart(bookingCreateRequest.getStart());
23+
booking.setEnd(bookingCreateRequest.getEnd());
2224
booking.setItem(item);
2325
booking.setBooker(booker);
24-
booking.setStatus(bookingDto.getStatus());
2526
return booking;
2627
}
28+
29+
public static void updateBookingFromRequest(BookingUpdateRequest request, Booking booking) {
30+
if (request.getStart() != null) {
31+
booking.setStart(request.getStart());
32+
}
33+
if (request.getEnd() != null) {
34+
booking.setEnd(request.getEnd());
35+
}
36+
if (request.getStatus() != null) {
37+
booking.setStatus(request.getStatus());
38+
}
39+
}
2740
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package ru.practicum.shareit.booking.dto;
2+
3+
import lombok.Data;
4+
import ru.practicum.shareit.booking.model.BookingStatus;
5+
6+
import java.time.LocalDateTime;
7+
8+
@Data
9+
public class BookingResponseDto {
10+
private Long id;
11+
private LocalDateTime start;
12+
private LocalDateTime end;
13+
private Long itemId;
14+
private Long bookerId;
15+
private BookingStatus status;
16+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package ru.practicum.shareit.booking.dto;
2+
3+
import lombok.Data;
4+
import ru.practicum.shareit.booking.model.BookingStatus;
5+
6+
import java.time.LocalDateTime;
7+
8+
@Data
9+
public class BookingUpdateRequest {
10+
private LocalDateTime start;
11+
private LocalDateTime end;
12+
private BookingStatus status;
13+
}

src/main/java/ru/practicum/shareit/booking/model/Booking.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,6 @@
88

99
import java.time.LocalDateTime;
1010

11-
/**
12-
* TODO Sprint add-bookings.
13-
*/
14-
1511
@Data
1612
@NoArgsConstructor
1713
@AllArgsConstructor
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package ru.practicum.shareit.booking.service;
22

3-
import ru.practicum.shareit.booking.dto.BookingDto;
3+
import ru.practicum.shareit.booking.dto.BookingCreateRequest;
4+
import ru.practicum.shareit.booking.dto.BookingResponseDto;
5+
import ru.practicum.shareit.booking.dto.BookingUpdateRequest;
46

57
public interface BookingService {
6-
BookingDto createBooking(BookingDto bookingDto, Long bookerId);
8+
BookingResponseDto createBooking(BookingCreateRequest createRequest, Long bookerId);
79

8-
BookingDto updateBooking(Long bookingId, BookingDto bookingDto);
10+
BookingResponseDto updateBooking(Long bookingId, BookingUpdateRequest updateRequest);
911

10-
BookingDto getBookingById(Long bookingId);
12+
BookingResponseDto getBookingById(Long bookingId);
1113
}

src/main/java/ru/practicum/shareit/booking/service/BookingServiceImpl.java

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
import org.springframework.stereotype.Service;
55
import ru.practicum.shareit.booking.model.Booking;
66
import ru.practicum.shareit.booking.model.BookingStatus;
7-
import ru.practicum.shareit.booking.dto.BookingDto;
7+
import ru.practicum.shareit.booking.dto.BookingCreateRequest;
8+
import ru.practicum.shareit.booking.dto.BookingResponseDto;
9+
import ru.practicum.shareit.booking.dto.BookingUpdateRequest;
810
import ru.practicum.shareit.booking.dto.BookingMapper;
911
import ru.practicum.shareit.booking.storage.InMemoryBookingStorage;
1012
import ru.practicum.shareit.exception.NotFoundException;
@@ -23,50 +25,42 @@ public class BookingServiceImpl implements BookingService {
2325
private final InMemoryItemStorage itemStorage;
2426

2527
@Override
26-
public BookingDto createBooking(BookingDto bookingDto, Long bookerId) {
28+
public BookingResponseDto createBooking(BookingCreateRequest createRequest, Long bookerId) {
2729
User booker = userStorage.findById(bookerId)
2830
.orElseThrow(() -> new NotFoundException("Пользователь с id " + bookerId + " не найден"));
2931

30-
Item item = itemStorage.findById(bookingDto.getItemId())
31-
.orElseThrow(() -> new NotFoundException("Вещь с id " + bookingDto.getItemId() + " не найдена"));
32+
Item item = itemStorage.findById(createRequest.getItemId())
33+
.orElseThrow(() -> new NotFoundException("Вещь с id " + createRequest.getItemId() + " не найдена"));
3234

3335
if (!Boolean.TRUE.equals(item.getAvailable())) {
34-
throw new ValidationException("Вещь с id " + bookingDto.getItemId() + " недоступна для бронирования");
36+
throw new ValidationException("Вещь с id " + createRequest.getItemId() + " недоступна для бронирования");
3537
}
3638

3739
if (item.getOwner().getId().equals(bookerId)) {
3840
throw new AccessDeniedException("Пользователь не может бронировать свою собственную вещь");
3941
}
4042

41-
Booking booking = BookingMapper.fromBookingDto(bookingDto, item, booker);
43+
Booking booking = BookingMapper.fromCreateRequest(createRequest, item, booker);
4244
booking.setStatus(BookingStatus.WAITING);
4345
Booking createdBooking = bookingStorage.create(booking);
44-
return BookingMapper.toBookingDto(createdBooking);
46+
return BookingMapper.toResponseDto(createdBooking);
4547
}
4648

4749
@Override
48-
public BookingDto updateBooking(Long bookingId, BookingDto bookingDto) {
50+
public BookingResponseDto updateBooking(Long bookingId, BookingUpdateRequest updateRequest) {
4951
Booking existingBooking = bookingStorage.findById(bookingId)
5052
.orElseThrow(() -> new NotFoundException("Бронирование с id " + bookingId + " не найдено"));
5153

52-
if (bookingDto.getStart() != null) {
53-
existingBooking.setStart(bookingDto.getStart());
54-
}
55-
if (bookingDto.getEnd() != null) {
56-
existingBooking.setEnd(bookingDto.getEnd());
57-
}
58-
if (bookingDto.getStatus() != null) {
59-
existingBooking.setStatus(bookingDto.getStatus());
60-
}
54+
BookingMapper.updateBookingFromRequest(updateRequest, existingBooking);
6155

6256
Booking updatedBooking = bookingStorage.update(existingBooking);
63-
return BookingMapper.toBookingDto(updatedBooking);
57+
return BookingMapper.toResponseDto(updatedBooking);
6458
}
6559

6660
@Override
67-
public BookingDto getBookingById(Long bookingId) {
61+
public BookingResponseDto getBookingById(Long bookingId) {
6862
Booking booking = bookingStorage.findById(bookingId)
6963
.orElseThrow(() -> new NotFoundException("Бронирование с id " + bookingId + " не найдено"));
70-
return BookingMapper.toBookingDto(booking);
64+
return BookingMapper.toResponseDto(booking);
7165
}
72-
}
66+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package ru.practicum.shareit.booking.storage;
2+
3+
import ru.practicum.shareit.booking.model.Booking;
4+
5+
import java.util.Optional;
6+
7+
public interface BookingStorage {
8+
Booking create(Booking booking);
9+
10+
Booking update(Booking booking);
11+
12+
Optional<Booking> findById(Long id);
13+
}

src/main/java/ru/practicum/shareit/booking/storage/InMemoryBookingStorage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import java.util.*;
88

99
@Repository
10-
public class InMemoryBookingStorage {
10+
public class InMemoryBookingStorage implements BookingStorage {
1111
private final Map<Long, Booking> bookings = new HashMap<>();
1212
private long idCounter = 1;
1313

0 commit comments

Comments
 (0)