Skip to content

Commit dc386cf

Browse files
authored
Merge pull request #2 from walder86/add-bookings
add-bookings. Изменить сохранение данных в БД. Добавить функционал "Бронирование" и "Комментарии"
2 parents 3cfb926 + ac52d28 commit dc386cf

35 files changed

+847
-225
lines changed

pom.xml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@
3333
<artifactId>spring-boot-configuration-processor</artifactId>
3434
<optional>true</optional>
3535
</dependency>
36+
<dependency>
37+
<groupId>org.springframework.boot</groupId>
38+
<artifactId>spring-boot-starter-data-jpa</artifactId>
39+
</dependency>
3640

3741
<dependency>
3842
<groupId>org.postgresql</groupId>
@@ -49,7 +53,8 @@
4953
<dependency>
5054
<groupId>com.h2database</groupId>
5155
<artifactId>h2</artifactId>
52-
<scope>test</scope>
56+
<!-- <version>2.2.224</version>--> <!-- Укажите нужную версию -->
57+
<scope>runtime</scope>
5358
</dependency>
5459
<dependency>
5560
<groupId>org.springframework.boot</groupId>

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

Lines changed: 0 additions & 28 deletions
This file was deleted.
Lines changed: 50 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,57 @@
11
package ru.practicum.shareit.booking;
22

3-
import org.springframework.web.bind.annotation.RequestMapping;
4-
import org.springframework.web.bind.annotation.RestController;
3+
import jakarta.validation.Valid;
4+
import lombok.AllArgsConstructor;
5+
import org.springframework.web.bind.annotation.*;
6+
import ru.practicum.shareit.booking.dto.BookingDtoRequest;
7+
import ru.practicum.shareit.booking.dto.BookingDtoResponse;
8+
import ru.practicum.shareit.booking.enumerated.State;
9+
import ru.practicum.shareit.booking.service.BookingService;
10+
11+
import java.util.List;
512

6-
/**
7-
* TODO Sprint add-bookings.
8-
*/
913
@RestController
14+
@AllArgsConstructor
1015
@RequestMapping(path = "/bookings")
1116
public class BookingController {
17+
18+
private final BookingService bookingService;
19+
private final String userIdHeader = "X-Sharer-User-Id";
20+
21+
@PostMapping
22+
public BookingDtoResponse createBooking(
23+
@RequestHeader(userIdHeader) Long bookerId,
24+
@Valid @RequestBody BookingDtoRequest bookingDtoRequest) {
25+
return bookingService.createBooking(bookerId, bookingDtoRequest);
26+
}
27+
28+
@PatchMapping("/{bookingId}")
29+
public BookingDtoResponse updateBooking(
30+
@RequestHeader(userIdHeader) Long bookerId,
31+
@RequestParam Boolean approved,
32+
@PathVariable Long bookingId) {
33+
return bookingService.updateBooking(bookerId, bookingId, approved);
34+
}
35+
36+
@GetMapping("/{bookingId}")
37+
public BookingDtoResponse getBookingById(
38+
@RequestHeader(userIdHeader) Long bookerId,
39+
@PathVariable Long bookingId) {
40+
return bookingService.getBookingById(bookerId, bookingId);
41+
}
42+
43+
@GetMapping
44+
public List<BookingDtoResponse> getBookingByUser(
45+
@RequestHeader(userIdHeader) Long bookerId,
46+
@RequestParam(defaultValue = "ALL") State state) {
47+
return bookingService.getBookingByUser(bookerId, state);
48+
}
49+
50+
@GetMapping("/owner")
51+
public List<BookingDtoResponse> getBookingByItemsUser(
52+
@RequestHeader(userIdHeader) Long userOwnerItemId,
53+
@RequestParam(defaultValue = "ALL") State state) {
54+
return bookingService.getBookingByItemsUser(userOwnerItemId, state);
55+
}
56+
1257
}

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

Lines changed: 0 additions & 7 deletions
This file was deleted.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package ru.practicum.shareit.booking.dto;
2+
3+
import jakarta.validation.constraints.Future;
4+
import jakarta.validation.constraints.FutureOrPresent;
5+
import jakarta.validation.constraints.NotNull;
6+
import lombok.AllArgsConstructor;
7+
import lombok.Data;
8+
import ru.practicum.shareit.booking.enumerated.Status;
9+
10+
import java.time.LocalDateTime;
11+
12+
@Data
13+
@AllArgsConstructor
14+
public class BookingDtoRequest {
15+
16+
@FutureOrPresent(message = "Дата начала бронирования не может быть раньше текущего времени")
17+
@NotNull(message = "Дата начала бронирования не может быть пустой")
18+
private LocalDateTime start;
19+
@Future(message = "Дата окончания бронирования не может быть раньше текущего времени")
20+
@NotNull(message = "Дата окончания бронирования не может быть пустой")
21+
private LocalDateTime end;
22+
@NotNull(message = "ID вещи не может быть пустым")
23+
private Long itemId;
24+
private Status status;
25+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package ru.practicum.shareit.booking.dto;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
import ru.practicum.shareit.booking.enumerated.Status;
6+
import ru.practicum.shareit.item.dto.ItemDto;
7+
import ru.practicum.shareit.user.dto.UserDto;
8+
9+
import java.time.LocalDateTime;
10+
11+
@Data
12+
@AllArgsConstructor
13+
public class BookingDtoResponse {
14+
15+
private Long id;
16+
private LocalDateTime start;
17+
private LocalDateTime end;
18+
private ItemDto item;
19+
private UserDto booker;
20+
private Status status;
21+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package ru.practicum.shareit.booking.enumerated;
2+
3+
public enum State {
4+
ALL, CURRENT, PAST, FUTURE, WAITING, REJECTED, UNSUPPORTED_STATUS
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package ru.practicum.shareit.booking.enumerated;
2+
3+
public enum Status {
4+
WAITING, APPROVED, REJECTED, CANCELED
5+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package ru.practicum.shareit.booking.mapper;
2+
3+
import ru.practicum.shareit.booking.dto.BookingDtoRequest;
4+
import ru.practicum.shareit.booking.dto.BookingDtoResponse;
5+
import ru.practicum.shareit.booking.model.Booking;
6+
import ru.practicum.shareit.item.dto.ItemDto;
7+
import ru.practicum.shareit.item.model.Item;
8+
import ru.practicum.shareit.user.dto.UserDto;
9+
import ru.practicum.shareit.user.model.User;
10+
11+
public class BookingMapper {
12+
13+
public static BookingDtoResponse toBookingDtoResponse(Booking booking, UserDto userDto, ItemDto itemDto) {
14+
return new BookingDtoResponse(
15+
booking.getId(),
16+
booking.getStart(),
17+
booking.getEnd(),
18+
itemDto,
19+
userDto,
20+
booking.getStatus()
21+
);
22+
}
23+
24+
public static Booking toBooking(BookingDtoRequest bookingDtoRequest, User booker, Item item) {
25+
return new Booking(
26+
bookingDtoRequest.getStart(),
27+
bookingDtoRequest.getEnd(),
28+
item,
29+
booker,
30+
bookingDtoRequest.getStatus()
31+
);
32+
}
33+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package ru.practicum.shareit.booking.model;
2+
3+
import jakarta.persistence.*;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Data;
6+
import lombok.NoArgsConstructor;
7+
import ru.practicum.shareit.booking.enumerated.Status;
8+
import ru.practicum.shareit.item.model.Item;
9+
import ru.practicum.shareit.user.model.User;
10+
11+
import java.time.LocalDateTime;
12+
13+
@Data
14+
@Entity
15+
@NoArgsConstructor
16+
@AllArgsConstructor
17+
@Table(name = "bookings")
18+
public class Booking {
19+
20+
@Id
21+
@GeneratedValue(strategy = GenerationType.IDENTITY)
22+
@Column(name = "id")
23+
private Long id;
24+
@Column(name = "start_date", nullable = false)
25+
private LocalDateTime start;
26+
@Column(name = "end_date", nullable = false)
27+
private LocalDateTime end;
28+
@ManyToOne
29+
@JoinColumn(name = "item_id")
30+
private Item item;
31+
@ManyToOne
32+
@JoinColumn(name = "booker_id")
33+
private User booker;
34+
@Enumerated(EnumType.STRING)
35+
private Status status;
36+
37+
public Booking(LocalDateTime start, LocalDateTime end, Item item, User booker, Status status) {
38+
this.start = start;
39+
this.end = end;
40+
this.item = item;
41+
this.booker = booker;
42+
this.status = status;
43+
}
44+
}

0 commit comments

Comments
 (0)