From eb9d302b811eb7d91d037e9294b3a43923d59277 Mon Sep 17 00:00:00 2001 From: Slavakorgg Date: Sat, 24 May 2025 17:14:26 +0400 Subject: [PATCH 01/55] Initial commit --- .github/workflows/api-tests.yml | 8 + .gitignore | 33 +++ README.md | 2 + checkstyle.xml | 257 ++++++++++++++++++ lombok.config | 4 + pom.xml | 247 +++++++++++++++++ .../java/ru/practicum/shareit/ShareItApp.java | 13 + .../ru/practicum/shareit/booking/Booking.java | 7 + .../shareit/booking/BookingController.java | 12 + .../shareit/booking/dto/BookingDto.java | 7 + .../shareit/item/ItemController.java | 12 + .../practicum/shareit/item/dto/ItemDto.java | 7 + .../ru/practicum/shareit/item/model/Item.java | 7 + .../shareit/request/ItemRequest.java | 7 + .../request/ItemRequestController.java | 12 + .../shareit/request/dto/ItemRequestDto.java | 7 + .../java/ru/practicum/shareit/user/User.java | 7 + .../shareit/user/UserController.java | 12 + src/main/resources/application.properties | 14 + .../ru/practicum/shareit/ShareItTests.java | 13 + suppressions.xml | 7 + 21 files changed, 695 insertions(+) create mode 100644 .github/workflows/api-tests.yml create mode 100644 .gitignore create mode 100644 README.md create mode 100644 checkstyle.xml create mode 100644 lombok.config create mode 100644 pom.xml create mode 100644 src/main/java/ru/practicum/shareit/ShareItApp.java create mode 100644 src/main/java/ru/practicum/shareit/booking/Booking.java create mode 100644 src/main/java/ru/practicum/shareit/booking/BookingController.java create mode 100644 src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java create mode 100644 src/main/java/ru/practicum/shareit/item/ItemController.java create mode 100644 src/main/java/ru/practicum/shareit/item/dto/ItemDto.java create mode 100644 src/main/java/ru/practicum/shareit/item/model/Item.java create mode 100644 src/main/java/ru/practicum/shareit/request/ItemRequest.java create mode 100644 src/main/java/ru/practicum/shareit/request/ItemRequestController.java create mode 100644 src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java create mode 100644 src/main/java/ru/practicum/shareit/user/User.java create mode 100644 src/main/java/ru/practicum/shareit/user/UserController.java create mode 100644 src/main/resources/application.properties create mode 100644 src/test/java/ru/practicum/shareit/ShareItTests.java create mode 100644 suppressions.xml diff --git a/.github/workflows/api-tests.yml b/.github/workflows/api-tests.yml new file mode 100644 index 0000000..51c3d8b --- /dev/null +++ b/.github/workflows/api-tests.yml @@ -0,0 +1,8 @@ +name: ShareIt API Tests + +on: + pull_request: + +jobs: + build: + uses: yandex-praktikum/java-shareit/.github/workflows/api-tests.yml@ci \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..47a75f0 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# java-shareit +Template repository for Shareit project. diff --git a/checkstyle.xml b/checkstyle.xml new file mode 100644 index 0000000..c28a0d3 --- /dev/null +++ b/checkstyle.xml @@ -0,0 +1,257 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lombok.config b/lombok.config new file mode 100644 index 0000000..b0056c1 --- /dev/null +++ b/lombok.config @@ -0,0 +1,4 @@ +config.stopBubbling = true +lombok.anyconstructor.addconstructorproperties = false +lombok.addLombokGeneratedAnnotation = true +lombok.addSuppressWarnings = false \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..2db888c --- /dev/null +++ b/pom.xml @@ -0,0 +1,247 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.3.2 + + + + ru.practicum + shareit + 0.0.1-SNAPSHOT + + ShareIt + + + 21 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + org.postgresql + postgresql + runtime + + + + org.projectlombok + lombok + true + + + + com.h2database + h2 + test + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.boot + spring-boot-starter-validation + + + + + + + src/main/resources + true + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + test + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.1.2 + + checkstyle.xml + true + true + true + + + + + check + + compile + + + + + com.puppycrawl.tools + checkstyle + 10.3 + + + + + com.github.spotbugs + spotbugs-maven-plugin + 4.8.5.0 + + Max + High + + + + + check + + + + + + org.jacoco + jacoco-maven-plugin + 0.8.12 + + file + + + + jacoco-initialize + + prepare-agent + + + + jacoco-check + + check + + + + + BUNDLE + + + INSTRUCTION + COVEREDRATIO + 0.01 + + + LINE + COVEREDRATIO + 0.9 + + + BRANCH + COVEREDRATIO + 0.6 + + + COMPLEXITY + COVEREDRATIO + 0.6 + + + METHOD + COVEREDRATIO + 0.7 + + + CLASS + MISSEDCOUNT + 1 + + + + + + + + jacoco-report + test + + report + + + + + + + + + + check + + + + org.apache.maven.plugins + maven-checkstyle-plugin + + + com.github.spotbugs + spotbugs-maven-plugin + + + + + + + com.github.spotbugs + spotbugs-maven-plugin + + + + + + coverage + + + + org.jacoco + jacoco-maven-plugin + + + + + + + diff --git a/src/main/java/ru/practicum/shareit/ShareItApp.java b/src/main/java/ru/practicum/shareit/ShareItApp.java new file mode 100644 index 0000000..a00ad56 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/ShareItApp.java @@ -0,0 +1,13 @@ +package ru.practicum.shareit; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ShareItApp { + + public static void main(String[] args) { + SpringApplication.run(ShareItApp.class, args); + } + +} diff --git a/src/main/java/ru/practicum/shareit/booking/Booking.java b/src/main/java/ru/practicum/shareit/booking/Booking.java new file mode 100644 index 0000000..2d9c666 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/booking/Booking.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.booking; + +/** + * TODO Sprint add-bookings. + */ +public class Booking { +} diff --git a/src/main/java/ru/practicum/shareit/booking/BookingController.java b/src/main/java/ru/practicum/shareit/booking/BookingController.java new file mode 100644 index 0000000..b94493d --- /dev/null +++ b/src/main/java/ru/practicum/shareit/booking/BookingController.java @@ -0,0 +1,12 @@ +package ru.practicum.shareit.booking; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * TODO Sprint add-bookings. + */ +@RestController +@RequestMapping(path = "/bookings") +public class BookingController { +} diff --git a/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java b/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java new file mode 100644 index 0000000..861de9e --- /dev/null +++ b/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.booking.dto; + +/** + * TODO Sprint add-bookings. + */ +public class BookingDto { +} diff --git a/src/main/java/ru/practicum/shareit/item/ItemController.java b/src/main/java/ru/practicum/shareit/item/ItemController.java new file mode 100644 index 0000000..bb17668 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/item/ItemController.java @@ -0,0 +1,12 @@ +package ru.practicum.shareit.item; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * TODO Sprint add-controllers. + */ +@RestController +@RequestMapping("/items") +public class ItemController { +} diff --git a/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java b/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java new file mode 100644 index 0000000..9319d7d --- /dev/null +++ b/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.item.dto; + +/** + * TODO Sprint add-controllers. + */ +public class ItemDto { +} diff --git a/src/main/java/ru/practicum/shareit/item/model/Item.java b/src/main/java/ru/practicum/shareit/item/model/Item.java new file mode 100644 index 0000000..44eb73d --- /dev/null +++ b/src/main/java/ru/practicum/shareit/item/model/Item.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.item.model; + +/** + * TODO Sprint add-controllers. + */ +public class Item { +} diff --git a/src/main/java/ru/practicum/shareit/request/ItemRequest.java b/src/main/java/ru/practicum/shareit/request/ItemRequest.java new file mode 100644 index 0000000..95d6f23 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/request/ItemRequest.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.request; + +/** + * TODO Sprint add-item-requests. + */ +public class ItemRequest { +} diff --git a/src/main/java/ru/practicum/shareit/request/ItemRequestController.java b/src/main/java/ru/practicum/shareit/request/ItemRequestController.java new file mode 100644 index 0000000..064e2e9 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/request/ItemRequestController.java @@ -0,0 +1,12 @@ +package ru.practicum.shareit.request; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * TODO Sprint add-item-requests. + */ +@RestController +@RequestMapping(path = "/requests") +public class ItemRequestController { +} diff --git a/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java b/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java new file mode 100644 index 0000000..7b3ed54 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.request.dto; + +/** + * TODO Sprint add-item-requests. + */ +public class ItemRequestDto { +} diff --git a/src/main/java/ru/practicum/shareit/user/User.java b/src/main/java/ru/practicum/shareit/user/User.java new file mode 100644 index 0000000..ae6e7f3 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/user/User.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.user; + +/** + * TODO Sprint add-controllers. + */ +public class User { +} diff --git a/src/main/java/ru/practicum/shareit/user/UserController.java b/src/main/java/ru/practicum/shareit/user/UserController.java new file mode 100644 index 0000000..03039b9 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/user/UserController.java @@ -0,0 +1,12 @@ +package ru.practicum.shareit.user; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * TODO Sprint add-controllers. + */ +@RestController +@RequestMapping(path = "/users") +public class UserController { +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..b9e5d4b --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,14 @@ +spring.jpa.hibernate.ddl-auto=none +spring.jpa.properties.hibernate.format_sql=true +spring.sql.init.mode=always + +logging.level.org.springframework.orm.jpa=INFO +logging.level.org.springframework.transaction=INFO +logging.level.org.springframework.transaction.interceptor=TRACE +logging.level.org.springframework.orm.jpa.JpaTransactionManager=DEBUG + +# TODO Append connection to DB +#spring.datasource.driverClassName +#spring.datasource.url +#spring.datasource.username +#spring.datasource.password diff --git a/src/test/java/ru/practicum/shareit/ShareItTests.java b/src/test/java/ru/practicum/shareit/ShareItTests.java new file mode 100644 index 0000000..4d79052 --- /dev/null +++ b/src/test/java/ru/practicum/shareit/ShareItTests.java @@ -0,0 +1,13 @@ +package ru.practicum.shareit; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class ShareItTests { + + @Test + void contextLoads() { + } + +} diff --git a/suppressions.xml b/suppressions.xml new file mode 100644 index 0000000..b2c6822 --- /dev/null +++ b/suppressions.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file From d159e3a5fea69f9f2e18c0dfffdd94de5cca1daa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Thu, 29 May 2025 07:48:47 +0400 Subject: [PATCH 02/55] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D0=B0=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=82=D0=B7=2014=D0=BE=D0=B3=D0=BE=20=D1=81=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=BD=D1=82=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ru/practicum/shareit/booking/Booking.java | 18 +++++ .../shareit/booking/BookingStatus.java | 5 ++ .../practicum/shareit/eror/ErrorHandler.java | 44 +++++++++++ .../practicum/shareit/eror/ErrorResponse.java | 15 ++++ .../shareit/exception/ConflictException.java | 7 ++ .../exception/NoDataFoundException.java | 7 ++ .../shareit/exception/NotFoundException.java | 7 ++ .../exception/ValidationException.java | 7 ++ .../shareit/item/ItemController.java | 56 +++++++++++++- .../ru/practicum/shareit/item/ItemMapper.java | 29 +++++++ .../shareit/item/ItemRepository.java | 75 ++++++++++++++++++ .../practicum/shareit/item/ItemService.java | 17 +++++ .../shareit/item/ItemServiceImpl.java | 76 +++++++++++++++++++ .../practicum/shareit/item/dto/ItemDto.java | 15 ++++ .../ru/practicum/shareit/item/model/Item.java | 16 ++++ .../shareit/request/ItemRequest.java | 15 ++++ .../java/ru/practicum/shareit/user/User.java | 11 +++ .../shareit/user/UserController.java | 47 +++++++++++- .../ru/practicum/shareit/user/UserMapper.java | 24 ++++++ .../shareit/user/UserRepository.java | 66 ++++++++++++++++ .../practicum/shareit/user/UserService.java | 15 ++++ .../shareit/user/UserServiceImpl.java | 59 ++++++++++++++ .../practicum/shareit/user/dto/UserDto.java | 17 +++++ 23 files changed, 644 insertions(+), 4 deletions(-) create mode 100644 src/main/java/ru/practicum/shareit/booking/BookingStatus.java create mode 100644 src/main/java/ru/practicum/shareit/eror/ErrorHandler.java create mode 100644 src/main/java/ru/practicum/shareit/eror/ErrorResponse.java create mode 100644 src/main/java/ru/practicum/shareit/exception/ConflictException.java create mode 100644 src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java create mode 100644 src/main/java/ru/practicum/shareit/exception/NotFoundException.java create mode 100644 src/main/java/ru/practicum/shareit/exception/ValidationException.java create mode 100644 src/main/java/ru/practicum/shareit/item/ItemMapper.java create mode 100644 src/main/java/ru/practicum/shareit/item/ItemRepository.java create mode 100644 src/main/java/ru/practicum/shareit/item/ItemService.java create mode 100644 src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java create mode 100644 src/main/java/ru/practicum/shareit/user/UserMapper.java create mode 100644 src/main/java/ru/practicum/shareit/user/UserRepository.java create mode 100644 src/main/java/ru/practicum/shareit/user/UserService.java create mode 100644 src/main/java/ru/practicum/shareit/user/UserServiceImpl.java create mode 100644 src/main/java/ru/practicum/shareit/user/dto/UserDto.java diff --git a/src/main/java/ru/practicum/shareit/booking/Booking.java b/src/main/java/ru/practicum/shareit/booking/Booking.java index 2d9c666..d24df81 100644 --- a/src/main/java/ru/practicum/shareit/booking/Booking.java +++ b/src/main/java/ru/practicum/shareit/booking/Booking.java @@ -1,7 +1,25 @@ package ru.practicum.shareit.booking; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; + + +import java.time.LocalDateTime; + /** * TODO Sprint add-bookings. */ +@Data +@NoArgsConstructor +@AllArgsConstructor public class Booking { + private long id; + private LocalDateTime start; + private LocalDateTime end; + private Item item; + private User booker; + private BookingStatus status; } diff --git a/src/main/java/ru/practicum/shareit/booking/BookingStatus.java b/src/main/java/ru/practicum/shareit/booking/BookingStatus.java new file mode 100644 index 0000000..ee6f096 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/booking/BookingStatus.java @@ -0,0 +1,5 @@ +package ru.practicum.shareit.booking; + +public enum BookingStatus { + WAITING, APPROVED, REJECTED, CANCELED +} diff --git a/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java b/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java new file mode 100644 index 0000000..d5b56a2 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java @@ -0,0 +1,44 @@ +package ru.practicum.shareit.eror; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import ru.practicum.shareit.exception.NoDataFoundException; +import ru.practicum.shareit.exception.NotFoundException; +import ru.practicum.shareit.exception.ValidationException; + +@RestControllerAdvice +@Slf4j +public class ErrorHandler { + @ExceptionHandler + @ResponseStatus(HttpStatus.BAD_REQUEST) + public ErrorResponse handleValidationError(final ValidationException e) { + log.error("Ошибка валидации {}", e.getMessage()); + return new ErrorResponse( + "Ошибка валидации", + e.getMessage() + ); + } + + @ExceptionHandler + @ResponseStatus(HttpStatus.NOT_FOUND) + public ErrorResponse handleNotFound(final NotFoundException e) { + log.error("Искомый объект не найдена {}", e.getMessage()); + return new ErrorResponse( + "Искомый объект не найден", + e.getMessage() + ); + } + + @ExceptionHandler + @ResponseStatus(HttpStatus.BAD_REQUEST) + public ErrorResponse handleNoDataFound(final NoDataFoundException e) { + log.error("Ошибка заполнения данных {}", e.getMessage()); + return new ErrorResponse( + "Ошибка заполнения данных", + e.getMessage() + ); + } +} diff --git a/src/main/java/ru/practicum/shareit/eror/ErrorResponse.java b/src/main/java/ru/practicum/shareit/eror/ErrorResponse.java new file mode 100644 index 0000000..d2e6225 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/eror/ErrorResponse.java @@ -0,0 +1,15 @@ +package ru.practicum.shareit.eror; + +import lombok.Getter; + +@Getter +public class ErrorResponse { + String error; + String description; + + public ErrorResponse(String error, String description) { + this.error = error; + this.description = description; + } + +} diff --git a/src/main/java/ru/practicum/shareit/exception/ConflictException.java b/src/main/java/ru/practicum/shareit/exception/ConflictException.java new file mode 100644 index 0000000..7885123 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/exception/ConflictException.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.exception; + +public class ConflictException extends RuntimeException { + public ConflictException(String message) { + super(message); + } +} diff --git a/src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java b/src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java new file mode 100644 index 0000000..dbef4b4 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.exception; + +public class NoDataFoundException extends RuntimeException { + public NoDataFoundException(String message) { + super(message); + } +} diff --git a/src/main/java/ru/practicum/shareit/exception/NotFoundException.java b/src/main/java/ru/practicum/shareit/exception/NotFoundException.java new file mode 100644 index 0000000..98610d2 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/exception/NotFoundException.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.exception; + +public class NotFoundException extends RuntimeException { + public NotFoundException(String message) { + super(message); + } +} \ No newline at end of file diff --git a/src/main/java/ru/practicum/shareit/exception/ValidationException.java b/src/main/java/ru/practicum/shareit/exception/ValidationException.java new file mode 100644 index 0000000..59043da --- /dev/null +++ b/src/main/java/ru/practicum/shareit/exception/ValidationException.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.exception; + +public class ValidationException extends RuntimeException { + public ValidationException(String message) { + super(message); + } +} diff --git a/src/main/java/ru/practicum/shareit/item/ItemController.java b/src/main/java/ru/practicum/shareit/item/ItemController.java index bb17668..7bbcf37 100644 --- a/src/main/java/ru/practicum/shareit/item/ItemController.java +++ b/src/main/java/ru/practicum/shareit/item/ItemController.java @@ -1,12 +1,64 @@ package ru.practicum.shareit.item; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import ru.practicum.shareit.item.dto.ItemDto; + +import java.util.List; /** * TODO Sprint add-controllers. */ @RestController @RequestMapping("/items") +@RequiredArgsConstructor +@Slf4j +@Validated public class ItemController { + private final ItemService itemService; + + @PostMapping + @ResponseStatus(HttpStatus.CREATED) + public ItemDto create(@Valid @RequestBody ItemDto itemDto, @RequestHeader("X-Sharer-User-Id") Long userId) { + log.info("==> Creating item: {}", itemDto); + ItemDto item = itemService.create(itemDto, userId); + log.info("<== Creating item: {}", item); + return item; + } + + @PatchMapping("/{itemId}") + public ItemDto update(@PathVariable("itemId") Long itemId, @RequestBody ItemDto itemDto, @RequestHeader(value = "X-Sharer-User-Id") Long userId) { + log.info("==> Updating item: {}", itemDto); + ItemDto item = itemService.update(itemId, itemDto, userId); + log.info("==> Updating item: {}", item); + return item; + } + + @GetMapping("/{itemId}") + public ItemDto getItemById(@PathVariable("itemId") Long itemId) { + log.info("==> get item by id: {}", itemId); + ItemDto item = itemService.getItem(itemId); + log.info("<== get item by id: {}", item); + return item; + } + + @GetMapping + public List getUserItems(@RequestHeader("X-Sharer-User-Id") Long userId) { + log.info("==> get user items by user id: {}", userId); + List items = itemService.getAllItemsByOwner(userId); + log.info("<== get user items by user id: {}", userId); + return items; + } + + @GetMapping("/search") + public List search(@RequestParam("text") String searchText) { + log.info("==> search items: {}", searchText); + List items = itemService.search(searchText); + log.info("<== search items: {}", searchText); + return items; + } } diff --git a/src/main/java/ru/practicum/shareit/item/ItemMapper.java b/src/main/java/ru/practicum/shareit/item/ItemMapper.java new file mode 100644 index 0000000..8460ddc --- /dev/null +++ b/src/main/java/ru/practicum/shareit/item/ItemMapper.java @@ -0,0 +1,29 @@ +package ru.practicum.shareit.item; + + +import org.springframework.stereotype.Component; +import ru.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.item.model.Item; + +@Component +public class ItemMapper { + public ItemDto toItemDto(Item item) { + return new ItemDto( + item.getId(), + item.getName(), + item.getDescription(), + item.isAvailable() + ); + } + + public Item toItem(ItemDto itemDto) { + Item item = new Item(); + item.setId(itemDto.getId()); + item.setName(itemDto.getName()); + item.setDescription(itemDto.getDescription()); + item.setAvailable(itemDto.getAvailable()); + return item; + } + +} + diff --git a/src/main/java/ru/practicum/shareit/item/ItemRepository.java b/src/main/java/ru/practicum/shareit/item/ItemRepository.java new file mode 100644 index 0000000..53fff91 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/item/ItemRepository.java @@ -0,0 +1,75 @@ +package ru.practicum.shareit.item; + +import io.micrometer.common.util.StringUtils; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Repository; +import ru.practicum.shareit.exception.NoDataFoundException; +import ru.practicum.shareit.exception.NotFoundException; +import ru.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.item.model.Item; + + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicLong; +import java.util.stream.Collectors; + +@Repository +@AllArgsConstructor +public class ItemRepository { + private final Map items = new ConcurrentHashMap<>(); + private final AtomicLong idCounter = new AtomicLong(); + private final ItemMapper itemMapper; + + public Item save(Item item) { + validateItem(itemMapper.toItemDto(item)); + if (item.getId() == null) { + item.setId(idCounter.incrementAndGet()); + items.put(item.getId(), item); + } else { + if (items.containsKey(item.getId())) { + items.put(item.getId(), item); + } else { + throw new NotFoundException("Item не найден"); + } + } + return item; + } + + public Item findById(Long id) { + return items.get(id); + } + + public List findByOwnerId(Long ownerId) { + return items.values().stream().filter(i -> i.getOwner().getId().equals(ownerId)).collect(Collectors.toList()); + } + + public void deleteById(Long id) { + items.remove(id); + } + + public List search(String text) { + if (text == null || text.isEmpty()) { + return Collections.emptyList(); + } + + return items.values() + .stream() + .filter(i -> i != null && i.isAvailable() + && (StringUtils.isNotEmpty(i.getName()) + && i.getName().toLowerCase().contains(text.toLowerCase()) + || StringUtils.isNotEmpty(i.getDescription()) + && i.getDescription().toLowerCase().contains(text.toLowerCase()))) + .collect(Collectors.toList()); + } + + private void validateItem(ItemDto itemDto) { + if (itemDto.getAvailable() == null || itemDto.getName().isBlank() || itemDto.getDescription() == null) { + throw new NoDataFoundException("Некорректное добавление вещи. Проверьте заполненность необходимых полей"); + } + + } +} + diff --git a/src/main/java/ru/practicum/shareit/item/ItemService.java b/src/main/java/ru/practicum/shareit/item/ItemService.java new file mode 100644 index 0000000..5a69546 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/item/ItemService.java @@ -0,0 +1,17 @@ +package ru.practicum.shareit.item; + +import ru.practicum.shareit.item.dto.ItemDto; + +import java.util.List; + +public interface ItemService { + ItemDto create(ItemDto itemDto, Long userId); + + ItemDto update(Long itemId, ItemDto itemDto, Long userID); + + ItemDto getItem(Long itemId); + + List getAllItemsByOwner(Long ownerId); + + List search(String searchText); +} diff --git a/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java b/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java new file mode 100644 index 0000000..b8b4e67 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java @@ -0,0 +1,76 @@ +package ru.practicum.shareit.item; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import ru.practicum.shareit.exception.NotFoundException; +import ru.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; +import ru.practicum.shareit.user.UserRepository; + +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +public class ItemServiceImpl implements ItemService { + private final ItemRepository itemRepository; + private final ItemMapper itemMapper; + private final UserRepository userRepository; + + @Override + public ItemDto create(ItemDto itemDto, Long userId) { + User owner = userRepository.findById(userId); + if (owner == null) { + throw new NotFoundException("Владелец вещи не найден"); + } + Item item = itemMapper.toItem(itemDto); + item.setOwner(owner); + itemRepository.save(item); + return itemMapper.toItemDto(item); + } + + @Override + public ItemDto update(Long itemId, ItemDto itemDto, Long userID) { + Item item = itemRepository.findById(itemId); + if (item == null) { + throw new NotFoundException("Вещь не найдена"); + } + if (!Objects.equals(userID, item.getOwner().getId())) { + throw new NotFoundException("У вас недостаточно прав для обновления вещи"); + } + if (itemDto.getName() != null) { + item.setName(itemDto.getName()); + } + if (itemDto.getDescription() != null) { + item.setDescription(itemDto.getDescription()); + } + if (itemDto.getAvailable() != null) { + item.setAvailable(itemDto.getAvailable()); + } + itemRepository.save(item); + return itemMapper.toItemDto(item); + } + + @Override + public ItemDto getItem(Long itemId) { + Item item = itemRepository.findById(itemId); + if (item == null) { + throw new NotFoundException("Предмет не найден"); + } + return itemMapper.toItemDto(item); + } + + @Override + public List getAllItemsByOwner(Long ownerId) { + List items = itemRepository.findByOwnerId(ownerId); + return items.stream().map(itemMapper::toItemDto).collect(Collectors.toList()); + } + + @Override + public List search(String searchText) { + List foundItems = itemRepository.search(searchText); + return foundItems.stream().map(itemMapper::toItemDto).collect(Collectors.toList()); + } +} diff --git a/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java b/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java index 9319d7d..1845401 100644 --- a/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java +++ b/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java @@ -1,7 +1,22 @@ package ru.practicum.shareit.item.dto; +import lombok.*; +import org.springframework.validation.annotation.Validated; + + /** * TODO Sprint add-controllers. */ +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +@Validated public class ItemDto { + private Long id; + private String name; + private String description; + private Boolean available; + } diff --git a/src/main/java/ru/practicum/shareit/item/model/Item.java b/src/main/java/ru/practicum/shareit/item/model/Item.java index 44eb73d..37fb026 100644 --- a/src/main/java/ru/practicum/shareit/item/model/Item.java +++ b/src/main/java/ru/practicum/shareit/item/model/Item.java @@ -1,7 +1,23 @@ package ru.practicum.shareit.item.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import ru.practicum.shareit.request.ItemRequest; +import ru.practicum.shareit.user.User; + /** * TODO Sprint add-controllers. */ +@Data +@NoArgsConstructor +@AllArgsConstructor public class Item { + private Long id; + private String name; + private String description; + private boolean available; + private User owner; + private ItemRequest request; } diff --git a/src/main/java/ru/practicum/shareit/request/ItemRequest.java b/src/main/java/ru/practicum/shareit/request/ItemRequest.java index 95d6f23..a784186 100644 --- a/src/main/java/ru/practicum/shareit/request/ItemRequest.java +++ b/src/main/java/ru/practicum/shareit/request/ItemRequest.java @@ -1,7 +1,22 @@ package ru.practicum.shareit.request; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import ru.practicum.shareit.user.User; + +import java.time.LocalDateTime; + /** * TODO Sprint add-item-requests. */ +@Data +@NoArgsConstructor +@AllArgsConstructor public class ItemRequest { + private long id; + private String description; + private User requestor; + private LocalDateTime created; + } diff --git a/src/main/java/ru/practicum/shareit/user/User.java b/src/main/java/ru/practicum/shareit/user/User.java index ae6e7f3..8bb816e 100644 --- a/src/main/java/ru/practicum/shareit/user/User.java +++ b/src/main/java/ru/practicum/shareit/user/User.java @@ -1,7 +1,18 @@ package ru.practicum.shareit.user; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + /** * TODO Sprint add-controllers. */ +@Data +@NoArgsConstructor +@AllArgsConstructor public class User { + private Long id; + private String name; + private String email; } diff --git a/src/main/java/ru/practicum/shareit/user/UserController.java b/src/main/java/ru/practicum/shareit/user/UserController.java index 03039b9..b057a42 100644 --- a/src/main/java/ru/practicum/shareit/user/UserController.java +++ b/src/main/java/ru/practicum/shareit/user/UserController.java @@ -1,12 +1,55 @@ package ru.practicum.shareit.user; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import jakarta.validation.Valid; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import ru.practicum.shareit.user.dto.UserDto; /** * TODO Sprint add-controllers. */ +@Slf4j @RestController +@AllArgsConstructor @RequestMapping(path = "/users") +@Validated public class UserController { + private final UserService userService; + + @PostMapping + @ResponseStatus(HttpStatus.CREATED) + public UserDto createUser(@Valid @RequestBody UserDto userDto) { + log.info("==> Creating user: {}", userDto); + UserDto user = userService.create(userDto); + log.info("<== Creating user: {}", user); + return user; + } + + @PatchMapping("/{userId}") + @ResponseStatus(HttpStatus.OK) + public UserDto updateUser(@PathVariable("userId") Long userId, @Validated @RequestBody(required = false) UserDto userDto) { + log.info("==> Updating user: {}", userDto); + UserDto user = userService.update(userId, userDto); + log.info("<== Updating user: {}", user); + return user; + } + + @GetMapping("/{userId}") + public UserDto getUserById(@PathVariable("userId") Long userId) { + log.info("==> get User by id: {}", userId); + UserDto user = userService.getUserById(userId); + log.info("<== get User by id: {}", user); + return user; + } + + @DeleteMapping("/{userId}") + @ResponseStatus(HttpStatus.OK) + public void deleteUser(@PathVariable("userId") Long userId) { + log.info("==> delete User by id: {}", userId); + userService.deleteUser(userId); + log.info("<== delete User by id: {}", userId); + } } diff --git a/src/main/java/ru/practicum/shareit/user/UserMapper.java b/src/main/java/ru/practicum/shareit/user/UserMapper.java new file mode 100644 index 0000000..9427f44 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/user/UserMapper.java @@ -0,0 +1,24 @@ +package ru.practicum.shareit.user; + +import org.springframework.stereotype.Component; +import ru.practicum.shareit.user.dto.UserDto; + +@Component +public class UserMapper { + public UserDto toUserDto(User user) { + return new UserDto( + user.getId(), + user.getName(), + user.getEmail() + ); + } + + public User toUser(UserDto userDto) { + return new User( + userDto.getId(), + userDto.getName(), + userDto.getEmail() + ); + } + +} diff --git a/src/main/java/ru/practicum/shareit/user/UserRepository.java b/src/main/java/ru/practicum/shareit/user/UserRepository.java new file mode 100644 index 0000000..6b97d3f --- /dev/null +++ b/src/main/java/ru/practicum/shareit/user/UserRepository.java @@ -0,0 +1,66 @@ +package ru.practicum.shareit.user; + +import org.springframework.stereotype.Repository; +import ru.practicum.shareit.exception.ConflictException; +import ru.practicum.shareit.exception.NotFoundException; +import ru.practicum.shareit.exception.ValidationException; + + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicLong; + +@Repository +public class UserRepository { + private final Map users = new ConcurrentHashMap<>(); + + private final AtomicLong idCounter = new AtomicLong(); + + public User save(User user) { + validateUser(user); + validateEmail(user); + if (user.getId() == null) { + user.setId(idCounter.incrementAndGet()); + users.put(user.getId(), user); + + } else { + if (users.containsKey(user.getId())) { + users.put(user.getId(), user); + + } else { + throw new NotFoundException("Пользователь не найден"); + } + } + return user; + } + + public User findById(Long id) { + return users.get(id); + } + + public void deleteById(Long id) { + users.remove(id); + } + + private void validateUser(User user) { + if (user.getEmail() == null || !(user.getEmail().contains("@"))) { + throw new ValidationException("Некорректный email"); + } + if (user.getName() == null || user.getName().equals("")) { + throw new NotFoundException("Имя не может быть пустым"); + } + + } + + private void validateEmail(User user) { + for (User u : users.values()) { + if (u.getId() == user.getId()) { + continue; + } + if (u.getEmail().equals(user.getEmail())) { + throw new ConflictException("Этот email уже используется"); + } + } + } + +} diff --git a/src/main/java/ru/practicum/shareit/user/UserService.java b/src/main/java/ru/practicum/shareit/user/UserService.java new file mode 100644 index 0000000..e373e60 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/user/UserService.java @@ -0,0 +1,15 @@ +package ru.practicum.shareit.user; + +import org.springframework.stereotype.Service; +import ru.practicum.shareit.user.dto.UserDto; + +@Service +public interface UserService { + UserDto create(UserDto userDto); + + UserDto update(Long id, UserDto userDto); + + UserDto getUserById(Long id); + + void deleteUser(Long id); +} diff --git a/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java b/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java new file mode 100644 index 0000000..cccea9a --- /dev/null +++ b/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java @@ -0,0 +1,59 @@ +package ru.practicum.shareit.user; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import ru.practicum.shareit.exception.NotFoundException; +import ru.practicum.shareit.user.dto.UserDto; + +import java.util.Objects; + +@Service +@RequiredArgsConstructor +public class UserServiceImpl implements UserService { + private final UserRepository userRepository; + + private final UserMapper userMapper; + + @Override + public UserDto create(UserDto userDto) { + User user = userMapper.toUser(userDto); + userRepository.save(user); + + return userMapper.toUserDto(user); + + } + + @Override + public UserDto update(Long id, UserDto userDto) { + User user = userRepository.findById(id); + if (user == null) { + throw new NotFoundException("Пользователь не найден"); + } + User updateUser = userMapper.toUser(userDto); + + if (updateUser.getName() != null && !Objects.equals(user.getName(), updateUser.getName())) { + user.setName(updateUser.getName()); + } + if (updateUser.getEmail() != null && !Objects.equals(user.getEmail(), updateUser.getEmail())) { + user.setEmail(updateUser.getEmail()); + } + userRepository.save(user); + return userMapper.toUserDto(user); + } + + @Override + public UserDto getUserById(Long id) { + User user = userRepository.findById(id); + if (user == null) { + throw new NotFoundException("Пользователь не найден"); + } + return userMapper.toUserDto(user); + } + + @Override + public void deleteUser(Long id) { + userRepository.deleteById(id); + } + + +} diff --git a/src/main/java/ru/practicum/shareit/user/dto/UserDto.java b/src/main/java/ru/practicum/shareit/user/dto/UserDto.java new file mode 100644 index 0000000..eddf1da --- /dev/null +++ b/src/main/java/ru/practicum/shareit/user/dto/UserDto.java @@ -0,0 +1,17 @@ +package ru.practicum.shareit.user.dto; + +import jakarta.validation.constraints.Email; +import lombok.*; + + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class UserDto { + private Long id; + private String name; + @Email(message = "Электронная почта должна содержать символ @") + private String email; +} From 0f29b95194ca177321e8ecce738c171d0b5c6c92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Thu, 29 May 2025 07:52:39 +0400 Subject: [PATCH 03/55] test fix --- src/main/java/ru/practicum/shareit/user/UserRepository.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/practicum/shareit/user/UserRepository.java b/src/main/java/ru/practicum/shareit/user/UserRepository.java index 6b97d3f..2966c77 100644 --- a/src/main/java/ru/practicum/shareit/user/UserRepository.java +++ b/src/main/java/ru/practicum/shareit/user/UserRepository.java @@ -7,6 +7,7 @@ import java.util.Map; +import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicLong; @@ -54,7 +55,7 @@ private void validateUser(User user) { private void validateEmail(User user) { for (User u : users.values()) { - if (u.getId() == user.getId()) { + if (Objects.equals(u.getId(), user.getId())) { continue; } if (u.getEmail().equals(user.getEmail())) { From 7fb13ace227f5f40e6b397fc27307228610608d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Fri, 30 May 2025 02:48:54 +0400 Subject: [PATCH 04/55] =?UTF-8?q?=D0=92=D1=82=D0=BE=D1=80=D0=B0=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=82=D0=B7=2014=D0=BE=D0=B3=D0=BE=20=D1=81=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=BD=D1=82=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shareit/item/ItemController.java | 32 ++++++------------- .../practicum/shareit/item/ItemService.java | 2 +- .../shareit/item/ItemServiceImpl.java | 14 +++++++- .../shareit/user/UserController.java | 22 ++++--------- .../practicum/shareit/user/UserService.java | 2 +- .../shareit/user/UserServiceImpl.java | 31 ++++++++++++------ 6 files changed, 52 insertions(+), 51 deletions(-) diff --git a/src/main/java/ru/practicum/shareit/item/ItemController.java b/src/main/java/ru/practicum/shareit/item/ItemController.java index 7bbcf37..e1c9175 100644 --- a/src/main/java/ru/practicum/shareit/item/ItemController.java +++ b/src/main/java/ru/practicum/shareit/item/ItemController.java @@ -2,7 +2,6 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -16,7 +15,6 @@ @RestController @RequestMapping("/items") @RequiredArgsConstructor -@Slf4j @Validated public class ItemController { private final ItemService itemService; @@ -24,41 +22,31 @@ public class ItemController { @PostMapping @ResponseStatus(HttpStatus.CREATED) public ItemDto create(@Valid @RequestBody ItemDto itemDto, @RequestHeader("X-Sharer-User-Id") Long userId) { - log.info("==> Creating item: {}", itemDto); - ItemDto item = itemService.create(itemDto, userId); - log.info("<== Creating item: {}", item); - return item; + + return itemService.create(itemDto, userId); } @PatchMapping("/{itemId}") public ItemDto update(@PathVariable("itemId") Long itemId, @RequestBody ItemDto itemDto, @RequestHeader(value = "X-Sharer-User-Id") Long userId) { - log.info("==> Updating item: {}", itemDto); - ItemDto item = itemService.update(itemId, itemDto, userId); - log.info("==> Updating item: {}", item); - return item; + + return itemService.update(itemId, itemDto, userId); } @GetMapping("/{itemId}") public ItemDto getItemById(@PathVariable("itemId") Long itemId) { - log.info("==> get item by id: {}", itemId); - ItemDto item = itemService.getItem(itemId); - log.info("<== get item by id: {}", item); - return item; + + return itemService.get(itemId); } @GetMapping public List getUserItems(@RequestHeader("X-Sharer-User-Id") Long userId) { - log.info("==> get user items by user id: {}", userId); - List items = itemService.getAllItemsByOwner(userId); - log.info("<== get user items by user id: {}", userId); - return items; + + return itemService.getAllItemsByOwner(userId); } @GetMapping("/search") public List search(@RequestParam("text") String searchText) { - log.info("==> search items: {}", searchText); - List items = itemService.search(searchText); - log.info("<== search items: {}", searchText); - return items; + + return itemService.search(searchText); } } diff --git a/src/main/java/ru/practicum/shareit/item/ItemService.java b/src/main/java/ru/practicum/shareit/item/ItemService.java index 5a69546..91f00fb 100644 --- a/src/main/java/ru/practicum/shareit/item/ItemService.java +++ b/src/main/java/ru/practicum/shareit/item/ItemService.java @@ -9,7 +9,7 @@ public interface ItemService { ItemDto update(Long itemId, ItemDto itemDto, Long userID); - ItemDto getItem(Long itemId); + ItemDto get(Long itemId); List getAllItemsByOwner(Long ownerId); diff --git a/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java b/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java index b8b4e67..e5d1637 100644 --- a/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java +++ b/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java @@ -1,6 +1,7 @@ package ru.practicum.shareit.item; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import ru.practicum.shareit.exception.NotFoundException; import ru.practicum.shareit.item.dto.ItemDto; @@ -14,6 +15,7 @@ @Service @RequiredArgsConstructor +@Slf4j public class ItemServiceImpl implements ItemService { private final ItemRepository itemRepository; private final ItemMapper itemMapper; @@ -21,6 +23,7 @@ public class ItemServiceImpl implements ItemService { @Override public ItemDto create(ItemDto itemDto, Long userId) { + log.debug("==> Creating item: {}", itemDto); User owner = userRepository.findById(userId); if (owner == null) { throw new NotFoundException("Владелец вещи не найден"); @@ -28,11 +31,13 @@ public ItemDto create(ItemDto itemDto, Long userId) { Item item = itemMapper.toItem(itemDto); item.setOwner(owner); itemRepository.save(item); + log.debug("<== Creating item: {}", item); return itemMapper.toItemDto(item); } @Override public ItemDto update(Long itemId, ItemDto itemDto, Long userID) { + log.debug("==> Updating item: {}", itemDto); Item item = itemRepository.findById(itemId); if (item == null) { throw new NotFoundException("Вещь не найдена"); @@ -50,27 +55,34 @@ public ItemDto update(Long itemId, ItemDto itemDto, Long userID) { item.setAvailable(itemDto.getAvailable()); } itemRepository.save(item); + log.debug("==> Updating item: {}", item); return itemMapper.toItemDto(item); } @Override - public ItemDto getItem(Long itemId) { + public ItemDto get(Long itemId) { + log.debug("==> get item by id: {}", itemId); Item item = itemRepository.findById(itemId); if (item == null) { throw new NotFoundException("Предмет не найден"); } + log.debug("<== get item by id: {}", item); return itemMapper.toItemDto(item); } @Override public List getAllItemsByOwner(Long ownerId) { + log.debug("==> get user items by user id: {}", ownerId); List items = itemRepository.findByOwnerId(ownerId); + log.debug("<== get user items by user id: {}", ownerId); return items.stream().map(itemMapper::toItemDto).collect(Collectors.toList()); } @Override public List search(String searchText) { + log.debug("==> search items: {}", searchText); List foundItems = itemRepository.search(searchText); + log.debug("<== search items: {}", searchText); return foundItems.stream().map(itemMapper::toItemDto).collect(Collectors.toList()); } } diff --git a/src/main/java/ru/practicum/shareit/user/UserController.java b/src/main/java/ru/practicum/shareit/user/UserController.java index b057a42..7a79275 100644 --- a/src/main/java/ru/practicum/shareit/user/UserController.java +++ b/src/main/java/ru/practicum/shareit/user/UserController.java @@ -2,7 +2,6 @@ import jakarta.validation.Valid; import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -11,7 +10,7 @@ /** * TODO Sprint add-controllers. */ -@Slf4j + @RestController @AllArgsConstructor @RequestMapping(path = "/users") @@ -22,34 +21,25 @@ public class UserController { @PostMapping @ResponseStatus(HttpStatus.CREATED) public UserDto createUser(@Valid @RequestBody UserDto userDto) { - log.info("==> Creating user: {}", userDto); - UserDto user = userService.create(userDto); - log.info("<== Creating user: {}", user); - return user; + return userService.create(userDto); } @PatchMapping("/{userId}") @ResponseStatus(HttpStatus.OK) public UserDto updateUser(@PathVariable("userId") Long userId, @Validated @RequestBody(required = false) UserDto userDto) { - log.info("==> Updating user: {}", userDto); - UserDto user = userService.update(userId, userDto); - log.info("<== Updating user: {}", user); - return user; + + return userService.update(userId, userDto); } @GetMapping("/{userId}") public UserDto getUserById(@PathVariable("userId") Long userId) { - log.info("==> get User by id: {}", userId); - UserDto user = userService.getUserById(userId); - log.info("<== get User by id: {}", user); - return user; + + return userService.get(userId); } @DeleteMapping("/{userId}") @ResponseStatus(HttpStatus.OK) public void deleteUser(@PathVariable("userId") Long userId) { - log.info("==> delete User by id: {}", userId); userService.deleteUser(userId); - log.info("<== delete User by id: {}", userId); } } diff --git a/src/main/java/ru/practicum/shareit/user/UserService.java b/src/main/java/ru/practicum/shareit/user/UserService.java index e373e60..a1b85f5 100644 --- a/src/main/java/ru/practicum/shareit/user/UserService.java +++ b/src/main/java/ru/practicum/shareit/user/UserService.java @@ -9,7 +9,7 @@ public interface UserService { UserDto update(Long id, UserDto userDto); - UserDto getUserById(Long id); + UserDto get(Long id); void deleteUser(Long id); } diff --git a/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java b/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java index cccea9a..f1439f5 100644 --- a/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java +++ b/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java @@ -1,6 +1,7 @@ package ru.practicum.shareit.user; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import ru.practicum.shareit.exception.NotFoundException; import ru.practicum.shareit.user.dto.UserDto; @@ -9,6 +10,7 @@ @Service @RequiredArgsConstructor +@Slf4j public class UserServiceImpl implements UserService { private final UserRepository userRepository; @@ -16,19 +18,18 @@ public class UserServiceImpl implements UserService { @Override public UserDto create(UserDto userDto) { + log.debug("==> Creating user: {}", userDto); User user = userMapper.toUser(userDto); userRepository.save(user); - + log.debug("<== Creating user: {}", user); return userMapper.toUserDto(user); } @Override public UserDto update(Long id, UserDto userDto) { - User user = userRepository.findById(id); - if (user == null) { - throw new NotFoundException("Пользователь не найден"); - } + log.debug("==> Updating user: {}", userDto); + User user = userExist(id); User updateUser = userMapper.toUser(userDto); if (updateUser.getName() != null && !Objects.equals(user.getName(), updateUser.getName())) { @@ -38,21 +39,31 @@ public UserDto update(Long id, UserDto userDto) { user.setEmail(updateUser.getEmail()); } userRepository.save(user); + log.debug("<== Updating user: {}", user); return userMapper.toUserDto(user); } @Override - public UserDto getUserById(Long id) { - User user = userRepository.findById(id); - if (user == null) { - throw new NotFoundException("Пользователь не найден"); - } + public UserDto get(Long id) { + log.debug("==> get User by id: {}", id); + User user = userExist(id); + log.debug("<== get User by id: {}", user); return userMapper.toUserDto(user); } @Override public void deleteUser(Long id) { + log.debug("==> delete User by id: {}", id); userRepository.deleteById(id); + log.info("<== delete User by id: {}", id); + } + + public User userExist(Long id){ + User user = userRepository.findById(id); + if (user == null) { + throw new NotFoundException("Пользователь не найден"); + } + return user; } From db85e7b50d032081c683d88acb4dbf90e199b421 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Fri, 30 May 2025 02:51:22 +0400 Subject: [PATCH 05/55] fix tests --- src/main/java/ru/practicum/shareit/user/UserServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java b/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java index f1439f5..3ea6ccd 100644 --- a/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java +++ b/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java @@ -58,7 +58,7 @@ public void deleteUser(Long id) { log.info("<== delete User by id: {}", id); } - public User userExist(Long id){ + public User userExist(Long id) { User user = userRepository.findById(id); if (user == null) { throw new NotFoundException("Пользователь не найден"); From e1d0985da927cbb95d50186bda5a57ac43b1f460 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Fri, 30 May 2025 12:25:40 +0400 Subject: [PATCH 06/55] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B0=D0=B7=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D0=B0=20get?= =?UTF-8?q?User?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ru/practicum/shareit/user/UserServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java b/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java index 3ea6ccd..c34f489 100644 --- a/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java +++ b/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java @@ -29,7 +29,7 @@ public UserDto create(UserDto userDto) { @Override public UserDto update(Long id, UserDto userDto) { log.debug("==> Updating user: {}", userDto); - User user = userExist(id); + User user = getUser(id); User updateUser = userMapper.toUser(userDto); if (updateUser.getName() != null && !Objects.equals(user.getName(), updateUser.getName())) { @@ -46,7 +46,7 @@ public UserDto update(Long id, UserDto userDto) { @Override public UserDto get(Long id) { log.debug("==> get User by id: {}", id); - User user = userExist(id); + User user = getUser(id); log.debug("<== get User by id: {}", user); return userMapper.toUserDto(user); } @@ -58,7 +58,7 @@ public void deleteUser(Long id) { log.info("<== delete User by id: {}", id); } - public User userExist(Long id) { + public User getUser(Long id) { User user = userRepository.findById(id); if (user == null) { throw new NotFoundException("Пользователь не найден"); From 5f03df913bc5122ea43db1d3b8b44f00e619a324 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Mon, 16 Jun 2025 10:53:18 +0400 Subject: [PATCH 07/55] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D0=B0=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=82=D0=B7=2015=D0=BE=D0=B3=D0=BE=20=D1=81=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=BD=D1=82=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 6 +- .../ru/practicum/shareit/booking/Booking.java | 14 ++ .../shareit/booking/BookingController.java | 50 ++++++- .../shareit/booking/BookingMapper.java | 36 ++++++ .../shareit/booking/BookingRepository.java | 46 +++++++ .../shareit/booking/BookingService.java | 18 +++ .../shareit/booking/BookingServiceImpl.java | 101 +++++++++++++++ .../shareit/booking/BookingState.java | 5 + .../shareit/booking/dto/BookingDto.java | 18 +++ .../shareit/booking/dto/NewBookingDto.java | 21 +++ .../shareit/comment/CommentMapper.java | 32 +++++ .../shareit/comment/CommentRepository.java | 10 ++ .../shareit/comment/dto/CommentDto.java | 17 +++ .../shareit/comment/dto/NewCommentDto.java | 10 ++ .../shareit/comment/model/Comment.java | 40 ++++++ .../practicum/shareit/eror/ErrorHandler.java | 24 +++- .../shareit/exception/NoAccessException.java | 7 + .../exception/NotAvailableItemException.java | 7 + .../shareit/item/ItemController.java | 21 ++- .../ru/practicum/shareit/item/ItemMapper.java | 69 ++++++++-- .../shareit/item/ItemRepository.java | 74 ++--------- .../practicum/shareit/item/ItemService.java | 14 +- .../shareit/item/ItemServiceImpl.java | 122 +++++++++++------- .../practicum/shareit/item/dto/ItemDto.java | 11 +- .../shareit/item/dto/ItemWithCommentsDto.java | 21 +++ .../shareit/item/dto/NewItemDto.java | 22 ++++ .../shareit/item/dto/UpdateItemDto.java | 22 ++++ .../ru/practicum/shareit/item/model/Item.java | 17 +++ .../shareit/request/ItemRequest.java | 22 +++- .../shareit/request/dto/ItemRequestDto.java | 12 ++ .../java/ru/practicum/shareit/user/User.java | 9 ++ .../shareit/user/UserController.java | 18 +-- .../ru/practicum/shareit/user/UserMapper.java | 43 ++++-- .../shareit/user/UserRepository.java | 65 +--------- .../practicum/shareit/user/UserService.java | 11 +- .../shareit/user/UserServiceImpl.java | 60 ++++----- .../shareit/user/dto/NewUserDto.java | 17 +++ .../shareit/user/dto/UpdateUserDto.java | 20 +++ .../practicum/shareit/user/dto/UserDto.java | 3 +- src/main/resources/application.properties | 9 +- src/main/resources/schema.sql | 35 +++++ 41 files changed, 904 insertions(+), 275 deletions(-) create mode 100644 src/main/java/ru/practicum/shareit/booking/BookingMapper.java create mode 100644 src/main/java/ru/practicum/shareit/booking/BookingRepository.java create mode 100644 src/main/java/ru/practicum/shareit/booking/BookingService.java create mode 100644 src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java create mode 100644 src/main/java/ru/practicum/shareit/booking/BookingState.java create mode 100644 src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java create mode 100644 src/main/java/ru/practicum/shareit/comment/CommentMapper.java create mode 100644 src/main/java/ru/practicum/shareit/comment/CommentRepository.java create mode 100644 src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java create mode 100644 src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java create mode 100644 src/main/java/ru/practicum/shareit/comment/model/Comment.java create mode 100644 src/main/java/ru/practicum/shareit/exception/NoAccessException.java create mode 100644 src/main/java/ru/practicum/shareit/exception/NotAvailableItemException.java create mode 100644 src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java create mode 100644 src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java create mode 100644 src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java create mode 100644 src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java create mode 100644 src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java create mode 100644 src/main/resources/schema.sql diff --git a/pom.xml b/pom.xml index 2db888c..e1f3a93 100644 --- a/pom.xml +++ b/pom.xml @@ -24,6 +24,10 @@ org.springframework.boot spring-boot-starter-web + + org.springframework.boot + spring-boot-starter-data-jpa + org.springframework.boot spring-boot-starter-actuator @@ -49,7 +53,7 @@ com.h2database h2 - test + org.springframework.boot diff --git a/src/main/java/ru/practicum/shareit/booking/Booking.java b/src/main/java/ru/practicum/shareit/booking/Booking.java index d24df81..c94f8e2 100644 --- a/src/main/java/ru/practicum/shareit/booking/Booking.java +++ b/src/main/java/ru/practicum/shareit/booking/Booking.java @@ -1,6 +1,8 @@ package ru.practicum.shareit.booking; +import jakarta.persistence.*; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import ru.practicum.shareit.item.model.Item; @@ -15,11 +17,23 @@ @Data @NoArgsConstructor @AllArgsConstructor +@Entity +@Table(name = "bookings") +@Builder public class Booking { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; + @Column(name = "start_time") private LocalDateTime start; + @Column(name = "end_time") private LocalDateTime end; + @ManyToOne + @JoinColumn(name = "item_id") private Item item; + @ManyToOne + @JoinColumn(name = "booker_id") private User booker; + @Enumerated(EnumType.STRING) private BookingStatus status; } diff --git a/src/main/java/ru/practicum/shareit/booking/BookingController.java b/src/main/java/ru/practicum/shareit/booking/BookingController.java index b94493d..889b7c1 100644 --- a/src/main/java/ru/practicum/shareit/booking/BookingController.java +++ b/src/main/java/ru/practicum/shareit/booking/BookingController.java @@ -1,12 +1,58 @@ package ru.practicum.shareit.booking; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.web.PageableDefault; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; +import ru.practicum.shareit.booking.dto.BookingDto; +import ru.practicum.shareit.booking.dto.NewBookingDto; + +import java.util.List; + /** * TODO Sprint add-bookings. */ @RestController @RequestMapping(path = "/bookings") +@RequiredArgsConstructor public class BookingController { + private final BookingService bookingService; + + @PostMapping + @ResponseStatus(HttpStatus.CREATED) + public BookingDto create(@RequestBody @Valid NewBookingDto newBookingDto, @RequestHeader("X-Sharer-User-Id") long userId) { + return bookingService.create(newBookingDto, userId); + } + + @PatchMapping("/{bookingId}") + @ResponseStatus(HttpStatus.OK) + public BookingDto approveBooking(@RequestHeader("X-Sharer-User-Id") long userId, @PathVariable long bookingId, @RequestParam boolean approved) { + return bookingService.approveBooking(userId, bookingId, approved); + } + + @GetMapping + @ResponseStatus(HttpStatus.OK) + public List findByBooker(@RequestHeader("X-Sharer-User-Id") long userId, + @RequestParam(defaultValue = "ALL") BookingState state, + @PageableDefault(size = 20, sort = "start", direction = Sort.Direction.DESC) Pageable pageable) { + return bookingService.findByBooker(userId, state, pageable).getContent(); + } + + @GetMapping("/owner") + @ResponseStatus(HttpStatus.OK) + public List findByOwner(@RequestHeader("X-Sharer-User-Id") long userId, + @RequestParam(defaultValue = "ALL") BookingState state, + @PageableDefault(size = 20, sort = "start", direction = Sort.Direction.DESC) Pageable pageable) { + return bookingService.findByOwner(userId, state, pageable).getContent(); + } + + @GetMapping("/{bookingId}") + @ResponseStatus(HttpStatus.OK) + public BookingDto findById(@RequestHeader("X-Sharer-User-Id") long userId, @PathVariable long bookingId) { + return bookingService.findById(userId, bookingId); + } } diff --git a/src/main/java/ru/practicum/shareit/booking/BookingMapper.java b/src/main/java/ru/practicum/shareit/booking/BookingMapper.java new file mode 100644 index 0000000..1d6c181 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/booking/BookingMapper.java @@ -0,0 +1,36 @@ +package ru.practicum.shareit.booking; + + +import org.springframework.stereotype.Component; +import ru.practicum.shareit.booking.dto.BookingDto; +import ru.practicum.shareit.booking.dto.NewBookingDto; +import ru.practicum.shareit.item.ItemMapper; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; +import ru.practicum.shareit.user.UserMapper; + +@Component +public class BookingMapper { + public static BookingDto mapToBookingDto(Booking booking) { + return BookingDto.builder() + .id(booking.getId()) + .start(booking.getStart()) + .end(booking.getEnd()) + .item(ItemMapper.mapToItemDto(booking.getItem())) + .booker(UserMapper.mapToUserDto(booking.getBooker())) + .status(booking.getStatus()) + .build(); + } + + public static Booking mapToNewBookingDto(NewBookingDto newBookingDto, User user, Item item) { + return Booking.builder() + .start(newBookingDto.getStart()) + .end(newBookingDto.getEnd()) + .item(item) + .booker(user) + .status(BookingStatus.WAITING) + .build(); + } + + +} diff --git a/src/main/java/ru/practicum/shareit/booking/BookingRepository.java b/src/main/java/ru/practicum/shareit/booking/BookingRepository.java new file mode 100644 index 0000000..f9d4cae --- /dev/null +++ b/src/main/java/ru/practicum/shareit/booking/BookingRepository.java @@ -0,0 +1,46 @@ +package ru.practicum.shareit.booking; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.time.LocalDateTime; +import java.util.List; + +public interface BookingRepository extends JpaRepository { + Page findByBooker_Id(long bookerId, Pageable pageable); + + Page findByItemOwner_Id(long ownerId, Pageable pageable); + + @Query("SELECT b FROM Booking b " + + " WHERE b.booker.id = :bookerId " + + " AND b.start <= :now " + + " AND b.end >= :now " + + " AND b.status = ru.practicum.shareit.booking.BookingStatus.APPROVED") + Page findCurrentByBooker(@Param("bookerId") long bookerId, @Param("now") LocalDateTime now, Pageable pageable); + + @Query("SELECT b FROM Booking b " + + " WHERE b.item.owner.id = :ownerId " + + " AND b.start <= :now " + + " AND b.end >= :now " + + " AND b.status = ru.practicum.shareit.booking.BookingStatus.APPROVED") + Page findCurrentByOwner(@Param("ownerId") long ownerId, @Param("now") LocalDateTime now, Pageable pageable); + + Page findByBooker_IdAndEndBefore(long bookerId, LocalDateTime now, Pageable pageable); + + Page findByItemOwner_IdAndEndBefore(long ownerId, LocalDateTime now, Pageable pageable); + + Page findByBooker_IdAndStartAfter(long bookerId, LocalDateTime now, Pageable pageable); + + Page findByItemOwner_IdAndStartAfter(long ownerId, LocalDateTime now, Pageable pageable); + + Page findByBooker_IdAndStatus(long bookerId, BookingStatus status, Pageable pageable); + + Page findByItemOwner_IdAndStatus(long ownerId, BookingStatus status, Pageable pageable); + + List findByItem_idAndStatus(long itemId, BookingStatus status); + + Booking findByItem_idAndBooker_id(long itemId, long bookerId); +} diff --git a/src/main/java/ru/practicum/shareit/booking/BookingService.java b/src/main/java/ru/practicum/shareit/booking/BookingService.java new file mode 100644 index 0000000..8d4c2bb --- /dev/null +++ b/src/main/java/ru/practicum/shareit/booking/BookingService.java @@ -0,0 +1,18 @@ +package ru.practicum.shareit.booking; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import ru.practicum.shareit.booking.dto.BookingDto; +import ru.practicum.shareit.booking.dto.NewBookingDto; + +public interface BookingService { + BookingDto create(NewBookingDto newBookingDto, long bookerId); + + BookingDto approveBooking(long userId, long bookingId, boolean approved); + + Page findByBooker(long bookerId, BookingState state, Pageable pageable); + + Page findByOwner(long ownerId, BookingState state, Pageable pageable); + + BookingDto findById(long userId, long bookingId); +} diff --git a/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java b/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java new file mode 100644 index 0000000..3433abb --- /dev/null +++ b/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java @@ -0,0 +1,101 @@ +package ru.practicum.shareit.booking; + + +import lombok.RequiredArgsConstructor; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import ru.practicum.shareit.booking.dto.BookingDto; +import ru.practicum.shareit.booking.dto.NewBookingDto; +import ru.practicum.shareit.exception.NoAccessException; +import ru.practicum.shareit.exception.NotAvailableItemException; +import ru.practicum.shareit.exception.NotFoundException; +import ru.practicum.shareit.item.ItemRepository; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; +import ru.practicum.shareit.user.UserRepository; + +import java.time.LocalDateTime; + +@Service +@RequiredArgsConstructor +public class BookingServiceImpl implements BookingService { + private final BookingRepository bookingRepository; + private final ItemRepository itemRepository; + private final UserRepository userRepository; + + @Override + public BookingDto create(NewBookingDto newBookingDto, long bookerId) { + User booker = userRepository.findById(bookerId) + .orElseThrow(() -> new NotFoundException("Пользователь не найден")); + Item item = itemRepository.findById(newBookingDto.getItemId()) + .orElseThrow(() -> new NotFoundException("Вещь не найдена")); + if (!item.isAvailable()) { + throw new NotAvailableItemException("Вещь недоступна для бронирования"); + + } + Booking booking = BookingMapper.mapToNewBookingDto(newBookingDto, booker, item); + bookingRepository.save(booking); + return BookingMapper.mapToBookingDto(booking); + } + + @Override + public BookingDto approveBooking(long userId, long bookingId, boolean approved) { + Booking booking = bookingRepository.findById(bookingId) + .orElseThrow(() -> new NotFoundException("Бронирование не найдено")); + long ownerId = booking.getItem().getOwner().getId(); + if (userId != ownerId) { + throw new NoAccessException("Только владелец вещи имеет доступ к изменению статуса бронирования"); + } + booking.setStatus(approved ? BookingStatus.APPROVED : BookingStatus.REJECTED); + bookingRepository.save(booking); + return BookingMapper.mapToBookingDto(booking); + } + + @Override + public Page findByBooker(long bookerId, BookingState state, Pageable pageable) { + userRepository.findById(bookerId) + .orElseThrow(() -> new NotFoundException("Пользователь не найден")); + LocalDateTime timeNow = LocalDateTime.now(); + Page page = switch (state) { + case CURRENT -> bookingRepository.findCurrentByBooker(bookerId, timeNow, pageable); + case PAST -> bookingRepository.findByBooker_IdAndEndBefore(bookerId, timeNow, pageable); + case FUTURE -> bookingRepository.findByBooker_IdAndStartAfter(bookerId, timeNow, pageable); + case WAITING -> bookingRepository.findByBooker_IdAndStatus(bookerId, BookingStatus.WAITING, pageable); + case REJECTED -> bookingRepository.findByBooker_IdAndStatus(bookerId, BookingStatus.REJECTED, pageable); + case ALL -> bookingRepository.findByBooker_Id(bookerId, pageable); + default -> throw new NotFoundException("Некорректный параметр state"); + }; + return page.map(BookingMapper::mapToBookingDto); + } + + @Override + public Page findByOwner(long ownerId, BookingState state, Pageable pageable) { + userRepository.findById(ownerId) + .orElseThrow(() -> new NotFoundException("Пользователь не найден")); + LocalDateTime timeNow = LocalDateTime.now(); + Page page = switch (state) { + case CURRENT -> bookingRepository.findCurrentByOwner(ownerId, timeNow, pageable); + case PAST -> bookingRepository.findByItemOwner_IdAndEndBefore(ownerId, timeNow, pageable); + case FUTURE -> bookingRepository.findByItemOwner_IdAndStartAfter(ownerId, timeNow, pageable); + case WAITING -> bookingRepository.findByItemOwner_IdAndStatus(ownerId, BookingStatus.WAITING, pageable); + case REJECTED -> bookingRepository.findByItemOwner_IdAndStatus(ownerId, BookingStatus.REJECTED, pageable); + case ALL -> bookingRepository.findByItemOwner_Id(ownerId, pageable); + default -> throw new NotFoundException("Некорректный параметр state"); + }; + return page.map(BookingMapper::mapToBookingDto); + } + + @Override + public BookingDto findById(long userId, long bookingId) { + Booking booking = bookingRepository.findById(bookingId) + .orElseThrow(() -> new NotFoundException("Бронирование не найдено")); + long ownerId = booking.getItem().getOwner().getId(); + if (booking.getBooker().getId() != userId && ownerId != userId) { + throw new NoAccessException("No access to booking"); + } + return BookingMapper.mapToBookingDto(booking); + } + +} diff --git a/src/main/java/ru/practicum/shareit/booking/BookingState.java b/src/main/java/ru/practicum/shareit/booking/BookingState.java new file mode 100644 index 0000000..1ffe7c9 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/booking/BookingState.java @@ -0,0 +1,5 @@ +package ru.practicum.shareit.booking; + +public enum BookingState { + CURRENT, PAST, FUTURE, WAITING, REJECTED, ALL +} diff --git a/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java b/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java index 861de9e..7e6d2b0 100644 --- a/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java +++ b/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java @@ -1,7 +1,25 @@ package ru.practicum.shareit.booking.dto; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.booking.BookingStatus; +import ru.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.user.dto.UserDto; + +import java.time.LocalDateTime; + /** * TODO Sprint add-bookings. */ +@Data +@Builder + public class BookingDto { + private Long id; + private LocalDateTime start; + private LocalDateTime end; + private ItemDto item; + private UserDto booker; + private BookingStatus status; } diff --git a/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java b/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java new file mode 100644 index 0000000..be4d6e6 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java @@ -0,0 +1,21 @@ +package ru.practicum.shareit.booking.dto; + +import jakarta.validation.constraints.FutureOrPresent; +import jakarta.validation.constraints.NotNull; +import lombok.Builder; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +@Builder +public class NewBookingDto { + @FutureOrPresent + private LocalDateTime start; + + @FutureOrPresent + private LocalDateTime end; + + @NotNull + private Long itemId; +} diff --git a/src/main/java/ru/practicum/shareit/comment/CommentMapper.java b/src/main/java/ru/practicum/shareit/comment/CommentMapper.java new file mode 100644 index 0000000..056001f --- /dev/null +++ b/src/main/java/ru/practicum/shareit/comment/CommentMapper.java @@ -0,0 +1,32 @@ +package ru.practicum.shareit.comment; + +import lombok.NoArgsConstructor; +import ru.practicum.shareit.comment.dto.CommentDto; +import ru.practicum.shareit.comment.dto.NewCommentDto; +import ru.practicum.shareit.comment.model.Comment; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; + +import java.time.Instant; + +@NoArgsConstructor +public class CommentMapper { + public static Comment mapToNewComment(NewCommentDto newCommentDto, Item item, User user) { + return Comment.builder() + .text(newCommentDto.getText()) + .created(Instant.now()) + .item(item) + .author(user) + .build(); + } + + public static CommentDto mapToCommentDto(Comment comment) { + return CommentDto.builder() + .id(comment.getId()) + .text(comment.getText()) + .authorName(comment.getAuthor().getName()) + .item(comment.getItem()) + .created(comment.getCreated()) + .build(); + } +} diff --git a/src/main/java/ru/practicum/shareit/comment/CommentRepository.java b/src/main/java/ru/practicum/shareit/comment/CommentRepository.java new file mode 100644 index 0000000..ad69c08 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/comment/CommentRepository.java @@ -0,0 +1,10 @@ +package ru.practicum.shareit.comment; + +import org.springframework.data.jpa.repository.JpaRepository; +import ru.practicum.shareit.comment.model.Comment; + +import java.util.List; + +public interface CommentRepository extends JpaRepository { + List findByItem_id(long itemId); +} diff --git a/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java b/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java new file mode 100644 index 0000000..da53c85 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java @@ -0,0 +1,17 @@ +package ru.practicum.shareit.comment.dto; + +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.item.model.Item; + +import java.time.Instant; + +@Data +@Builder +public class CommentDto { + private Long id; + private String text; + private Item item; + private String authorName; + private Instant created; +} diff --git a/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java b/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java new file mode 100644 index 0000000..56968a0 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java @@ -0,0 +1,10 @@ +package ru.practicum.shareit.comment.dto; + +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class NewCommentDto { + @NotBlank + private String text; +} diff --git a/src/main/java/ru/practicum/shareit/comment/model/Comment.java b/src/main/java/ru/practicum/shareit/comment/model/Comment.java new file mode 100644 index 0000000..b3cb9f8 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/comment/model/Comment.java @@ -0,0 +1,40 @@ +package ru.practicum.shareit.comment.model; + +import jakarta.persistence.*; +import jakarta.validation.constraints.NotBlank; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; + +import java.time.Instant; + +@Entity +@Table(name = "comments") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Comment { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + Long id; + + @Column(name = "text") + @NotBlank + String text; + + @ManyToOne(cascade = CascadeType.PERSIST) + @JoinColumn(name = "item_id") + Item item; + + @ManyToOne + @JoinColumn(name = "author_id") + User author; + + @Column(name = "created") + Instant created; + +} diff --git a/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java b/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java index d5b56a2..4257b59 100644 --- a/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java +++ b/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java @@ -5,9 +5,7 @@ import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestControllerAdvice; -import ru.practicum.shareit.exception.NoDataFoundException; -import ru.practicum.shareit.exception.NotFoundException; -import ru.practicum.shareit.exception.ValidationException; +import ru.practicum.shareit.exception.*; @RestControllerAdvice @Slf4j @@ -41,4 +39,24 @@ public ErrorResponse handleNoDataFound(final NoDataFoundException e) { e.getMessage() ); } + + @ExceptionHandler + @ResponseStatus(HttpStatus.BAD_REQUEST) + public ErrorResponse handleAvailableError(final NotAvailableItemException e) { + log.error("Ошибка с доступностью вещи {}", e.getMessage()); + return new ErrorResponse( + "Ошибка с доступностью вещи", + e.getMessage() + ); + } + + @ExceptionHandler + @ResponseStatus(HttpStatus.BAD_REQUEST) + public ErrorResponse handleNoAccessException(final NoAccessException e) { + log.error("Ошибка доступа {}", e.getMessage()); + return new ErrorResponse( + "Ошибка доступа", + e.getMessage() + ); + } } diff --git a/src/main/java/ru/practicum/shareit/exception/NoAccessException.java b/src/main/java/ru/practicum/shareit/exception/NoAccessException.java new file mode 100644 index 0000000..7c24051 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/exception/NoAccessException.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.exception; + +public class NoAccessException extends RuntimeException { + public NoAccessException(String message) { + super(message); + } +} diff --git a/src/main/java/ru/practicum/shareit/exception/NotAvailableItemException.java b/src/main/java/ru/practicum/shareit/exception/NotAvailableItemException.java new file mode 100644 index 0000000..cb02e2e --- /dev/null +++ b/src/main/java/ru/practicum/shareit/exception/NotAvailableItemException.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.exception; + +public class NotAvailableItemException extends RuntimeException { + public NotAvailableItemException(String message) { + super(message); + } +} diff --git a/src/main/java/ru/practicum/shareit/item/ItemController.java b/src/main/java/ru/practicum/shareit/item/ItemController.java index e1c9175..8f1185d 100644 --- a/src/main/java/ru/practicum/shareit/item/ItemController.java +++ b/src/main/java/ru/practicum/shareit/item/ItemController.java @@ -5,7 +5,12 @@ import org.springframework.http.HttpStatus; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import ru.practicum.shareit.comment.dto.CommentDto; +import ru.practicum.shareit.comment.dto.NewCommentDto; import ru.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.item.dto.ItemWithCommentsDto; +import ru.practicum.shareit.item.dto.NewItemDto; +import ru.practicum.shareit.item.dto.UpdateItemDto; import java.util.List; @@ -21,19 +26,21 @@ public class ItemController { @PostMapping @ResponseStatus(HttpStatus.CREATED) - public ItemDto create(@Valid @RequestBody ItemDto itemDto, @RequestHeader("X-Sharer-User-Id") Long userId) { + public ItemDto create(@Valid @RequestBody NewItemDto itemDto, @RequestHeader("X-Sharer-User-Id") Long userId) { return itemService.create(itemDto, userId); } @PatchMapping("/{itemId}") - public ItemDto update(@PathVariable("itemId") Long itemId, @RequestBody ItemDto itemDto, @RequestHeader(value = "X-Sharer-User-Id") Long userId) { + public ItemDto update(@PathVariable("itemId") Long itemId, + @RequestBody UpdateItemDto itemDto, + @RequestHeader(value = "X-Sharer-User-Id") Long userId) { return itemService.update(itemId, itemDto, userId); } @GetMapping("/{itemId}") - public ItemDto getItemById(@PathVariable("itemId") Long itemId) { + public ItemWithCommentsDto getItemById(@PathVariable("itemId") Long itemId) { return itemService.get(itemId); } @@ -49,4 +56,12 @@ public List search(@RequestParam("text") String searchText) { return itemService.search(searchText); } + + @PostMapping("/{itemId}/comment") + @ResponseStatus(HttpStatus.CREATED) + public CommentDto createComment(@RequestHeader("X-Sharer-User-Id") long userId, + @PathVariable("itemId") long itemId, + @RequestBody @Valid NewCommentDto newCommentDto) { + return itemService.createComment(newCommentDto, itemId, userId); + } } diff --git a/src/main/java/ru/practicum/shareit/item/ItemMapper.java b/src/main/java/ru/practicum/shareit/item/ItemMapper.java index 8460ddc..f0bb98b 100644 --- a/src/main/java/ru/practicum/shareit/item/ItemMapper.java +++ b/src/main/java/ru/practicum/shareit/item/ItemMapper.java @@ -2,28 +2,71 @@ import org.springframework.stereotype.Component; +import ru.practicum.shareit.booking.Booking; +import ru.practicum.shareit.booking.BookingMapper; +import ru.practicum.shareit.comment.CommentMapper; +import ru.practicum.shareit.comment.model.Comment; import ru.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.item.dto.ItemWithCommentsDto; +import ru.practicum.shareit.item.dto.NewItemDto; +import ru.practicum.shareit.item.dto.UpdateItemDto; import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; +import ru.practicum.shareit.user.UserMapper; + +import java.util.List; @Component public class ItemMapper { - public ItemDto toItemDto(Item item) { - return new ItemDto( - item.getId(), - item.getName(), - item.getDescription(), - item.isAvailable() - ); + public static ItemDto mapToItemDto(Item item) { + return ItemDto.builder() + .id(item.getId()) + .name(item.getName()) + .description(item.getDescription()) + .available(item.isAvailable()) + .owner(UserMapper.mapToUserDto(item.getOwner())) + .build(); + } + + public static Item mapToNewItem(NewItemDto newItemDto, User owner) { + return Item.builder() + .name(newItemDto.getName()) + .description(newItemDto.getDescription()) + .available(newItemDto.getAvailable()) + .owner(owner) + .request(newItemDto.getRequest()) + .build(); } - public Item toItem(ItemDto itemDto) { - Item item = new Item(); - item.setId(itemDto.getId()); - item.setName(itemDto.getName()); - item.setDescription(itemDto.getDescription()); - item.setAvailable(itemDto.getAvailable()); + public static Item mapToUpdateItemDto(Item item, UpdateItemDto updateItemDto) { + if (updateItemDto.hasName()) { + item.setName(updateItemDto.getName()); + } + if (updateItemDto.hasDescription()) { + item.setDescription(updateItemDto.getDescription()); + } + if (updateItemDto.hasAvailable()) { + item.setAvailable(updateItemDto.getAvailable()); + } return item; + } + public static ItemWithCommentsDto mapToItemWithCommentsDto(Item item, List bookings, List comments) { + ItemWithCommentsDto itemWithCommentsDto = ItemWithCommentsDto.builder() + .id(item.getId()) + .name(item.getName()) + .description(item.getDescription()) + .available(item.isAvailable()) + .comments(comments.stream().map(CommentMapper::mapToCommentDto).toList()) + .build(); + if (!bookings.isEmpty()) { + itemWithCommentsDto.setLastBooking(BookingMapper.mapToBookingDto(bookings.getLast())); + if (bookings.size() > 1) { + itemWithCommentsDto.setNextBooking(BookingMapper.mapToBookingDto(bookings.get(bookings.size() - 2))); + } + } + return itemWithCommentsDto; + } } diff --git a/src/main/java/ru/practicum/shareit/item/ItemRepository.java b/src/main/java/ru/practicum/shareit/item/ItemRepository.java index 53fff91..e93c564 100644 --- a/src/main/java/ru/practicum/shareit/item/ItemRepository.java +++ b/src/main/java/ru/practicum/shareit/item/ItemRepository.java @@ -1,75 +1,23 @@ package ru.practicum.shareit.item; -import io.micrometer.common.util.StringUtils; -import lombok.AllArgsConstructor; -import org.springframework.stereotype.Repository; -import ru.practicum.shareit.exception.NoDataFoundException; -import ru.practicum.shareit.exception.NotFoundException; -import ru.practicum.shareit.item.dto.ItemDto; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; - -import java.util.Collections; import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicLong; -import java.util.stream.Collectors; - -@Repository -@AllArgsConstructor -public class ItemRepository { - private final Map items = new ConcurrentHashMap<>(); - private final AtomicLong idCounter = new AtomicLong(); - private final ItemMapper itemMapper; - - public Item save(Item item) { - validateItem(itemMapper.toItemDto(item)); - if (item.getId() == null) { - item.setId(idCounter.incrementAndGet()); - items.put(item.getId(), item); - } else { - if (items.containsKey(item.getId())) { - items.put(item.getId(), item); - } else { - throw new NotFoundException("Item не найден"); - } - } - return item; - } - public Item findById(Long id) { - return items.get(id); - } - public List findByOwnerId(Long ownerId) { - return items.values().stream().filter(i -> i.getOwner().getId().equals(ownerId)).collect(Collectors.toList()); - } +public interface ItemRepository extends JpaRepository { + List findByOwner(User owner); - public void deleteById(Long id) { - items.remove(id); - } + @Query("select it from Item it " + + "where it.available = true and " + + "(upper(it.name) like upper(concat('%', ?1, '%')) " + + " or upper(it.description) like upper(concat('%', ?1, '%')))") + List searchItem(String text); - public List search(String text) { - if (text == null || text.isEmpty()) { - return Collections.emptyList(); - } - return items.values() - .stream() - .filter(i -> i != null && i.isAvailable() - && (StringUtils.isNotEmpty(i.getName()) - && i.getName().toLowerCase().contains(text.toLowerCase()) - || StringUtils.isNotEmpty(i.getDescription()) - && i.getDescription().toLowerCase().contains(text.toLowerCase()))) - .collect(Collectors.toList()); - } - - private void validateItem(ItemDto itemDto) { - if (itemDto.getAvailable() == null || itemDto.getName().isBlank() || itemDto.getDescription() == null) { - throw new NoDataFoundException("Некорректное добавление вещи. Проверьте заполненность необходимых полей"); - } - - } } + diff --git a/src/main/java/ru/practicum/shareit/item/ItemService.java b/src/main/java/ru/practicum/shareit/item/ItemService.java index 91f00fb..2fdc584 100644 --- a/src/main/java/ru/practicum/shareit/item/ItemService.java +++ b/src/main/java/ru/practicum/shareit/item/ItemService.java @@ -1,17 +1,25 @@ package ru.practicum.shareit.item; +import ru.practicum.shareit.comment.dto.CommentDto; +import ru.practicum.shareit.comment.dto.NewCommentDto; import ru.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.item.dto.ItemWithCommentsDto; +import ru.practicum.shareit.item.dto.NewItemDto; +import ru.practicum.shareit.item.dto.UpdateItemDto; import java.util.List; public interface ItemService { - ItemDto create(ItemDto itemDto, Long userId); - ItemDto update(Long itemId, ItemDto itemDto, Long userID); + ItemDto create(NewItemDto newItemDto, Long userId); - ItemDto get(Long itemId); + ItemDto update(long itemId, UpdateItemDto itemDto, Long userID); + + ItemWithCommentsDto get(Long itemId); List getAllItemsByOwner(Long ownerId); List search(String searchText); + + CommentDto createComment(NewCommentDto newCommentDto, long itemId, long userId); } diff --git a/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java b/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java index e5d1637..2acdae2 100644 --- a/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java +++ b/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java @@ -3,86 +3,118 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import ru.practicum.shareit.booking.Booking; +import ru.practicum.shareit.booking.BookingRepository; +import ru.practicum.shareit.booking.BookingStatus; +import ru.practicum.shareit.comment.CommentMapper; +import ru.practicum.shareit.comment.CommentRepository; +import ru.practicum.shareit.comment.dto.CommentDto; +import ru.practicum.shareit.comment.dto.NewCommentDto; +import ru.practicum.shareit.comment.model.Comment; +import ru.practicum.shareit.exception.NoAccessException; import ru.practicum.shareit.exception.NotFoundException; import ru.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.item.dto.ItemWithCommentsDto; +import ru.practicum.shareit.item.dto.NewItemDto; +import ru.practicum.shareit.item.dto.UpdateItemDto; import ru.practicum.shareit.item.model.Item; import ru.practicum.shareit.user.User; -import ru.practicum.shareit.user.UserRepository; +import ru.practicum.shareit.user.UserMapper; +import ru.practicum.shareit.user.UserService; +import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; @Service @RequiredArgsConstructor @Slf4j public class ItemServiceImpl implements ItemService { private final ItemRepository itemRepository; - private final ItemMapper itemMapper; - private final UserRepository userRepository; + private final UserService userService; + private final BookingRepository bookingRepository; + private final CommentRepository commentRepository; @Override - public ItemDto create(ItemDto itemDto, Long userId) { - log.debug("==> Creating item: {}", itemDto); - User owner = userRepository.findById(userId); - if (owner == null) { - throw new NotFoundException("Владелец вещи не найден"); - } - Item item = itemMapper.toItem(itemDto); - item.setOwner(owner); + public ItemDto create(NewItemDto newItemDto, Long userId) { + log.debug("==> Creating item: {}", newItemDto); + User owner = UserMapper.mapToUser(userService.getById(userId)); + Item item = ItemMapper.mapToNewItem(newItemDto, owner); itemRepository.save(item); - log.debug("<== Creating item: {}", item); - return itemMapper.toItemDto(item); + log.debug("<== Creating item: {}", newItemDto); + return ItemMapper.mapToItemDto(item); } @Override - public ItemDto update(Long itemId, ItemDto itemDto, Long userID) { + public ItemDto update(long itemId, UpdateItemDto itemDto, Long userID) { log.debug("==> Updating item: {}", itemDto); - Item item = itemRepository.findById(itemId); - if (item == null) { - throw new NotFoundException("Вещь не найдена"); - } - if (!Objects.equals(userID, item.getOwner().getId())) { - throw new NotFoundException("У вас недостаточно прав для обновления вещи"); - } - if (itemDto.getName() != null) { - item.setName(itemDto.getName()); - } - if (itemDto.getDescription() != null) { - item.setDescription(itemDto.getDescription()); - } - if (itemDto.getAvailable() != null) { - item.setAvailable(itemDto.getAvailable()); + Item oldItem = itemRepository.findById(itemId) + .orElseThrow(() -> new NotFoundException("Предмет не найден")); + + if (userID == oldItem.getOwner().getId()) { + Item updateItem = ItemMapper.mapToUpdateItemDto(oldItem, itemDto); + itemRepository.save(updateItem); + log.debug("<== Updating item: {}", itemDto); + return ItemMapper.mapToItemDto(updateItem); } - itemRepository.save(item); - log.debug("==> Updating item: {}", item); - return itemMapper.toItemDto(item); + throw new NotFoundException("У вас недостаточно прав для обновления вещи"); } + @Override - public ItemDto get(Long itemId) { + public ItemWithCommentsDto get(Long itemId) { log.debug("==> get item by id: {}", itemId); - Item item = itemRepository.findById(itemId); - if (item == null) { - throw new NotFoundException("Предмет не найден"); - } + Item item = itemRepository.findById(itemId) + .orElseThrow(() -> new NotFoundException("Предмет не найден")); + List bookings = bookingRepository.findByItem_idAndStatus(itemId, BookingStatus.WAITING); + List comments = commentRepository.findByItem_id(itemId); + ItemWithCommentsDto itemWithCommentsDto = ItemMapper.mapToItemWithCommentsDto(item, bookings, comments); log.debug("<== get item by id: {}", item); - return itemMapper.toItemDto(item); + return itemWithCommentsDto; } @Override public List getAllItemsByOwner(Long ownerId) { log.debug("==> get user items by user id: {}", ownerId); - List items = itemRepository.findByOwnerId(ownerId); - log.debug("<== get user items by user id: {}", ownerId); - return items.stream().map(itemMapper::toItemDto).collect(Collectors.toList()); + return itemRepository.findByOwner(UserMapper.mapToUser(userService.getById(ownerId))) + .stream() + .map(ItemMapper::mapToItemDto) + .toList(); + + } @Override public List search(String searchText) { log.debug("==> search items: {}", searchText); - List foundItems = itemRepository.search(searchText); + List foundItems = new ArrayList<>(); + if (searchText.isEmpty() || searchText.isBlank() || searchText == null) { + return foundItems; + } + foundItems = itemRepository.searchItem(searchText) + .stream() + .map(ItemMapper::mapToItemDto) + .toList(); log.debug("<== search items: {}", searchText); - return foundItems.stream().map(itemMapper::toItemDto).collect(Collectors.toList()); + return foundItems; + } + + @Override + public CommentDto createComment(NewCommentDto newCommentDto, long itemId, long userId) { + log.debug("==> create comment for item: {}", itemId); + Booking booking = bookingRepository.findByItem_idAndBooker_id(itemId, userId); + if (booking != null) { + if (booking.getEnd().isAfter(LocalDateTime.now())) { + throw new NoAccessException("Срок бронирования предмета еще не закончился"); + } + User commentAuthor = UserMapper.mapToUser(userService.getById(userId)); + Item item = itemRepository.findById(itemId) + .orElseThrow(() -> new NotFoundException("Предмет не найден")); + Comment comment = CommentMapper.mapToNewComment(newCommentDto, item, commentAuthor); + commentRepository.save(comment); + log.debug("<== create comment for item: {}", itemId); + return CommentMapper.mapToCommentDto(comment); + } + throw new NoAccessException("Бронирование для предмета не найдено, невозможно добавить комментарий"); } } diff --git a/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java b/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java index 1845401..286020c 100644 --- a/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java +++ b/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java @@ -1,22 +1,19 @@ package ru.practicum.shareit.item.dto; import lombok.*; -import org.springframework.validation.annotation.Validated; +import ru.practicum.shareit.user.dto.UserDto; /** * TODO Sprint add-controllers. */ -@Getter -@Setter -@NoArgsConstructor -@AllArgsConstructor -@ToString -@Validated +@Data +@Builder public class ItemDto { private Long id; private String name; private String description; private Boolean available; + private UserDto owner; } diff --git a/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java b/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java new file mode 100644 index 0000000..710de60 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java @@ -0,0 +1,21 @@ +package ru.practicum.shareit.item.dto; + +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.booking.dto.BookingDto; +import ru.practicum.shareit.comment.dto.CommentDto; + +import java.util.List; + +@Data +@Builder +public class ItemWithCommentsDto { + private long id; + + private String name; + private String description; + private Boolean available; + private BookingDto lastBooking; + private BookingDto nextBooking; + private List comments; +} diff --git a/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java b/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java new file mode 100644 index 0000000..3c02052 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java @@ -0,0 +1,22 @@ +package ru.practicum.shareit.item.dto; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.request.ItemRequest; + +@Data +@Builder +public class NewItemDto { + @NotBlank(message = "название предмета не может быть пустым") + private String name; + + @NotBlank(message = "описание не должно быть пустым") + private String description; + + @NotNull(message = "не установлен статус доступности бронирования") + private Boolean available; + + private ItemRequest request; +} diff --git a/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java b/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java new file mode 100644 index 0000000..ffe6ad1 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java @@ -0,0 +1,22 @@ +package ru.practicum.shareit.item.dto; + +import lombok.Data; + +@Data +public class UpdateItemDto { + private String name; + private String description; + private Boolean available; + + public boolean hasName() { + return !(name == null || name.isBlank()); + } + + public boolean hasDescription() { + return !(description == null || description.isBlank()); + } + + public boolean hasAvailable() { + return available != null; + } +} diff --git a/src/main/java/ru/practicum/shareit/item/model/Item.java b/src/main/java/ru/practicum/shareit/item/model/Item.java index 37fb026..a8f7e3b 100644 --- a/src/main/java/ru/practicum/shareit/item/model/Item.java +++ b/src/main/java/ru/practicum/shareit/item/model/Item.java @@ -1,7 +1,10 @@ package ru.practicum.shareit.item.model; +import jakarta.persistence.*; +import jakarta.validation.constraints.NotBlank; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import ru.practicum.shareit.request.ItemRequest; @@ -11,13 +14,27 @@ * TODO Sprint add-controllers. */ @Data +@Entity +@Table(name = "items") +@Builder @NoArgsConstructor @AllArgsConstructor public class Item { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + @Column(name = "name", nullable = false) + @NotBlank private String name; + @Column(name = "description", nullable = false) + @NotBlank private String description; + @Column(name = "available") private boolean available; + @ManyToOne + @JoinColumn(name = "owner_id") private User owner; + @ManyToOne + @JoinColumn(name = "request_id") private ItemRequest request; } diff --git a/src/main/java/ru/practicum/shareit/request/ItemRequest.java b/src/main/java/ru/practicum/shareit/request/ItemRequest.java index a784186..f90c328 100644 --- a/src/main/java/ru/practicum/shareit/request/ItemRequest.java +++ b/src/main/java/ru/practicum/shareit/request/ItemRequest.java @@ -1,22 +1,34 @@ package ru.practicum.shareit.request; +import jakarta.persistence.*; +import jakarta.validation.constraints.NotBlank; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import ru.practicum.shareit.user.User; -import java.time.LocalDateTime; /** * TODO Sprint add-item-requests. */ + +@Entity +@Table(name = "request") @Data +@Builder @NoArgsConstructor @AllArgsConstructor public class ItemRequest { - private long id; - private String description; - private User requestor; - private LocalDateTime created; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + long id; + @Column(name = "description", nullable = false) + @NotBlank + String description; + @ManyToOne + @JoinColumn(name = "requestor_id") + User requestor; + } diff --git a/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java b/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java index 7b3ed54..c6aa1c7 100644 --- a/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java +++ b/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java @@ -1,7 +1,19 @@ package ru.practicum.shareit.request.dto; +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.user.dto.UserDto; + +import java.time.LocalDateTime; + /** * TODO Sprint add-item-requests. */ +@Data +@Builder public class ItemRequestDto { + private Long id; + private String description; + private UserDto requestor; + private LocalDateTime created; } diff --git a/src/main/java/ru/practicum/shareit/user/User.java b/src/main/java/ru/practicum/shareit/user/User.java index 8bb816e..1edc191 100644 --- a/src/main/java/ru/practicum/shareit/user/User.java +++ b/src/main/java/ru/practicum/shareit/user/User.java @@ -1,7 +1,9 @@ package ru.practicum.shareit.user; +import jakarta.persistence.*; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @@ -11,8 +13,15 @@ @Data @NoArgsConstructor @AllArgsConstructor +@Entity +@Table(name = "users") +@Builder public class User { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + @Column(name = "name") private String name; + @Column(name = "email") private String email; } diff --git a/src/main/java/ru/practicum/shareit/user/UserController.java b/src/main/java/ru/practicum/shareit/user/UserController.java index 7a79275..c849a60 100644 --- a/src/main/java/ru/practicum/shareit/user/UserController.java +++ b/src/main/java/ru/practicum/shareit/user/UserController.java @@ -5,6 +5,8 @@ import org.springframework.http.HttpStatus; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import ru.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.user.dto.UpdateUserDto; import ru.practicum.shareit.user.dto.UserDto; /** @@ -20,21 +22,21 @@ public class UserController { @PostMapping @ResponseStatus(HttpStatus.CREATED) - public UserDto createUser(@Valid @RequestBody UserDto userDto) { + public UserDto createUser(@Valid @RequestBody NewUserDto userDto) { return userService.create(userDto); } - @PatchMapping("/{userId}") - @ResponseStatus(HttpStatus.OK) - public UserDto updateUser(@PathVariable("userId") Long userId, @Validated @RequestBody(required = false) UserDto userDto) { + @GetMapping("/{userId}") + public UserDto getUserById(@PathVariable("userId") Long userId) { - return userService.update(userId, userDto); + return userService.getById(userId); } - @GetMapping("/{userId}") - public UserDto getUserById(@PathVariable("userId") Long userId) { + @PatchMapping("/{userId}") + @ResponseStatus(HttpStatus.OK) + public UserDto updateUser(@PathVariable("userId") Long userId, @Validated @RequestBody(required = false) UpdateUserDto userDto) { - return userService.get(userId); + return userService.update(userId, userDto); } @DeleteMapping("/{userId}") diff --git a/src/main/java/ru/practicum/shareit/user/UserMapper.java b/src/main/java/ru/practicum/shareit/user/UserMapper.java index 9427f44..a77a63f 100644 --- a/src/main/java/ru/practicum/shareit/user/UserMapper.java +++ b/src/main/java/ru/practicum/shareit/user/UserMapper.java @@ -1,24 +1,43 @@ package ru.practicum.shareit.user; import org.springframework.stereotype.Component; +import ru.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.user.dto.UpdateUserDto; import ru.practicum.shareit.user.dto.UserDto; @Component public class UserMapper { - public UserDto toUserDto(User user) { - return new UserDto( - user.getId(), - user.getName(), - user.getEmail() - ); + public static UserDto mapToUserDto(User user) { + return UserDto.builder() + .id(user.getId()) + .name(user.getName()) + .email(user.getEmail()) + .build(); } - public User toUser(UserDto userDto) { - return new User( - userDto.getId(), - userDto.getName(), - userDto.getEmail() - ); + public static User mapToUser(UserDto userDto) { + return User.builder() + .id(userDto.getId()) + .name(userDto.getName()) + .email(userDto.getEmail()) + .build(); + } + + public static User mapToNewUser(NewUserDto newUserDto) { + return User.builder() + .name(newUserDto.getName()) + .email(newUserDto.getEmail()) + .build(); + } + + public static User mapToUserUpdate(User user, UpdateUserDto updateUserDto) { + if (updateUserDto.hasEmail()) { + user.setEmail(updateUserDto.getEmail()); + } + if (updateUserDto.hasName()) { + user.setName(updateUserDto.getName()); + } + return user; } } diff --git a/src/main/java/ru/practicum/shareit/user/UserRepository.java b/src/main/java/ru/practicum/shareit/user/UserRepository.java index 2966c77..e303ab5 100644 --- a/src/main/java/ru/practicum/shareit/user/UserRepository.java +++ b/src/main/java/ru/practicum/shareit/user/UserRepository.java @@ -1,67 +1,6 @@ package ru.practicum.shareit.user; -import org.springframework.stereotype.Repository; -import ru.practicum.shareit.exception.ConflictException; -import ru.practicum.shareit.exception.NotFoundException; -import ru.practicum.shareit.exception.ValidationException; - - -import java.util.Map; -import java.util.Objects; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicLong; - -@Repository -public class UserRepository { - private final Map users = new ConcurrentHashMap<>(); - - private final AtomicLong idCounter = new AtomicLong(); - - public User save(User user) { - validateUser(user); - validateEmail(user); - if (user.getId() == null) { - user.setId(idCounter.incrementAndGet()); - users.put(user.getId(), user); - - } else { - if (users.containsKey(user.getId())) { - users.put(user.getId(), user); - - } else { - throw new NotFoundException("Пользователь не найден"); - } - } - return user; - } - - public User findById(Long id) { - return users.get(id); - } - - public void deleteById(Long id) { - users.remove(id); - } - - private void validateUser(User user) { - if (user.getEmail() == null || !(user.getEmail().contains("@"))) { - throw new ValidationException("Некорректный email"); - } - if (user.getName() == null || user.getName().equals("")) { - throw new NotFoundException("Имя не может быть пустым"); - } - - } - - private void validateEmail(User user) { - for (User u : users.values()) { - if (Objects.equals(u.getId(), user.getId())) { - continue; - } - if (u.getEmail().equals(user.getEmail())) { - throw new ConflictException("Этот email уже используется"); - } - } - } +import org.springframework.data.jpa.repository.JpaRepository; +public interface UserRepository extends JpaRepository { } diff --git a/src/main/java/ru/practicum/shareit/user/UserService.java b/src/main/java/ru/practicum/shareit/user/UserService.java index a1b85f5..3beaf8c 100644 --- a/src/main/java/ru/practicum/shareit/user/UserService.java +++ b/src/main/java/ru/practicum/shareit/user/UserService.java @@ -1,15 +1,18 @@ package ru.practicum.shareit.user; import org.springframework.stereotype.Service; +import ru.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.user.dto.UpdateUserDto; import ru.practicum.shareit.user.dto.UserDto; @Service public interface UserService { - UserDto create(UserDto userDto); - UserDto update(Long id, UserDto userDto); + UserDto create(NewUserDto userDto); - UserDto get(Long id); + UserDto update(long id, UpdateUserDto updateUserDto); - void deleteUser(Long id); + UserDto getById(long id); + + void deleteUser(long id); } diff --git a/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java b/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java index c34f489..7f78138 100644 --- a/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java +++ b/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java @@ -4,66 +4,52 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import ru.practicum.shareit.exception.NotFoundException; +import ru.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.user.dto.UpdateUserDto; import ru.practicum.shareit.user.dto.UserDto; -import java.util.Objects; - @Service @RequiredArgsConstructor @Slf4j public class UserServiceImpl implements UserService { private final UserRepository userRepository; - private final UserMapper userMapper; - @Override - public UserDto create(UserDto userDto) { + public UserDto create(NewUserDto userDto) { log.debug("==> Creating user: {}", userDto); - User user = userMapper.toUser(userDto); + User user = UserMapper.mapToNewUser(userDto); userRepository.save(user); log.debug("<== Creating user: {}", user); - return userMapper.toUserDto(user); + return UserMapper.mapToUserDto(user); } @Override - public UserDto update(Long id, UserDto userDto) { - log.debug("==> Updating user: {}", userDto); - User user = getUser(id); - User updateUser = userMapper.toUser(userDto); - - if (updateUser.getName() != null && !Objects.equals(user.getName(), updateUser.getName())) { - user.setName(updateUser.getName()); - } - if (updateUser.getEmail() != null && !Objects.equals(user.getEmail(), updateUser.getEmail())) { - user.setEmail(updateUser.getEmail()); - } - userRepository.save(user); - log.debug("<== Updating user: {}", user); - return userMapper.toUserDto(user); + public UserDto update(long id, UpdateUserDto updateUserDto) { + log.debug("==> Updating user: {}", id); + User oldUser = UserMapper.mapToUser(getById(id)); + User updateUser = UserMapper.mapToUserUpdate(oldUser, updateUserDto); + updateUser = userRepository.save(updateUser); + log.debug("<== Updating user: {}", id); + return UserMapper.mapToUserDto(updateUser); } @Override - public UserDto get(Long id) { - log.debug("==> get User by id: {}", id); - User user = getUser(id); - log.debug("<== get User by id: {}", user); - return userMapper.toUserDto(user); + public UserDto getById(long id) { + User user = userRepository.findById(id) + .orElseThrow(() -> new NotFoundException("Пользователь с id = " + id + " не найден")); + return UserMapper.mapToUserDto(user); } @Override - public void deleteUser(Long id) { - log.debug("==> delete User by id: {}", id); - userRepository.deleteById(id); - log.info("<== delete User by id: {}", id); - } - - public User getUser(Long id) { - User user = userRepository.findById(id); - if (user == null) { - throw new NotFoundException("Пользователь не найден"); + public void deleteUser(long id) { + log.debug("==> Deleting user: {}", id); + User user = userRepository.findById(id) + .orElseThrow(() -> new NotFoundException("Пользователь с id = " + id + " не найден")); + if (user != null) { + userRepository.delete(user); + log.debug("<== Deleting user: {}", id); } - return user; } diff --git a/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java b/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java new file mode 100644 index 0000000..f95ecb8 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java @@ -0,0 +1,17 @@ +package ru.practicum.shareit.user.dto; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class NewUserDto { + @NotBlank(message = "Имя не может быть пустым") + private String name; + + @NotBlank(message = "email не может быть пустым") + @Email(message = "Указан некорректный формат email") + private String email; +} diff --git a/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java b/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java new file mode 100644 index 0000000..bd9e396 --- /dev/null +++ b/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java @@ -0,0 +1,20 @@ +package ru.practicum.shareit.user.dto; + +import jakarta.validation.constraints.Email; +import lombok.Data; + +@Data +public class UpdateUserDto { + private String name; + + @Email(message = "Указан некорректный формат email") + private String email; + + public boolean hasName() { + return !(name == null || name.isBlank()); + } + + public boolean hasEmail() { + return !(email == null || email.isBlank()); + } +} diff --git a/src/main/java/ru/practicum/shareit/user/dto/UserDto.java b/src/main/java/ru/practicum/shareit/user/dto/UserDto.java index eddf1da..eef5ae4 100644 --- a/src/main/java/ru/practicum/shareit/user/dto/UserDto.java +++ b/src/main/java/ru/practicum/shareit/user/dto/UserDto.java @@ -6,9 +6,8 @@ @Getter @Setter -@NoArgsConstructor -@AllArgsConstructor @ToString +@Builder public class UserDto { private Long id; private String name; diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index b9e5d4b..daedb5d 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,3 +1,4 @@ +server.port=8080 spring.jpa.hibernate.ddl-auto=none spring.jpa.properties.hibernate.format_sql=true spring.sql.init.mode=always @@ -8,7 +9,7 @@ logging.level.org.springframework.transaction.interceptor=TRACE logging.level.org.springframework.orm.jpa.JpaTransactionManager=DEBUG # TODO Append connection to DB -#spring.datasource.driverClassName -#spring.datasource.url -#spring.datasource.username -#spring.datasource.password +spring.datasource.driverClassName=org.h2.Driver +spring.datasource.url=jdbc:h2:file:./db/shareit +spring.datasource.username=dbuser +spring.datasource.password=12345 diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql new file mode 100644 index 0000000..47c804c --- /dev/null +++ b/src/main/resources/schema.sql @@ -0,0 +1,35 @@ +CREATE TABLE IF NOT EXISTS users ( +id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, +name varchar, +email varchar UNIQUE NOT NULL +); +CREATE TABLE IF NOT EXISTS request ( +id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, +description varchar NOT NULL, +requestor_id BIGINT REFERENCES users (id) +); + + +CREATE TABLE IF NOT EXISTS items ( +id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, +name varchar NOT NULL, +description varchar NOT NULL, +available boolean, +owner_id BIGINT REFERENCES users (id), +request_id BIGINT REFERENCES request (id) +); +CREATE TABLE IF NOT EXISTS bookings ( +id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, +start_time TIMESTAMP WITHOUT TIME ZONE NOT NULL, +end_time TIMESTAMP WITHOUT TIME ZONE NOT NULL, +item_id BIGINT REFERENCES items (id) ON DELETE CASCADE, +booker_id BIGINT REFERENCES users (id) ON DELETE CASCADE, +status varchar NOT NULL +); +CREATE TABLE IF NOT EXISTS comments ( +id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, +text varchar NOT NULL, +item_id BIGINT REFERENCES items (id) ON DELETE CASCADE, +author_id BIGINT REFERENCES users (id) ON DELETE CASCADE, +created TIMESTAMP WITHOUT TIME ZONE NOT NULL +); From f066e62ed1a3f66ef62366ce30f36af882117220 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Mon, 16 Jun 2025 10:55:37 +0400 Subject: [PATCH 08/55] test fix --- src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java b/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java index 7e6d2b0..81f314e 100644 --- a/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java +++ b/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java @@ -1,6 +1,5 @@ package ru.practicum.shareit.booking.dto; -import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Builder; import lombok.Data; import ru.practicum.shareit.booking.BookingStatus; From 6f2b2e74566e962e710f88c2198c9ea80445b21d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Mon, 16 Jun 2025 11:09:35 +0400 Subject: [PATCH 09/55] test fix --- src/main/resources/application.properties | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index daedb5d..fa544b9 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,4 +1,6 @@ server.port=8080 + +# ???? ???????????? ???????????? spring.jpa.hibernate.ddl-auto=none spring.jpa.properties.hibernate.format_sql=true spring.sql.init.mode=always @@ -7,9 +9,3 @@ logging.level.org.springframework.orm.jpa=INFO logging.level.org.springframework.transaction=INFO logging.level.org.springframework.transaction.interceptor=TRACE logging.level.org.springframework.orm.jpa.JpaTransactionManager=DEBUG - -# TODO Append connection to DB -spring.datasource.driverClassName=org.h2.Driver -spring.datasource.url=jdbc:h2:file:./db/shareit -spring.datasource.username=dbuser -spring.datasource.password=12345 From b6509605ada867d8ea61e1a4ba0b52bcc0558a9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Mon, 16 Jun 2025 11:13:16 +0400 Subject: [PATCH 10/55] test fix --- src/main/java/ru/practicum/shareit/item/ItemService.java | 8 ++++---- .../java/ru/practicum/shareit/item/ItemServiceImpl.java | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/ru/practicum/shareit/item/ItemService.java b/src/main/java/ru/practicum/shareit/item/ItemService.java index 2fdc584..44dac1d 100644 --- a/src/main/java/ru/practicum/shareit/item/ItemService.java +++ b/src/main/java/ru/practicum/shareit/item/ItemService.java @@ -11,13 +11,13 @@ public interface ItemService { - ItemDto create(NewItemDto newItemDto, Long userId); + ItemDto create(NewItemDto newItemDto, long userId); - ItemDto update(long itemId, UpdateItemDto itemDto, Long userID); + ItemDto update(long itemId, UpdateItemDto itemDto, long userID); - ItemWithCommentsDto get(Long itemId); + ItemWithCommentsDto get(long itemId); - List getAllItemsByOwner(Long ownerId); + List getAllItemsByOwner(long ownerId); List search(String searchText); diff --git a/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java b/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java index 2acdae2..bc33d1c 100644 --- a/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java +++ b/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java @@ -36,7 +36,7 @@ public class ItemServiceImpl implements ItemService { private final CommentRepository commentRepository; @Override - public ItemDto create(NewItemDto newItemDto, Long userId) { + public ItemDto create(NewItemDto newItemDto, long userId) { log.debug("==> Creating item: {}", newItemDto); User owner = UserMapper.mapToUser(userService.getById(userId)); Item item = ItemMapper.mapToNewItem(newItemDto, owner); @@ -46,7 +46,7 @@ public ItemDto create(NewItemDto newItemDto, Long userId) { } @Override - public ItemDto update(long itemId, UpdateItemDto itemDto, Long userID) { + public ItemDto update(long itemId, UpdateItemDto itemDto, long userID) { log.debug("==> Updating item: {}", itemDto); Item oldItem = itemRepository.findById(itemId) .orElseThrow(() -> new NotFoundException("Предмет не найден")); @@ -62,7 +62,7 @@ public ItemDto update(long itemId, UpdateItemDto itemDto, Long userID) { @Override - public ItemWithCommentsDto get(Long itemId) { + public ItemWithCommentsDto get(long itemId) { log.debug("==> get item by id: {}", itemId); Item item = itemRepository.findById(itemId) .orElseThrow(() -> new NotFoundException("Предмет не найден")); @@ -74,7 +74,7 @@ public ItemWithCommentsDto get(Long itemId) { } @Override - public List getAllItemsByOwner(Long ownerId) { + public List getAllItemsByOwner(long ownerId) { log.debug("==> get user items by user id: {}", ownerId); return itemRepository.findByOwner(UserMapper.mapToUser(userService.getById(ownerId))) .stream() From 2f6509062ff1bccea0f542a81677cbfd97a5fba3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Mon, 16 Jun 2025 19:05:11 +0400 Subject: [PATCH 11/55] =?UTF-8?q?=D0=92=D1=82=D0=BE=D1=80=D0=B0=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=82=D0=B7=2015=D0=BE=D0=B3=D0=BE=20=D1=81=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=BD=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shareit/booking/BookingMapper.java | 3 +-- .../shareit/booking/BookingRepository.java | 3 ++- .../shareit/booking/BookingServiceImpl.java | 13 +++++++--- .../ru/practicum/shareit/item/ItemMapper.java | 3 +-- .../shareit/item/ItemServiceImpl.java | 25 +++++++++---------- .../shareit/item/dto/UpdateItemDto.java | 2 +- .../ru/practicum/shareit/user/UserMapper.java | 2 -- 7 files changed, 26 insertions(+), 25 deletions(-) diff --git a/src/main/java/ru/practicum/shareit/booking/BookingMapper.java b/src/main/java/ru/practicum/shareit/booking/BookingMapper.java index 1d6c181..dd91f9f 100644 --- a/src/main/java/ru/practicum/shareit/booking/BookingMapper.java +++ b/src/main/java/ru/practicum/shareit/booking/BookingMapper.java @@ -1,7 +1,6 @@ package ru.practicum.shareit.booking; -import org.springframework.stereotype.Component; import ru.practicum.shareit.booking.dto.BookingDto; import ru.practicum.shareit.booking.dto.NewBookingDto; import ru.practicum.shareit.item.ItemMapper; @@ -9,7 +8,7 @@ import ru.practicum.shareit.user.User; import ru.practicum.shareit.user.UserMapper; -@Component + public class BookingMapper { public static BookingDto mapToBookingDto(Booking booking) { return BookingDto.builder() diff --git a/src/main/java/ru/practicum/shareit/booking/BookingRepository.java b/src/main/java/ru/practicum/shareit/booking/BookingRepository.java index f9d4cae..2bf7bd5 100644 --- a/src/main/java/ru/practicum/shareit/booking/BookingRepository.java +++ b/src/main/java/ru/practicum/shareit/booking/BookingRepository.java @@ -8,6 +8,7 @@ import java.time.LocalDateTime; import java.util.List; +import java.util.Optional; public interface BookingRepository extends JpaRepository { Page findByBooker_Id(long bookerId, Pageable pageable); @@ -42,5 +43,5 @@ public interface BookingRepository extends JpaRepository { List findByItem_idAndStatus(long itemId, BookingStatus status); - Booking findByItem_idAndBooker_id(long itemId, long bookerId); + Optional findByItem_idAndBooker_id(long itemId, long bookerId); } diff --git a/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java b/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java index 3433abb..b8208d7 100644 --- a/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java +++ b/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java @@ -55,8 +55,9 @@ public BookingDto approveBooking(long userId, long bookingId, boolean approved) @Override public Page findByBooker(long bookerId, BookingState state, Pageable pageable) { - userRepository.findById(bookerId) - .orElseThrow(() -> new NotFoundException("Пользователь не найден")); + if (!userExistById(bookerId)){ + throw new NotFoundException("Пользователь не найден"); + } LocalDateTime timeNow = LocalDateTime.now(); Page page = switch (state) { case CURRENT -> bookingRepository.findCurrentByBooker(bookerId, timeNow, pageable); @@ -72,8 +73,9 @@ public Page findByBooker(long bookerId, BookingState state, Pageable @Override public Page findByOwner(long ownerId, BookingState state, Pageable pageable) { - userRepository.findById(ownerId) - .orElseThrow(() -> new NotFoundException("Пользователь не найден")); + if (!userExistById(ownerId)){ + throw new NotFoundException("Пользователь не найден"); + } LocalDateTime timeNow = LocalDateTime.now(); Page page = switch (state) { case CURRENT -> bookingRepository.findCurrentByOwner(ownerId, timeNow, pageable); @@ -97,5 +99,8 @@ public BookingDto findById(long userId, long bookingId) { } return BookingMapper.mapToBookingDto(booking); } + public boolean userExistById(long userId){ + return userRepository.existsById(userId); + } } diff --git a/src/main/java/ru/practicum/shareit/item/ItemMapper.java b/src/main/java/ru/practicum/shareit/item/ItemMapper.java index f0bb98b..197ac47 100644 --- a/src/main/java/ru/practicum/shareit/item/ItemMapper.java +++ b/src/main/java/ru/practicum/shareit/item/ItemMapper.java @@ -1,7 +1,6 @@ package ru.practicum.shareit.item; -import org.springframework.stereotype.Component; import ru.practicum.shareit.booking.Booking; import ru.practicum.shareit.booking.BookingMapper; import ru.practicum.shareit.comment.CommentMapper; @@ -16,7 +15,7 @@ import java.util.List; -@Component + public class ItemMapper { public static ItemDto mapToItemDto(Item item) { return ItemDto.builder() diff --git a/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java b/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java index bc33d1c..3215e11 100644 --- a/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java +++ b/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java @@ -102,19 +102,18 @@ public List search(String searchText) { @Override public CommentDto createComment(NewCommentDto newCommentDto, long itemId, long userId) { log.debug("==> create comment for item: {}", itemId); - Booking booking = bookingRepository.findByItem_idAndBooker_id(itemId, userId); - if (booking != null) { - if (booking.getEnd().isAfter(LocalDateTime.now())) { - throw new NoAccessException("Срок бронирования предмета еще не закончился"); - } - User commentAuthor = UserMapper.mapToUser(userService.getById(userId)); - Item item = itemRepository.findById(itemId) - .orElseThrow(() -> new NotFoundException("Предмет не найден")); - Comment comment = CommentMapper.mapToNewComment(newCommentDto, item, commentAuthor); - commentRepository.save(comment); - log.debug("<== create comment for item: {}", itemId); - return CommentMapper.mapToCommentDto(comment); + Booking booking = bookingRepository.findByItem_idAndBooker_id(itemId, userId) + .orElseThrow(() -> new NotFoundException("Бронирование для предмета не найдено, невозможно добавить комментарий")); + if (booking.getEnd().isAfter(LocalDateTime.now())) { + throw new NoAccessException("Срок бронирования предмета еще не закончился"); } - throw new NoAccessException("Бронирование для предмета не найдено, невозможно добавить комментарий"); + User commentAuthor = UserMapper.mapToUser(userService.getById(userId)); + Item item = itemRepository.findById(itemId) + .orElseThrow(() -> new NotFoundException("Предмет не найден")); + Comment comment = CommentMapper.mapToNewComment(newCommentDto, item, commentAuthor); + commentRepository.save(comment); + log.debug("<== create comment for item: {}", itemId); + return CommentMapper.mapToCommentDto(comment); } + } diff --git a/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java b/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java index ffe6ad1..ead598d 100644 --- a/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java +++ b/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java @@ -17,6 +17,6 @@ public boolean hasDescription() { } public boolean hasAvailable() { - return available != null; + return Boolean.FALSE.equals(available); } } diff --git a/src/main/java/ru/practicum/shareit/user/UserMapper.java b/src/main/java/ru/practicum/shareit/user/UserMapper.java index a77a63f..e920c5f 100644 --- a/src/main/java/ru/practicum/shareit/user/UserMapper.java +++ b/src/main/java/ru/practicum/shareit/user/UserMapper.java @@ -1,11 +1,9 @@ package ru.practicum.shareit.user; -import org.springframework.stereotype.Component; import ru.practicum.shareit.user.dto.NewUserDto; import ru.practicum.shareit.user.dto.UpdateUserDto; import ru.practicum.shareit.user.dto.UserDto; -@Component public class UserMapper { public static UserDto mapToUserDto(User user) { return UserDto.builder() From 1b8299c71f1a251e2faf36c276ce7fae360e171f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Mon, 16 Jun 2025 19:07:40 +0400 Subject: [PATCH 12/55] fix tests --- .../ru/practicum/shareit/booking/BookingServiceImpl.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java b/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java index b8208d7..6067f84 100644 --- a/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java +++ b/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java @@ -55,7 +55,7 @@ public BookingDto approveBooking(long userId, long bookingId, boolean approved) @Override public Page findByBooker(long bookerId, BookingState state, Pageable pageable) { - if (!userExistById(bookerId)){ + if (!userExistById(bookerId)) { throw new NotFoundException("Пользователь не найден"); } LocalDateTime timeNow = LocalDateTime.now(); @@ -73,7 +73,7 @@ public Page findByBooker(long bookerId, BookingState state, Pageable @Override public Page findByOwner(long ownerId, BookingState state, Pageable pageable) { - if (!userExistById(ownerId)){ + if (!userExistById(ownerId)) { throw new NotFoundException("Пользователь не найден"); } LocalDateTime timeNow = LocalDateTime.now(); @@ -99,7 +99,8 @@ public BookingDto findById(long userId, long bookingId) { } return BookingMapper.mapToBookingDto(booking); } - public boolean userExistById(long userId){ + + public boolean userExistById(long userId) { return userRepository.existsById(userId); } From 06b4e26cfa560f55b4dd6d78d751770bf1dcec35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 17:57:48 +0400 Subject: [PATCH 13/55] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D0=B0=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=82=D0=B7=2016=D0=BE=D0=B3=D0=BE=20=D1=81=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=BD=D1=82=D0=B0=20(=D0=B1=D0=B5=D0=B7=20=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D0=B2).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shareit/booking/BookingController.java | 55 ++++++++ .../shareit/booking/BookingStatus.java | 5 + .../shareit/booking/dto/BookingDto.java | 23 ++++ .../shareit/booking/dto/NewBookingDto.java | 21 ++++ .../shareit/comment/dto/CommentDto.java | 17 +++ .../shareit/comment/dto/NewCommentDto.java | 10 ++ .../java/ru/practicum/shareit/item/Item.java | 25 ++++ .../ru/practicum/shareit/item/ItemClient.java | 54 ++++++++ .../shareit/item/ItemController.java | 64 ++++++++++ .../practicum/shareit/item/dto/ItemDto.java | 21 ++++ .../item/dto/ItemResponseToRequestDto.java | 17 +++ .../shareit/item/dto/ItemWithCommentsDto.java | 24 ++++ .../shareit/item/dto/NewItemDto.java | 21 ++++ .../shareit/item/dto/UpdateItemDto.java | 22 ++++ .../shareit/request/ItemRequest.java | 34 +++++ .../shareit/request/ItemRequestClient.java | 39 ++++++ .../request/ItemRequestController.java | 35 ++++++ .../shareit/request/dto/ItemRequestDto.java | 20 +++ .../request/dto/NewItemRequestDto.java | 17 +++ .../java/ru/practicum/shareit/user/User.java | 20 +++ .../ru/practicum/shareit/user/UserClient.java | 43 +++++++ .../shareit/user/UserController.java | 52 ++++++++ .../shareit/user/dto/NewUserDto.java | 17 +++ .../shareit/user/dto/UpdateUserDto.java | 20 +++ .../practicum/shareit/user/dto/UserDto.java | 19 +++ pom.xml | 100 ++++----------- .../ru/practicum/shareit/booking/Booking.java | 39 ++++++ .../shareit/booking/BookingController.java | 57 +++++++++ .../shareit/booking/BookingMapper.java | 35 ++++++ .../shareit/booking/BookingRepository.java | 47 +++++++ .../shareit/booking/BookingService.java | 18 +++ .../shareit/booking/BookingServiceImpl.java | 107 ++++++++++++++++ .../shareit/booking/BookingState.java | 5 + .../shareit/booking/BookingStatus.java | 5 + .../shareit/booking/dto/BookingDto.java | 24 ++++ .../shareit/booking/dto/NewBookingDto.java | 15 +++ .../shareit/comment/CommentMapper.java | 32 +++++ .../shareit/comment/CommentRepository.java | 10 ++ .../shareit/comment/dto/CommentDto.java | 17 +++ .../shareit/comment/dto/NewCommentDto.java | 10 ++ .../shareit/comment/model/Comment.java | 39 ++++++ .../practicum/shareit/eror/ErrorHandler.java | 62 +++++++++ .../practicum/shareit/eror/ErrorResponse.java | 15 +++ .../shareit/exception/ConflictException.java | 7 ++ .../shareit/exception/NoAccessException.java | 7 ++ .../exception/NoDataFoundException.java | 7 ++ .../exception/NotAvailableItemException.java | 7 ++ .../shareit/exception/NotFoundException.java | 7 ++ .../exception/ValidationException.java | 7 ++ .../shareit/item/ItemController.java | 67 ++++++++++ .../ru/practicum/shareit/item/ItemMapper.java | 81 ++++++++++++ .../shareit/item/ItemRepository.java | 23 ++++ .../practicum/shareit/item/ItemService.java | 25 ++++ .../shareit/item/ItemServiceImpl.java | 119 ++++++++++++++++++ .../practicum/shareit/item/dto/ItemDto.java | 20 +++ .../item/dto/ItemResponseToRequestDto.java | 17 +++ .../shareit/item/dto/ItemWithCommentsDto.java | 24 ++++ .../shareit/item/dto/NewItemDto.java | 17 +++ .../shareit/item/dto/UpdateItemDto.java | 22 ++++ .../ru/practicum/shareit/item/model/Item.java | 37 ++++++ .../shareit/request/ItemRequest.java | 44 +++++++ .../request/ItemRequestController.java | 34 +++++ .../request/ItemRequestRepository.java | 10 ++ .../shareit/request/ItemRequestService.java | 14 +++ .../request/ItemRequestServiseImpl.java | 53 ++++++++ .../shareit/request/RequestMapper.java | 24 ++++ .../shareit/request/dto/ItemRequestDto.java | 20 +++ .../request/dto/NewItemRequestDto.java | 17 +++ .../java/ru/practicum/shareit/user/User.java | 27 ++++ .../shareit/user/UserController.java | 47 +++++++ .../ru/practicum/shareit/user/UserMapper.java | 41 ++++++ .../shareit/user/UserRepository.java | 6 + .../practicum/shareit/user/UserService.java | 18 +++ .../shareit/user/UserServiceImpl.java | 56 +++++++++ .../shareit/user/dto/NewUserDto.java | 14 +++ .../shareit/user/dto/UpdateUserDto.java | 20 +++ .../practicum/shareit/user/dto/UserDto.java | 15 +++ .../src/main/resources/application.properties | 11 ++ server/src/main/resources/schema.sql | 46 +++++++ .../ru/practicum/shareit/ShareItTests.java | 13 ++ src/main/resources/application.properties | 2 +- src/main/resources/schema.sql | 18 ++- 82 files changed, 2292 insertions(+), 84 deletions(-) create mode 100644 gateway/src/main/java/ru/practicum/shareit/booking/BookingController.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/booking/BookingStatus.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/item/Item.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/item/ItemClient.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/item/ItemController.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/item/dto/ItemResponseToRequestDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/request/ItemRequest.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/request/ItemRequestClient.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/request/ItemRequestController.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/request/dto/NewItemRequestDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/user/User.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/user/UserClient.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/user/UserController.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/user/dto/UserDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/booking/Booking.java create mode 100644 server/src/main/java/ru/practicum/shareit/booking/BookingController.java create mode 100644 server/src/main/java/ru/practicum/shareit/booking/BookingMapper.java create mode 100644 server/src/main/java/ru/practicum/shareit/booking/BookingRepository.java create mode 100644 server/src/main/java/ru/practicum/shareit/booking/BookingService.java create mode 100644 server/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java create mode 100644 server/src/main/java/ru/practicum/shareit/booking/BookingState.java create mode 100644 server/src/main/java/ru/practicum/shareit/booking/BookingStatus.java create mode 100644 server/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/comment/CommentMapper.java create mode 100644 server/src/main/java/ru/practicum/shareit/comment/CommentRepository.java create mode 100644 server/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/comment/model/Comment.java create mode 100644 server/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java create mode 100644 server/src/main/java/ru/practicum/shareit/eror/ErrorResponse.java create mode 100644 server/src/main/java/ru/practicum/shareit/exception/ConflictException.java create mode 100644 server/src/main/java/ru/practicum/shareit/exception/NoAccessException.java create mode 100644 server/src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java create mode 100644 server/src/main/java/ru/practicum/shareit/exception/NotAvailableItemException.java create mode 100644 server/src/main/java/ru/practicum/shareit/exception/NotFoundException.java create mode 100644 server/src/main/java/ru/practicum/shareit/exception/ValidationException.java create mode 100644 server/src/main/java/ru/practicum/shareit/item/ItemController.java create mode 100644 server/src/main/java/ru/practicum/shareit/item/ItemMapper.java create mode 100644 server/src/main/java/ru/practicum/shareit/item/ItemRepository.java create mode 100644 server/src/main/java/ru/practicum/shareit/item/ItemService.java create mode 100644 server/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java create mode 100644 server/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/item/dto/ItemResponseToRequestDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/item/model/Item.java create mode 100644 server/src/main/java/ru/practicum/shareit/request/ItemRequest.java create mode 100644 server/src/main/java/ru/practicum/shareit/request/ItemRequestController.java create mode 100644 server/src/main/java/ru/practicum/shareit/request/ItemRequestRepository.java create mode 100644 server/src/main/java/ru/practicum/shareit/request/ItemRequestService.java create mode 100644 server/src/main/java/ru/practicum/shareit/request/ItemRequestServiseImpl.java create mode 100644 server/src/main/java/ru/practicum/shareit/request/RequestMapper.java create mode 100644 server/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/request/dto/NewItemRequestDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/user/User.java create mode 100644 server/src/main/java/ru/practicum/shareit/user/UserController.java create mode 100644 server/src/main/java/ru/practicum/shareit/user/UserMapper.java create mode 100644 server/src/main/java/ru/practicum/shareit/user/UserRepository.java create mode 100644 server/src/main/java/ru/practicum/shareit/user/UserService.java create mode 100644 server/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java create mode 100644 server/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/user/dto/UserDto.java create mode 100644 server/src/main/resources/application.properties create mode 100644 server/src/main/resources/schema.sql create mode 100644 server/src/test/java/ru/practicum/shareit/ShareItTests.java diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/BookingController.java b/gateway/src/main/java/ru/practicum/shareit/booking/BookingController.java new file mode 100644 index 0000000..db8e820 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/booking/BookingController.java @@ -0,0 +1,55 @@ +package ru.practicum.shareit.booking; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import ru.practicum.shareit.booking.dto.BookingState; +import ru.practicum.shareit.booking.dto.NewBookingDto; + + +/** + * TODO Sprint add-bookings. + */ +@RestController +@RequestMapping(path = "/bookings") +@RequiredArgsConstructor +@Validated +public class BookingController { + private final BookingClient bookingClient; + + @PostMapping + @ResponseStatus(HttpStatus.CREATED) + public ResponseEntity create(@RequestBody @Valid NewBookingDto newBookingDto, @RequestHeader("X-Sharer-User-Id") @NotNull long userId) { + return bookingClient.create(newBookingDto, userId); + } + + @PatchMapping("/{bookingId}") + @ResponseStatus(HttpStatus.OK) + public ResponseEntity approveBooking(@RequestHeader("X-Sharer-User-Id") long userId, @PathVariable Long bookingId, @RequestParam Boolean approved) { + return bookingClient.approveBooking(userId, bookingId, approved); + } + + @GetMapping + @ResponseStatus(HttpStatus.OK) + public ResponseEntity findByBooker(@RequestHeader("X-Sharer-User-Id") @NotNull long userId, + @RequestParam(defaultValue = "ALL") BookingState state) { + return bookingClient.findByBooker(userId, state); + } + + @GetMapping("/owner") + @ResponseStatus(HttpStatus.OK) + public ResponseEntity findByOwner(@RequestHeader("X-Sharer-User-Id") @NotNull long userId, + @RequestParam(defaultValue = "ALL") BookingState state) { + return bookingClient.findByOwner(userId, state); + } + + @GetMapping("/{bookingId}") + @ResponseStatus(HttpStatus.OK) + public ResponseEntity findById(@RequestHeader("X-Sharer-User-Id") @NotNull long userId, @PathVariable @NotNull long bookingId) { + return bookingClient.findById(userId, bookingId); + } +} diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/BookingStatus.java b/gateway/src/main/java/ru/practicum/shareit/booking/BookingStatus.java new file mode 100644 index 0000000..ee6f096 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/booking/BookingStatus.java @@ -0,0 +1,5 @@ +package ru.practicum.shareit.booking; + +public enum BookingStatus { + WAITING, APPROVED, REJECTED, CANCELED +} diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java b/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java new file mode 100644 index 0000000..46d8f48 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java @@ -0,0 +1,23 @@ +package ru.practicum.shareit.booking.dto; + +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.booking.BookingStatus; +import ru.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.user.dto.UserDto; + +import java.time.LocalDateTime; + +/** + * TODO Sprint add-bookings. + */ +@Data +@Builder +public class BookingDto { + private Long id; + private LocalDateTime start; + private LocalDateTime end; + private ItemDto item; + private UserDto booker; + private BookingStatus status; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java b/gateway/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java new file mode 100644 index 0000000..f1a92fd --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java @@ -0,0 +1,21 @@ +package ru.practicum.shareit.booking.dto; + +import jakarta.validation.constraints.FutureOrPresent; +import jakarta.validation.constraints.NotNull; +import lombok.Builder; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +@Builder +public class NewBookingDto { + @NotNull + private LocalDateTime start; + + @NotNull + private LocalDateTime end; + + @NotNull + private Long itemId; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java b/gateway/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java new file mode 100644 index 0000000..a9a154d --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java @@ -0,0 +1,17 @@ +package ru.practicum.shareit.comment.dto; + +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.item.Item; + +import java.time.Instant; + +@Data +@Builder +public class CommentDto { + private Long id; + private String text; + private Item item; + private String authorName; + private Instant created; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java b/gateway/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java new file mode 100644 index 0000000..56968a0 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java @@ -0,0 +1,10 @@ +package ru.practicum.shareit.comment.dto; + +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class NewCommentDto { + @NotBlank + private String text; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/item/Item.java b/gateway/src/main/java/ru/practicum/shareit/item/Item.java new file mode 100644 index 0000000..76374b5 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/item/Item.java @@ -0,0 +1,25 @@ +package ru.practicum.shareit.item; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import ru.practicum.shareit.request.ItemRequest; +import ru.practicum.shareit.user.User; + +/** + * TODO Sprint add-controllers. + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Item { + private Long id; + private String name; + private String description; + private boolean available; + private User owner; + private ItemRequest request; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/item/ItemClient.java b/gateway/src/main/java/ru/practicum/shareit/item/ItemClient.java new file mode 100644 index 0000000..7f0148e --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/item/ItemClient.java @@ -0,0 +1,54 @@ +package ru.practicum.shareit.item; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.http.ResponseEntity; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.stereotype.Service; +import org.springframework.web.util.DefaultUriBuilderFactory; +import ru.practicum.shareit.client.BaseClient; +import ru.practicum.shareit.comment.dto.NewCommentDto; +import ru.practicum.shareit.item.dto.NewItemDto; +import ru.practicum.shareit.item.dto.UpdateItemDto; + +import java.util.Map; + +@Service +public class ItemClient extends BaseClient { + private static final String API_PREFIX = "/items"; + + @Autowired + public ItemClient(@Value("${shareit-server.url}") String serverUrl, RestTemplateBuilder builder) { + super( + builder + .uriTemplateHandler(new DefaultUriBuilderFactory(serverUrl + API_PREFIX)) + .requestFactory(() -> new HttpComponentsClientHttpRequestFactory()) + .build() + ); + } + + public ResponseEntity create(NewItemDto itemDto, Long userId) { + return post("",userId,itemDto); + } + + public ResponseEntity update(Long itemId, UpdateItemDto itemDto, Long userId) { + return patch("/"+itemId,userId,itemDto); + } + + public ResponseEntity getById(Long itemId) { + return get("/"+itemId); + } + + public ResponseEntity getAllItemsByOwner(Long userId) { + return get("",userId); + } + + public ResponseEntity search(String searchText) { + return get("/search?text"+searchText); + } + + public ResponseEntity createComment(NewCommentDto newCommentDto, long itemId, long userId) { + return post("/"+itemId+"/comment",userId,newCommentDto); + } +} diff --git a/gateway/src/main/java/ru/practicum/shareit/item/ItemController.java b/gateway/src/main/java/ru/practicum/shareit/item/ItemController.java new file mode 100644 index 0000000..f493873 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/item/ItemController.java @@ -0,0 +1,64 @@ +package ru.practicum.shareit.item; + +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import ru.practicum.shareit.comment.dto.NewCommentDto; +import ru.practicum.shareit.item.dto.NewItemDto; +import ru.practicum.shareit.item.dto.UpdateItemDto; + + +/** + * TODO Sprint add-controllers. + */ +@RestController +@RequestMapping("/items") +@RequiredArgsConstructor +@Validated +public class ItemController { + private final ItemClient itemClient; + + @PostMapping + @ResponseStatus(HttpStatus.CREATED) + public ResponseEntity create(@Valid @RequestBody NewItemDto itemDto, @RequestHeader("X-Sharer-User-Id") Long userId) { + + return itemClient.create(itemDto, userId); + } + + @PatchMapping("/{itemId}") + public ResponseEntity update(@PathVariable("itemId") Long itemId, + @RequestBody UpdateItemDto itemDto, + @RequestHeader(value = "X-Sharer-User-Id") Long userId) { + + return itemClient.update(itemId, itemDto, userId); + } + + @GetMapping("/{itemId}") + public ResponseEntity getItemById(@PathVariable("itemId") Long itemId) { + + return itemClient.getById(itemId); + } + + @GetMapping + public ResponseEntity getUserItems(@RequestHeader("X-Sharer-User-Id") Long userId) { + + return itemClient.getAllItemsByOwner(userId); + } + + @GetMapping("/search") + public ResponseEntity search(@RequestParam("text") String searchText) { + + return itemClient.search(searchText); + } + + @PostMapping("/{itemId}/comment") + @ResponseStatus(HttpStatus.CREATED) + public ResponseEntity createComment(@RequestHeader("X-Sharer-User-Id") long userId, + @PathVariable("itemId") long itemId, + @RequestBody @Valid NewCommentDto newCommentDto) { + return itemClient.createComment(newCommentDto, itemId, userId); + } +} diff --git a/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java b/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java new file mode 100644 index 0000000..fb8eaf2 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java @@ -0,0 +1,21 @@ +package ru.practicum.shareit.item.dto; + +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.user.dto.UserDto; + + +/** + * TODO Sprint add-controllers. + */ +@Data +@Builder +public class ItemDto { + private Long id; + private String name; + private String description; + private Boolean available; + private UserDto owner; + private Long requestId; + +} diff --git a/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemResponseToRequestDto.java b/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemResponseToRequestDto.java new file mode 100644 index 0000000..610d1f3 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemResponseToRequestDto.java @@ -0,0 +1,17 @@ +package ru.practicum.shareit.item.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class ItemResponseToRequestDto { + private long id; + private long ownerId; + private String name; + +} diff --git a/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java b/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java new file mode 100644 index 0000000..496b7e2 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java @@ -0,0 +1,24 @@ +package ru.practicum.shareit.item.dto; + +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.booking.dto.BookingDto; +import ru.practicum.shareit.comment.dto.CommentDto; +import ru.practicum.shareit.user.dto.UserDto; + +import java.util.List; + +@Data +@Builder +public class ItemWithCommentsDto { + private long id; + + private String name; + private String description; + private Boolean available; + private UserDto owner; + private BookingDto lastBooking; + private BookingDto nextBooking; + private List comments; + private Long requestId; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java b/gateway/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java new file mode 100644 index 0000000..f8139d5 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java @@ -0,0 +1,21 @@ +package ru.practicum.shareit.item.dto; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.user.User; + +@Data +@Builder +public class NewItemDto { + @NotBlank(message = "название предмета не может быть пустым") + private String name; + @NotBlank(message = "описание не должно быть пустым") + private String description; + @NotNull(message = "не установлен статус доступности бронирования") + private Boolean available; + private User owner; + private Long requestId; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java b/gateway/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java new file mode 100644 index 0000000..ead598d --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java @@ -0,0 +1,22 @@ +package ru.practicum.shareit.item.dto; + +import lombok.Data; + +@Data +public class UpdateItemDto { + private String name; + private String description; + private Boolean available; + + public boolean hasName() { + return !(name == null || name.isBlank()); + } + + public boolean hasDescription() { + return !(description == null || description.isBlank()); + } + + public boolean hasAvailable() { + return Boolean.FALSE.equals(available); + } +} diff --git a/gateway/src/main/java/ru/practicum/shareit/request/ItemRequest.java b/gateway/src/main/java/ru/practicum/shareit/request/ItemRequest.java new file mode 100644 index 0000000..299ccd2 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/request/ItemRequest.java @@ -0,0 +1,34 @@ +package ru.practicum.shareit.request; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import ru.practicum.shareit.item.Item; +import ru.practicum.shareit.user.User; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + + +/** + * TODO Sprint add-item-requests. + */ + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ItemRequest { + + private long id; + private String description; + private User requestor; + private LocalDateTime created; + @Builder.Default + private List responsesList = new ArrayList<>(); + + +} diff --git a/gateway/src/main/java/ru/practicum/shareit/request/ItemRequestClient.java b/gateway/src/main/java/ru/practicum/shareit/request/ItemRequestClient.java new file mode 100644 index 0000000..4f35300 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/request/ItemRequestClient.java @@ -0,0 +1,39 @@ +package ru.practicum.shareit.request; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.http.ResponseEntity; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.stereotype.Service; +import org.springframework.web.util.DefaultUriBuilderFactory; +import ru.practicum.shareit.client.BaseClient; +import ru.practicum.shareit.request.dto.NewItemRequestDto; + +@Service +public class ItemRequestClient extends BaseClient { + + private static final String API_PREFIX = "/requests"; + + @Autowired + public ItemRequestClient(@Value("${shareit-server.url}") String serverUrl, RestTemplateBuilder builder) { + super( + builder + .uriTemplateHandler(new DefaultUriBuilderFactory(serverUrl + API_PREFIX)) + .requestFactory(() -> new HttpComponentsClientHttpRequestFactory()) + .build() + ); + } + + public ResponseEntity create(NewItemRequestDto newItemRequestDto, Long userId) { + return post("",userId,newItemRequestDto); + } + + public ResponseEntity getByUser(Long userId) { + return get("",userId); + } + + public ResponseEntity getById(Long requestId) { + return get("/"+requestId); + } +} diff --git a/gateway/src/main/java/ru/practicum/shareit/request/ItemRequestController.java b/gateway/src/main/java/ru/practicum/shareit/request/ItemRequestController.java new file mode 100644 index 0000000..edb69cb --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/request/ItemRequestController.java @@ -0,0 +1,35 @@ +package ru.practicum.shareit.request; + +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import ru.practicum.shareit.request.dto.ItemRequestDto; +import ru.practicum.shareit.request.dto.NewItemRequestDto; + +import java.util.List; + +/** + * TODO Sprint add-item-requests. + */ +@RestController +@RequestMapping(path = "/requests") +@RequiredArgsConstructor +public class ItemRequestController { + private final ItemRequestClient requestClient; + + @PostMapping + public ResponseEntity create(@RequestBody NewItemRequestDto newItemRequestDto, + @RequestHeader("X-Sharer-User-Id") Long userId){ + return requestClient.create(newItemRequestDto,userId); + } + + @GetMapping + public ResponseEntity getRequestsByUser(@RequestHeader("X-Sharer-User-Id") Long userId){ + return requestClient.getByUser(userId); + } + @GetMapping("/{requestId}") + public ResponseEntity getRequestById(@PathVariable Long requestId) { + return requestClient.getById(requestId); + } + +} diff --git a/gateway/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java b/gateway/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java new file mode 100644 index 0000000..64a69dc --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java @@ -0,0 +1,20 @@ +package ru.practicum.shareit.request.dto; + +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.item.dto.ItemResponseToRequestDto; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * TODO Sprint add-item-requests. + */ +@Data +@Builder +public class ItemRequestDto { + private long id; + private String description; + private LocalDateTime created; + private List items; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/request/dto/NewItemRequestDto.java b/gateway/src/main/java/ru/practicum/shareit/request/dto/NewItemRequestDto.java new file mode 100644 index 0000000..647df5d --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/request/dto/NewItemRequestDto.java @@ -0,0 +1,17 @@ +package ru.practicum.shareit.request.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class NewItemRequestDto { + private String description; + private LocalDateTime created; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/user/User.java b/gateway/src/main/java/ru/practicum/shareit/user/User.java new file mode 100644 index 0000000..c0687c8 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/user/User.java @@ -0,0 +1,20 @@ +package ru.practicum.shareit.user; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * TODO Sprint add-controllers. + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class User { + private Long id; + private String name; + private String email; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/user/UserClient.java b/gateway/src/main/java/ru/practicum/shareit/user/UserClient.java new file mode 100644 index 0000000..f151af6 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/user/UserClient.java @@ -0,0 +1,43 @@ +package ru.practicum.shareit.user; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.http.ResponseEntity; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.stereotype.Service; +import org.springframework.web.util.DefaultUriBuilderFactory; +import ru.practicum.shareit.client.BaseClient; +import ru.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.user.dto.UpdateUserDto; + +@Service +public class UserClient extends BaseClient { + private static final String API_PREFIX = "/users"; + + @Autowired + public UserClient(@Value("${shareit-server.url}") String serverUrl, RestTemplateBuilder builder){ + super( + builder + .uriTemplateHandler(new DefaultUriBuilderFactory(serverUrl + API_PREFIX)) + .requestFactory(() -> new HttpComponentsClientHttpRequestFactory()) + .build() + ); + } + + public ResponseEntity create(NewUserDto userDto) { + return post("",userDto); + } + + public ResponseEntity getById(Long userId) { + return get("/" + userId); + } + + public ResponseEntity update(Long userId, UpdateUserDto userDto) { + return patch("/" + userId,userId,userDto); + } + + public ResponseEntity deleteUser(Long userId) { + return delete( "/" + userId,userId); + } +} diff --git a/gateway/src/main/java/ru/practicum/shareit/user/UserController.java b/gateway/src/main/java/ru/practicum/shareit/user/UserController.java new file mode 100644 index 0000000..8677d5a --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/user/UserController.java @@ -0,0 +1,52 @@ +package ru.practicum.shareit.user; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; +import lombok.AllArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import ru.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.user.dto.UpdateUserDto; +import ru.practicum.shareit.user.dto.UserDto; + +/** + * TODO Sprint add-controllers. + */ + +@RestController +@AllArgsConstructor +@RequestMapping(path = "/users") +@Validated +public class UserController { + private final UserClient userClient; + + @PostMapping + @ResponseStatus(HttpStatus.CREATED) + public ResponseEntity createUser(@Valid @RequestBody @NotNull NewUserDto userDto) { + return userClient.create(userDto); + } + + @GetMapping("/{userId}") + public ResponseEntity getUserById(@PathVariable("userId") @NotNull @Positive Long userId) { + + return userClient.getById(userId); + } + + @PatchMapping("/{userId}") + @ResponseStatus(HttpStatus.OK) + public ResponseEntity updateUser(@PathVariable("userId") @NotNull @Positive Long userId, @Validated @RequestBody(required = false) @NotNull UpdateUserDto userDto) { + + return userClient.update(userId, userDto); + } + + @DeleteMapping("/{userId}") + @ResponseStatus(HttpStatus.OK) + public ResponseEntity deleteUser(@PathVariable("userId") @NotNull @Positive Long userId) { + return userClient.deleteUser(userId); + + } +} + diff --git a/gateway/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java b/gateway/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java new file mode 100644 index 0000000..f95ecb8 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java @@ -0,0 +1,17 @@ +package ru.practicum.shareit.user.dto; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class NewUserDto { + @NotBlank(message = "Имя не может быть пустым") + private String name; + + @NotBlank(message = "email не может быть пустым") + @Email(message = "Указан некорректный формат email") + private String email; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java b/gateway/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java new file mode 100644 index 0000000..bd9e396 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java @@ -0,0 +1,20 @@ +package ru.practicum.shareit.user.dto; + +import jakarta.validation.constraints.Email; +import lombok.Data; + +@Data +public class UpdateUserDto { + private String name; + + @Email(message = "Указан некорректный формат email") + private String email; + + public boolean hasName() { + return !(name == null || name.isBlank()); + } + + public boolean hasEmail() { + return !(email == null || email.isBlank()); + } +} diff --git a/gateway/src/main/java/ru/practicum/shareit/user/dto/UserDto.java b/gateway/src/main/java/ru/practicum/shareit/user/dto/UserDto.java new file mode 100644 index 0000000..46410f9 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/user/dto/UserDto.java @@ -0,0 +1,19 @@ +package ru.practicum.shareit.user.dto; + +import jakarta.validation.constraints.Email; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + + +@Getter +@Setter +@ToString +@Builder +public class UserDto { + private Long id; + private String name; + @Email(message = "Электронная почта должна содержать символ @") + private String email; +} diff --git a/pom.xml b/pom.xml index e1f3a93..79cba37 100644 --- a/pom.xml +++ b/pom.xml @@ -11,6 +11,7 @@ ru.practicum shareit + pom 0.0.1-SNAPSHOT ShareIt @@ -19,76 +20,29 @@ 21 - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-configuration-processor - true - - - - org.postgresql - postgresql - runtime - - - - org.projectlombok - lombok - true - - - - com.h2database - h2 - - - - org.springframework.boot - spring-boot-starter-test - test - - - org.springframework.boot - spring-boot-starter-validation - - + + gateway + server + - - - src/main/resources - true - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - org.projectlombok - lombok - - - - - + + org.springframework.boot + spring-boot-maven-plugin + + + true + + + + org.projectlombok + lombok + + + + org.apache.maven.plugins maven-surefire-plugin @@ -235,17 +189,5 @@ - - coverage - - - - org.jacoco - jacoco-maven-plugin - - - - - - + \ No newline at end of file diff --git a/server/src/main/java/ru/practicum/shareit/booking/Booking.java b/server/src/main/java/ru/practicum/shareit/booking/Booking.java new file mode 100644 index 0000000..c94f8e2 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/booking/Booking.java @@ -0,0 +1,39 @@ +package ru.practicum.shareit.booking; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; + + +import java.time.LocalDateTime; + +/** + * TODO Sprint add-bookings. + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "bookings") +@Builder +public class Booking { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + @Column(name = "start_time") + private LocalDateTime start; + @Column(name = "end_time") + private LocalDateTime end; + @ManyToOne + @JoinColumn(name = "item_id") + private Item item; + @ManyToOne + @JoinColumn(name = "booker_id") + private User booker; + @Enumerated(EnumType.STRING) + private BookingStatus status; +} diff --git a/server/src/main/java/ru/practicum/shareit/booking/BookingController.java b/server/src/main/java/ru/practicum/shareit/booking/BookingController.java new file mode 100644 index 0000000..6240045 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/booking/BookingController.java @@ -0,0 +1,57 @@ +package ru.practicum.shareit.booking; + +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.web.PageableDefault; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; +import ru.practicum.shareit.booking.dto.BookingDto; +import ru.practicum.shareit.booking.dto.NewBookingDto; + +import java.util.List; + + +/** + * TODO Sprint add-bookings. + */ +@RestController +@RequestMapping(path = "/bookings") +@RequiredArgsConstructor +public class BookingController { + private final BookingService bookingService; + + @PostMapping + @ResponseStatus(HttpStatus.CREATED) + public BookingDto create(@RequestBody NewBookingDto newBookingDto, @RequestHeader("X-Sharer-User-Id") long userId) { + return bookingService.create(newBookingDto, userId); + } + + @PatchMapping("/{bookingId}") + @ResponseStatus(HttpStatus.OK) + public BookingDto approveBooking(@RequestHeader("X-Sharer-User-Id") long userId, @PathVariable long bookingId, @RequestParam boolean approved) { + return bookingService.approveBooking(userId, bookingId, approved); + } + + @GetMapping + @ResponseStatus(HttpStatus.OK) + public List findByBooker(@RequestHeader("X-Sharer-User-Id") long userId, + @RequestParam(defaultValue = "ALL") BookingState state, + @PageableDefault(size = 20, sort = "start", direction = Sort.Direction.DESC) Pageable pageable) { + return bookingService.findByBooker(userId, state, pageable).getContent(); + } + + @GetMapping("/owner") + @ResponseStatus(HttpStatus.OK) + public List findByOwner(@RequestHeader("X-Sharer-User-Id") long userId, + @RequestParam(defaultValue = "ALL") BookingState state, + @PageableDefault(size = 20, sort = "start", direction = Sort.Direction.DESC) Pageable pageable) { + return bookingService.findByOwner(userId, state, pageable).getContent(); + } + + @GetMapping("/{bookingId}") + @ResponseStatus(HttpStatus.OK) + public BookingDto findById(@RequestHeader("X-Sharer-User-Id") long userId, @PathVariable long bookingId) { + return bookingService.findById(userId, bookingId); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/booking/BookingMapper.java b/server/src/main/java/ru/practicum/shareit/booking/BookingMapper.java new file mode 100644 index 0000000..dd91f9f --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/booking/BookingMapper.java @@ -0,0 +1,35 @@ +package ru.practicum.shareit.booking; + + +import ru.practicum.shareit.booking.dto.BookingDto; +import ru.practicum.shareit.booking.dto.NewBookingDto; +import ru.practicum.shareit.item.ItemMapper; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; +import ru.practicum.shareit.user.UserMapper; + + +public class BookingMapper { + public static BookingDto mapToBookingDto(Booking booking) { + return BookingDto.builder() + .id(booking.getId()) + .start(booking.getStart()) + .end(booking.getEnd()) + .item(ItemMapper.mapToItemDto(booking.getItem())) + .booker(UserMapper.mapToUserDto(booking.getBooker())) + .status(booking.getStatus()) + .build(); + } + + public static Booking mapToNewBookingDto(NewBookingDto newBookingDto, User user, Item item) { + return Booking.builder() + .start(newBookingDto.getStart()) + .end(newBookingDto.getEnd()) + .item(item) + .booker(user) + .status(BookingStatus.WAITING) + .build(); + } + + +} diff --git a/server/src/main/java/ru/practicum/shareit/booking/BookingRepository.java b/server/src/main/java/ru/practicum/shareit/booking/BookingRepository.java new file mode 100644 index 0000000..2bf7bd5 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/booking/BookingRepository.java @@ -0,0 +1,47 @@ +package ru.practicum.shareit.booking; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Optional; + +public interface BookingRepository extends JpaRepository { + Page findByBooker_Id(long bookerId, Pageable pageable); + + Page findByItemOwner_Id(long ownerId, Pageable pageable); + + @Query("SELECT b FROM Booking b " + + " WHERE b.booker.id = :bookerId " + + " AND b.start <= :now " + + " AND b.end >= :now " + + " AND b.status = ru.practicum.shareit.booking.BookingStatus.APPROVED") + Page findCurrentByBooker(@Param("bookerId") long bookerId, @Param("now") LocalDateTime now, Pageable pageable); + + @Query("SELECT b FROM Booking b " + + " WHERE b.item.owner.id = :ownerId " + + " AND b.start <= :now " + + " AND b.end >= :now " + + " AND b.status = ru.practicum.shareit.booking.BookingStatus.APPROVED") + Page findCurrentByOwner(@Param("ownerId") long ownerId, @Param("now") LocalDateTime now, Pageable pageable); + + Page findByBooker_IdAndEndBefore(long bookerId, LocalDateTime now, Pageable pageable); + + Page findByItemOwner_IdAndEndBefore(long ownerId, LocalDateTime now, Pageable pageable); + + Page findByBooker_IdAndStartAfter(long bookerId, LocalDateTime now, Pageable pageable); + + Page findByItemOwner_IdAndStartAfter(long ownerId, LocalDateTime now, Pageable pageable); + + Page findByBooker_IdAndStatus(long bookerId, BookingStatus status, Pageable pageable); + + Page findByItemOwner_IdAndStatus(long ownerId, BookingStatus status, Pageable pageable); + + List findByItem_idAndStatus(long itemId, BookingStatus status); + + Optional findByItem_idAndBooker_id(long itemId, long bookerId); +} diff --git a/server/src/main/java/ru/practicum/shareit/booking/BookingService.java b/server/src/main/java/ru/practicum/shareit/booking/BookingService.java new file mode 100644 index 0000000..8d4c2bb --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/booking/BookingService.java @@ -0,0 +1,18 @@ +package ru.practicum.shareit.booking; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import ru.practicum.shareit.booking.dto.BookingDto; +import ru.practicum.shareit.booking.dto.NewBookingDto; + +public interface BookingService { + BookingDto create(NewBookingDto newBookingDto, long bookerId); + + BookingDto approveBooking(long userId, long bookingId, boolean approved); + + Page findByBooker(long bookerId, BookingState state, Pageable pageable); + + Page findByOwner(long ownerId, BookingState state, Pageable pageable); + + BookingDto findById(long userId, long bookingId); +} diff --git a/server/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java b/server/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java new file mode 100644 index 0000000..6067f84 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java @@ -0,0 +1,107 @@ +package ru.practicum.shareit.booking; + + +import lombok.RequiredArgsConstructor; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import ru.practicum.shareit.booking.dto.BookingDto; +import ru.practicum.shareit.booking.dto.NewBookingDto; +import ru.practicum.shareit.exception.NoAccessException; +import ru.practicum.shareit.exception.NotAvailableItemException; +import ru.practicum.shareit.exception.NotFoundException; +import ru.practicum.shareit.item.ItemRepository; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; +import ru.practicum.shareit.user.UserRepository; + +import java.time.LocalDateTime; + +@Service +@RequiredArgsConstructor +public class BookingServiceImpl implements BookingService { + private final BookingRepository bookingRepository; + private final ItemRepository itemRepository; + private final UserRepository userRepository; + + @Override + public BookingDto create(NewBookingDto newBookingDto, long bookerId) { + User booker = userRepository.findById(bookerId) + .orElseThrow(() -> new NotFoundException("Пользователь не найден")); + Item item = itemRepository.findById(newBookingDto.getItemId()) + .orElseThrow(() -> new NotFoundException("Вещь не найдена")); + if (!item.isAvailable()) { + throw new NotAvailableItemException("Вещь недоступна для бронирования"); + + } + Booking booking = BookingMapper.mapToNewBookingDto(newBookingDto, booker, item); + bookingRepository.save(booking); + return BookingMapper.mapToBookingDto(booking); + } + + @Override + public BookingDto approveBooking(long userId, long bookingId, boolean approved) { + Booking booking = bookingRepository.findById(bookingId) + .orElseThrow(() -> new NotFoundException("Бронирование не найдено")); + long ownerId = booking.getItem().getOwner().getId(); + if (userId != ownerId) { + throw new NoAccessException("Только владелец вещи имеет доступ к изменению статуса бронирования"); + } + booking.setStatus(approved ? BookingStatus.APPROVED : BookingStatus.REJECTED); + bookingRepository.save(booking); + return BookingMapper.mapToBookingDto(booking); + } + + @Override + public Page findByBooker(long bookerId, BookingState state, Pageable pageable) { + if (!userExistById(bookerId)) { + throw new NotFoundException("Пользователь не найден"); + } + LocalDateTime timeNow = LocalDateTime.now(); + Page page = switch (state) { + case CURRENT -> bookingRepository.findCurrentByBooker(bookerId, timeNow, pageable); + case PAST -> bookingRepository.findByBooker_IdAndEndBefore(bookerId, timeNow, pageable); + case FUTURE -> bookingRepository.findByBooker_IdAndStartAfter(bookerId, timeNow, pageable); + case WAITING -> bookingRepository.findByBooker_IdAndStatus(bookerId, BookingStatus.WAITING, pageable); + case REJECTED -> bookingRepository.findByBooker_IdAndStatus(bookerId, BookingStatus.REJECTED, pageable); + case ALL -> bookingRepository.findByBooker_Id(bookerId, pageable); + default -> throw new NotFoundException("Некорректный параметр state"); + }; + return page.map(BookingMapper::mapToBookingDto); + } + + @Override + public Page findByOwner(long ownerId, BookingState state, Pageable pageable) { + if (!userExistById(ownerId)) { + throw new NotFoundException("Пользователь не найден"); + } + LocalDateTime timeNow = LocalDateTime.now(); + Page page = switch (state) { + case CURRENT -> bookingRepository.findCurrentByOwner(ownerId, timeNow, pageable); + case PAST -> bookingRepository.findByItemOwner_IdAndEndBefore(ownerId, timeNow, pageable); + case FUTURE -> bookingRepository.findByItemOwner_IdAndStartAfter(ownerId, timeNow, pageable); + case WAITING -> bookingRepository.findByItemOwner_IdAndStatus(ownerId, BookingStatus.WAITING, pageable); + case REJECTED -> bookingRepository.findByItemOwner_IdAndStatus(ownerId, BookingStatus.REJECTED, pageable); + case ALL -> bookingRepository.findByItemOwner_Id(ownerId, pageable); + default -> throw new NotFoundException("Некорректный параметр state"); + }; + return page.map(BookingMapper::mapToBookingDto); + } + + @Override + public BookingDto findById(long userId, long bookingId) { + Booking booking = bookingRepository.findById(bookingId) + .orElseThrow(() -> new NotFoundException("Бронирование не найдено")); + long ownerId = booking.getItem().getOwner().getId(); + if (booking.getBooker().getId() != userId && ownerId != userId) { + throw new NoAccessException("No access to booking"); + } + return BookingMapper.mapToBookingDto(booking); + } + + public boolean userExistById(long userId) { + return userRepository.existsById(userId); + } + +} diff --git a/server/src/main/java/ru/practicum/shareit/booking/BookingState.java b/server/src/main/java/ru/practicum/shareit/booking/BookingState.java new file mode 100644 index 0000000..1ffe7c9 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/booking/BookingState.java @@ -0,0 +1,5 @@ +package ru.practicum.shareit.booking; + +public enum BookingState { + CURRENT, PAST, FUTURE, WAITING, REJECTED, ALL +} diff --git a/server/src/main/java/ru/practicum/shareit/booking/BookingStatus.java b/server/src/main/java/ru/practicum/shareit/booking/BookingStatus.java new file mode 100644 index 0000000..ee6f096 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/booking/BookingStatus.java @@ -0,0 +1,5 @@ +package ru.practicum.shareit.booking; + +public enum BookingStatus { + WAITING, APPROVED, REJECTED, CANCELED +} diff --git a/server/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java b/server/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java new file mode 100644 index 0000000..81f314e --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java @@ -0,0 +1,24 @@ +package ru.practicum.shareit.booking.dto; + +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.booking.BookingStatus; +import ru.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.user.dto.UserDto; + +import java.time.LocalDateTime; + +/** + * TODO Sprint add-bookings. + */ +@Data +@Builder + +public class BookingDto { + private Long id; + private LocalDateTime start; + private LocalDateTime end; + private ItemDto item; + private UserDto booker; + private BookingStatus status; +} diff --git a/server/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java b/server/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java new file mode 100644 index 0000000..ca3f91e --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java @@ -0,0 +1,15 @@ +package ru.practicum.shareit.booking.dto; + + +import lombok.Builder; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +@Builder +public class NewBookingDto { + private LocalDateTime start; + private LocalDateTime end; + private Long itemId; +} diff --git a/server/src/main/java/ru/practicum/shareit/comment/CommentMapper.java b/server/src/main/java/ru/practicum/shareit/comment/CommentMapper.java new file mode 100644 index 0000000..056001f --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/comment/CommentMapper.java @@ -0,0 +1,32 @@ +package ru.practicum.shareit.comment; + +import lombok.NoArgsConstructor; +import ru.practicum.shareit.comment.dto.CommentDto; +import ru.practicum.shareit.comment.dto.NewCommentDto; +import ru.practicum.shareit.comment.model.Comment; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; + +import java.time.Instant; + +@NoArgsConstructor +public class CommentMapper { + public static Comment mapToNewComment(NewCommentDto newCommentDto, Item item, User user) { + return Comment.builder() + .text(newCommentDto.getText()) + .created(Instant.now()) + .item(item) + .author(user) + .build(); + } + + public static CommentDto mapToCommentDto(Comment comment) { + return CommentDto.builder() + .id(comment.getId()) + .text(comment.getText()) + .authorName(comment.getAuthor().getName()) + .item(comment.getItem()) + .created(comment.getCreated()) + .build(); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/comment/CommentRepository.java b/server/src/main/java/ru/practicum/shareit/comment/CommentRepository.java new file mode 100644 index 0000000..ad69c08 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/comment/CommentRepository.java @@ -0,0 +1,10 @@ +package ru.practicum.shareit.comment; + +import org.springframework.data.jpa.repository.JpaRepository; +import ru.practicum.shareit.comment.model.Comment; + +import java.util.List; + +public interface CommentRepository extends JpaRepository { + List findByItem_id(long itemId); +} diff --git a/server/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java b/server/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java new file mode 100644 index 0000000..da53c85 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java @@ -0,0 +1,17 @@ +package ru.practicum.shareit.comment.dto; + +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.item.model.Item; + +import java.time.Instant; + +@Data +@Builder +public class CommentDto { + private Long id; + private String text; + private Item item; + private String authorName; + private Instant created; +} diff --git a/server/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java b/server/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java new file mode 100644 index 0000000..553956e --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java @@ -0,0 +1,10 @@ +package ru.practicum.shareit.comment.dto; + + +import lombok.Data; + +@Data +public class NewCommentDto { + + private String text; +} diff --git a/server/src/main/java/ru/practicum/shareit/comment/model/Comment.java b/server/src/main/java/ru/practicum/shareit/comment/model/Comment.java new file mode 100644 index 0000000..cdf3e2d --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/comment/model/Comment.java @@ -0,0 +1,39 @@ +package ru.practicum.shareit.comment.model; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; + +import java.time.Instant; + +@Entity +@Table(name = "comments") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Comment { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + Long id; + + @Column(name = "text") + + String text; + + @ManyToOne(cascade = CascadeType.PERSIST) + @JoinColumn(name = "item_id") + Item item; + + @ManyToOne + @JoinColumn(name = "author_id") + User author; + + @Column(name = "created") + Instant created; + +} diff --git a/server/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java b/server/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java new file mode 100644 index 0000000..4257b59 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java @@ -0,0 +1,62 @@ +package ru.practicum.shareit.eror; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import ru.practicum.shareit.exception.*; + +@RestControllerAdvice +@Slf4j +public class ErrorHandler { + @ExceptionHandler + @ResponseStatus(HttpStatus.BAD_REQUEST) + public ErrorResponse handleValidationError(final ValidationException e) { + log.error("Ошибка валидации {}", e.getMessage()); + return new ErrorResponse( + "Ошибка валидации", + e.getMessage() + ); + } + + @ExceptionHandler + @ResponseStatus(HttpStatus.NOT_FOUND) + public ErrorResponse handleNotFound(final NotFoundException e) { + log.error("Искомый объект не найдена {}", e.getMessage()); + return new ErrorResponse( + "Искомый объект не найден", + e.getMessage() + ); + } + + @ExceptionHandler + @ResponseStatus(HttpStatus.BAD_REQUEST) + public ErrorResponse handleNoDataFound(final NoDataFoundException e) { + log.error("Ошибка заполнения данных {}", e.getMessage()); + return new ErrorResponse( + "Ошибка заполнения данных", + e.getMessage() + ); + } + + @ExceptionHandler + @ResponseStatus(HttpStatus.BAD_REQUEST) + public ErrorResponse handleAvailableError(final NotAvailableItemException e) { + log.error("Ошибка с доступностью вещи {}", e.getMessage()); + return new ErrorResponse( + "Ошибка с доступностью вещи", + e.getMessage() + ); + } + + @ExceptionHandler + @ResponseStatus(HttpStatus.BAD_REQUEST) + public ErrorResponse handleNoAccessException(final NoAccessException e) { + log.error("Ошибка доступа {}", e.getMessage()); + return new ErrorResponse( + "Ошибка доступа", + e.getMessage() + ); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/eror/ErrorResponse.java b/server/src/main/java/ru/practicum/shareit/eror/ErrorResponse.java new file mode 100644 index 0000000..d2e6225 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/eror/ErrorResponse.java @@ -0,0 +1,15 @@ +package ru.practicum.shareit.eror; + +import lombok.Getter; + +@Getter +public class ErrorResponse { + String error; + String description; + + public ErrorResponse(String error, String description) { + this.error = error; + this.description = description; + } + +} diff --git a/server/src/main/java/ru/practicum/shareit/exception/ConflictException.java b/server/src/main/java/ru/practicum/shareit/exception/ConflictException.java new file mode 100644 index 0000000..7885123 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/exception/ConflictException.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.exception; + +public class ConflictException extends RuntimeException { + public ConflictException(String message) { + super(message); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/exception/NoAccessException.java b/server/src/main/java/ru/practicum/shareit/exception/NoAccessException.java new file mode 100644 index 0000000..7c24051 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/exception/NoAccessException.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.exception; + +public class NoAccessException extends RuntimeException { + public NoAccessException(String message) { + super(message); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java b/server/src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java new file mode 100644 index 0000000..dbef4b4 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.exception; + +public class NoDataFoundException extends RuntimeException { + public NoDataFoundException(String message) { + super(message); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/exception/NotAvailableItemException.java b/server/src/main/java/ru/practicum/shareit/exception/NotAvailableItemException.java new file mode 100644 index 0000000..cb02e2e --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/exception/NotAvailableItemException.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.exception; + +public class NotAvailableItemException extends RuntimeException { + public NotAvailableItemException(String message) { + super(message); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/exception/NotFoundException.java b/server/src/main/java/ru/practicum/shareit/exception/NotFoundException.java new file mode 100644 index 0000000..98610d2 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/exception/NotFoundException.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.exception; + +public class NotFoundException extends RuntimeException { + public NotFoundException(String message) { + super(message); + } +} \ No newline at end of file diff --git a/server/src/main/java/ru/practicum/shareit/exception/ValidationException.java b/server/src/main/java/ru/practicum/shareit/exception/ValidationException.java new file mode 100644 index 0000000..59043da --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/exception/ValidationException.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.exception; + +public class ValidationException extends RuntimeException { + public ValidationException(String message) { + super(message); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/item/ItemController.java b/server/src/main/java/ru/practicum/shareit/item/ItemController.java new file mode 100644 index 0000000..43405b9 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/item/ItemController.java @@ -0,0 +1,67 @@ +package ru.practicum.shareit.item; + + +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import ru.practicum.shareit.comment.dto.CommentDto; +import ru.practicum.shareit.comment.dto.NewCommentDto; +import ru.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.item.dto.ItemWithCommentsDto; +import ru.practicum.shareit.item.dto.NewItemDto; +import ru.practicum.shareit.item.dto.UpdateItemDto; + +import java.util.List; + +/** + * TODO Sprint add-controllers. + */ +@RestController +@RequestMapping("/items") +@RequiredArgsConstructor +@Validated +public class ItemController { + private final ItemService itemService; + + @PostMapping + @ResponseStatus(HttpStatus.CREATED) + public ItemDto create( @RequestBody NewItemDto itemDto, @RequestHeader("X-Sharer-User-Id") Long userId) { + + return itemService.create(itemDto, userId); + } + + @PatchMapping("/{itemId}") + public ItemDto update(@PathVariable("itemId") Long itemId, + @RequestBody UpdateItemDto itemDto, + @RequestHeader(value = "X-Sharer-User-Id") Long userId) { + + return itemService.update(itemId, itemDto, userId); + } + + @GetMapping("/{itemId}") + public ItemWithCommentsDto getItemById(@PathVariable("itemId") Long itemId) { + + return itemService.get(itemId); + } + + @GetMapping + public List getUserItems(@RequestHeader("X-Sharer-User-Id") Long userId) { + + return itemService.getAllItemsByOwner(userId); + } + + @GetMapping("/search") + public List search(@RequestParam("text") String searchText) { + + return itemService.search(searchText); + } + + @PostMapping("/{itemId}/comment") + @ResponseStatus(HttpStatus.CREATED) + public CommentDto createComment(@RequestHeader("X-Sharer-User-Id") long userId, + @PathVariable("itemId") long itemId, + @RequestBody NewCommentDto newCommentDto) { + return itemService.createComment(newCommentDto, itemId, userId); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/item/ItemMapper.java b/server/src/main/java/ru/practicum/shareit/item/ItemMapper.java new file mode 100644 index 0000000..4e24206 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/item/ItemMapper.java @@ -0,0 +1,81 @@ +package ru.practicum.shareit.item; + + +import ru.practicum.shareit.booking.Booking; +import ru.practicum.shareit.booking.BookingMapper; +import ru.practicum.shareit.comment.CommentMapper; +import ru.practicum.shareit.comment.model.Comment; +import ru.practicum.shareit.item.dto.*; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.request.ItemRequest; +import ru.practicum.shareit.user.User; +import ru.practicum.shareit.user.UserMapper; + +import java.util.List; + + +public class ItemMapper { + public static ItemDto mapToItemDto(Item item) { + Long requestId = item.getRequest() == null ? null : item.getRequest().getId(); + return ItemDto.builder() + .id(item.getId()) + .name(item.getName()) + .description(item.getDescription()) + .available(item.isAvailable()) + .owner(UserMapper.mapToUserDto(item.getOwner())) + .requestId(requestId) + .build(); + } + + public static Item mapToNewItem(NewItemDto newItemDto, User owner) { + ItemRequest request = newItemDto.getRequestId() == null ? null :ItemRequest.builder().id(newItemDto.getRequestId()).build(); + + return Item.builder() + .name(newItemDto.getName()) + .description(newItemDto.getDescription()) + .available(newItemDto.getAvailable()) + .owner(owner) + .request(request) + .build(); + } + + public static Item mapToUpdateItemDto(Item item, UpdateItemDto updateItemDto) { + if (updateItemDto.hasName()) { + item.setName(updateItemDto.getName()); + } + if (updateItemDto.hasDescription()) { + item.setDescription(updateItemDto.getDescription()); + } + if (updateItemDto.hasAvailable()) { + item.setAvailable(updateItemDto.getAvailable()); + } + return item; + + } + + public static ItemWithCommentsDto mapToItemWithCommentsDto(Item item, List bookings, List comments) { + ItemWithCommentsDto itemWithCommentsDto = ItemWithCommentsDto.builder() + .id(item.getId()) + .name(item.getName()) + .description(item.getDescription()) + .available(item.isAvailable()) + .comments(comments.stream().map(CommentMapper::mapToCommentDto).toList()) + .owner(UserMapper.mapToUserDto(item.getOwner())) + .build(); + if (!bookings.isEmpty()) { + itemWithCommentsDto.setLastBooking(BookingMapper.mapToBookingDto(bookings.getLast())); + if (bookings.size() > 1) { + itemWithCommentsDto.setNextBooking(BookingMapper.mapToBookingDto(bookings.get(bookings.size() - 2))); + } + } + return itemWithCommentsDto; + } + public static ItemResponseToRequestDto itemResponseToRequestDto(Item item) { + return ItemResponseToRequestDto.builder() + .id(item.getId()) + .name(item.getName()) + .ownerId(item.getOwner().getId()) + .build(); + } +} + diff --git a/server/src/main/java/ru/practicum/shareit/item/ItemRepository.java b/server/src/main/java/ru/practicum/shareit/item/ItemRepository.java new file mode 100644 index 0000000..e93c564 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/item/ItemRepository.java @@ -0,0 +1,23 @@ +package ru.practicum.shareit.item; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; + +import java.util.List; + + +public interface ItemRepository extends JpaRepository { + List findByOwner(User owner); + + @Query("select it from Item it " + + "where it.available = true and " + + "(upper(it.name) like upper(concat('%', ?1, '%')) " + + " or upper(it.description) like upper(concat('%', ?1, '%')))") + List searchItem(String text); + + +} + + diff --git a/server/src/main/java/ru/practicum/shareit/item/ItemService.java b/server/src/main/java/ru/practicum/shareit/item/ItemService.java new file mode 100644 index 0000000..44dac1d --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/item/ItemService.java @@ -0,0 +1,25 @@ +package ru.practicum.shareit.item; + +import ru.practicum.shareit.comment.dto.CommentDto; +import ru.practicum.shareit.comment.dto.NewCommentDto; +import ru.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.item.dto.ItemWithCommentsDto; +import ru.practicum.shareit.item.dto.NewItemDto; +import ru.practicum.shareit.item.dto.UpdateItemDto; + +import java.util.List; + +public interface ItemService { + + ItemDto create(NewItemDto newItemDto, long userId); + + ItemDto update(long itemId, UpdateItemDto itemDto, long userID); + + ItemWithCommentsDto get(long itemId); + + List getAllItemsByOwner(long ownerId); + + List search(String searchText); + + CommentDto createComment(NewCommentDto newCommentDto, long itemId, long userId); +} diff --git a/server/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java b/server/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java new file mode 100644 index 0000000..3215e11 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java @@ -0,0 +1,119 @@ +package ru.practicum.shareit.item; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import ru.practicum.shareit.booking.Booking; +import ru.practicum.shareit.booking.BookingRepository; +import ru.practicum.shareit.booking.BookingStatus; +import ru.practicum.shareit.comment.CommentMapper; +import ru.practicum.shareit.comment.CommentRepository; +import ru.practicum.shareit.comment.dto.CommentDto; +import ru.practicum.shareit.comment.dto.NewCommentDto; +import ru.practicum.shareit.comment.model.Comment; +import ru.practicum.shareit.exception.NoAccessException; +import ru.practicum.shareit.exception.NotFoundException; +import ru.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.item.dto.ItemWithCommentsDto; +import ru.practicum.shareit.item.dto.NewItemDto; +import ru.practicum.shareit.item.dto.UpdateItemDto; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; +import ru.practicum.shareit.user.UserMapper; +import ru.practicum.shareit.user.UserService; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +@Service +@RequiredArgsConstructor +@Slf4j +public class ItemServiceImpl implements ItemService { + private final ItemRepository itemRepository; + private final UserService userService; + private final BookingRepository bookingRepository; + private final CommentRepository commentRepository; + + @Override + public ItemDto create(NewItemDto newItemDto, long userId) { + log.debug("==> Creating item: {}", newItemDto); + User owner = UserMapper.mapToUser(userService.getById(userId)); + Item item = ItemMapper.mapToNewItem(newItemDto, owner); + itemRepository.save(item); + log.debug("<== Creating item: {}", newItemDto); + return ItemMapper.mapToItemDto(item); + } + + @Override + public ItemDto update(long itemId, UpdateItemDto itemDto, long userID) { + log.debug("==> Updating item: {}", itemDto); + Item oldItem = itemRepository.findById(itemId) + .orElseThrow(() -> new NotFoundException("Предмет не найден")); + + if (userID == oldItem.getOwner().getId()) { + Item updateItem = ItemMapper.mapToUpdateItemDto(oldItem, itemDto); + itemRepository.save(updateItem); + log.debug("<== Updating item: {}", itemDto); + return ItemMapper.mapToItemDto(updateItem); + } + throw new NotFoundException("У вас недостаточно прав для обновления вещи"); + } + + + @Override + public ItemWithCommentsDto get(long itemId) { + log.debug("==> get item by id: {}", itemId); + Item item = itemRepository.findById(itemId) + .orElseThrow(() -> new NotFoundException("Предмет не найден")); + List bookings = bookingRepository.findByItem_idAndStatus(itemId, BookingStatus.WAITING); + List comments = commentRepository.findByItem_id(itemId); + ItemWithCommentsDto itemWithCommentsDto = ItemMapper.mapToItemWithCommentsDto(item, bookings, comments); + log.debug("<== get item by id: {}", item); + return itemWithCommentsDto; + } + + @Override + public List getAllItemsByOwner(long ownerId) { + log.debug("==> get user items by user id: {}", ownerId); + return itemRepository.findByOwner(UserMapper.mapToUser(userService.getById(ownerId))) + .stream() + .map(ItemMapper::mapToItemDto) + .toList(); + + + } + + @Override + public List search(String searchText) { + log.debug("==> search items: {}", searchText); + List foundItems = new ArrayList<>(); + if (searchText.isEmpty() || searchText.isBlank() || searchText == null) { + return foundItems; + } + foundItems = itemRepository.searchItem(searchText) + .stream() + .map(ItemMapper::mapToItemDto) + .toList(); + log.debug("<== search items: {}", searchText); + return foundItems; + } + + @Override + public CommentDto createComment(NewCommentDto newCommentDto, long itemId, long userId) { + log.debug("==> create comment for item: {}", itemId); + Booking booking = bookingRepository.findByItem_idAndBooker_id(itemId, userId) + .orElseThrow(() -> new NotFoundException("Бронирование для предмета не найдено, невозможно добавить комментарий")); + if (booking.getEnd().isAfter(LocalDateTime.now())) { + throw new NoAccessException("Срок бронирования предмета еще не закончился"); + } + User commentAuthor = UserMapper.mapToUser(userService.getById(userId)); + Item item = itemRepository.findById(itemId) + .orElseThrow(() -> new NotFoundException("Предмет не найден")); + Comment comment = CommentMapper.mapToNewComment(newCommentDto, item, commentAuthor); + commentRepository.save(comment); + log.debug("<== create comment for item: {}", itemId); + return CommentMapper.mapToCommentDto(comment); + } + +} diff --git a/server/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java b/server/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java new file mode 100644 index 0000000..e1b6fe7 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java @@ -0,0 +1,20 @@ +package ru.practicum.shareit.item.dto; + +import lombok.*; +import ru.practicum.shareit.user.dto.UserDto; + + +/** + * TODO Sprint add-controllers. + */ +@Data +@Builder +public class ItemDto { + private Long id; + private String name; + private String description; + private Boolean available; + private UserDto owner; + private Long requestId; + +} diff --git a/server/src/main/java/ru/practicum/shareit/item/dto/ItemResponseToRequestDto.java b/server/src/main/java/ru/practicum/shareit/item/dto/ItemResponseToRequestDto.java new file mode 100644 index 0000000..610d1f3 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/item/dto/ItemResponseToRequestDto.java @@ -0,0 +1,17 @@ +package ru.practicum.shareit.item.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class ItemResponseToRequestDto { + private long id; + private long ownerId; + private String name; + +} diff --git a/server/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java b/server/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java new file mode 100644 index 0000000..107996b --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java @@ -0,0 +1,24 @@ +package ru.practicum.shareit.item.dto; + +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.booking.dto.BookingDto; +import ru.practicum.shareit.comment.dto.CommentDto; +import ru.practicum.shareit.user.dto.UserDto; + +import java.util.List; + +@Data +@Builder +public class ItemWithCommentsDto { + private long id; + + private String name; + private String description; + private Boolean available; + private BookingDto lastBooking; + private BookingDto nextBooking; + private UserDto owner; + private List comments; + private Long requestId; +} diff --git a/server/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java b/server/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java new file mode 100644 index 0000000..e0a511a --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java @@ -0,0 +1,17 @@ +package ru.practicum.shareit.item.dto; + + +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.request.ItemRequest; +import ru.practicum.shareit.user.User; + +@Data +@Builder +public class NewItemDto { + private String name; + private String description; + private Boolean available; + private User owner; + private Long requestId; +} diff --git a/server/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java b/server/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java new file mode 100644 index 0000000..ead598d --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java @@ -0,0 +1,22 @@ +package ru.practicum.shareit.item.dto; + +import lombok.Data; + +@Data +public class UpdateItemDto { + private String name; + private String description; + private Boolean available; + + public boolean hasName() { + return !(name == null || name.isBlank()); + } + + public boolean hasDescription() { + return !(description == null || description.isBlank()); + } + + public boolean hasAvailable() { + return Boolean.FALSE.equals(available); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/item/model/Item.java b/server/src/main/java/ru/practicum/shareit/item/model/Item.java new file mode 100644 index 0000000..bb46597 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/item/model/Item.java @@ -0,0 +1,37 @@ +package ru.practicum.shareit.item.model; + + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import ru.practicum.shareit.request.ItemRequest; +import ru.practicum.shareit.user.User; + +/** + * TODO Sprint add-controllers. + */ +@Data +@Entity +@Table(name = "items") +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Item { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @Column(name = "name", nullable = false) + private String name; + @Column(name = "description", nullable = false) + private String description; + @Column(name = "available") + private boolean available; + @ManyToOne + @JoinColumn(name = "owner_id") + private User owner; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "request_id") + private ItemRequest request; +} diff --git a/server/src/main/java/ru/practicum/shareit/request/ItemRequest.java b/server/src/main/java/ru/practicum/shareit/request/ItemRequest.java new file mode 100644 index 0000000..2abac13 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/request/ItemRequest.java @@ -0,0 +1,44 @@ +package ru.practicum.shareit.request; + +import jakarta.persistence.*; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.CreationTimestamp; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + + +/** + * TODO Sprint add-item-requests. + */ + +@Entity +@Table(name = "requests") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ItemRequest { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + @Column(name = "description") + private String description; + @OneToOne + @JoinColumn(name = "requestor_id") + private User requestor; + @Column(name = "created") + private LocalDateTime created; + @OneToMany(mappedBy = "request", fetch = FetchType.EAGER) + @Builder.Default + private List responsesList = new ArrayList<>(); + + +} diff --git a/server/src/main/java/ru/practicum/shareit/request/ItemRequestController.java b/server/src/main/java/ru/practicum/shareit/request/ItemRequestController.java new file mode 100644 index 0000000..65dd62d --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/request/ItemRequestController.java @@ -0,0 +1,34 @@ +package ru.practicum.shareit.request; + +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; +import ru.practicum.shareit.request.dto.ItemRequestDto; +import ru.practicum.shareit.request.dto.NewItemRequestDto; + +import java.util.List; + +/** + * TODO Sprint add-item-requests. + */ +@RestController +@RequestMapping(path = "/requests") +@RequiredArgsConstructor +public class ItemRequestController { + private final ItemRequestService requestService; + + @PostMapping + public ItemRequestDto create(@RequestBody NewItemRequestDto newItemRequestDto, + @RequestHeader("X-Sharer-User-Id") Long userId){ + return requestService.create(newItemRequestDto,userId); + } + + @GetMapping + public List getRequestsByUser(@RequestHeader("X-Sharer-User-Id") Long userId){ + return requestService.getByUser(userId); + } + @GetMapping("/{requestId}") + public ItemRequestDto getRequestById(@PathVariable Long requestId) { + return requestService.getById(requestId); + } + +} diff --git a/server/src/main/java/ru/practicum/shareit/request/ItemRequestRepository.java b/server/src/main/java/ru/practicum/shareit/request/ItemRequestRepository.java new file mode 100644 index 0000000..9db13ad --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/request/ItemRequestRepository.java @@ -0,0 +1,10 @@ +package ru.practicum.shareit.request; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface ItemRequestRepository extends JpaRepository { + + List getAllByRequestorId(long userId); +} diff --git a/server/src/main/java/ru/practicum/shareit/request/ItemRequestService.java b/server/src/main/java/ru/practicum/shareit/request/ItemRequestService.java new file mode 100644 index 0000000..4273003 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/request/ItemRequestService.java @@ -0,0 +1,14 @@ +package ru.practicum.shareit.request; + +import ru.practicum.shareit.request.dto.ItemRequestDto; +import ru.practicum.shareit.request.dto.NewItemRequestDto; + +import java.util.List; + +public interface ItemRequestService { + ItemRequestDto create(NewItemRequestDto newItemRequestDto, long userId); + + List getByUser(long id); + + ItemRequestDto getById(long id); +} diff --git a/server/src/main/java/ru/practicum/shareit/request/ItemRequestServiseImpl.java b/server/src/main/java/ru/practicum/shareit/request/ItemRequestServiseImpl.java new file mode 100644 index 0000000..f61db77 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/request/ItemRequestServiseImpl.java @@ -0,0 +1,53 @@ +package ru.practicum.shareit.request; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import ru.practicum.shareit.exception.NotFoundException; +import ru.practicum.shareit.request.dto.ItemRequestDto; +import ru.practicum.shareit.request.dto.NewItemRequestDto; +import ru.practicum.shareit.user.User; +import ru.practicum.shareit.user.UserRepository; + +import java.util.Comparator; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class ItemRequestServiseImpl implements ItemRequestService { + private final ItemRequestRepository requestRepository; + private final UserRepository userRepository; + + @Override + public ItemRequestDto create(NewItemRequestDto newItemRequestDto, long userId) { + ItemRequest itemRequest = RequestMapper.toModel(newItemRequestDto); + itemRequest.setRequestor(getUserById(userId)); + return RequestMapper.toDto(requestRepository.save(itemRequest)); + } + + @Override + public List getByUser(long id) { + getUserById(id); + List requests = requestRepository.getAllByRequestorId(id); + return requests.stream() + .map(RequestMapper::toDto) + .sorted(Comparator.comparing(ItemRequestDto::getCreated).reversed()) + .toList(); + } + + @Override + public ItemRequestDto getById(long id){ + return RequestMapper.toDto(getRequestById(id)); + } + + + private User getUserById(long id) { + return userRepository.findById(id) + .orElseThrow(() -> new NotFoundException("Пользователь с id = " + id + " не найден")); + } + + private ItemRequest getRequestById(long id) { + return requestRepository.findById(id) + .orElseThrow(() -> new NotFoundException("Запрос вещи с id = " + id + " не найден")); + + } +} diff --git a/server/src/main/java/ru/practicum/shareit/request/RequestMapper.java b/server/src/main/java/ru/practicum/shareit/request/RequestMapper.java new file mode 100644 index 0000000..fb34a2b --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/request/RequestMapper.java @@ -0,0 +1,24 @@ +package ru.practicum.shareit.request; + +import ru.practicum.shareit.item.ItemMapper; +import ru.practicum.shareit.request.dto.ItemRequestDto; +import ru.practicum.shareit.request.dto.NewItemRequestDto; + +import java.time.LocalDateTime; + +public class RequestMapper { + public static ItemRequest toModel(NewItemRequestDto requestCreateDto) { + return ItemRequest.builder() + .description(requestCreateDto.getDescription()) + .created(LocalDateTime.now()) + .build(); + } + public static ItemRequestDto toDto(ItemRequest request) { + return ItemRequestDto.builder() + .id(request.getId()) + .description(request.getDescription()) + .created(request.getCreated()) + .items(request.getResponsesList().stream().map(ItemMapper::itemResponseToRequestDto).toList()) + .build(); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java b/server/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java new file mode 100644 index 0000000..64a69dc --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java @@ -0,0 +1,20 @@ +package ru.practicum.shareit.request.dto; + +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.item.dto.ItemResponseToRequestDto; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * TODO Sprint add-item-requests. + */ +@Data +@Builder +public class ItemRequestDto { + private long id; + private String description; + private LocalDateTime created; + private List items; +} diff --git a/server/src/main/java/ru/practicum/shareit/request/dto/NewItemRequestDto.java b/server/src/main/java/ru/practicum/shareit/request/dto/NewItemRequestDto.java new file mode 100644 index 0000000..647df5d --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/request/dto/NewItemRequestDto.java @@ -0,0 +1,17 @@ +package ru.practicum.shareit.request.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class NewItemRequestDto { + private String description; + private LocalDateTime created; +} diff --git a/server/src/main/java/ru/practicum/shareit/user/User.java b/server/src/main/java/ru/practicum/shareit/user/User.java new file mode 100644 index 0000000..1edc191 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/user/User.java @@ -0,0 +1,27 @@ +package ru.practicum.shareit.user; + + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * TODO Sprint add-controllers. + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "users") +@Builder +public class User { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @Column(name = "name") + private String name; + @Column(name = "email") + private String email; +} diff --git a/server/src/main/java/ru/practicum/shareit/user/UserController.java b/server/src/main/java/ru/practicum/shareit/user/UserController.java new file mode 100644 index 0000000..9a29e1c --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/user/UserController.java @@ -0,0 +1,47 @@ +package ru.practicum.shareit.user; + + +import lombok.AllArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import ru.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.user.dto.UpdateUserDto; +import ru.practicum.shareit.user.dto.UserDto; + +/** + * TODO Sprint add-controllers. + */ + +@RestController +@AllArgsConstructor +@RequestMapping(path = "/users") +@Validated +public class UserController { + private final UserService userService; + + @PostMapping + @ResponseStatus(HttpStatus.CREATED) + public UserDto createUser( @RequestBody NewUserDto userDto) { + return userService.create(userDto); + } + + @GetMapping("/{userId}") + public UserDto getUserById(@PathVariable("userId") Long userId) { + + return userService.getById(userId); + } + + @PatchMapping("/{userId}") + @ResponseStatus(HttpStatus.OK) + public UserDto updateUser(@PathVariable("userId") Long userId, @Validated @RequestBody(required = false) UpdateUserDto userDto) { + + return userService.update(userId, userDto); + } + + @DeleteMapping("/{userId}") + @ResponseStatus(HttpStatus.OK) + public void deleteUser(@PathVariable("userId") Long userId) { + userService.deleteUser(userId); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/user/UserMapper.java b/server/src/main/java/ru/practicum/shareit/user/UserMapper.java new file mode 100644 index 0000000..e920c5f --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/user/UserMapper.java @@ -0,0 +1,41 @@ +package ru.practicum.shareit.user; + +import ru.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.user.dto.UpdateUserDto; +import ru.practicum.shareit.user.dto.UserDto; + +public class UserMapper { + public static UserDto mapToUserDto(User user) { + return UserDto.builder() + .id(user.getId()) + .name(user.getName()) + .email(user.getEmail()) + .build(); + } + + public static User mapToUser(UserDto userDto) { + return User.builder() + .id(userDto.getId()) + .name(userDto.getName()) + .email(userDto.getEmail()) + .build(); + } + + public static User mapToNewUser(NewUserDto newUserDto) { + return User.builder() + .name(newUserDto.getName()) + .email(newUserDto.getEmail()) + .build(); + } + + public static User mapToUserUpdate(User user, UpdateUserDto updateUserDto) { + if (updateUserDto.hasEmail()) { + user.setEmail(updateUserDto.getEmail()); + } + if (updateUserDto.hasName()) { + user.setName(updateUserDto.getName()); + } + return user; + } + +} diff --git a/server/src/main/java/ru/practicum/shareit/user/UserRepository.java b/server/src/main/java/ru/practicum/shareit/user/UserRepository.java new file mode 100644 index 0000000..e303ab5 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/user/UserRepository.java @@ -0,0 +1,6 @@ +package ru.practicum.shareit.user; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UserRepository extends JpaRepository { +} diff --git a/server/src/main/java/ru/practicum/shareit/user/UserService.java b/server/src/main/java/ru/practicum/shareit/user/UserService.java new file mode 100644 index 0000000..3beaf8c --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/user/UserService.java @@ -0,0 +1,18 @@ +package ru.practicum.shareit.user; + +import org.springframework.stereotype.Service; +import ru.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.user.dto.UpdateUserDto; +import ru.practicum.shareit.user.dto.UserDto; + +@Service +public interface UserService { + + UserDto create(NewUserDto userDto); + + UserDto update(long id, UpdateUserDto updateUserDto); + + UserDto getById(long id); + + void deleteUser(long id); +} diff --git a/server/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java b/server/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java new file mode 100644 index 0000000..7f78138 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java @@ -0,0 +1,56 @@ +package ru.practicum.shareit.user; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import ru.practicum.shareit.exception.NotFoundException; +import ru.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.user.dto.UpdateUserDto; +import ru.practicum.shareit.user.dto.UserDto; + +@Service +@RequiredArgsConstructor +@Slf4j +public class UserServiceImpl implements UserService { + private final UserRepository userRepository; + + @Override + public UserDto create(NewUserDto userDto) { + log.debug("==> Creating user: {}", userDto); + User user = UserMapper.mapToNewUser(userDto); + userRepository.save(user); + log.debug("<== Creating user: {}", user); + return UserMapper.mapToUserDto(user); + + } + + @Override + public UserDto update(long id, UpdateUserDto updateUserDto) { + log.debug("==> Updating user: {}", id); + User oldUser = UserMapper.mapToUser(getById(id)); + User updateUser = UserMapper.mapToUserUpdate(oldUser, updateUserDto); + updateUser = userRepository.save(updateUser); + log.debug("<== Updating user: {}", id); + return UserMapper.mapToUserDto(updateUser); + } + + @Override + public UserDto getById(long id) { + User user = userRepository.findById(id) + .orElseThrow(() -> new NotFoundException("Пользователь с id = " + id + " не найден")); + return UserMapper.mapToUserDto(user); + } + + @Override + public void deleteUser(long id) { + log.debug("==> Deleting user: {}", id); + User user = userRepository.findById(id) + .orElseThrow(() -> new NotFoundException("Пользователь с id = " + id + " не найден")); + if (user != null) { + userRepository.delete(user); + log.debug("<== Deleting user: {}", id); + } + } + + +} diff --git a/server/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java b/server/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java new file mode 100644 index 0000000..ef39e8c --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java @@ -0,0 +1,14 @@ +package ru.practicum.shareit.user.dto; + + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class NewUserDto { + + private String name; + + private String email; +} diff --git a/server/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java b/server/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java new file mode 100644 index 0000000..5ae0572 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java @@ -0,0 +1,20 @@ +package ru.practicum.shareit.user.dto; + + +import lombok.Data; + +@Data +public class UpdateUserDto { + private String name; + + + private String email; + + public boolean hasName() { + return !(name == null || name.isBlank()); + } + + public boolean hasEmail() { + return !(email == null || email.isBlank()); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/user/dto/UserDto.java b/server/src/main/java/ru/practicum/shareit/user/dto/UserDto.java new file mode 100644 index 0000000..e70dd27 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/user/dto/UserDto.java @@ -0,0 +1,15 @@ +package ru.practicum.shareit.user.dto; + + +import lombok.*; + + +@Getter +@Setter +@ToString +@Builder +public class UserDto { + private Long id; + private String name; + private String email; +} diff --git a/server/src/main/resources/application.properties b/server/src/main/resources/application.properties new file mode 100644 index 0000000..d678861 --- /dev/null +++ b/server/src/main/resources/application.properties @@ -0,0 +1,11 @@ +server.port=9090 + +# ???? ???????????? ???????????? +spring.jpa.hibernate.ddl-auto=none +spring.jpa.properties.hibernate.format_sql=true +spring.sql.init.mode=always + +logging.level.org.springframework.orm.jpa=INFO +logging.level.org.springframework.transaction=INFO +logging.level.org.springframework.transaction.interceptor=TRACE +logging.level.org.springframework.orm.jpa.JpaTransactionManager=DEBUG diff --git a/server/src/main/resources/schema.sql b/server/src/main/resources/schema.sql new file mode 100644 index 0000000..0c0e5ed --- /dev/null +++ b/server/src/main/resources/schema.sql @@ -0,0 +1,46 @@ +drop table IF EXISTS users CASCADE; +drop table IF EXISTS items CASCADE; +drop table IF EXISTS requests CASCADE; +drop table IF EXISTS items CASCADE; +drop table IF EXISTS bookings CASCADE; +drop table IF EXISTS comments CASCADE; + + +CREATE TABLE IF NOT EXISTS users ( +id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, +name varchar, +email varchar UNIQUE NOT NULL +); + +CREATE TABLE IF NOT EXISTS requests +( +id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY NOT NULL, +description VARCHAR(360) NOT NULL, +requestor_id BIGINT REFERENCES users(id), +created TIMESTAMP WITHOUT TIME ZONE NOT NULL +); + + +CREATE TABLE IF NOT EXISTS items ( +id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, +name varchar NOT NULL, +description varchar NOT NULL, +available boolean, +owner_id BIGINT REFERENCES users (id), +request_id BIGINT REFERENCES requests (id) +); +CREATE TABLE IF NOT EXISTS bookings ( +id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, +start_time TIMESTAMP WITHOUT TIME ZONE NOT NULL, +end_time TIMESTAMP WITHOUT TIME ZONE NOT NULL, +item_id BIGINT REFERENCES items (id) ON DELETE CASCADE, +booker_id BIGINT REFERENCES users (id) ON DELETE CASCADE, +status varchar NOT NULL +); +CREATE TABLE IF NOT EXISTS comments ( +id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, +text varchar NOT NULL, +item_id BIGINT REFERENCES items (id) ON DELETE CASCADE, +author_id BIGINT REFERENCES users (id) ON DELETE CASCADE, +created TIMESTAMP WITHOUT TIME ZONE NOT NULL +); diff --git a/server/src/test/java/ru/practicum/shareit/ShareItTests.java b/server/src/test/java/ru/practicum/shareit/ShareItTests.java new file mode 100644 index 0000000..4d79052 --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/ShareItTests.java @@ -0,0 +1,13 @@ +package ru.practicum.shareit; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class ShareItTests { + + @Test + void contextLoads() { + } + +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index fa544b9..d678861 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,4 +1,4 @@ -server.port=8080 +server.port=9090 # ???? ???????????? ???????????? spring.jpa.hibernate.ddl-auto=none diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql index 47c804c..0c75e00 100644 --- a/src/main/resources/schema.sql +++ b/src/main/resources/schema.sql @@ -1,12 +1,22 @@ +drop table IF EXISTS users, + items, + requests, + items, + bookings, + comments; + + CREATE TABLE IF NOT EXISTS users ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar, email varchar UNIQUE NOT NULL ); -CREATE TABLE IF NOT EXISTS request ( -id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, -description varchar NOT NULL, -requestor_id BIGINT REFERENCES users (id) +CREATE TABLE IF NOT EXISTS requests +( +id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY NOT NULL, +description VARCHAR(360) NOT NULL, +requestor_id BIGINT REFERENCES users(id), +created TIMESTAMP WITHOUT TIME ZONE NOT NULL ); From 9ec298e768b83ed2ad5cf7d2cbb52410244a782e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 17:57:48 +0400 Subject: [PATCH 14/55] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D0=B0=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=82=D0=B7=2016=D0=BE=D0=B3=D0=BE=20=D1=81=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=BD=D1=82=D0=B0=20(=D0=B1=D0=B5=D0=B7=20=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D0=B2).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shareit/booking/BookingController.java | 55 ++++++++ .../shareit/booking/BookingStatus.java | 5 + .../shareit/booking/dto/BookingDto.java | 23 ++++ .../shareit/booking/dto/NewBookingDto.java | 21 ++++ .../shareit/comment/dto/CommentDto.java | 17 +++ .../shareit/comment/dto/NewCommentDto.java | 10 ++ .../java/ru/practicum/shareit/item/Item.java | 25 ++++ .../ru/practicum/shareit/item/ItemClient.java | 54 ++++++++ .../shareit/item/ItemController.java | 64 ++++++++++ .../practicum/shareit/item/dto/ItemDto.java | 21 ++++ .../item/dto/ItemResponseToRequestDto.java | 17 +++ .../shareit/item/dto/ItemWithCommentsDto.java | 24 ++++ .../shareit/item/dto/NewItemDto.java | 21 ++++ .../shareit/item/dto/UpdateItemDto.java | 22 ++++ .../shareit/request/ItemRequest.java | 34 +++++ .../shareit/request/ItemRequestClient.java | 39 ++++++ .../request/ItemRequestController.java | 35 ++++++ .../shareit/request/dto/ItemRequestDto.java | 20 +++ .../request/dto/NewItemRequestDto.java | 17 +++ .../java/ru/practicum/shareit/user/User.java | 20 +++ .../ru/practicum/shareit/user/UserClient.java | 43 +++++++ .../shareit/user/UserController.java | 52 ++++++++ .../shareit/user/dto/NewUserDto.java | 17 +++ .../shareit/user/dto/UpdateUserDto.java | 20 +++ .../practicum/shareit/user/dto/UserDto.java | 19 +++ pom.xml | 100 ++++----------- .../ru/practicum/shareit/booking/Booking.java | 39 ++++++ .../shareit/booking/BookingController.java | 57 +++++++++ .../shareit/booking/BookingMapper.java | 35 ++++++ .../shareit/booking/BookingRepository.java | 47 +++++++ .../shareit/booking/BookingService.java | 18 +++ .../shareit/booking/BookingServiceImpl.java | 107 ++++++++++++++++ .../shareit/booking/BookingState.java | 5 + .../shareit/booking/BookingStatus.java | 5 + .../shareit/booking/dto/BookingDto.java | 24 ++++ .../shareit/booking/dto/NewBookingDto.java | 15 +++ .../shareit/comment/CommentMapper.java | 32 +++++ .../shareit/comment/CommentRepository.java | 10 ++ .../shareit/comment/dto/CommentDto.java | 17 +++ .../shareit/comment/dto/NewCommentDto.java | 10 ++ .../shareit/comment/model/Comment.java | 39 ++++++ .../practicum/shareit/eror/ErrorHandler.java | 62 +++++++++ .../practicum/shareit/eror/ErrorResponse.java | 15 +++ .../shareit/exception/ConflictException.java | 7 ++ .../shareit/exception/NoAccessException.java | 7 ++ .../exception/NoDataFoundException.java | 7 ++ .../exception/NotAvailableItemException.java | 7 ++ .../shareit/exception/NotFoundException.java | 7 ++ .../exception/ValidationException.java | 7 ++ .../shareit/item/ItemController.java | 67 ++++++++++ .../ru/practicum/shareit/item/ItemMapper.java | 81 ++++++++++++ .../shareit/item/ItemRepository.java | 23 ++++ .../practicum/shareit/item/ItemService.java | 25 ++++ .../shareit/item/ItemServiceImpl.java | 119 ++++++++++++++++++ .../practicum/shareit/item/dto/ItemDto.java | 20 +++ .../item/dto/ItemResponseToRequestDto.java | 17 +++ .../shareit/item/dto/ItemWithCommentsDto.java | 24 ++++ .../shareit/item/dto/NewItemDto.java | 17 +++ .../shareit/item/dto/UpdateItemDto.java | 22 ++++ .../ru/practicum/shareit/item/model/Item.java | 37 ++++++ .../shareit/request/ItemRequest.java | 44 +++++++ .../request/ItemRequestController.java | 34 +++++ .../request/ItemRequestRepository.java | 10 ++ .../shareit/request/ItemRequestService.java | 14 +++ .../request/ItemRequestServiseImpl.java | 53 ++++++++ .../shareit/request/RequestMapper.java | 24 ++++ .../shareit/request/dto/ItemRequestDto.java | 20 +++ .../request/dto/NewItemRequestDto.java | 17 +++ .../java/ru/practicum/shareit/user/User.java | 27 ++++ .../shareit/user/UserController.java | 47 +++++++ .../ru/practicum/shareit/user/UserMapper.java | 41 ++++++ .../shareit/user/UserRepository.java | 6 + .../practicum/shareit/user/UserService.java | 18 +++ .../shareit/user/UserServiceImpl.java | 56 +++++++++ .../shareit/user/dto/NewUserDto.java | 14 +++ .../shareit/user/dto/UpdateUserDto.java | 20 +++ .../practicum/shareit/user/dto/UserDto.java | 15 +++ .../src/main/resources/application.properties | 11 ++ server/src/main/resources/schema.sql | 46 +++++++ .../ru/practicum/shareit/ShareItTests.java | 13 ++ src/main/resources/application.properties | 2 +- src/main/resources/schema.sql | 18 ++- 82 files changed, 2292 insertions(+), 84 deletions(-) create mode 100644 gateway/src/main/java/ru/practicum/shareit/booking/BookingController.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/booking/BookingStatus.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/item/Item.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/item/ItemClient.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/item/ItemController.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/item/dto/ItemResponseToRequestDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/request/ItemRequest.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/request/ItemRequestClient.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/request/ItemRequestController.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/request/dto/NewItemRequestDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/user/User.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/user/UserClient.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/user/UserController.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/user/dto/UserDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/booking/Booking.java create mode 100644 server/src/main/java/ru/practicum/shareit/booking/BookingController.java create mode 100644 server/src/main/java/ru/practicum/shareit/booking/BookingMapper.java create mode 100644 server/src/main/java/ru/practicum/shareit/booking/BookingRepository.java create mode 100644 server/src/main/java/ru/practicum/shareit/booking/BookingService.java create mode 100644 server/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java create mode 100644 server/src/main/java/ru/practicum/shareit/booking/BookingState.java create mode 100644 server/src/main/java/ru/practicum/shareit/booking/BookingStatus.java create mode 100644 server/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/comment/CommentMapper.java create mode 100644 server/src/main/java/ru/practicum/shareit/comment/CommentRepository.java create mode 100644 server/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/comment/model/Comment.java create mode 100644 server/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java create mode 100644 server/src/main/java/ru/practicum/shareit/eror/ErrorResponse.java create mode 100644 server/src/main/java/ru/practicum/shareit/exception/ConflictException.java create mode 100644 server/src/main/java/ru/practicum/shareit/exception/NoAccessException.java create mode 100644 server/src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java create mode 100644 server/src/main/java/ru/practicum/shareit/exception/NotAvailableItemException.java create mode 100644 server/src/main/java/ru/practicum/shareit/exception/NotFoundException.java create mode 100644 server/src/main/java/ru/practicum/shareit/exception/ValidationException.java create mode 100644 server/src/main/java/ru/practicum/shareit/item/ItemController.java create mode 100644 server/src/main/java/ru/practicum/shareit/item/ItemMapper.java create mode 100644 server/src/main/java/ru/practicum/shareit/item/ItemRepository.java create mode 100644 server/src/main/java/ru/practicum/shareit/item/ItemService.java create mode 100644 server/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java create mode 100644 server/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/item/dto/ItemResponseToRequestDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/item/model/Item.java create mode 100644 server/src/main/java/ru/practicum/shareit/request/ItemRequest.java create mode 100644 server/src/main/java/ru/practicum/shareit/request/ItemRequestController.java create mode 100644 server/src/main/java/ru/practicum/shareit/request/ItemRequestRepository.java create mode 100644 server/src/main/java/ru/practicum/shareit/request/ItemRequestService.java create mode 100644 server/src/main/java/ru/practicum/shareit/request/ItemRequestServiseImpl.java create mode 100644 server/src/main/java/ru/practicum/shareit/request/RequestMapper.java create mode 100644 server/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/request/dto/NewItemRequestDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/user/User.java create mode 100644 server/src/main/java/ru/practicum/shareit/user/UserController.java create mode 100644 server/src/main/java/ru/practicum/shareit/user/UserMapper.java create mode 100644 server/src/main/java/ru/practicum/shareit/user/UserRepository.java create mode 100644 server/src/main/java/ru/practicum/shareit/user/UserService.java create mode 100644 server/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java create mode 100644 server/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java create mode 100644 server/src/main/java/ru/practicum/shareit/user/dto/UserDto.java create mode 100644 server/src/main/resources/application.properties create mode 100644 server/src/main/resources/schema.sql create mode 100644 server/src/test/java/ru/practicum/shareit/ShareItTests.java diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/BookingController.java b/gateway/src/main/java/ru/practicum/shareit/booking/BookingController.java new file mode 100644 index 0000000..db8e820 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/booking/BookingController.java @@ -0,0 +1,55 @@ +package ru.practicum.shareit.booking; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import ru.practicum.shareit.booking.dto.BookingState; +import ru.practicum.shareit.booking.dto.NewBookingDto; + + +/** + * TODO Sprint add-bookings. + */ +@RestController +@RequestMapping(path = "/bookings") +@RequiredArgsConstructor +@Validated +public class BookingController { + private final BookingClient bookingClient; + + @PostMapping + @ResponseStatus(HttpStatus.CREATED) + public ResponseEntity create(@RequestBody @Valid NewBookingDto newBookingDto, @RequestHeader("X-Sharer-User-Id") @NotNull long userId) { + return bookingClient.create(newBookingDto, userId); + } + + @PatchMapping("/{bookingId}") + @ResponseStatus(HttpStatus.OK) + public ResponseEntity approveBooking(@RequestHeader("X-Sharer-User-Id") long userId, @PathVariable Long bookingId, @RequestParam Boolean approved) { + return bookingClient.approveBooking(userId, bookingId, approved); + } + + @GetMapping + @ResponseStatus(HttpStatus.OK) + public ResponseEntity findByBooker(@RequestHeader("X-Sharer-User-Id") @NotNull long userId, + @RequestParam(defaultValue = "ALL") BookingState state) { + return bookingClient.findByBooker(userId, state); + } + + @GetMapping("/owner") + @ResponseStatus(HttpStatus.OK) + public ResponseEntity findByOwner(@RequestHeader("X-Sharer-User-Id") @NotNull long userId, + @RequestParam(defaultValue = "ALL") BookingState state) { + return bookingClient.findByOwner(userId, state); + } + + @GetMapping("/{bookingId}") + @ResponseStatus(HttpStatus.OK) + public ResponseEntity findById(@RequestHeader("X-Sharer-User-Id") @NotNull long userId, @PathVariable @NotNull long bookingId) { + return bookingClient.findById(userId, bookingId); + } +} diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/BookingStatus.java b/gateway/src/main/java/ru/practicum/shareit/booking/BookingStatus.java new file mode 100644 index 0000000..ee6f096 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/booking/BookingStatus.java @@ -0,0 +1,5 @@ +package ru.practicum.shareit.booking; + +public enum BookingStatus { + WAITING, APPROVED, REJECTED, CANCELED +} diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java b/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java new file mode 100644 index 0000000..46d8f48 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java @@ -0,0 +1,23 @@ +package ru.practicum.shareit.booking.dto; + +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.booking.BookingStatus; +import ru.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.user.dto.UserDto; + +import java.time.LocalDateTime; + +/** + * TODO Sprint add-bookings. + */ +@Data +@Builder +public class BookingDto { + private Long id; + private LocalDateTime start; + private LocalDateTime end; + private ItemDto item; + private UserDto booker; + private BookingStatus status; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java b/gateway/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java new file mode 100644 index 0000000..f1a92fd --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java @@ -0,0 +1,21 @@ +package ru.practicum.shareit.booking.dto; + +import jakarta.validation.constraints.FutureOrPresent; +import jakarta.validation.constraints.NotNull; +import lombok.Builder; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +@Builder +public class NewBookingDto { + @NotNull + private LocalDateTime start; + + @NotNull + private LocalDateTime end; + + @NotNull + private Long itemId; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java b/gateway/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java new file mode 100644 index 0000000..a9a154d --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java @@ -0,0 +1,17 @@ +package ru.practicum.shareit.comment.dto; + +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.item.Item; + +import java.time.Instant; + +@Data +@Builder +public class CommentDto { + private Long id; + private String text; + private Item item; + private String authorName; + private Instant created; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java b/gateway/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java new file mode 100644 index 0000000..56968a0 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java @@ -0,0 +1,10 @@ +package ru.practicum.shareit.comment.dto; + +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class NewCommentDto { + @NotBlank + private String text; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/item/Item.java b/gateway/src/main/java/ru/practicum/shareit/item/Item.java new file mode 100644 index 0000000..76374b5 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/item/Item.java @@ -0,0 +1,25 @@ +package ru.practicum.shareit.item; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import ru.practicum.shareit.request.ItemRequest; +import ru.practicum.shareit.user.User; + +/** + * TODO Sprint add-controllers. + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Item { + private Long id; + private String name; + private String description; + private boolean available; + private User owner; + private ItemRequest request; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/item/ItemClient.java b/gateway/src/main/java/ru/practicum/shareit/item/ItemClient.java new file mode 100644 index 0000000..7f0148e --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/item/ItemClient.java @@ -0,0 +1,54 @@ +package ru.practicum.shareit.item; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.http.ResponseEntity; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.stereotype.Service; +import org.springframework.web.util.DefaultUriBuilderFactory; +import ru.practicum.shareit.client.BaseClient; +import ru.practicum.shareit.comment.dto.NewCommentDto; +import ru.practicum.shareit.item.dto.NewItemDto; +import ru.practicum.shareit.item.dto.UpdateItemDto; + +import java.util.Map; + +@Service +public class ItemClient extends BaseClient { + private static final String API_PREFIX = "/items"; + + @Autowired + public ItemClient(@Value("${shareit-server.url}") String serverUrl, RestTemplateBuilder builder) { + super( + builder + .uriTemplateHandler(new DefaultUriBuilderFactory(serverUrl + API_PREFIX)) + .requestFactory(() -> new HttpComponentsClientHttpRequestFactory()) + .build() + ); + } + + public ResponseEntity create(NewItemDto itemDto, Long userId) { + return post("",userId,itemDto); + } + + public ResponseEntity update(Long itemId, UpdateItemDto itemDto, Long userId) { + return patch("/"+itemId,userId,itemDto); + } + + public ResponseEntity getById(Long itemId) { + return get("/"+itemId); + } + + public ResponseEntity getAllItemsByOwner(Long userId) { + return get("",userId); + } + + public ResponseEntity search(String searchText) { + return get("/search?text"+searchText); + } + + public ResponseEntity createComment(NewCommentDto newCommentDto, long itemId, long userId) { + return post("/"+itemId+"/comment",userId,newCommentDto); + } +} diff --git a/gateway/src/main/java/ru/practicum/shareit/item/ItemController.java b/gateway/src/main/java/ru/practicum/shareit/item/ItemController.java new file mode 100644 index 0000000..f493873 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/item/ItemController.java @@ -0,0 +1,64 @@ +package ru.practicum.shareit.item; + +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import ru.practicum.shareit.comment.dto.NewCommentDto; +import ru.practicum.shareit.item.dto.NewItemDto; +import ru.practicum.shareit.item.dto.UpdateItemDto; + + +/** + * TODO Sprint add-controllers. + */ +@RestController +@RequestMapping("/items") +@RequiredArgsConstructor +@Validated +public class ItemController { + private final ItemClient itemClient; + + @PostMapping + @ResponseStatus(HttpStatus.CREATED) + public ResponseEntity create(@Valid @RequestBody NewItemDto itemDto, @RequestHeader("X-Sharer-User-Id") Long userId) { + + return itemClient.create(itemDto, userId); + } + + @PatchMapping("/{itemId}") + public ResponseEntity update(@PathVariable("itemId") Long itemId, + @RequestBody UpdateItemDto itemDto, + @RequestHeader(value = "X-Sharer-User-Id") Long userId) { + + return itemClient.update(itemId, itemDto, userId); + } + + @GetMapping("/{itemId}") + public ResponseEntity getItemById(@PathVariable("itemId") Long itemId) { + + return itemClient.getById(itemId); + } + + @GetMapping + public ResponseEntity getUserItems(@RequestHeader("X-Sharer-User-Id") Long userId) { + + return itemClient.getAllItemsByOwner(userId); + } + + @GetMapping("/search") + public ResponseEntity search(@RequestParam("text") String searchText) { + + return itemClient.search(searchText); + } + + @PostMapping("/{itemId}/comment") + @ResponseStatus(HttpStatus.CREATED) + public ResponseEntity createComment(@RequestHeader("X-Sharer-User-Id") long userId, + @PathVariable("itemId") long itemId, + @RequestBody @Valid NewCommentDto newCommentDto) { + return itemClient.createComment(newCommentDto, itemId, userId); + } +} diff --git a/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java b/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java new file mode 100644 index 0000000..fb8eaf2 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java @@ -0,0 +1,21 @@ +package ru.practicum.shareit.item.dto; + +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.user.dto.UserDto; + + +/** + * TODO Sprint add-controllers. + */ +@Data +@Builder +public class ItemDto { + private Long id; + private String name; + private String description; + private Boolean available; + private UserDto owner; + private Long requestId; + +} diff --git a/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemResponseToRequestDto.java b/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemResponseToRequestDto.java new file mode 100644 index 0000000..610d1f3 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemResponseToRequestDto.java @@ -0,0 +1,17 @@ +package ru.practicum.shareit.item.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class ItemResponseToRequestDto { + private long id; + private long ownerId; + private String name; + +} diff --git a/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java b/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java new file mode 100644 index 0000000..496b7e2 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java @@ -0,0 +1,24 @@ +package ru.practicum.shareit.item.dto; + +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.booking.dto.BookingDto; +import ru.practicum.shareit.comment.dto.CommentDto; +import ru.practicum.shareit.user.dto.UserDto; + +import java.util.List; + +@Data +@Builder +public class ItemWithCommentsDto { + private long id; + + private String name; + private String description; + private Boolean available; + private UserDto owner; + private BookingDto lastBooking; + private BookingDto nextBooking; + private List comments; + private Long requestId; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java b/gateway/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java new file mode 100644 index 0000000..f8139d5 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java @@ -0,0 +1,21 @@ +package ru.practicum.shareit.item.dto; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.user.User; + +@Data +@Builder +public class NewItemDto { + @NotBlank(message = "название предмета не может быть пустым") + private String name; + @NotBlank(message = "описание не должно быть пустым") + private String description; + @NotNull(message = "не установлен статус доступности бронирования") + private Boolean available; + private User owner; + private Long requestId; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java b/gateway/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java new file mode 100644 index 0000000..ead598d --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java @@ -0,0 +1,22 @@ +package ru.practicum.shareit.item.dto; + +import lombok.Data; + +@Data +public class UpdateItemDto { + private String name; + private String description; + private Boolean available; + + public boolean hasName() { + return !(name == null || name.isBlank()); + } + + public boolean hasDescription() { + return !(description == null || description.isBlank()); + } + + public boolean hasAvailable() { + return Boolean.FALSE.equals(available); + } +} diff --git a/gateway/src/main/java/ru/practicum/shareit/request/ItemRequest.java b/gateway/src/main/java/ru/practicum/shareit/request/ItemRequest.java new file mode 100644 index 0000000..299ccd2 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/request/ItemRequest.java @@ -0,0 +1,34 @@ +package ru.practicum.shareit.request; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import ru.practicum.shareit.item.Item; +import ru.practicum.shareit.user.User; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + + +/** + * TODO Sprint add-item-requests. + */ + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ItemRequest { + + private long id; + private String description; + private User requestor; + private LocalDateTime created; + @Builder.Default + private List responsesList = new ArrayList<>(); + + +} diff --git a/gateway/src/main/java/ru/practicum/shareit/request/ItemRequestClient.java b/gateway/src/main/java/ru/practicum/shareit/request/ItemRequestClient.java new file mode 100644 index 0000000..4f35300 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/request/ItemRequestClient.java @@ -0,0 +1,39 @@ +package ru.practicum.shareit.request; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.http.ResponseEntity; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.stereotype.Service; +import org.springframework.web.util.DefaultUriBuilderFactory; +import ru.practicum.shareit.client.BaseClient; +import ru.practicum.shareit.request.dto.NewItemRequestDto; + +@Service +public class ItemRequestClient extends BaseClient { + + private static final String API_PREFIX = "/requests"; + + @Autowired + public ItemRequestClient(@Value("${shareit-server.url}") String serverUrl, RestTemplateBuilder builder) { + super( + builder + .uriTemplateHandler(new DefaultUriBuilderFactory(serverUrl + API_PREFIX)) + .requestFactory(() -> new HttpComponentsClientHttpRequestFactory()) + .build() + ); + } + + public ResponseEntity create(NewItemRequestDto newItemRequestDto, Long userId) { + return post("",userId,newItemRequestDto); + } + + public ResponseEntity getByUser(Long userId) { + return get("",userId); + } + + public ResponseEntity getById(Long requestId) { + return get("/"+requestId); + } +} diff --git a/gateway/src/main/java/ru/practicum/shareit/request/ItemRequestController.java b/gateway/src/main/java/ru/practicum/shareit/request/ItemRequestController.java new file mode 100644 index 0000000..edb69cb --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/request/ItemRequestController.java @@ -0,0 +1,35 @@ +package ru.practicum.shareit.request; + +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import ru.practicum.shareit.request.dto.ItemRequestDto; +import ru.practicum.shareit.request.dto.NewItemRequestDto; + +import java.util.List; + +/** + * TODO Sprint add-item-requests. + */ +@RestController +@RequestMapping(path = "/requests") +@RequiredArgsConstructor +public class ItemRequestController { + private final ItemRequestClient requestClient; + + @PostMapping + public ResponseEntity create(@RequestBody NewItemRequestDto newItemRequestDto, + @RequestHeader("X-Sharer-User-Id") Long userId){ + return requestClient.create(newItemRequestDto,userId); + } + + @GetMapping + public ResponseEntity getRequestsByUser(@RequestHeader("X-Sharer-User-Id") Long userId){ + return requestClient.getByUser(userId); + } + @GetMapping("/{requestId}") + public ResponseEntity getRequestById(@PathVariable Long requestId) { + return requestClient.getById(requestId); + } + +} diff --git a/gateway/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java b/gateway/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java new file mode 100644 index 0000000..64a69dc --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java @@ -0,0 +1,20 @@ +package ru.practicum.shareit.request.dto; + +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.item.dto.ItemResponseToRequestDto; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * TODO Sprint add-item-requests. + */ +@Data +@Builder +public class ItemRequestDto { + private long id; + private String description; + private LocalDateTime created; + private List items; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/request/dto/NewItemRequestDto.java b/gateway/src/main/java/ru/practicum/shareit/request/dto/NewItemRequestDto.java new file mode 100644 index 0000000..647df5d --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/request/dto/NewItemRequestDto.java @@ -0,0 +1,17 @@ +package ru.practicum.shareit.request.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class NewItemRequestDto { + private String description; + private LocalDateTime created; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/user/User.java b/gateway/src/main/java/ru/practicum/shareit/user/User.java new file mode 100644 index 0000000..c0687c8 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/user/User.java @@ -0,0 +1,20 @@ +package ru.practicum.shareit.user; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * TODO Sprint add-controllers. + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class User { + private Long id; + private String name; + private String email; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/user/UserClient.java b/gateway/src/main/java/ru/practicum/shareit/user/UserClient.java new file mode 100644 index 0000000..f151af6 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/user/UserClient.java @@ -0,0 +1,43 @@ +package ru.practicum.shareit.user; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.http.ResponseEntity; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.stereotype.Service; +import org.springframework.web.util.DefaultUriBuilderFactory; +import ru.practicum.shareit.client.BaseClient; +import ru.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.user.dto.UpdateUserDto; + +@Service +public class UserClient extends BaseClient { + private static final String API_PREFIX = "/users"; + + @Autowired + public UserClient(@Value("${shareit-server.url}") String serverUrl, RestTemplateBuilder builder){ + super( + builder + .uriTemplateHandler(new DefaultUriBuilderFactory(serverUrl + API_PREFIX)) + .requestFactory(() -> new HttpComponentsClientHttpRequestFactory()) + .build() + ); + } + + public ResponseEntity create(NewUserDto userDto) { + return post("",userDto); + } + + public ResponseEntity getById(Long userId) { + return get("/" + userId); + } + + public ResponseEntity update(Long userId, UpdateUserDto userDto) { + return patch("/" + userId,userId,userDto); + } + + public ResponseEntity deleteUser(Long userId) { + return delete( "/" + userId,userId); + } +} diff --git a/gateway/src/main/java/ru/practicum/shareit/user/UserController.java b/gateway/src/main/java/ru/practicum/shareit/user/UserController.java new file mode 100644 index 0000000..8677d5a --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/user/UserController.java @@ -0,0 +1,52 @@ +package ru.practicum.shareit.user; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; +import lombok.AllArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import ru.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.user.dto.UpdateUserDto; +import ru.practicum.shareit.user.dto.UserDto; + +/** + * TODO Sprint add-controllers. + */ + +@RestController +@AllArgsConstructor +@RequestMapping(path = "/users") +@Validated +public class UserController { + private final UserClient userClient; + + @PostMapping + @ResponseStatus(HttpStatus.CREATED) + public ResponseEntity createUser(@Valid @RequestBody @NotNull NewUserDto userDto) { + return userClient.create(userDto); + } + + @GetMapping("/{userId}") + public ResponseEntity getUserById(@PathVariable("userId") @NotNull @Positive Long userId) { + + return userClient.getById(userId); + } + + @PatchMapping("/{userId}") + @ResponseStatus(HttpStatus.OK) + public ResponseEntity updateUser(@PathVariable("userId") @NotNull @Positive Long userId, @Validated @RequestBody(required = false) @NotNull UpdateUserDto userDto) { + + return userClient.update(userId, userDto); + } + + @DeleteMapping("/{userId}") + @ResponseStatus(HttpStatus.OK) + public ResponseEntity deleteUser(@PathVariable("userId") @NotNull @Positive Long userId) { + return userClient.deleteUser(userId); + + } +} + diff --git a/gateway/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java b/gateway/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java new file mode 100644 index 0000000..f95ecb8 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java @@ -0,0 +1,17 @@ +package ru.practicum.shareit.user.dto; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class NewUserDto { + @NotBlank(message = "Имя не может быть пустым") + private String name; + + @NotBlank(message = "email не может быть пустым") + @Email(message = "Указан некорректный формат email") + private String email; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java b/gateway/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java new file mode 100644 index 0000000..bd9e396 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java @@ -0,0 +1,20 @@ +package ru.practicum.shareit.user.dto; + +import jakarta.validation.constraints.Email; +import lombok.Data; + +@Data +public class UpdateUserDto { + private String name; + + @Email(message = "Указан некорректный формат email") + private String email; + + public boolean hasName() { + return !(name == null || name.isBlank()); + } + + public boolean hasEmail() { + return !(email == null || email.isBlank()); + } +} diff --git a/gateway/src/main/java/ru/practicum/shareit/user/dto/UserDto.java b/gateway/src/main/java/ru/practicum/shareit/user/dto/UserDto.java new file mode 100644 index 0000000..46410f9 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/user/dto/UserDto.java @@ -0,0 +1,19 @@ +package ru.practicum.shareit.user.dto; + +import jakarta.validation.constraints.Email; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + + +@Getter +@Setter +@ToString +@Builder +public class UserDto { + private Long id; + private String name; + @Email(message = "Электронная почта должна содержать символ @") + private String email; +} diff --git a/pom.xml b/pom.xml index e1f3a93..79cba37 100644 --- a/pom.xml +++ b/pom.xml @@ -11,6 +11,7 @@ ru.practicum shareit + pom 0.0.1-SNAPSHOT ShareIt @@ -19,76 +20,29 @@ 21 - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-configuration-processor - true - - - - org.postgresql - postgresql - runtime - - - - org.projectlombok - lombok - true - - - - com.h2database - h2 - - - - org.springframework.boot - spring-boot-starter-test - test - - - org.springframework.boot - spring-boot-starter-validation - - + + gateway + server + - - - src/main/resources - true - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - org.projectlombok - lombok - - - - - + + org.springframework.boot + spring-boot-maven-plugin + + + true + + + + org.projectlombok + lombok + + + + org.apache.maven.plugins maven-surefire-plugin @@ -235,17 +189,5 @@ - - coverage - - - - org.jacoco - jacoco-maven-plugin - - - - - - + \ No newline at end of file diff --git a/server/src/main/java/ru/practicum/shareit/booking/Booking.java b/server/src/main/java/ru/practicum/shareit/booking/Booking.java new file mode 100644 index 0000000..c94f8e2 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/booking/Booking.java @@ -0,0 +1,39 @@ +package ru.practicum.shareit.booking; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; + + +import java.time.LocalDateTime; + +/** + * TODO Sprint add-bookings. + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "bookings") +@Builder +public class Booking { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + @Column(name = "start_time") + private LocalDateTime start; + @Column(name = "end_time") + private LocalDateTime end; + @ManyToOne + @JoinColumn(name = "item_id") + private Item item; + @ManyToOne + @JoinColumn(name = "booker_id") + private User booker; + @Enumerated(EnumType.STRING) + private BookingStatus status; +} diff --git a/server/src/main/java/ru/practicum/shareit/booking/BookingController.java b/server/src/main/java/ru/practicum/shareit/booking/BookingController.java new file mode 100644 index 0000000..6240045 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/booking/BookingController.java @@ -0,0 +1,57 @@ +package ru.practicum.shareit.booking; + +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.data.web.PageableDefault; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; +import ru.practicum.shareit.booking.dto.BookingDto; +import ru.practicum.shareit.booking.dto.NewBookingDto; + +import java.util.List; + + +/** + * TODO Sprint add-bookings. + */ +@RestController +@RequestMapping(path = "/bookings") +@RequiredArgsConstructor +public class BookingController { + private final BookingService bookingService; + + @PostMapping + @ResponseStatus(HttpStatus.CREATED) + public BookingDto create(@RequestBody NewBookingDto newBookingDto, @RequestHeader("X-Sharer-User-Id") long userId) { + return bookingService.create(newBookingDto, userId); + } + + @PatchMapping("/{bookingId}") + @ResponseStatus(HttpStatus.OK) + public BookingDto approveBooking(@RequestHeader("X-Sharer-User-Id") long userId, @PathVariable long bookingId, @RequestParam boolean approved) { + return bookingService.approveBooking(userId, bookingId, approved); + } + + @GetMapping + @ResponseStatus(HttpStatus.OK) + public List findByBooker(@RequestHeader("X-Sharer-User-Id") long userId, + @RequestParam(defaultValue = "ALL") BookingState state, + @PageableDefault(size = 20, sort = "start", direction = Sort.Direction.DESC) Pageable pageable) { + return bookingService.findByBooker(userId, state, pageable).getContent(); + } + + @GetMapping("/owner") + @ResponseStatus(HttpStatus.OK) + public List findByOwner(@RequestHeader("X-Sharer-User-Id") long userId, + @RequestParam(defaultValue = "ALL") BookingState state, + @PageableDefault(size = 20, sort = "start", direction = Sort.Direction.DESC) Pageable pageable) { + return bookingService.findByOwner(userId, state, pageable).getContent(); + } + + @GetMapping("/{bookingId}") + @ResponseStatus(HttpStatus.OK) + public BookingDto findById(@RequestHeader("X-Sharer-User-Id") long userId, @PathVariable long bookingId) { + return bookingService.findById(userId, bookingId); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/booking/BookingMapper.java b/server/src/main/java/ru/practicum/shareit/booking/BookingMapper.java new file mode 100644 index 0000000..dd91f9f --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/booking/BookingMapper.java @@ -0,0 +1,35 @@ +package ru.practicum.shareit.booking; + + +import ru.practicum.shareit.booking.dto.BookingDto; +import ru.practicum.shareit.booking.dto.NewBookingDto; +import ru.practicum.shareit.item.ItemMapper; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; +import ru.practicum.shareit.user.UserMapper; + + +public class BookingMapper { + public static BookingDto mapToBookingDto(Booking booking) { + return BookingDto.builder() + .id(booking.getId()) + .start(booking.getStart()) + .end(booking.getEnd()) + .item(ItemMapper.mapToItemDto(booking.getItem())) + .booker(UserMapper.mapToUserDto(booking.getBooker())) + .status(booking.getStatus()) + .build(); + } + + public static Booking mapToNewBookingDto(NewBookingDto newBookingDto, User user, Item item) { + return Booking.builder() + .start(newBookingDto.getStart()) + .end(newBookingDto.getEnd()) + .item(item) + .booker(user) + .status(BookingStatus.WAITING) + .build(); + } + + +} diff --git a/server/src/main/java/ru/practicum/shareit/booking/BookingRepository.java b/server/src/main/java/ru/practicum/shareit/booking/BookingRepository.java new file mode 100644 index 0000000..2bf7bd5 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/booking/BookingRepository.java @@ -0,0 +1,47 @@ +package ru.practicum.shareit.booking; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Optional; + +public interface BookingRepository extends JpaRepository { + Page findByBooker_Id(long bookerId, Pageable pageable); + + Page findByItemOwner_Id(long ownerId, Pageable pageable); + + @Query("SELECT b FROM Booking b " + + " WHERE b.booker.id = :bookerId " + + " AND b.start <= :now " + + " AND b.end >= :now " + + " AND b.status = ru.practicum.shareit.booking.BookingStatus.APPROVED") + Page findCurrentByBooker(@Param("bookerId") long bookerId, @Param("now") LocalDateTime now, Pageable pageable); + + @Query("SELECT b FROM Booking b " + + " WHERE b.item.owner.id = :ownerId " + + " AND b.start <= :now " + + " AND b.end >= :now " + + " AND b.status = ru.practicum.shareit.booking.BookingStatus.APPROVED") + Page findCurrentByOwner(@Param("ownerId") long ownerId, @Param("now") LocalDateTime now, Pageable pageable); + + Page findByBooker_IdAndEndBefore(long bookerId, LocalDateTime now, Pageable pageable); + + Page findByItemOwner_IdAndEndBefore(long ownerId, LocalDateTime now, Pageable pageable); + + Page findByBooker_IdAndStartAfter(long bookerId, LocalDateTime now, Pageable pageable); + + Page findByItemOwner_IdAndStartAfter(long ownerId, LocalDateTime now, Pageable pageable); + + Page findByBooker_IdAndStatus(long bookerId, BookingStatus status, Pageable pageable); + + Page findByItemOwner_IdAndStatus(long ownerId, BookingStatus status, Pageable pageable); + + List findByItem_idAndStatus(long itemId, BookingStatus status); + + Optional findByItem_idAndBooker_id(long itemId, long bookerId); +} diff --git a/server/src/main/java/ru/practicum/shareit/booking/BookingService.java b/server/src/main/java/ru/practicum/shareit/booking/BookingService.java new file mode 100644 index 0000000..8d4c2bb --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/booking/BookingService.java @@ -0,0 +1,18 @@ +package ru.practicum.shareit.booking; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import ru.practicum.shareit.booking.dto.BookingDto; +import ru.practicum.shareit.booking.dto.NewBookingDto; + +public interface BookingService { + BookingDto create(NewBookingDto newBookingDto, long bookerId); + + BookingDto approveBooking(long userId, long bookingId, boolean approved); + + Page findByBooker(long bookerId, BookingState state, Pageable pageable); + + Page findByOwner(long ownerId, BookingState state, Pageable pageable); + + BookingDto findById(long userId, long bookingId); +} diff --git a/server/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java b/server/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java new file mode 100644 index 0000000..6067f84 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java @@ -0,0 +1,107 @@ +package ru.practicum.shareit.booking; + + +import lombok.RequiredArgsConstructor; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import ru.practicum.shareit.booking.dto.BookingDto; +import ru.practicum.shareit.booking.dto.NewBookingDto; +import ru.practicum.shareit.exception.NoAccessException; +import ru.practicum.shareit.exception.NotAvailableItemException; +import ru.practicum.shareit.exception.NotFoundException; +import ru.practicum.shareit.item.ItemRepository; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; +import ru.practicum.shareit.user.UserRepository; + +import java.time.LocalDateTime; + +@Service +@RequiredArgsConstructor +public class BookingServiceImpl implements BookingService { + private final BookingRepository bookingRepository; + private final ItemRepository itemRepository; + private final UserRepository userRepository; + + @Override + public BookingDto create(NewBookingDto newBookingDto, long bookerId) { + User booker = userRepository.findById(bookerId) + .orElseThrow(() -> new NotFoundException("Пользователь не найден")); + Item item = itemRepository.findById(newBookingDto.getItemId()) + .orElseThrow(() -> new NotFoundException("Вещь не найдена")); + if (!item.isAvailable()) { + throw new NotAvailableItemException("Вещь недоступна для бронирования"); + + } + Booking booking = BookingMapper.mapToNewBookingDto(newBookingDto, booker, item); + bookingRepository.save(booking); + return BookingMapper.mapToBookingDto(booking); + } + + @Override + public BookingDto approveBooking(long userId, long bookingId, boolean approved) { + Booking booking = bookingRepository.findById(bookingId) + .orElseThrow(() -> new NotFoundException("Бронирование не найдено")); + long ownerId = booking.getItem().getOwner().getId(); + if (userId != ownerId) { + throw new NoAccessException("Только владелец вещи имеет доступ к изменению статуса бронирования"); + } + booking.setStatus(approved ? BookingStatus.APPROVED : BookingStatus.REJECTED); + bookingRepository.save(booking); + return BookingMapper.mapToBookingDto(booking); + } + + @Override + public Page findByBooker(long bookerId, BookingState state, Pageable pageable) { + if (!userExistById(bookerId)) { + throw new NotFoundException("Пользователь не найден"); + } + LocalDateTime timeNow = LocalDateTime.now(); + Page page = switch (state) { + case CURRENT -> bookingRepository.findCurrentByBooker(bookerId, timeNow, pageable); + case PAST -> bookingRepository.findByBooker_IdAndEndBefore(bookerId, timeNow, pageable); + case FUTURE -> bookingRepository.findByBooker_IdAndStartAfter(bookerId, timeNow, pageable); + case WAITING -> bookingRepository.findByBooker_IdAndStatus(bookerId, BookingStatus.WAITING, pageable); + case REJECTED -> bookingRepository.findByBooker_IdAndStatus(bookerId, BookingStatus.REJECTED, pageable); + case ALL -> bookingRepository.findByBooker_Id(bookerId, pageable); + default -> throw new NotFoundException("Некорректный параметр state"); + }; + return page.map(BookingMapper::mapToBookingDto); + } + + @Override + public Page findByOwner(long ownerId, BookingState state, Pageable pageable) { + if (!userExistById(ownerId)) { + throw new NotFoundException("Пользователь не найден"); + } + LocalDateTime timeNow = LocalDateTime.now(); + Page page = switch (state) { + case CURRENT -> bookingRepository.findCurrentByOwner(ownerId, timeNow, pageable); + case PAST -> bookingRepository.findByItemOwner_IdAndEndBefore(ownerId, timeNow, pageable); + case FUTURE -> bookingRepository.findByItemOwner_IdAndStartAfter(ownerId, timeNow, pageable); + case WAITING -> bookingRepository.findByItemOwner_IdAndStatus(ownerId, BookingStatus.WAITING, pageable); + case REJECTED -> bookingRepository.findByItemOwner_IdAndStatus(ownerId, BookingStatus.REJECTED, pageable); + case ALL -> bookingRepository.findByItemOwner_Id(ownerId, pageable); + default -> throw new NotFoundException("Некорректный параметр state"); + }; + return page.map(BookingMapper::mapToBookingDto); + } + + @Override + public BookingDto findById(long userId, long bookingId) { + Booking booking = bookingRepository.findById(bookingId) + .orElseThrow(() -> new NotFoundException("Бронирование не найдено")); + long ownerId = booking.getItem().getOwner().getId(); + if (booking.getBooker().getId() != userId && ownerId != userId) { + throw new NoAccessException("No access to booking"); + } + return BookingMapper.mapToBookingDto(booking); + } + + public boolean userExistById(long userId) { + return userRepository.existsById(userId); + } + +} diff --git a/server/src/main/java/ru/practicum/shareit/booking/BookingState.java b/server/src/main/java/ru/practicum/shareit/booking/BookingState.java new file mode 100644 index 0000000..1ffe7c9 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/booking/BookingState.java @@ -0,0 +1,5 @@ +package ru.practicum.shareit.booking; + +public enum BookingState { + CURRENT, PAST, FUTURE, WAITING, REJECTED, ALL +} diff --git a/server/src/main/java/ru/practicum/shareit/booking/BookingStatus.java b/server/src/main/java/ru/practicum/shareit/booking/BookingStatus.java new file mode 100644 index 0000000..ee6f096 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/booking/BookingStatus.java @@ -0,0 +1,5 @@ +package ru.practicum.shareit.booking; + +public enum BookingStatus { + WAITING, APPROVED, REJECTED, CANCELED +} diff --git a/server/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java b/server/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java new file mode 100644 index 0000000..81f314e --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java @@ -0,0 +1,24 @@ +package ru.practicum.shareit.booking.dto; + +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.booking.BookingStatus; +import ru.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.user.dto.UserDto; + +import java.time.LocalDateTime; + +/** + * TODO Sprint add-bookings. + */ +@Data +@Builder + +public class BookingDto { + private Long id; + private LocalDateTime start; + private LocalDateTime end; + private ItemDto item; + private UserDto booker; + private BookingStatus status; +} diff --git a/server/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java b/server/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java new file mode 100644 index 0000000..ca3f91e --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java @@ -0,0 +1,15 @@ +package ru.practicum.shareit.booking.dto; + + +import lombok.Builder; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +@Builder +public class NewBookingDto { + private LocalDateTime start; + private LocalDateTime end; + private Long itemId; +} diff --git a/server/src/main/java/ru/practicum/shareit/comment/CommentMapper.java b/server/src/main/java/ru/practicum/shareit/comment/CommentMapper.java new file mode 100644 index 0000000..056001f --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/comment/CommentMapper.java @@ -0,0 +1,32 @@ +package ru.practicum.shareit.comment; + +import lombok.NoArgsConstructor; +import ru.practicum.shareit.comment.dto.CommentDto; +import ru.practicum.shareit.comment.dto.NewCommentDto; +import ru.practicum.shareit.comment.model.Comment; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; + +import java.time.Instant; + +@NoArgsConstructor +public class CommentMapper { + public static Comment mapToNewComment(NewCommentDto newCommentDto, Item item, User user) { + return Comment.builder() + .text(newCommentDto.getText()) + .created(Instant.now()) + .item(item) + .author(user) + .build(); + } + + public static CommentDto mapToCommentDto(Comment comment) { + return CommentDto.builder() + .id(comment.getId()) + .text(comment.getText()) + .authorName(comment.getAuthor().getName()) + .item(comment.getItem()) + .created(comment.getCreated()) + .build(); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/comment/CommentRepository.java b/server/src/main/java/ru/practicum/shareit/comment/CommentRepository.java new file mode 100644 index 0000000..ad69c08 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/comment/CommentRepository.java @@ -0,0 +1,10 @@ +package ru.practicum.shareit.comment; + +import org.springframework.data.jpa.repository.JpaRepository; +import ru.practicum.shareit.comment.model.Comment; + +import java.util.List; + +public interface CommentRepository extends JpaRepository { + List findByItem_id(long itemId); +} diff --git a/server/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java b/server/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java new file mode 100644 index 0000000..da53c85 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java @@ -0,0 +1,17 @@ +package ru.practicum.shareit.comment.dto; + +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.item.model.Item; + +import java.time.Instant; + +@Data +@Builder +public class CommentDto { + private Long id; + private String text; + private Item item; + private String authorName; + private Instant created; +} diff --git a/server/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java b/server/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java new file mode 100644 index 0000000..553956e --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java @@ -0,0 +1,10 @@ +package ru.practicum.shareit.comment.dto; + + +import lombok.Data; + +@Data +public class NewCommentDto { + + private String text; +} diff --git a/server/src/main/java/ru/practicum/shareit/comment/model/Comment.java b/server/src/main/java/ru/practicum/shareit/comment/model/Comment.java new file mode 100644 index 0000000..cdf3e2d --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/comment/model/Comment.java @@ -0,0 +1,39 @@ +package ru.practicum.shareit.comment.model; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; + +import java.time.Instant; + +@Entity +@Table(name = "comments") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Comment { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + Long id; + + @Column(name = "text") + + String text; + + @ManyToOne(cascade = CascadeType.PERSIST) + @JoinColumn(name = "item_id") + Item item; + + @ManyToOne + @JoinColumn(name = "author_id") + User author; + + @Column(name = "created") + Instant created; + +} diff --git a/server/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java b/server/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java new file mode 100644 index 0000000..4257b59 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java @@ -0,0 +1,62 @@ +package ru.practicum.shareit.eror; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import ru.practicum.shareit.exception.*; + +@RestControllerAdvice +@Slf4j +public class ErrorHandler { + @ExceptionHandler + @ResponseStatus(HttpStatus.BAD_REQUEST) + public ErrorResponse handleValidationError(final ValidationException e) { + log.error("Ошибка валидации {}", e.getMessage()); + return new ErrorResponse( + "Ошибка валидации", + e.getMessage() + ); + } + + @ExceptionHandler + @ResponseStatus(HttpStatus.NOT_FOUND) + public ErrorResponse handleNotFound(final NotFoundException e) { + log.error("Искомый объект не найдена {}", e.getMessage()); + return new ErrorResponse( + "Искомый объект не найден", + e.getMessage() + ); + } + + @ExceptionHandler + @ResponseStatus(HttpStatus.BAD_REQUEST) + public ErrorResponse handleNoDataFound(final NoDataFoundException e) { + log.error("Ошибка заполнения данных {}", e.getMessage()); + return new ErrorResponse( + "Ошибка заполнения данных", + e.getMessage() + ); + } + + @ExceptionHandler + @ResponseStatus(HttpStatus.BAD_REQUEST) + public ErrorResponse handleAvailableError(final NotAvailableItemException e) { + log.error("Ошибка с доступностью вещи {}", e.getMessage()); + return new ErrorResponse( + "Ошибка с доступностью вещи", + e.getMessage() + ); + } + + @ExceptionHandler + @ResponseStatus(HttpStatus.BAD_REQUEST) + public ErrorResponse handleNoAccessException(final NoAccessException e) { + log.error("Ошибка доступа {}", e.getMessage()); + return new ErrorResponse( + "Ошибка доступа", + e.getMessage() + ); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/eror/ErrorResponse.java b/server/src/main/java/ru/practicum/shareit/eror/ErrorResponse.java new file mode 100644 index 0000000..d2e6225 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/eror/ErrorResponse.java @@ -0,0 +1,15 @@ +package ru.practicum.shareit.eror; + +import lombok.Getter; + +@Getter +public class ErrorResponse { + String error; + String description; + + public ErrorResponse(String error, String description) { + this.error = error; + this.description = description; + } + +} diff --git a/server/src/main/java/ru/practicum/shareit/exception/ConflictException.java b/server/src/main/java/ru/practicum/shareit/exception/ConflictException.java new file mode 100644 index 0000000..7885123 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/exception/ConflictException.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.exception; + +public class ConflictException extends RuntimeException { + public ConflictException(String message) { + super(message); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/exception/NoAccessException.java b/server/src/main/java/ru/practicum/shareit/exception/NoAccessException.java new file mode 100644 index 0000000..7c24051 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/exception/NoAccessException.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.exception; + +public class NoAccessException extends RuntimeException { + public NoAccessException(String message) { + super(message); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java b/server/src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java new file mode 100644 index 0000000..dbef4b4 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.exception; + +public class NoDataFoundException extends RuntimeException { + public NoDataFoundException(String message) { + super(message); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/exception/NotAvailableItemException.java b/server/src/main/java/ru/practicum/shareit/exception/NotAvailableItemException.java new file mode 100644 index 0000000..cb02e2e --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/exception/NotAvailableItemException.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.exception; + +public class NotAvailableItemException extends RuntimeException { + public NotAvailableItemException(String message) { + super(message); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/exception/NotFoundException.java b/server/src/main/java/ru/practicum/shareit/exception/NotFoundException.java new file mode 100644 index 0000000..98610d2 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/exception/NotFoundException.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.exception; + +public class NotFoundException extends RuntimeException { + public NotFoundException(String message) { + super(message); + } +} \ No newline at end of file diff --git a/server/src/main/java/ru/practicum/shareit/exception/ValidationException.java b/server/src/main/java/ru/practicum/shareit/exception/ValidationException.java new file mode 100644 index 0000000..59043da --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/exception/ValidationException.java @@ -0,0 +1,7 @@ +package ru.practicum.shareit.exception; + +public class ValidationException extends RuntimeException { + public ValidationException(String message) { + super(message); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/item/ItemController.java b/server/src/main/java/ru/practicum/shareit/item/ItemController.java new file mode 100644 index 0000000..43405b9 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/item/ItemController.java @@ -0,0 +1,67 @@ +package ru.practicum.shareit.item; + + +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import ru.practicum.shareit.comment.dto.CommentDto; +import ru.practicum.shareit.comment.dto.NewCommentDto; +import ru.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.item.dto.ItemWithCommentsDto; +import ru.practicum.shareit.item.dto.NewItemDto; +import ru.practicum.shareit.item.dto.UpdateItemDto; + +import java.util.List; + +/** + * TODO Sprint add-controllers. + */ +@RestController +@RequestMapping("/items") +@RequiredArgsConstructor +@Validated +public class ItemController { + private final ItemService itemService; + + @PostMapping + @ResponseStatus(HttpStatus.CREATED) + public ItemDto create( @RequestBody NewItemDto itemDto, @RequestHeader("X-Sharer-User-Id") Long userId) { + + return itemService.create(itemDto, userId); + } + + @PatchMapping("/{itemId}") + public ItemDto update(@PathVariable("itemId") Long itemId, + @RequestBody UpdateItemDto itemDto, + @RequestHeader(value = "X-Sharer-User-Id") Long userId) { + + return itemService.update(itemId, itemDto, userId); + } + + @GetMapping("/{itemId}") + public ItemWithCommentsDto getItemById(@PathVariable("itemId") Long itemId) { + + return itemService.get(itemId); + } + + @GetMapping + public List getUserItems(@RequestHeader("X-Sharer-User-Id") Long userId) { + + return itemService.getAllItemsByOwner(userId); + } + + @GetMapping("/search") + public List search(@RequestParam("text") String searchText) { + + return itemService.search(searchText); + } + + @PostMapping("/{itemId}/comment") + @ResponseStatus(HttpStatus.CREATED) + public CommentDto createComment(@RequestHeader("X-Sharer-User-Id") long userId, + @PathVariable("itemId") long itemId, + @RequestBody NewCommentDto newCommentDto) { + return itemService.createComment(newCommentDto, itemId, userId); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/item/ItemMapper.java b/server/src/main/java/ru/practicum/shareit/item/ItemMapper.java new file mode 100644 index 0000000..4e24206 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/item/ItemMapper.java @@ -0,0 +1,81 @@ +package ru.practicum.shareit.item; + + +import ru.practicum.shareit.booking.Booking; +import ru.practicum.shareit.booking.BookingMapper; +import ru.practicum.shareit.comment.CommentMapper; +import ru.practicum.shareit.comment.model.Comment; +import ru.practicum.shareit.item.dto.*; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.request.ItemRequest; +import ru.practicum.shareit.user.User; +import ru.practicum.shareit.user.UserMapper; + +import java.util.List; + + +public class ItemMapper { + public static ItemDto mapToItemDto(Item item) { + Long requestId = item.getRequest() == null ? null : item.getRequest().getId(); + return ItemDto.builder() + .id(item.getId()) + .name(item.getName()) + .description(item.getDescription()) + .available(item.isAvailable()) + .owner(UserMapper.mapToUserDto(item.getOwner())) + .requestId(requestId) + .build(); + } + + public static Item mapToNewItem(NewItemDto newItemDto, User owner) { + ItemRequest request = newItemDto.getRequestId() == null ? null :ItemRequest.builder().id(newItemDto.getRequestId()).build(); + + return Item.builder() + .name(newItemDto.getName()) + .description(newItemDto.getDescription()) + .available(newItemDto.getAvailable()) + .owner(owner) + .request(request) + .build(); + } + + public static Item mapToUpdateItemDto(Item item, UpdateItemDto updateItemDto) { + if (updateItemDto.hasName()) { + item.setName(updateItemDto.getName()); + } + if (updateItemDto.hasDescription()) { + item.setDescription(updateItemDto.getDescription()); + } + if (updateItemDto.hasAvailable()) { + item.setAvailable(updateItemDto.getAvailable()); + } + return item; + + } + + public static ItemWithCommentsDto mapToItemWithCommentsDto(Item item, List bookings, List comments) { + ItemWithCommentsDto itemWithCommentsDto = ItemWithCommentsDto.builder() + .id(item.getId()) + .name(item.getName()) + .description(item.getDescription()) + .available(item.isAvailable()) + .comments(comments.stream().map(CommentMapper::mapToCommentDto).toList()) + .owner(UserMapper.mapToUserDto(item.getOwner())) + .build(); + if (!bookings.isEmpty()) { + itemWithCommentsDto.setLastBooking(BookingMapper.mapToBookingDto(bookings.getLast())); + if (bookings.size() > 1) { + itemWithCommentsDto.setNextBooking(BookingMapper.mapToBookingDto(bookings.get(bookings.size() - 2))); + } + } + return itemWithCommentsDto; + } + public static ItemResponseToRequestDto itemResponseToRequestDto(Item item) { + return ItemResponseToRequestDto.builder() + .id(item.getId()) + .name(item.getName()) + .ownerId(item.getOwner().getId()) + .build(); + } +} + diff --git a/server/src/main/java/ru/practicum/shareit/item/ItemRepository.java b/server/src/main/java/ru/practicum/shareit/item/ItemRepository.java new file mode 100644 index 0000000..e93c564 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/item/ItemRepository.java @@ -0,0 +1,23 @@ +package ru.practicum.shareit.item; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; + +import java.util.List; + + +public interface ItemRepository extends JpaRepository { + List findByOwner(User owner); + + @Query("select it from Item it " + + "where it.available = true and " + + "(upper(it.name) like upper(concat('%', ?1, '%')) " + + " or upper(it.description) like upper(concat('%', ?1, '%')))") + List searchItem(String text); + + +} + + diff --git a/server/src/main/java/ru/practicum/shareit/item/ItemService.java b/server/src/main/java/ru/practicum/shareit/item/ItemService.java new file mode 100644 index 0000000..44dac1d --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/item/ItemService.java @@ -0,0 +1,25 @@ +package ru.practicum.shareit.item; + +import ru.practicum.shareit.comment.dto.CommentDto; +import ru.practicum.shareit.comment.dto.NewCommentDto; +import ru.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.item.dto.ItemWithCommentsDto; +import ru.practicum.shareit.item.dto.NewItemDto; +import ru.practicum.shareit.item.dto.UpdateItemDto; + +import java.util.List; + +public interface ItemService { + + ItemDto create(NewItemDto newItemDto, long userId); + + ItemDto update(long itemId, UpdateItemDto itemDto, long userID); + + ItemWithCommentsDto get(long itemId); + + List getAllItemsByOwner(long ownerId); + + List search(String searchText); + + CommentDto createComment(NewCommentDto newCommentDto, long itemId, long userId); +} diff --git a/server/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java b/server/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java new file mode 100644 index 0000000..3215e11 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java @@ -0,0 +1,119 @@ +package ru.practicum.shareit.item; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import ru.practicum.shareit.booking.Booking; +import ru.practicum.shareit.booking.BookingRepository; +import ru.practicum.shareit.booking.BookingStatus; +import ru.practicum.shareit.comment.CommentMapper; +import ru.practicum.shareit.comment.CommentRepository; +import ru.practicum.shareit.comment.dto.CommentDto; +import ru.practicum.shareit.comment.dto.NewCommentDto; +import ru.practicum.shareit.comment.model.Comment; +import ru.practicum.shareit.exception.NoAccessException; +import ru.practicum.shareit.exception.NotFoundException; +import ru.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.item.dto.ItemWithCommentsDto; +import ru.practicum.shareit.item.dto.NewItemDto; +import ru.practicum.shareit.item.dto.UpdateItemDto; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; +import ru.practicum.shareit.user.UserMapper; +import ru.practicum.shareit.user.UserService; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +@Service +@RequiredArgsConstructor +@Slf4j +public class ItemServiceImpl implements ItemService { + private final ItemRepository itemRepository; + private final UserService userService; + private final BookingRepository bookingRepository; + private final CommentRepository commentRepository; + + @Override + public ItemDto create(NewItemDto newItemDto, long userId) { + log.debug("==> Creating item: {}", newItemDto); + User owner = UserMapper.mapToUser(userService.getById(userId)); + Item item = ItemMapper.mapToNewItem(newItemDto, owner); + itemRepository.save(item); + log.debug("<== Creating item: {}", newItemDto); + return ItemMapper.mapToItemDto(item); + } + + @Override + public ItemDto update(long itemId, UpdateItemDto itemDto, long userID) { + log.debug("==> Updating item: {}", itemDto); + Item oldItem = itemRepository.findById(itemId) + .orElseThrow(() -> new NotFoundException("Предмет не найден")); + + if (userID == oldItem.getOwner().getId()) { + Item updateItem = ItemMapper.mapToUpdateItemDto(oldItem, itemDto); + itemRepository.save(updateItem); + log.debug("<== Updating item: {}", itemDto); + return ItemMapper.mapToItemDto(updateItem); + } + throw new NotFoundException("У вас недостаточно прав для обновления вещи"); + } + + + @Override + public ItemWithCommentsDto get(long itemId) { + log.debug("==> get item by id: {}", itemId); + Item item = itemRepository.findById(itemId) + .orElseThrow(() -> new NotFoundException("Предмет не найден")); + List bookings = bookingRepository.findByItem_idAndStatus(itemId, BookingStatus.WAITING); + List comments = commentRepository.findByItem_id(itemId); + ItemWithCommentsDto itemWithCommentsDto = ItemMapper.mapToItemWithCommentsDto(item, bookings, comments); + log.debug("<== get item by id: {}", item); + return itemWithCommentsDto; + } + + @Override + public List getAllItemsByOwner(long ownerId) { + log.debug("==> get user items by user id: {}", ownerId); + return itemRepository.findByOwner(UserMapper.mapToUser(userService.getById(ownerId))) + .stream() + .map(ItemMapper::mapToItemDto) + .toList(); + + + } + + @Override + public List search(String searchText) { + log.debug("==> search items: {}", searchText); + List foundItems = new ArrayList<>(); + if (searchText.isEmpty() || searchText.isBlank() || searchText == null) { + return foundItems; + } + foundItems = itemRepository.searchItem(searchText) + .stream() + .map(ItemMapper::mapToItemDto) + .toList(); + log.debug("<== search items: {}", searchText); + return foundItems; + } + + @Override + public CommentDto createComment(NewCommentDto newCommentDto, long itemId, long userId) { + log.debug("==> create comment for item: {}", itemId); + Booking booking = bookingRepository.findByItem_idAndBooker_id(itemId, userId) + .orElseThrow(() -> new NotFoundException("Бронирование для предмета не найдено, невозможно добавить комментарий")); + if (booking.getEnd().isAfter(LocalDateTime.now())) { + throw new NoAccessException("Срок бронирования предмета еще не закончился"); + } + User commentAuthor = UserMapper.mapToUser(userService.getById(userId)); + Item item = itemRepository.findById(itemId) + .orElseThrow(() -> new NotFoundException("Предмет не найден")); + Comment comment = CommentMapper.mapToNewComment(newCommentDto, item, commentAuthor); + commentRepository.save(comment); + log.debug("<== create comment for item: {}", itemId); + return CommentMapper.mapToCommentDto(comment); + } + +} diff --git a/server/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java b/server/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java new file mode 100644 index 0000000..e1b6fe7 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java @@ -0,0 +1,20 @@ +package ru.practicum.shareit.item.dto; + +import lombok.*; +import ru.practicum.shareit.user.dto.UserDto; + + +/** + * TODO Sprint add-controllers. + */ +@Data +@Builder +public class ItemDto { + private Long id; + private String name; + private String description; + private Boolean available; + private UserDto owner; + private Long requestId; + +} diff --git a/server/src/main/java/ru/practicum/shareit/item/dto/ItemResponseToRequestDto.java b/server/src/main/java/ru/practicum/shareit/item/dto/ItemResponseToRequestDto.java new file mode 100644 index 0000000..610d1f3 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/item/dto/ItemResponseToRequestDto.java @@ -0,0 +1,17 @@ +package ru.practicum.shareit.item.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class ItemResponseToRequestDto { + private long id; + private long ownerId; + private String name; + +} diff --git a/server/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java b/server/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java new file mode 100644 index 0000000..107996b --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java @@ -0,0 +1,24 @@ +package ru.practicum.shareit.item.dto; + +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.booking.dto.BookingDto; +import ru.practicum.shareit.comment.dto.CommentDto; +import ru.practicum.shareit.user.dto.UserDto; + +import java.util.List; + +@Data +@Builder +public class ItemWithCommentsDto { + private long id; + + private String name; + private String description; + private Boolean available; + private BookingDto lastBooking; + private BookingDto nextBooking; + private UserDto owner; + private List comments; + private Long requestId; +} diff --git a/server/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java b/server/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java new file mode 100644 index 0000000..e0a511a --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java @@ -0,0 +1,17 @@ +package ru.practicum.shareit.item.dto; + + +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.request.ItemRequest; +import ru.practicum.shareit.user.User; + +@Data +@Builder +public class NewItemDto { + private String name; + private String description; + private Boolean available; + private User owner; + private Long requestId; +} diff --git a/server/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java b/server/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java new file mode 100644 index 0000000..ead598d --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java @@ -0,0 +1,22 @@ +package ru.practicum.shareit.item.dto; + +import lombok.Data; + +@Data +public class UpdateItemDto { + private String name; + private String description; + private Boolean available; + + public boolean hasName() { + return !(name == null || name.isBlank()); + } + + public boolean hasDescription() { + return !(description == null || description.isBlank()); + } + + public boolean hasAvailable() { + return Boolean.FALSE.equals(available); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/item/model/Item.java b/server/src/main/java/ru/practicum/shareit/item/model/Item.java new file mode 100644 index 0000000..bb46597 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/item/model/Item.java @@ -0,0 +1,37 @@ +package ru.practicum.shareit.item.model; + + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import ru.practicum.shareit.request.ItemRequest; +import ru.practicum.shareit.user.User; + +/** + * TODO Sprint add-controllers. + */ +@Data +@Entity +@Table(name = "items") +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Item { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @Column(name = "name", nullable = false) + private String name; + @Column(name = "description", nullable = false) + private String description; + @Column(name = "available") + private boolean available; + @ManyToOne + @JoinColumn(name = "owner_id") + private User owner; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "request_id") + private ItemRequest request; +} diff --git a/server/src/main/java/ru/practicum/shareit/request/ItemRequest.java b/server/src/main/java/ru/practicum/shareit/request/ItemRequest.java new file mode 100644 index 0000000..2abac13 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/request/ItemRequest.java @@ -0,0 +1,44 @@ +package ru.practicum.shareit.request; + +import jakarta.persistence.*; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.CreationTimestamp; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + + +/** + * TODO Sprint add-item-requests. + */ + +@Entity +@Table(name = "requests") +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ItemRequest { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + @Column(name = "description") + private String description; + @OneToOne + @JoinColumn(name = "requestor_id") + private User requestor; + @Column(name = "created") + private LocalDateTime created; + @OneToMany(mappedBy = "request", fetch = FetchType.EAGER) + @Builder.Default + private List responsesList = new ArrayList<>(); + + +} diff --git a/server/src/main/java/ru/practicum/shareit/request/ItemRequestController.java b/server/src/main/java/ru/practicum/shareit/request/ItemRequestController.java new file mode 100644 index 0000000..65dd62d --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/request/ItemRequestController.java @@ -0,0 +1,34 @@ +package ru.practicum.shareit.request; + +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; +import ru.practicum.shareit.request.dto.ItemRequestDto; +import ru.practicum.shareit.request.dto.NewItemRequestDto; + +import java.util.List; + +/** + * TODO Sprint add-item-requests. + */ +@RestController +@RequestMapping(path = "/requests") +@RequiredArgsConstructor +public class ItemRequestController { + private final ItemRequestService requestService; + + @PostMapping + public ItemRequestDto create(@RequestBody NewItemRequestDto newItemRequestDto, + @RequestHeader("X-Sharer-User-Id") Long userId){ + return requestService.create(newItemRequestDto,userId); + } + + @GetMapping + public List getRequestsByUser(@RequestHeader("X-Sharer-User-Id") Long userId){ + return requestService.getByUser(userId); + } + @GetMapping("/{requestId}") + public ItemRequestDto getRequestById(@PathVariable Long requestId) { + return requestService.getById(requestId); + } + +} diff --git a/server/src/main/java/ru/practicum/shareit/request/ItemRequestRepository.java b/server/src/main/java/ru/practicum/shareit/request/ItemRequestRepository.java new file mode 100644 index 0000000..9db13ad --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/request/ItemRequestRepository.java @@ -0,0 +1,10 @@ +package ru.practicum.shareit.request; + +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface ItemRequestRepository extends JpaRepository { + + List getAllByRequestorId(long userId); +} diff --git a/server/src/main/java/ru/practicum/shareit/request/ItemRequestService.java b/server/src/main/java/ru/practicum/shareit/request/ItemRequestService.java new file mode 100644 index 0000000..4273003 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/request/ItemRequestService.java @@ -0,0 +1,14 @@ +package ru.practicum.shareit.request; + +import ru.practicum.shareit.request.dto.ItemRequestDto; +import ru.practicum.shareit.request.dto.NewItemRequestDto; + +import java.util.List; + +public interface ItemRequestService { + ItemRequestDto create(NewItemRequestDto newItemRequestDto, long userId); + + List getByUser(long id); + + ItemRequestDto getById(long id); +} diff --git a/server/src/main/java/ru/practicum/shareit/request/ItemRequestServiseImpl.java b/server/src/main/java/ru/practicum/shareit/request/ItemRequestServiseImpl.java new file mode 100644 index 0000000..f61db77 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/request/ItemRequestServiseImpl.java @@ -0,0 +1,53 @@ +package ru.practicum.shareit.request; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import ru.practicum.shareit.exception.NotFoundException; +import ru.practicum.shareit.request.dto.ItemRequestDto; +import ru.practicum.shareit.request.dto.NewItemRequestDto; +import ru.practicum.shareit.user.User; +import ru.practicum.shareit.user.UserRepository; + +import java.util.Comparator; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class ItemRequestServiseImpl implements ItemRequestService { + private final ItemRequestRepository requestRepository; + private final UserRepository userRepository; + + @Override + public ItemRequestDto create(NewItemRequestDto newItemRequestDto, long userId) { + ItemRequest itemRequest = RequestMapper.toModel(newItemRequestDto); + itemRequest.setRequestor(getUserById(userId)); + return RequestMapper.toDto(requestRepository.save(itemRequest)); + } + + @Override + public List getByUser(long id) { + getUserById(id); + List requests = requestRepository.getAllByRequestorId(id); + return requests.stream() + .map(RequestMapper::toDto) + .sorted(Comparator.comparing(ItemRequestDto::getCreated).reversed()) + .toList(); + } + + @Override + public ItemRequestDto getById(long id){ + return RequestMapper.toDto(getRequestById(id)); + } + + + private User getUserById(long id) { + return userRepository.findById(id) + .orElseThrow(() -> new NotFoundException("Пользователь с id = " + id + " не найден")); + } + + private ItemRequest getRequestById(long id) { + return requestRepository.findById(id) + .orElseThrow(() -> new NotFoundException("Запрос вещи с id = " + id + " не найден")); + + } +} diff --git a/server/src/main/java/ru/practicum/shareit/request/RequestMapper.java b/server/src/main/java/ru/practicum/shareit/request/RequestMapper.java new file mode 100644 index 0000000..fb34a2b --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/request/RequestMapper.java @@ -0,0 +1,24 @@ +package ru.practicum.shareit.request; + +import ru.practicum.shareit.item.ItemMapper; +import ru.practicum.shareit.request.dto.ItemRequestDto; +import ru.practicum.shareit.request.dto.NewItemRequestDto; + +import java.time.LocalDateTime; + +public class RequestMapper { + public static ItemRequest toModel(NewItemRequestDto requestCreateDto) { + return ItemRequest.builder() + .description(requestCreateDto.getDescription()) + .created(LocalDateTime.now()) + .build(); + } + public static ItemRequestDto toDto(ItemRequest request) { + return ItemRequestDto.builder() + .id(request.getId()) + .description(request.getDescription()) + .created(request.getCreated()) + .items(request.getResponsesList().stream().map(ItemMapper::itemResponseToRequestDto).toList()) + .build(); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java b/server/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java new file mode 100644 index 0000000..64a69dc --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java @@ -0,0 +1,20 @@ +package ru.practicum.shareit.request.dto; + +import lombok.Builder; +import lombok.Data; +import ru.practicum.shareit.item.dto.ItemResponseToRequestDto; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * TODO Sprint add-item-requests. + */ +@Data +@Builder +public class ItemRequestDto { + private long id; + private String description; + private LocalDateTime created; + private List items; +} diff --git a/server/src/main/java/ru/practicum/shareit/request/dto/NewItemRequestDto.java b/server/src/main/java/ru/practicum/shareit/request/dto/NewItemRequestDto.java new file mode 100644 index 0000000..647df5d --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/request/dto/NewItemRequestDto.java @@ -0,0 +1,17 @@ +package ru.practicum.shareit.request.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class NewItemRequestDto { + private String description; + private LocalDateTime created; +} diff --git a/server/src/main/java/ru/practicum/shareit/user/User.java b/server/src/main/java/ru/practicum/shareit/user/User.java new file mode 100644 index 0000000..1edc191 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/user/User.java @@ -0,0 +1,27 @@ +package ru.practicum.shareit.user; + + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * TODO Sprint add-controllers. + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "users") +@Builder +public class User { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @Column(name = "name") + private String name; + @Column(name = "email") + private String email; +} diff --git a/server/src/main/java/ru/practicum/shareit/user/UserController.java b/server/src/main/java/ru/practicum/shareit/user/UserController.java new file mode 100644 index 0000000..9a29e1c --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/user/UserController.java @@ -0,0 +1,47 @@ +package ru.practicum.shareit.user; + + +import lombok.AllArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import ru.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.user.dto.UpdateUserDto; +import ru.practicum.shareit.user.dto.UserDto; + +/** + * TODO Sprint add-controllers. + */ + +@RestController +@AllArgsConstructor +@RequestMapping(path = "/users") +@Validated +public class UserController { + private final UserService userService; + + @PostMapping + @ResponseStatus(HttpStatus.CREATED) + public UserDto createUser( @RequestBody NewUserDto userDto) { + return userService.create(userDto); + } + + @GetMapping("/{userId}") + public UserDto getUserById(@PathVariable("userId") Long userId) { + + return userService.getById(userId); + } + + @PatchMapping("/{userId}") + @ResponseStatus(HttpStatus.OK) + public UserDto updateUser(@PathVariable("userId") Long userId, @Validated @RequestBody(required = false) UpdateUserDto userDto) { + + return userService.update(userId, userDto); + } + + @DeleteMapping("/{userId}") + @ResponseStatus(HttpStatus.OK) + public void deleteUser(@PathVariable("userId") Long userId) { + userService.deleteUser(userId); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/user/UserMapper.java b/server/src/main/java/ru/practicum/shareit/user/UserMapper.java new file mode 100644 index 0000000..e920c5f --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/user/UserMapper.java @@ -0,0 +1,41 @@ +package ru.practicum.shareit.user; + +import ru.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.user.dto.UpdateUserDto; +import ru.practicum.shareit.user.dto.UserDto; + +public class UserMapper { + public static UserDto mapToUserDto(User user) { + return UserDto.builder() + .id(user.getId()) + .name(user.getName()) + .email(user.getEmail()) + .build(); + } + + public static User mapToUser(UserDto userDto) { + return User.builder() + .id(userDto.getId()) + .name(userDto.getName()) + .email(userDto.getEmail()) + .build(); + } + + public static User mapToNewUser(NewUserDto newUserDto) { + return User.builder() + .name(newUserDto.getName()) + .email(newUserDto.getEmail()) + .build(); + } + + public static User mapToUserUpdate(User user, UpdateUserDto updateUserDto) { + if (updateUserDto.hasEmail()) { + user.setEmail(updateUserDto.getEmail()); + } + if (updateUserDto.hasName()) { + user.setName(updateUserDto.getName()); + } + return user; + } + +} diff --git a/server/src/main/java/ru/practicum/shareit/user/UserRepository.java b/server/src/main/java/ru/practicum/shareit/user/UserRepository.java new file mode 100644 index 0000000..e303ab5 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/user/UserRepository.java @@ -0,0 +1,6 @@ +package ru.practicum.shareit.user; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UserRepository extends JpaRepository { +} diff --git a/server/src/main/java/ru/practicum/shareit/user/UserService.java b/server/src/main/java/ru/practicum/shareit/user/UserService.java new file mode 100644 index 0000000..3beaf8c --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/user/UserService.java @@ -0,0 +1,18 @@ +package ru.practicum.shareit.user; + +import org.springframework.stereotype.Service; +import ru.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.user.dto.UpdateUserDto; +import ru.practicum.shareit.user.dto.UserDto; + +@Service +public interface UserService { + + UserDto create(NewUserDto userDto); + + UserDto update(long id, UpdateUserDto updateUserDto); + + UserDto getById(long id); + + void deleteUser(long id); +} diff --git a/server/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java b/server/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java new file mode 100644 index 0000000..7f78138 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java @@ -0,0 +1,56 @@ +package ru.practicum.shareit.user; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import ru.practicum.shareit.exception.NotFoundException; +import ru.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.user.dto.UpdateUserDto; +import ru.practicum.shareit.user.dto.UserDto; + +@Service +@RequiredArgsConstructor +@Slf4j +public class UserServiceImpl implements UserService { + private final UserRepository userRepository; + + @Override + public UserDto create(NewUserDto userDto) { + log.debug("==> Creating user: {}", userDto); + User user = UserMapper.mapToNewUser(userDto); + userRepository.save(user); + log.debug("<== Creating user: {}", user); + return UserMapper.mapToUserDto(user); + + } + + @Override + public UserDto update(long id, UpdateUserDto updateUserDto) { + log.debug("==> Updating user: {}", id); + User oldUser = UserMapper.mapToUser(getById(id)); + User updateUser = UserMapper.mapToUserUpdate(oldUser, updateUserDto); + updateUser = userRepository.save(updateUser); + log.debug("<== Updating user: {}", id); + return UserMapper.mapToUserDto(updateUser); + } + + @Override + public UserDto getById(long id) { + User user = userRepository.findById(id) + .orElseThrow(() -> new NotFoundException("Пользователь с id = " + id + " не найден")); + return UserMapper.mapToUserDto(user); + } + + @Override + public void deleteUser(long id) { + log.debug("==> Deleting user: {}", id); + User user = userRepository.findById(id) + .orElseThrow(() -> new NotFoundException("Пользователь с id = " + id + " не найден")); + if (user != null) { + userRepository.delete(user); + log.debug("<== Deleting user: {}", id); + } + } + + +} diff --git a/server/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java b/server/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java new file mode 100644 index 0000000..ef39e8c --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java @@ -0,0 +1,14 @@ +package ru.practicum.shareit.user.dto; + + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class NewUserDto { + + private String name; + + private String email; +} diff --git a/server/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java b/server/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java new file mode 100644 index 0000000..5ae0572 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java @@ -0,0 +1,20 @@ +package ru.practicum.shareit.user.dto; + + +import lombok.Data; + +@Data +public class UpdateUserDto { + private String name; + + + private String email; + + public boolean hasName() { + return !(name == null || name.isBlank()); + } + + public boolean hasEmail() { + return !(email == null || email.isBlank()); + } +} diff --git a/server/src/main/java/ru/practicum/shareit/user/dto/UserDto.java b/server/src/main/java/ru/practicum/shareit/user/dto/UserDto.java new file mode 100644 index 0000000..e70dd27 --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/user/dto/UserDto.java @@ -0,0 +1,15 @@ +package ru.practicum.shareit.user.dto; + + +import lombok.*; + + +@Getter +@Setter +@ToString +@Builder +public class UserDto { + private Long id; + private String name; + private String email; +} diff --git a/server/src/main/resources/application.properties b/server/src/main/resources/application.properties new file mode 100644 index 0000000..d678861 --- /dev/null +++ b/server/src/main/resources/application.properties @@ -0,0 +1,11 @@ +server.port=9090 + +# ???? ???????????? ???????????? +spring.jpa.hibernate.ddl-auto=none +spring.jpa.properties.hibernate.format_sql=true +spring.sql.init.mode=always + +logging.level.org.springframework.orm.jpa=INFO +logging.level.org.springframework.transaction=INFO +logging.level.org.springframework.transaction.interceptor=TRACE +logging.level.org.springframework.orm.jpa.JpaTransactionManager=DEBUG diff --git a/server/src/main/resources/schema.sql b/server/src/main/resources/schema.sql new file mode 100644 index 0000000..0c0e5ed --- /dev/null +++ b/server/src/main/resources/schema.sql @@ -0,0 +1,46 @@ +drop table IF EXISTS users CASCADE; +drop table IF EXISTS items CASCADE; +drop table IF EXISTS requests CASCADE; +drop table IF EXISTS items CASCADE; +drop table IF EXISTS bookings CASCADE; +drop table IF EXISTS comments CASCADE; + + +CREATE TABLE IF NOT EXISTS users ( +id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, +name varchar, +email varchar UNIQUE NOT NULL +); + +CREATE TABLE IF NOT EXISTS requests +( +id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY NOT NULL, +description VARCHAR(360) NOT NULL, +requestor_id BIGINT REFERENCES users(id), +created TIMESTAMP WITHOUT TIME ZONE NOT NULL +); + + +CREATE TABLE IF NOT EXISTS items ( +id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, +name varchar NOT NULL, +description varchar NOT NULL, +available boolean, +owner_id BIGINT REFERENCES users (id), +request_id BIGINT REFERENCES requests (id) +); +CREATE TABLE IF NOT EXISTS bookings ( +id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, +start_time TIMESTAMP WITHOUT TIME ZONE NOT NULL, +end_time TIMESTAMP WITHOUT TIME ZONE NOT NULL, +item_id BIGINT REFERENCES items (id) ON DELETE CASCADE, +booker_id BIGINT REFERENCES users (id) ON DELETE CASCADE, +status varchar NOT NULL +); +CREATE TABLE IF NOT EXISTS comments ( +id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, +text varchar NOT NULL, +item_id BIGINT REFERENCES items (id) ON DELETE CASCADE, +author_id BIGINT REFERENCES users (id) ON DELETE CASCADE, +created TIMESTAMP WITHOUT TIME ZONE NOT NULL +); diff --git a/server/src/test/java/ru/practicum/shareit/ShareItTests.java b/server/src/test/java/ru/practicum/shareit/ShareItTests.java new file mode 100644 index 0000000..4d79052 --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/ShareItTests.java @@ -0,0 +1,13 @@ +package ru.practicum.shareit; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class ShareItTests { + + @Test + void contextLoads() { + } + +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index fa544b9..d678861 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,4 +1,4 @@ -server.port=8080 +server.port=9090 # ???? ???????????? ???????????? spring.jpa.hibernate.ddl-auto=none diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql index 47c804c..0c75e00 100644 --- a/src/main/resources/schema.sql +++ b/src/main/resources/schema.sql @@ -1,12 +1,22 @@ +drop table IF EXISTS users, + items, + requests, + items, + bookings, + comments; + + CREATE TABLE IF NOT EXISTS users ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar, email varchar UNIQUE NOT NULL ); -CREATE TABLE IF NOT EXISTS request ( -id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, -description varchar NOT NULL, -requestor_id BIGINT REFERENCES users (id) +CREATE TABLE IF NOT EXISTS requests +( +id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY NOT NULL, +description VARCHAR(360) NOT NULL, +requestor_id BIGINT REFERENCES users(id), +created TIMESTAMP WITHOUT TIME ZONE NOT NULL ); From 3760f4acb472aaa7c21f130ad8d4faf896d51fe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 18:00:49 +0400 Subject: [PATCH 15/55] test fix --- .run/ShareItGateway.run.xml | 15 + .run/ShareItServer.run.xml | 15 + db/shareit.mv.db | Bin 0 -> 36864 bytes db/shareit.trace.db | 2616 +++++++++++++++++ docker-compose.yml | 39 + gateway/Dockerfile | 5 + gateway/pom.xml | 70 + .../ru/practicum/shareit/ShareItGateway.java | 12 + .../shareit/booking/BookingClient.java | 83 + .../booking/dto/BookItemRequestDto.java | 20 + .../shareit/booking/dto/BookingState.java | 27 + .../practicum/shareit/client/BaseClient.java | 121 + .../src/main/resources/application.properties | 7 + server/Dockerfile | 5 + server/pom.xml | 86 + .../ru/practicum/shareit/ShareItServer.java | 13 + 16 files changed, 3134 insertions(+) create mode 100644 .run/ShareItGateway.run.xml create mode 100644 .run/ShareItServer.run.xml create mode 100644 db/shareit.mv.db create mode 100644 db/shareit.trace.db create mode 100644 docker-compose.yml create mode 100644 gateway/Dockerfile create mode 100644 gateway/pom.xml create mode 100644 gateway/src/main/java/ru/practicum/shareit/ShareItGateway.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/booking/BookingClient.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/booking/dto/BookItemRequestDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingState.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/client/BaseClient.java create mode 100644 gateway/src/main/resources/application.properties create mode 100644 server/Dockerfile create mode 100644 server/pom.xml create mode 100644 server/src/main/java/ru/practicum/shareit/ShareItServer.java diff --git a/.run/ShareItGateway.run.xml b/.run/ShareItGateway.run.xml new file mode 100644 index 0000000..32c8129 --- /dev/null +++ b/.run/ShareItGateway.run.xml @@ -0,0 +1,15 @@ + + + + \ No newline at end of file diff --git a/.run/ShareItServer.run.xml b/.run/ShareItServer.run.xml new file mode 100644 index 0000000..a8ed9e5 --- /dev/null +++ b/.run/ShareItServer.run.xml @@ -0,0 +1,15 @@ + + + + \ No newline at end of file diff --git a/db/shareit.mv.db b/db/shareit.mv.db new file mode 100644 index 0000000000000000000000000000000000000000..d1505832982f86011e978ce870b95ade91934ad3 GIT binary patch literal 36864 zcmeHwNo*romRLxsNHG`XzGp2_%BsrDDiu5SMZlmH+(~g?wAI3jW56B^=45yZgKl6>M!PN^z_4M=$p^#B#W!R8B1lT4QdBW} zvbx(<6d?WoBYyn<-urL++f!_vUQ_F~R$FHWX~FEHb&4d(HLcpQYU_v**R(oPtaWNl zbCA+T`Z^^E0?i5j;SOrcjdN;|xX>SylJ(EQ2%y8IaL6k=J-1 z&yy;pNbpKvID@80$OxJ$@dz>!V+b7WgJTdn5(W55QW$|Tpt7QiyrgSBUL`5S(;{Sa ziRKu{=mte0iSqG=O42-qd;-M?qJ%V`z>@|=ij+^#S(4J=bHU&!gA+xcNYT6oZ+#*s zvLeYDK9M(gPLOz?sKB^MI^$A95+y*?BMYUGgA6C2cWkHPuhRZTx7D^C9JukfiJ06QoO^#o>uTaqvWES&b$kgLH#oD8(llqDE7^1{sCs zXp;3wq)su2)qD~yfgNz42(-pfU>_tfMPTG8pQIyJ0E^{Q7>0#{;Zs;rBUzF5DWafC zlnNOzpMr?^Wkmt=rK-zd1{qD{d@4n9EDZ)orI0|Xis(~m5($QYAj1j_OMT3Q60ljO^{VkS24K{pUJp-wZP}3l_7~nRCmxfm?q4NBNt2}ht_^HVv?a^z!EV`A}hwTmTq6}99)^&qktD)Zd z$O&HSD)sfz!p-2r0ilIy9}ZVVybocShT#R3AMa6`_TkX&p6F5XKphS3v@g%!zsuaUyerq7loESXHdL}&>4LW zXiNVBc#ary7HCHcbmJ6axM^Pkg#=hnn+h#+9-aa$z)gHfcsz706Q?>w3_n?cezAfl z%R$<>BwFg?ptA!L5 zk+i^iNYk9cX(AfHHq=qm+ghM6(3A+j3jC_@tHUq4K+`1rQjq5tqy>IKTwoSBC`s_E z!LOS);8$1>pdPeAGZ?n`#UtMmb`!hgt%Um#!yV_qXrQ*@H}#9|;fL35)F zKgvj>j55loql`An=%Wl8WsG5lCP$fJPu%Y>jF#uQ;UzuETc+oS%k&f!%`VD%YxWfD zE!y)iCp;4b-aQP({qwy5#o+l@JWG`l(ml4X(3&1k0c*hY;0AZ^Oo~D zUeMNTP3trjOY5zZI!TJq+P^sllpg|Wcz{wPK*!*80RqV2f}sn$3*`xj-o^n%9)k*P z!w;ha#g`H=G-VS(iM9YZ0JJ}J>6J62+7QaO3Y2_iXGg3Xsv zi4+thQm|V38HT;TJV;?9#4WoUAsDuSEzu7k#W4KOzVy=hpE(8Q6qr+BPJv$^3XBZ= zX#c%?e2ZRKJHACPGNjH*2J>q6(Z^f4JnCQc>@_#C*ZjapOW;eKIskxNt4JCm>{E|y zvZ5+*K;Q&&ac}^@7}#CX;KzIX#q)#x|NlJL|NjRtglFyl!}Epjef9o7?z{4{g~dmh z4SCSXM_mvrO^43VZNA3bynq3N|h%P17jYjQ3H9k|>HJAtQhv zC^9~prCHeS*O!NmtdEAe672ZIOI;tdE6F8t`uoA4jSNsWX(1V>De?4AIB2l+L=l zMc@H?E<9uegEe?&mL;Bfos)wPU+0mAUnZSjYVmQlO}C4#tLgpxG7^JxN1 zlXTb-)+9rabXN3fDoslogCN675^PfYbW+zzUetU#%jt|JkUpK4VD*5dm!TVup$(rd z@RUv=cq3>ehYaL{Hc8l_rhK{r%8^vz$#6*yGO)W1C(wMlA!)jyyBULmooLlJT2WXw zNJ@ZSeQ<=zV0qYk9xYe+3;>i;VY}N<1ON&)pAA(&G-9Ne8j4rNkFUJbd4uy!B{+vS zek^VlUi}ub&73U$v)r6-At(I$qfDPVYy$%a`(_0=^a?A#u!Hw@0G7;QT^%{d($L$p zp3;5gh<`8(oGDmS_dtB*-T(SG2(H=d3!4}41vtSDGt~=!^_O0XfA6)Ghu2^W`(XLc zm+%#AVe!HeesS4%>GGAUE7)7ayE}z&kqG9)axq*El;X({LDTFivAXj8g~3yzR0!vZ zc!Wr2ibQxPUMLob)lk5Fx=Iw}WRZ9(fZGO6oo28C0?!9MC1P?RMm(iO6?R^DIDoEE z;2y#LpdpeXqDXL|D8%V7Gvyd$7;ySrS7Cw)>+f)S9MQbUX_C${PYF4cil?6t#L9mk zK@*gNv2che%7J8*H1~KYyEe zvhufwyC__Pd9%fK+1^w_)MXt)FM{9WRml{T;m(BbSsgFy}v!A!bP%**bOoeb*9 zL$`-9FrIlW6Y+E?yfapR5~Qbqf;r;hbR347aL1@Xgn)0t4N@5lP{nx2Z+a0my@ zMdJBF@%b}A^XPAmCU9=agZ0_!pp)mbK=~Xb@<+VA%EKo$urLL+sl18#iy=zH|59{Ra;pJ$~)=H{K-PT7B~NJMUtC z!2e$_yb1yYSBXd_AC5=Uu8w-PIsw-V0t6W5!;x^_wFO|@P8*ehvPoya@B}x%1ETiR z#Ubsc7^66tkgvlSu@cEJk)Ti(=wPr6x3D7RfE1R?p%BS)3@P$qT6{s!rWm8YnLNr{ zV8dJ!42Cw7NrvV0P*5}5U~k8SbW(oDUR-{@bmQf$+-%rSi0_1zqs14*dFdtyLS$xn zX6aJ`JsfC{L6&Y!m*+vfnWWk6Ub+K_{m~RbeJRWW zr{wgwzZqoI1$t&7UAhbO*qfam0N8~8G8)&RBJtREf+Y8VB!B!$NCFacmhN)9oQWy` z`k7=InUJBYG}K;8_d$LA#aE~=kmyZtSHBJo7NAK!z)?~emU)FT%gRz&46t-L!pR{f z5agMN^rAcMiFCObcb#hYFO*Z+)A}o%4t-S>cT~qT&`>qG*q)`bpqFB)aGq}hD(u0_ zsj%75pRU3v@ar((v50uy=VC=)QZSrx|ne-TR^m1xUUR`<&sO-!t zwdY|n8t4g`eGO3icT;5cC2<3XVM1s}oHc{Q0@!ED>qzBzau3QV6i$YVVIn9Of^rCE zE(7ml>2)B{hclDtwCi?^=Cf5dJ7oI_D!lEu z>}|mAiz(vyvgiRzOo-=*t!5FP}iYRp|;nt1{$2LRFu|LhpkXRBjeKcUCmWv8FM zDngx}V4ie36RiOJGj;y>GMS6u**YIqcHem4y733mj-o^Sj3y$YwyhtU)=pMw`(vopLiLTFQnhWrW;f_; zvQtCEri081a<+nX)Ie5?->5Vcv+h=4b4j=t(Lz0<=-7?s$HA&&w%WaN!me7ajjG)q zRpjzf1Z(w(h?(^!a@wCHQQK^rN_o3#wh=pCmCq*4dfh}sTG64?Bx-a}on}uu6>?dm zJ2tUp*J};M`XsMdx>?QyZOcOSIyF`k_hm!Kvdk6{br72}xD*l}pD0m4p?h;?+ps2o)s3$@#Rc-AnH!$>FO!mnosuo2rx1%f6zmT5ceIG{HQ zLA&F$Ef~i^drC^FYj(ZiFKE?<*=|$Z1o}7gNn~4!qZ6r))2#MB4gq7d9kbK&ha2#C z46|E1G2}qEZRp)>wJfDgBpm<85kN^dQF*%uBPfYuAKcEQ6h|`^A`hhdC}Fou#X|lV z{9%}}YIkx;r32(40>Fx>_n};=E2vy(qYiX-QV-6e|J9Q}@%?b=3HIVz)6-|q-+O=U z1OIoxdNC~AG{Eq?Tfiyqe-g5YkkYBZe-vu>cI3L@-vq{{#;JO*Gz8#;nfBmrf!Q$Y z05LsY^?okZ@&l(JBIt_8ZW5V>KW!q*J{%jS2f2XDs~~Q6wT_$*;ck21F2ewT7+5D5 z;SaM(#ZrijV-fLq{A1aHI7+A-Q=sFz$c|NfR7fa5W+H&JY8%xR=OY-3hG{9~08*-o zHP-jzLcVHSx&qpu-3HlHKZ+=D|3UF@c7Pb%IN@I_MNr)Y#Sya)LEMN?sGw~2;GUjb zZzJmv27QRoSdzq?Kr3>jC1K~E@an1JX_GN)kdF0924n^f2iHqaoK*7Pbd~( zPGoIRYg+XqxrR`~pHv(W+=;&5E(Gg69ViR`{0c-7luEFQ>Mf+uV?*^$4lYV+CNX67 z4+oN8&TJysjvX8QcXLrd*3oScyt-E1O`$prf+9^y^3yB;r?|+vVy;Do|3<5PGME%K z*7>t75Kgn+vk0IG2)--JCAn3t_qcJ+d!8=X%_JiUJ9Q5@3z?v>KM6O0_1vfrnydIH>aJx2c29Q^=`@>Y516S| z4k#V1%8r>U{DWLdaR=hCZXdR4=2pyB0fvd;^5+X02m#?5whAbiPk<#IQ0$;uEywPG zCOkHe_;+&Qx~JO)O6cPx=pt9ToJy+=_Hc}F;PNZd zY9={>6qN^ZgH-|Dp;(q}ZHJU*6rhEzl*@BS(kb`i;tk#mqF^JiG+P!fF+QX?>N~f_WH+l+ityQsG)iD}y z*`QKKDgg?pfm(Y7u!=zV9&*@mL(CUsPz)VsSdG|%d%zXT1}^X)tEUOng)}^`^?-R> z?N5t6$2{mDKiF?u1*u`im<{|Op7`X_=OaJp%8!57^MkI+Up{>8y=lA!*YJLG^}Clp zUwVk$nPxklOqJBNDg1T!OjE&5A>G62y8GFSLiP3;%HYj&mEY2IcWm(tU(SCHr&DKf z-p%P||BZ7M`1|Jw^7GUB;_*~d^z^IL)vf7n#_Bm5`<-bz_1bxE)}yJ`^@B6i3~=q@ z|NM=gU-^9LHEb%A`p$P)Z%_4(uAkxLT{*);rKhQj*UmTT-V_bqNSd$_$J52Yt^`8{b0|8 zYgobl3eD_O$y$+bM)t1Alji4oXMcY+ef`wwislSI`6fik-`-)$LqT zi06A7a3BM}mQL4Nbh8xW#Lf!c?R7*lcaR8(g+S$iN*kRR!&Vu(U?{Aqi4tQ9s6y5^ zBkh2-)2fNd_y+zM!>^}9R7tG~mB>B}af)*?Xnc-c8)T;26X-Q#P@ogLzH86Ig+mw`|;9_R80AkKSq@Rl4*FO-IyfI2e*U zrI=7^X3;??d9Yolx1+^GZ__d)lMm4)DYw_iGM2u_XzASz{0WBNP8YUpgAF8uNBI?c zzZw>kVyoW|RLwwAI|zqh@>~ej1SY(jXdXrqo!vT2yj!HxI*jIm^3I`*zk}g-(yc=} za=@646k4IP`@Q|zLA!W#!1WV{;f5?%$?dJIn9so!YTK5Ld`7Ny_mf7ZSLD@bJyDYJ zr?9w@W-Y6;T}3sK0*#c|%Iv4Av>Dwi9aZe8nNm73irVp3Gawx0K$ugpq{?-I+sNMS zMteD4#-C&Oy>u?w<%+>hq0?NU8zELZ(ga5jg$%Ql;Eqad3#MOOEzyk@kF0j08En|W zU9#PXbdpTYZd)?`K8D{R}ZH8c2SaX62l*+^;&vo#{e^#TA^hwQ>gbl=?=YhkY+X` z{ak#vXa!KXcd*Y@&F)^W$8QB>YF|kOa=BegGG&~`@JDH_bXYKpoEFhQ#paHJ(dgdc zVdThyaVYd#JCVd5+G4i#NN~$)HX{nz+_jxx`+#rKu})uBa!{5J;fA9b&AL8^QoP9iKJivW%?Vq@fV~f}YYzf1$i`X*e!!BW$ zu`AeBYz4c9UB_-fbdy`yZR`$q7rTeu#~xr0u}9cr7rF(S{Xf_L>C&YWF94&i{D+@> z_rLw%XSc8`Uk)?)ZT#KMZ8;9-F{AVuukYZ`l5#ei&uoQ5%o*?R;_r<x>7?vH-rHV&EZ|0~Gg4{_!gHn{W)&;Rn@ z4l8`|Q@6q+oI9y->5K}GapAZEknAZ#-S}rN#qisU_?-**-6cQ(zkd;bu#7+S;g2qX z;`OQ}ZvJzx+PjPRvkUlpOZXa&`!C|uGS2vL?h-Dz)jnswy!9`Z7J>d4=zuWW?wDaY zm@yeAzq!4~Cd0{&+LgP3;-1uMwDU=Or%(hdYQ~f8qNyoy7e5!~|MI6lyY&Zuwgzgk zdU%-WW=K*?XyCXB5&DQXq)2r$6*HVzuFk7FNQ@r_l>My(dq=JBBxoEkbldpTFMoFH zfBo1GP~9TM+dp!l!XGXU(78okyYpl33A5-yzW4?G@9&-+HV0y?{c6MJ{PA%#ni<08 z48qY&M9mr9d7m|8ju(f5F%^8%CE_h*ch9!i&usOq$VR&J41|@@4y|6jM5(hDekJ~gj!wZ`; zeCGzgKY0gt0ZvMcuD%d9XA5{9!sdK$4>aNicHuw$<{*XJ8EzSFXJFWGZD5!35Utrw zVQbG#VQUZ4&#)`M2Ul+0^vA#JrLfe6VZXhBUH!lR5Yo@EYyU9<=@;0w|MA-x_B$AM z?XTgg$M0-l*EjzTq@Q8eO94o~z^<1e!ol}3?E2sR3{rUi_W&&Tx&8xacm6Y{z?=ee w3d|`mr@)*7a|+BUFsHzr0&@z?De(U{1y0A`8;_!Q9RE*o(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.runSync(ConnectJob.java:109) + at org.jkiss.dbeaver.ui.actions.datasource.DataSourceHandler.connectToDataSource(DataSourceHandler.java:123) + at org.jkiss.dbeaver.ui.actions.datasource.UIServiceConnectionsImpl.initConnection(UIServiceConnectionsImpl.java:87) + at org.jkiss.dbeaver.model.DBUtils.initDataSource(DBUtils.java:2455) + at org.jkiss.dbeaver.model.navigator.DBNDataSource.initializeNode(DBNDataSource.java:159) + at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:226) + at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:1) + at org.jkiss.dbeaver.model.navigator.DBNUtils.getNodeChildrenFiltered(DBNUtils.java:94) + at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:49) + at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:23:17.483064+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:23:24.233009+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:23:24.234007+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:24:03.110022+04:00 database: flush +org.h2.message.DbException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.get(DbException.java:212) + at org.h2.message.DbException.convert(DbException.java:407) + at org.h2.mvstore.db.Store.lambda$new$0(Store.java:122) + at org.h2.mvstore.MVStore.handleException(MVStore.java:1546) + at org.h2.mvstore.MVStore.panic(MVStore.java:371) + at org.h2.mvstore.MVStore.(MVStore.java:291) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:2035) + at org.h2.mvstore.db.Store.(Store.java:133) + at org.h2.engine.Database.(Database.java:326) + at org.h2.engine.Engine.openSession(Engine.java:92) + at org.h2.engine.Engine.openSession(Engine.java:222) + at org.h2.engine.Engine.createSession(Engine.java:201) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:343) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:125) + at org.h2.Driver.connect(Driver.java:59) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:52) + at org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer.runScripts(DataSourceScriptDatabaseInitializer.java:87) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.runScripts(AbstractScriptDatabaseInitializer.java:146) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applyScripts(AbstractScriptDatabaseInitializer.java:108) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applySchemaScripts(AbstractScriptDatabaseInitializer.java:98) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.initializeDatabase(AbstractScriptDatabaseInitializer.java:76) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.afterPropertiesSet(AbstractScriptDatabaseInitializer.java:66) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) + at ru.practicum.shareit.ShareItApp.main(ShareItApp.java:10) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:566) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + ... 51 more +Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7] + at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996) + at org.h2.mvstore.SingleFileStore.lockFileChannel(SingleFileStore.java:143) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:117) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:81) + at org.h2.mvstore.MVStore.(MVStore.java:286) + ... 45 more +2025-06-15 10:24:15.622555+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Синтаксическая ошибка в выражении SQL "CREATE TABLE IF NOT EXISTS items ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar NOT NULL, description varchar NOT NULL, available boolean, [*])"; ожидалось "identifier" +Syntax error in SQL statement "CREATE TABLE IF NOT EXISTS items ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar NOT NULL, description varchar NOT NULL, available boolean, [*])"; expected "identifier"; SQL statement: +CREATE TABLE IF NOT EXISTS items ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar NOT NULL, description varchar NOT NULL, available boolean, ) [42001-224] +2025-06-15 10:25:21.880348+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:25:22.027954+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:25:22.027954+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:25:27.917201+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:25:51.041350+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.runSync(ConnectJob.java:109) + at org.jkiss.dbeaver.ui.actions.datasource.DataSourceHandler.connectToDataSource(DataSourceHandler.java:123) + at org.jkiss.dbeaver.ui.actions.datasource.UIServiceConnectionsImpl.initConnection(UIServiceConnectionsImpl.java:87) + at org.jkiss.dbeaver.model.DBUtils.initDataSource(DBUtils.java:2455) + at org.jkiss.dbeaver.model.navigator.DBNDataSource.initializeNode(DBNDataSource.java:159) + at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:226) + at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:1) + at org.jkiss.dbeaver.model.navigator.DBNUtils.getNodeChildrenFiltered(DBNUtils.java:94) + at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:49) + at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:25:51.304645+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:25:51.304645+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:25:51.421333+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:53:07.537143+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:53:07.657821+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:53:07.658818+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:53:07.658818+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:54:16.640552+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:54:16.766215+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:54:16.767213+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:54:16.767213+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:55:57.804961+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:55:57.974507+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:55:57.975505+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:55:57.975505+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 11:52:19.042831+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 11:52:19.279200+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 11:52:19.279200+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 11:52:19.280197+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:06:21.364223+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.ui.editors.DatabaseLazyEditorInput.initializeRealInput(DatabaseLazyEditorInput.java:266) + at org.jkiss.dbeaver.ui.editors.ProgressEditorPart$InitNodeService.evaluate(ProgressEditorPart.java:173) + at org.jkiss.dbeaver.ui.editors.ProgressEditorPart$InitNodeService.evaluate(ProgressEditorPart.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:06:23.021791+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:06:23.023785+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:06:27.743161+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:09:35.028259+04:00 database: flush +org.h2.message.DbException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.get(DbException.java:212) + at org.h2.message.DbException.convert(DbException.java:407) + at org.h2.mvstore.db.Store.lambda$new$0(Store.java:122) + at org.h2.mvstore.MVStore.handleException(MVStore.java:1546) + at org.h2.mvstore.MVStore.panic(MVStore.java:371) + at org.h2.mvstore.MVStore.(MVStore.java:291) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:2035) + at org.h2.mvstore.db.Store.(Store.java:133) + at org.h2.engine.Database.(Database.java:326) + at org.h2.engine.Engine.openSession(Engine.java:92) + at org.h2.engine.Engine.openSession(Engine.java:222) + at org.h2.engine.Engine.createSession(Engine.java:201) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:343) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:125) + at org.h2.Driver.connect(Driver.java:59) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:52) + at org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer.runScripts(DataSourceScriptDatabaseInitializer.java:87) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.runScripts(AbstractScriptDatabaseInitializer.java:146) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applyScripts(AbstractScriptDatabaseInitializer.java:108) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applySchemaScripts(AbstractScriptDatabaseInitializer.java:98) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.initializeDatabase(AbstractScriptDatabaseInitializer.java:76) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.afterPropertiesSet(AbstractScriptDatabaseInitializer.java:66) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) + at ru.practicum.shareit.ShareItApp.main(ShareItApp.java:10) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:566) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + ... 51 more +Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7] + at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996) + at org.h2.mvstore.SingleFileStore.lockFileChannel(SingleFileStore.java:143) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:117) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:81) + at org.h2.mvstore.MVStore.(MVStore.java:286) + ... 45 more +2025-06-15 17:10:19.086414+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:10:19.293860+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:10:19.294857+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:10:19.502302+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:12:02.590577+04:00 database: flush +org.h2.message.DbException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.get(DbException.java:212) + at org.h2.message.DbException.convert(DbException.java:407) + at org.h2.mvstore.db.Store.lambda$new$0(Store.java:122) + at org.h2.mvstore.MVStore.handleException(MVStore.java:1546) + at org.h2.mvstore.MVStore.panic(MVStore.java:371) + at org.h2.mvstore.MVStore.(MVStore.java:291) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:2035) + at org.h2.mvstore.db.Store.(Store.java:133) + at org.h2.engine.Database.(Database.java:326) + at org.h2.engine.Engine.openSession(Engine.java:92) + at org.h2.engine.Engine.openSession(Engine.java:222) + at org.h2.engine.Engine.createSession(Engine.java:201) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:343) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:125) + at org.h2.Driver.connect(Driver.java:59) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:52) + at org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer.runScripts(DataSourceScriptDatabaseInitializer.java:87) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.runScripts(AbstractScriptDatabaseInitializer.java:146) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applyScripts(AbstractScriptDatabaseInitializer.java:108) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applySchemaScripts(AbstractScriptDatabaseInitializer.java:98) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.initializeDatabase(AbstractScriptDatabaseInitializer.java:76) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.afterPropertiesSet(AbstractScriptDatabaseInitializer.java:66) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) + at ru.practicum.shareit.ShareItApp.main(ShareItApp.java:10) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:566) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + ... 51 more +Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7] + at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996) + at org.h2.mvstore.SingleFileStore.lockFileChannel(SingleFileStore.java:143) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:117) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:81) + at org.h2.mvstore.MVStore.(MVStore.java:286) + ... 45 more +2025-06-15 17:15:33.389813+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:15:33.575317+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:15:33.575317+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:15:33.746859+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:15:40.009108+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:16:31.330835+04:00 database: flush +org.h2.message.DbException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.get(DbException.java:212) + at org.h2.message.DbException.convert(DbException.java:407) + at org.h2.mvstore.db.Store.lambda$new$0(Store.java:122) + at org.h2.mvstore.MVStore.handleException(MVStore.java:1546) + at org.h2.mvstore.MVStore.panic(MVStore.java:371) + at org.h2.mvstore.MVStore.(MVStore.java:291) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:2035) + at org.h2.mvstore.db.Store.(Store.java:133) + at org.h2.engine.Database.(Database.java:326) + at org.h2.engine.Engine.openSession(Engine.java:92) + at org.h2.engine.Engine.openSession(Engine.java:222) + at org.h2.engine.Engine.createSession(Engine.java:201) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:343) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:125) + at org.h2.Driver.connect(Driver.java:59) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:52) + at org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer.runScripts(DataSourceScriptDatabaseInitializer.java:87) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.runScripts(AbstractScriptDatabaseInitializer.java:146) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applyScripts(AbstractScriptDatabaseInitializer.java:108) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applySchemaScripts(AbstractScriptDatabaseInitializer.java:98) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.initializeDatabase(AbstractScriptDatabaseInitializer.java:76) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.afterPropertiesSet(AbstractScriptDatabaseInitializer.java:66) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) + at ru.practicum.shareit.ShareItApp.main(ShareItApp.java:10) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:566) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + ... 51 more +Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7] + at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996) + at org.h2.mvstore.SingleFileStore.lockFileChannel(SingleFileStore.java:143) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:117) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:81) + at org.h2.mvstore.MVStore.(MVStore.java:286) + ... 45 more +2025-06-15 17:16:38.545537+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.runSync(ConnectJob.java:109) + at org.jkiss.dbeaver.ui.actions.datasource.DataSourceHandler.connectToDataSource(DataSourceHandler.java:123) + at org.jkiss.dbeaver.ui.actions.datasource.UIServiceConnectionsImpl.initConnection(UIServiceConnectionsImpl.java:87) + at org.jkiss.dbeaver.model.DBUtils.initDataSource(DBUtils.java:2455) + at org.jkiss.dbeaver.model.navigator.DBNDataSource.initializeNode(DBNDataSource.java:159) + at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:226) + at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:1) + at org.jkiss.dbeaver.model.navigator.DBNUtils.getNodeChildrenFiltered(DBNUtils.java:94) + at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:49) + at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:16:38.822795+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:16:38.822795+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:16:38.959430+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:16:38.960427+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:16:41.950429+04:00 database: flush +org.h2.message.DbException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.get(DbException.java:212) + at org.h2.message.DbException.convert(DbException.java:407) + at org.h2.mvstore.db.Store.lambda$new$0(Store.java:122) + at org.h2.mvstore.MVStore.handleException(MVStore.java:1546) + at org.h2.mvstore.MVStore.panic(MVStore.java:371) + at org.h2.mvstore.MVStore.(MVStore.java:291) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:2035) + at org.h2.mvstore.db.Store.(Store.java:133) + at org.h2.engine.Database.(Database.java:326) + at org.h2.engine.Engine.openSession(Engine.java:92) + at org.h2.engine.Engine.openSession(Engine.java:222) + at org.h2.engine.Engine.createSession(Engine.java:201) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:343) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:125) + at org.h2.Driver.connect(Driver.java:59) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:52) + at org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer.runScripts(DataSourceScriptDatabaseInitializer.java:87) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.runScripts(AbstractScriptDatabaseInitializer.java:146) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applyScripts(AbstractScriptDatabaseInitializer.java:108) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applySchemaScripts(AbstractScriptDatabaseInitializer.java:98) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.initializeDatabase(AbstractScriptDatabaseInitializer.java:76) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.afterPropertiesSet(AbstractScriptDatabaseInitializer.java:66) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) + at ru.practicum.shareit.ShareItApp.main(ShareItApp.java:10) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:566) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + ... 51 more +Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7] + at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996) + at org.h2.mvstore.SingleFileStore.lockFileChannel(SingleFileStore.java:143) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:117) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:81) + at org.h2.mvstore.MVStore.(MVStore.java:286) + ... 45 more +2025-06-15 17:22:35.220042+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "REQUEST" не найден +Column "REQUEST" not found; SQL statement: +insert into items (available,description,name,owner_id,request,id) values (?,?,?,?,?,default) [42122-224] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.table.Table.getColumn(Table.java:759) + at org.h2.command.Parser.parseColumn(Parser.java:1190) + at org.h2.command.Parser.parseColumnList(Parser.java:1175) + at org.h2.command.Parser.parseInsert(Parser.java:1549) + at org.h2.command.Parser.parsePrepared(Parser.java:719) + at org.h2.command.Parser.parse(Parser.java:592) + at org.h2.command.Parser.parse(Parser.java:564) + at org.h2.command.Parser.prepareCommand(Parser.java:483) + at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:639) + at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:559) + at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1166) + at org.h2.jdbc.JdbcPreparedStatement.(JdbcPreparedStatement.java:93) + at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:1149) + at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:363) + at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) + at org.hibernate.engine.jdbc.internal.MutationStatementPreparerImpl$3.doPrepare(MutationStatementPreparerImpl.java:78) + at org.hibernate.engine.jdbc.internal.MutationStatementPreparerImpl$StatementPreparationTemplate.prepareStatement(MutationStatementPreparerImpl.java:106) + at org.hibernate.engine.jdbc.internal.MutationStatementPreparerImpl.prepareStatement(MutationStatementPreparerImpl.java:80) + at org.hibernate.id.insert.GetGeneratedKeysDelegate.prepareStatement(GetGeneratedKeysDelegate.java:96) + at org.hibernate.engine.jdbc.mutation.internal.ModelMutationHelper.delegateStatementPreparation(ModelMutationHelper.java:131) + at org.hibernate.engine.jdbc.mutation.internal.ModelMutationHelper.lambda$standardPreparation$0(ModelMutationHelper.java:121) + at org.hibernate.engine.jdbc.mutation.internal.PreparedStatementDetailsStandard.resolveStatement(PreparedStatementDetailsStandard.java:87) + at org.hibernate.id.insert.GetGeneratedKeysDelegate.performMutation(GetGeneratedKeysDelegate.java:113) + at org.hibernate.engine.jdbc.mutation.internal.MutationExecutorSingleNonBatched.performNonBatchedOperations(MutationExecutorSingleNonBatched.java:47) + at org.hibernate.engine.jdbc.mutation.internal.AbstractMutationExecutor.execute(AbstractMutationExecutor.java:55) + at org.hibernate.persister.entity.mutation.InsertCoordinatorStandard.doStaticInserts(InsertCoordinatorStandard.java:194) + at org.hibernate.persister.entity.mutation.InsertCoordinatorStandard.coordinateInsert(InsertCoordinatorStandard.java:132) + at org.hibernate.persister.entity.mutation.InsertCoordinatorStandard.insert(InsertCoordinatorStandard.java:95) + at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:85) + at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:670) + at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:291) + at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:272) + at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:322) + at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:391) + at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:305) + at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:224) + at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:137) + at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:175) + at org.hibernate.event.internal.DefaultPersistEventListener.persist(DefaultPersistEventListener.java:93) + at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:77) + at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:54) + at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:127) + at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:757) + at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:741) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:364) + at jdk.proxy2/jdk.proxy2.$Proxy142.persist(Unknown Source) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:319) + at jdk.proxy2/jdk.proxy2.$Proxy142.persist(Unknown Source) + at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:629) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354) + at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:277) + at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:170) + at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:158) + at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:516) + at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:285) + at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:628) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:168) + at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:143) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:70) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:138) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:165) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223) + at jdk.proxy2/jdk.proxy2.$Proxy146.save(Unknown Source) + at ru.practicum.shareit.item.ItemServiceImpl.create(ItemServiceImpl.java:26) + at ru.practicum.shareit.item.ItemController.create(ItemController.java:27) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) + at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:174) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) + at ru.practicum.shareit.item.ItemController$$SpringCGLIB$$0.create() + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:113) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:904) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:1583) +2025-06-15 17:24:34.051791+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "REQUEST_ID" не найден +Column "REQUEST_ID" not found; SQL statement: +insert into items (available,description,name,owner_id,request_id,id) values (?,?,?,?,?,default) [42122-224] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.table.Table.getColumn(Table.java:759) + at org.h2.command.Parser.parseColumn(Parser.java:1190) + at org.h2.command.Parser.parseColumnList(Parser.java:1175) + at org.h2.command.Parser.parseInsert(Parser.java:1549) + at org.h2.command.Parser.parsePrepared(Parser.java:719) + at org.h2.command.Parser.parse(Parser.java:592) + at org.h2.command.Parser.parse(Parser.java:564) + at org.h2.command.Parser.prepareCommand(Parser.java:483) + at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:639) + at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:559) + at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1166) + at org.h2.jdbc.JdbcPreparedStatement.(JdbcPreparedStatement.java:93) + at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:1149) + at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:363) + at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) + at org.hibernate.engine.jdbc.internal.MutationStatementPreparerImpl$3.doPrepare(MutationStatementPreparerImpl.java:78) + at org.hibernate.engine.jdbc.internal.MutationStatementPreparerImpl$StatementPreparationTemplate.prepareStatement(MutationStatementPreparerImpl.java:106) + at org.hibernate.engine.jdbc.internal.MutationStatementPreparerImpl.prepareStatement(MutationStatementPreparerImpl.java:80) + at org.hibernate.id.insert.GetGeneratedKeysDelegate.prepareStatement(GetGeneratedKeysDelegate.java:96) + at org.hibernate.engine.jdbc.mutation.internal.ModelMutationHelper.delegateStatementPreparation(ModelMutationHelper.java:131) + at org.hibernate.engine.jdbc.mutation.internal.ModelMutationHelper.lambda$standardPreparation$0(ModelMutationHelper.java:121) + at org.hibernate.engine.jdbc.mutation.internal.PreparedStatementDetailsStandard.resolveStatement(PreparedStatementDetailsStandard.java:87) + at org.hibernate.id.insert.GetGeneratedKeysDelegate.performMutation(GetGeneratedKeysDelegate.java:113) + at org.hibernate.engine.jdbc.mutation.internal.MutationExecutorSingleNonBatched.performNonBatchedOperations(MutationExecutorSingleNonBatched.java:47) + at org.hibernate.engine.jdbc.mutation.internal.AbstractMutationExecutor.execute(AbstractMutationExecutor.java:55) + at org.hibernate.persister.entity.mutation.InsertCoordinatorStandard.doStaticInserts(InsertCoordinatorStandard.java:194) + at org.hibernate.persister.entity.mutation.InsertCoordinatorStandard.coordinateInsert(InsertCoordinatorStandard.java:132) + at org.hibernate.persister.entity.mutation.InsertCoordinatorStandard.insert(InsertCoordinatorStandard.java:95) + at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:85) + at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:670) + at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:291) + at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:272) + at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:322) + at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:391) + at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:305) + at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:224) + at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:137) + at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:175) + at org.hibernate.event.internal.DefaultPersistEventListener.persist(DefaultPersistEventListener.java:93) + at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:77) + at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:54) + at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:127) + at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:757) + at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:741) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:364) + at jdk.proxy2/jdk.proxy2.$Proxy142.persist(Unknown Source) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:319) + at jdk.proxy2/jdk.proxy2.$Proxy142.persist(Unknown Source) + at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:629) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354) + at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:277) + at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:170) + at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:158) + at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:516) + at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:285) + at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:628) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:168) + at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:143) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:70) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:138) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:165) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223) + at jdk.proxy2/jdk.proxy2.$Proxy146.save(Unknown Source) + at ru.practicum.shareit.item.ItemServiceImpl.create(ItemServiceImpl.java:26) + at ru.practicum.shareit.item.ItemController.create(ItemController.java:27) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) + at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:174) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) + at ru.practicum.shareit.item.ItemController$$SpringCGLIB$$0.create() + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:113) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:904) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:1583) +2025-06-15 17:26:10.889380+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:26:11.100814+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:26:11.100814+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:26:11.101812+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:26:11.101812+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:26:33.515858+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Таблица "ITEMS" не найдена +Table "ITEMS" not found; SQL statement: +DROP TABLE ITEMS CASCADE [42102-232] +2025-06-15 17:26:46.065292+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Таблица "REQUEST" не найдена +Table "REQUEST" not found; SQL statement: +CREATE TABLE IF NOT EXISTS items ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar NOT NULL, description varchar NOT NULL, available boolean, owner_id BIGINT REFERENCES users (id), request_id BIGINT REFERENCES request (id) ) [42102-224] +2025-06-16 06:37:12.404905+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 06:37:18.829024+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 06:37:18.831019+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 06:37:18.832016+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 06:37:18.833013+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 06:37:18.834011+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 06:38:12.752513+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.runSync(ConnectJob.java:109) + at org.jkiss.dbeaver.ui.actions.datasource.DataSourceHandler.connectToDataSource(DataSourceHandler.java:123) + at org.jkiss.dbeaver.ui.actions.datasource.UIServiceConnectionsImpl.initConnection(UIServiceConnectionsImpl.java:87) + at org.jkiss.dbeaver.model.DBUtils.initDataSource(DBUtils.java:2455) + at org.jkiss.dbeaver.model.navigator.DBNDataSource.initializeNode(DBNDataSource.java:159) + at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:226) + at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:1) + at org.jkiss.dbeaver.model.navigator.DBNUtils.getNodeChildrenFiltered(DBNUtils.java:94) + at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:49) + at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 06:38:13.027828+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 06:38:13.028826+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 06:38:13.029823+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 06:38:13.031817+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 06:38:13.033812+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 07:49:33.065618+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.runSync(ConnectJob.java:109) + at org.jkiss.dbeaver.ui.actions.datasource.DataSourceHandler.connectToDataSource(DataSourceHandler.java:123) + at org.jkiss.dbeaver.ui.actions.datasource.UIServiceConnectionsImpl.initConnection(UIServiceConnectionsImpl.java:87) + at org.jkiss.dbeaver.model.DBUtils.initDataSource(DBUtils.java:2455) + at org.jkiss.dbeaver.model.navigator.DBNDataSource.initializeNode(DBNDataSource.java:159) + at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:226) + at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:1) + at org.jkiss.dbeaver.model.navigator.DBNUtils.getNodeChildrenFiltered(DBNUtils.java:94) + at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:49) + at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 07:49:33.300536+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 07:49:33.301534+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 07:49:33.301534+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 07:49:33.302531+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 07:49:33.302531+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 07:52:52.356997+04:00 database: flush +org.h2.message.DbException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.get(DbException.java:212) + at org.h2.message.DbException.convert(DbException.java:407) + at org.h2.mvstore.db.Store.lambda$new$0(Store.java:122) + at org.h2.mvstore.MVStore.handleException(MVStore.java:1546) + at org.h2.mvstore.MVStore.panic(MVStore.java:371) + at org.h2.mvstore.MVStore.(MVStore.java:291) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:2035) + at org.h2.mvstore.db.Store.(Store.java:133) + at org.h2.engine.Database.(Database.java:326) + at org.h2.engine.Engine.openSession(Engine.java:92) + at org.h2.engine.Engine.openSession(Engine.java:222) + at org.h2.engine.Engine.createSession(Engine.java:201) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:343) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:125) + at org.h2.Driver.connect(Driver.java:59) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:52) + at org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer.runScripts(DataSourceScriptDatabaseInitializer.java:87) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.runScripts(AbstractScriptDatabaseInitializer.java:146) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applyScripts(AbstractScriptDatabaseInitializer.java:108) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applySchemaScripts(AbstractScriptDatabaseInitializer.java:98) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.initializeDatabase(AbstractScriptDatabaseInitializer.java:76) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.afterPropertiesSet(AbstractScriptDatabaseInitializer.java:66) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) + at ru.practicum.shareit.ShareItApp.main(ShareItApp.java:10) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:566) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + ... 51 more +Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7] + at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996) + at org.h2.mvstore.SingleFileStore.lockFileChannel(SingleFileStore.java:143) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:117) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:81) + at org.h2.mvstore.MVStore.(MVStore.java:286) + ... 45 more diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..abe6570 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,39 @@ +services: + gateway: + build: gateway + image: shareit-gateway + container_name: shareit-gateway + ports: + - "8080:8080" + depends_on: + - server + environment: + - SHAREIT_SERVER_URL=http://server:9090 + + server: + build: server + image: shareit-server + container_name: shareit-server + ports: + - "9090:9090" + depends_on: + - db + environment: + - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/shareit + - SPRING_DATASOURCE_USERNAME=shareit + - SPRING_DATASOURCE_PASSWORD=shareit + + db: + image: postgres:16.1 + container_name: postgres + ports: + - "6541:5432" + environment: + - POSTGRES_PASSWORD=shareit + - POSTGRES_USER=shareit + - POSTGRES_DB=shareit + healthcheck: + test: pg_isready -q -d $$POSTGRES_DB -U $$POSTGRES_USER + timeout: 5s + interval: 5s + retries: 10 \ No newline at end of file diff --git a/gateway/Dockerfile b/gateway/Dockerfile new file mode 100644 index 0000000..0ff1817 --- /dev/null +++ b/gateway/Dockerfile @@ -0,0 +1,5 @@ +FROM eclipse-temurin:21-jre-jammy +VOLUME /tmp +ARG JAR_FILE=target/*.jar +COPY ${JAR_FILE} app.jar +ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /app.jar"] \ No newline at end of file diff --git a/gateway/pom.xml b/gateway/pom.xml new file mode 100644 index 0000000..f3394c1 --- /dev/null +++ b/gateway/pom.xml @@ -0,0 +1,70 @@ + + + 4.0.0 + + ru.practicum + shareit + 0.0.1-SNAPSHOT + + + shareit-gateway + 0.0.1-SNAPSHOT + + ShareIt Gateway + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-validation + + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.hibernate.validator + hibernate-validator + + + + org.apache.httpcomponents.client5 + httpclient5 + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + org.projectlombok + lombok + true + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + \ No newline at end of file diff --git a/gateway/src/main/java/ru/practicum/shareit/ShareItGateway.java b/gateway/src/main/java/ru/practicum/shareit/ShareItGateway.java new file mode 100644 index 0000000..0aa75c3 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/ShareItGateway.java @@ -0,0 +1,12 @@ +package ru.practicum.shareit; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ShareItGateway { + public static void main(String[] args) { + SpringApplication.run(ShareItGateway.class, args); + } + +} diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/BookingClient.java b/gateway/src/main/java/ru/practicum/shareit/booking/BookingClient.java new file mode 100644 index 0000000..6cff564 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/booking/BookingClient.java @@ -0,0 +1,83 @@ +package ru.practicum.shareit.booking; + +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.http.ResponseEntity; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.stereotype.Service; +import org.springframework.web.util.DefaultUriBuilderFactory; + +import ru.practicum.shareit.booking.dto.BookItemRequestDto; +import ru.practicum.shareit.booking.dto.BookingState; +import ru.practicum.shareit.booking.dto.NewBookingDto; +import ru.practicum.shareit.client.BaseClient; + +@Service +public class BookingClient extends BaseClient { + private static final String API_PREFIX = "/bookings"; + private static final String BOOKING_ID_PATH = "/{bookingId}"; + private static final String BOOKING_PATH = BOOKING_ID_PATH + "?approved={approved}"; + + @Autowired + public BookingClient(@Value("${shareit-server.url}") String serverUrl, RestTemplateBuilder builder) { + super( + builder + .uriTemplateHandler(new DefaultUriBuilderFactory(serverUrl + API_PREFIX)) + .requestFactory(() -> new HttpComponentsClientHttpRequestFactory()) + .build() + ); + } + + public ResponseEntity getBookings(long userId, BookingState state, Integer from, Integer size) { + Map parameters = Map.of( + "state", state.name(), + "from", from, + "size", size + ); + return get("?state={state}&from={from}&size={size}", userId, parameters); + } + + + public ResponseEntity bookItem(long userId, BookItemRequestDto requestDto) { + return post("", userId, requestDto); + } + + public ResponseEntity getBooking(long userId, Long bookingId) { + return get("/" + bookingId, userId); + } + + public ResponseEntity create(NewBookingDto newBookingDto, long userId) { + return post("",userId,newBookingDto); + } + + /*public ResponseEntity approveBooking(long userId, long bookingId, boolean approved) { + Map uriVariables = Map.of("bookingId",bookingId,"approved", approved); + return patch(BOOKING_PATH,userId,uriVariables); + }*/ + + public ResponseEntity approveBooking(long userId, long bookingId, boolean approved) { + Map uriVariables = Map.of("bookingId",bookingId,"approved", approved); + return patch("/" + bookingId+"?approved="+approved, userId, approved); + } + + public ResponseEntity findById(long userId, long bookingId) { + return get("/" + bookingId,userId); + } + + public ResponseEntity findByBooker(long userId, BookingState state) { + Map parameters = Map.of( + "state", state.name() + ); + return get("?state={state}",userId,parameters); + } + + public ResponseEntity findByOwner(long userId, BookingState state) { + Map parameters = Map.of( + "state", state.name() + ); + return get("/owner", userId, parameters); + } +} diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookItemRequestDto.java b/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookItemRequestDto.java new file mode 100644 index 0000000..efe3980 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookItemRequestDto.java @@ -0,0 +1,20 @@ +package ru.practicum.shareit.booking.dto; + +import java.time.LocalDateTime; + +import jakarta.validation.constraints.Future; +import jakarta.validation.constraints.FutureOrPresent; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class BookItemRequestDto { + private long itemId; + @FutureOrPresent + private LocalDateTime start; + @Future + private LocalDateTime end; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingState.java b/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingState.java new file mode 100644 index 0000000..135de62 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingState.java @@ -0,0 +1,27 @@ +package ru.practicum.shareit.booking.dto; + +import java.util.Optional; + +public enum BookingState { + // Все + ALL, + // Текущие + CURRENT, + // Будущие + FUTURE, + // Завершенные + PAST, + // Отклоненные + REJECTED, + // Ожидающие подтверждения + WAITING; + + public static Optional from(String stringState) { + for (BookingState state : values()) { + if (state.name().equalsIgnoreCase(stringState)) { + return Optional.of(state); + } + } + return Optional.empty(); + } +} diff --git a/gateway/src/main/java/ru/practicum/shareit/client/BaseClient.java b/gateway/src/main/java/ru/practicum/shareit/client/BaseClient.java new file mode 100644 index 0000000..1a2d33a --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/client/BaseClient.java @@ -0,0 +1,121 @@ +package ru.practicum.shareit.client; + +import java.util.List; +import java.util.Map; + +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.lang.Nullable; +import org.springframework.web.client.HttpStatusCodeException; +import org.springframework.web.client.RestTemplate; + +public class BaseClient { + protected final RestTemplate rest; + + public BaseClient(RestTemplate rest) { + this.rest = rest; + } + + protected ResponseEntity get(String path) { + return get(path, null, null); + } + + protected ResponseEntity get(String path, long userId) { + return get(path, userId, null); + } + + protected ResponseEntity get(String path, Long userId, @Nullable Map parameters) { + return makeAndSendRequest(HttpMethod.GET, path, userId, parameters, null); + } + + protected ResponseEntity post(String path, T body) { + return post(path, null, null, body); + } + + protected ResponseEntity post(String path, long userId, T body) { + return post(path, userId, null, body); + } + + protected ResponseEntity post(String path, Long userId, @Nullable Map parameters, T body) { + return makeAndSendRequest(HttpMethod.POST, path, userId, parameters, body); + } + + protected ResponseEntity put(String path, long userId, T body) { + return put(path, userId, null, body); + } + + protected ResponseEntity put(String path, long userId, @Nullable Map parameters, T body) { + return makeAndSendRequest(HttpMethod.PUT, path, userId, parameters, body); + } + + protected ResponseEntity patch(String path, T body) { + return patch(path, null, null, body); + } + + protected ResponseEntity patch(String path, long userId) { + return patch(path, userId, null, null); + } + + protected ResponseEntity patch(String path, long userId, T body) { + return patch(path, userId, null, body); + } + + protected ResponseEntity patch(String path, Long userId, @Nullable Map parameters, T body) { + return makeAndSendRequest(HttpMethod.PATCH, path, userId, parameters, body); + } + + protected ResponseEntity delete(String path) { + return delete(path, null, null); + } + + protected ResponseEntity delete(String path, long userId) { + return delete(path, userId, null); + } + + protected ResponseEntity delete(String path, Long userId, @Nullable Map parameters) { + return makeAndSendRequest(HttpMethod.DELETE, path, userId, parameters, null); + } + + private ResponseEntity makeAndSendRequest(HttpMethod method, String path, Long userId, @Nullable Map parameters, @Nullable T body) { + HttpEntity requestEntity = new HttpEntity<>(body, defaultHeaders(userId)); + + ResponseEntity shareitServerResponse; + try { + if (parameters != null) { + shareitServerResponse = rest.exchange(path, method, requestEntity, Object.class, parameters); + } else { + shareitServerResponse = rest.exchange(path, method, requestEntity, Object.class); + } + } catch (HttpStatusCodeException e) { + return ResponseEntity.status(e.getStatusCode()).body(e.getResponseBodyAsByteArray()); + } + return prepareGatewayResponse(shareitServerResponse); + } + + private HttpHeaders defaultHeaders(Long userId) { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setAccept(List.of(MediaType.APPLICATION_JSON)); + if (userId != null) { + headers.set("X-Sharer-User-Id", String.valueOf(userId)); + } + return headers; + } + + private static ResponseEntity prepareGatewayResponse(ResponseEntity response) { + if (response.getStatusCode().is2xxSuccessful()) { + return response; + } + + ResponseEntity.BodyBuilder responseBuilder = ResponseEntity.status(response.getStatusCode()); + + if (response.hasBody()) { + return responseBuilder.body(response.getBody()); + } + + return responseBuilder.build(); + } +} diff --git a/gateway/src/main/resources/application.properties b/gateway/src/main/resources/application.properties new file mode 100644 index 0000000..2ee0851 --- /dev/null +++ b/gateway/src/main/resources/application.properties @@ -0,0 +1,7 @@ +logging.level.org.springframework.web.client.RestTemplate=DEBUG +#logging.level.org.apache.http=DEBUG +#logging.level.httpclient.wire=DEBUG + +server.port=8080 + +shareit-server.url=http://localhost:9090 \ No newline at end of file diff --git a/server/Dockerfile b/server/Dockerfile new file mode 100644 index 0000000..0ff1817 --- /dev/null +++ b/server/Dockerfile @@ -0,0 +1,5 @@ +FROM eclipse-temurin:21-jre-jammy +VOLUME /tmp +ARG JAR_FILE=target/*.jar +COPY ${JAR_FILE} app.jar +ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /app.jar"] \ No newline at end of file diff --git a/server/pom.xml b/server/pom.xml new file mode 100644 index 0000000..566db3e --- /dev/null +++ b/server/pom.xml @@ -0,0 +1,86 @@ + + + 4.0.0 + + ru.practicum + shareit + 0.0.1-SNAPSHOT + + + shareit-server + 0.0.1-SNAPSHOT + + ShareIt Server + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.postgresql + postgresql + runtime + + + + com.h2database + h2 + runtime + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + org.projectlombok + lombok + true + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + + coverage + + + + org.jacoco + jacoco-maven-plugin + + + + + + + diff --git a/server/src/main/java/ru/practicum/shareit/ShareItServer.java b/server/src/main/java/ru/practicum/shareit/ShareItServer.java new file mode 100644 index 0000000..303541d --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/ShareItServer.java @@ -0,0 +1,13 @@ +package ru.practicum.shareit; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ShareItServer { + + public static void main(String[] args) { + SpringApplication.run(ShareItServer.class, args); + } + +} From 26675c07d4cf70fdf8bc08441f37c8f2a0b9f459 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 18:00:49 +0400 Subject: [PATCH 16/55] test fix --- .run/ShareItGateway.run.xml | 15 + .run/ShareItServer.run.xml | 15 + db/shareit.mv.db | Bin 0 -> 36864 bytes db/shareit.trace.db | 2616 +++++++++++++++++ docker-compose.yml | 39 + gateway/Dockerfile | 5 + gateway/pom.xml | 70 + .../ru/practicum/shareit/ShareItGateway.java | 12 + .../shareit/booking/BookingClient.java | 83 + .../booking/dto/BookItemRequestDto.java | 20 + .../shareit/booking/dto/BookingState.java | 27 + .../practicum/shareit/client/BaseClient.java | 121 + .../src/main/resources/application.properties | 7 + server/Dockerfile | 5 + server/pom.xml | 86 + .../ru/practicum/shareit/ShareItServer.java | 13 + 16 files changed, 3134 insertions(+) create mode 100644 .run/ShareItGateway.run.xml create mode 100644 .run/ShareItServer.run.xml create mode 100644 db/shareit.mv.db create mode 100644 db/shareit.trace.db create mode 100644 docker-compose.yml create mode 100644 gateway/Dockerfile create mode 100644 gateway/pom.xml create mode 100644 gateway/src/main/java/ru/practicum/shareit/ShareItGateway.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/booking/BookingClient.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/booking/dto/BookItemRequestDto.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingState.java create mode 100644 gateway/src/main/java/ru/practicum/shareit/client/BaseClient.java create mode 100644 gateway/src/main/resources/application.properties create mode 100644 server/Dockerfile create mode 100644 server/pom.xml create mode 100644 server/src/main/java/ru/practicum/shareit/ShareItServer.java diff --git a/.run/ShareItGateway.run.xml b/.run/ShareItGateway.run.xml new file mode 100644 index 0000000..32c8129 --- /dev/null +++ b/.run/ShareItGateway.run.xml @@ -0,0 +1,15 @@ + + + + \ No newline at end of file diff --git a/.run/ShareItServer.run.xml b/.run/ShareItServer.run.xml new file mode 100644 index 0000000..a8ed9e5 --- /dev/null +++ b/.run/ShareItServer.run.xml @@ -0,0 +1,15 @@ + + + + \ No newline at end of file diff --git a/db/shareit.mv.db b/db/shareit.mv.db new file mode 100644 index 0000000000000000000000000000000000000000..d1505832982f86011e978ce870b95ade91934ad3 GIT binary patch literal 36864 zcmeHwNo*romRLxsNHG`XzGp2_%BsrDDiu5SMZlmH+(~g?wAI3jW56B^=45yZgKl6>M!PN^z_4M=$p^#B#W!R8B1lT4QdBW} zvbx(<6d?WoBYyn<-urL++f!_vUQ_F~R$FHWX~FEHb&4d(HLcpQYU_v**R(oPtaWNl zbCA+T`Z^^E0?i5j;SOrcjdN;|xX>SylJ(EQ2%y8IaL6k=J-1 z&yy;pNbpKvID@80$OxJ$@dz>!V+b7WgJTdn5(W55QW$|Tpt7QiyrgSBUL`5S(;{Sa ziRKu{=mte0iSqG=O42-qd;-M?qJ%V`z>@|=ij+^#S(4J=bHU&!gA+xcNYT6oZ+#*s zvLeYDK9M(gPLOz?sKB^MI^$A95+y*?BMYUGgA6C2cWkHPuhRZTx7D^C9JukfiJ06QoO^#o>uTaqvWES&b$kgLH#oD8(llqDE7^1{sCs zXp;3wq)su2)qD~yfgNz42(-pfU>_tfMPTG8pQIyJ0E^{Q7>0#{;Zs;rBUzF5DWafC zlnNOzpMr?^Wkmt=rK-zd1{qD{d@4n9EDZ)orI0|Xis(~m5($QYAj1j_OMT3Q60ljO^{VkS24K{pUJp-wZP}3l_7~nRCmxfm?q4NBNt2}ht_^HVv?a^z!EV`A}hwTmTq6}99)^&qktD)Zd z$O&HSD)sfz!p-2r0ilIy9}ZVVybocShT#R3AMa6`_TkX&p6F5XKphS3v@g%!zsuaUyerq7loESXHdL}&>4LW zXiNVBc#ary7HCHcbmJ6axM^Pkg#=hnn+h#+9-aa$z)gHfcsz706Q?>w3_n?cezAfl z%R$<>BwFg?ptA!L5 zk+i^iNYk9cX(AfHHq=qm+ghM6(3A+j3jC_@tHUq4K+`1rQjq5tqy>IKTwoSBC`s_E z!LOS);8$1>pdPeAGZ?n`#UtMmb`!hgt%Um#!yV_qXrQ*@H}#9|;fL35)F zKgvj>j55loql`An=%Wl8WsG5lCP$fJPu%Y>jF#uQ;UzuETc+oS%k&f!%`VD%YxWfD zE!y)iCp;4b-aQP({qwy5#o+l@JWG`l(ml4X(3&1k0c*hY;0AZ^Oo~D zUeMNTP3trjOY5zZI!TJq+P^sllpg|Wcz{wPK*!*80RqV2f}sn$3*`xj-o^n%9)k*P z!w;ha#g`H=G-VS(iM9YZ0JJ}J>6J62+7QaO3Y2_iXGg3Xsv zi4+thQm|V38HT;TJV;?9#4WoUAsDuSEzu7k#W4KOzVy=hpE(8Q6qr+BPJv$^3XBZ= zX#c%?e2ZRKJHACPGNjH*2J>q6(Z^f4JnCQc>@_#C*ZjapOW;eKIskxNt4JCm>{E|y zvZ5+*K;Q&&ac}^@7}#CX;KzIX#q)#x|NlJL|NjRtglFyl!}Epjef9o7?z{4{g~dmh z4SCSXM_mvrO^43VZNA3bynq3N|h%P17jYjQ3H9k|>HJAtQhv zC^9~prCHeS*O!NmtdEAe672ZIOI;tdE6F8t`uoA4jSNsWX(1V>De?4AIB2l+L=l zMc@H?E<9uegEe?&mL;Bfos)wPU+0mAUnZSjYVmQlO}C4#tLgpxG7^JxN1 zlXTb-)+9rabXN3fDoslogCN675^PfYbW+zzUetU#%jt|JkUpK4VD*5dm!TVup$(rd z@RUv=cq3>ehYaL{Hc8l_rhK{r%8^vz$#6*yGO)W1C(wMlA!)jyyBULmooLlJT2WXw zNJ@ZSeQ<=zV0qYk9xYe+3;>i;VY}N<1ON&)pAA(&G-9Ne8j4rNkFUJbd4uy!B{+vS zek^VlUi}ub&73U$v)r6-At(I$qfDPVYy$%a`(_0=^a?A#u!Hw@0G7;QT^%{d($L$p zp3;5gh<`8(oGDmS_dtB*-T(SG2(H=d3!4}41vtSDGt~=!^_O0XfA6)Ghu2^W`(XLc zm+%#AVe!HeesS4%>GGAUE7)7ayE}z&kqG9)axq*El;X({LDTFivAXj8g~3yzR0!vZ zc!Wr2ibQxPUMLob)lk5Fx=Iw}WRZ9(fZGO6oo28C0?!9MC1P?RMm(iO6?R^DIDoEE z;2y#LpdpeXqDXL|D8%V7Gvyd$7;ySrS7Cw)>+f)S9MQbUX_C${PYF4cil?6t#L9mk zK@*gNv2che%7J8*H1~KYyEe zvhufwyC__Pd9%fK+1^w_)MXt)FM{9WRml{T;m(BbSsgFy}v!A!bP%**bOoeb*9 zL$`-9FrIlW6Y+E?yfapR5~Qbqf;r;hbR347aL1@Xgn)0t4N@5lP{nx2Z+a0my@ zMdJBF@%b}A^XPAmCU9=agZ0_!pp)mbK=~Xb@<+VA%EKo$urLL+sl18#iy=zH|59{Ra;pJ$~)=H{K-PT7B~NJMUtC z!2e$_yb1yYSBXd_AC5=Uu8w-PIsw-V0t6W5!;x^_wFO|@P8*ehvPoya@B}x%1ETiR z#Ubsc7^66tkgvlSu@cEJk)Ti(=wPr6x3D7RfE1R?p%BS)3@P$qT6{s!rWm8YnLNr{ zV8dJ!42Cw7NrvV0P*5}5U~k8SbW(oDUR-{@bmQf$+-%rSi0_1zqs14*dFdtyLS$xn zX6aJ`JsfC{L6&Y!m*+vfnWWk6Ub+K_{m~RbeJRWW zr{wgwzZqoI1$t&7UAhbO*qfam0N8~8G8)&RBJtREf+Y8VB!B!$NCFacmhN)9oQWy` z`k7=InUJBYG}K;8_d$LA#aE~=kmyZtSHBJo7NAK!z)?~emU)FT%gRz&46t-L!pR{f z5agMN^rAcMiFCObcb#hYFO*Z+)A}o%4t-S>cT~qT&`>qG*q)`bpqFB)aGq}hD(u0_ zsj%75pRU3v@ar((v50uy=VC=)QZSrx|ne-TR^m1xUUR`<&sO-!t zwdY|n8t4g`eGO3icT;5cC2<3XVM1s}oHc{Q0@!ED>qzBzau3QV6i$YVVIn9Of^rCE zE(7ml>2)B{hclDtwCi?^=Cf5dJ7oI_D!lEu z>}|mAiz(vyvgiRzOo-=*t!5FP}iYRp|;nt1{$2LRFu|LhpkXRBjeKcUCmWv8FM zDngx}V4ie36RiOJGj;y>GMS6u**YIqcHem4y733mj-o^Sj3y$YwyhtU)=pMw`(vopLiLTFQnhWrW;f_; zvQtCEri081a<+nX)Ie5?->5Vcv+h=4b4j=t(Lz0<=-7?s$HA&&w%WaN!me7ajjG)q zRpjzf1Z(w(h?(^!a@wCHQQK^rN_o3#wh=pCmCq*4dfh}sTG64?Bx-a}on}uu6>?dm zJ2tUp*J};M`XsMdx>?QyZOcOSIyF`k_hm!Kvdk6{br72}xD*l}pD0m4p?h;?+ps2o)s3$@#Rc-AnH!$>FO!mnosuo2rx1%f6zmT5ceIG{HQ zLA&F$Ef~i^drC^FYj(ZiFKE?<*=|$Z1o}7gNn~4!qZ6r))2#MB4gq7d9kbK&ha2#C z46|E1G2}qEZRp)>wJfDgBpm<85kN^dQF*%uBPfYuAKcEQ6h|`^A`hhdC}Fou#X|lV z{9%}}YIkx;r32(40>Fx>_n};=E2vy(qYiX-QV-6e|J9Q}@%?b=3HIVz)6-|q-+O=U z1OIoxdNC~AG{Eq?Tfiyqe-g5YkkYBZe-vu>cI3L@-vq{{#;JO*Gz8#;nfBmrf!Q$Y z05LsY^?okZ@&l(JBIt_8ZW5V>KW!q*J{%jS2f2XDs~~Q6wT_$*;ck21F2ewT7+5D5 z;SaM(#ZrijV-fLq{A1aHI7+A-Q=sFz$c|NfR7fa5W+H&JY8%xR=OY-3hG{9~08*-o zHP-jzLcVHSx&qpu-3HlHKZ+=D|3UF@c7Pb%IN@I_MNr)Y#Sya)LEMN?sGw~2;GUjb zZzJmv27QRoSdzq?Kr3>jC1K~E@an1JX_GN)kdF0924n^f2iHqaoK*7Pbd~( zPGoIRYg+XqxrR`~pHv(W+=;&5E(Gg69ViR`{0c-7luEFQ>Mf+uV?*^$4lYV+CNX67 z4+oN8&TJysjvX8QcXLrd*3oScyt-E1O`$prf+9^y^3yB;r?|+vVy;Do|3<5PGME%K z*7>t75Kgn+vk0IG2)--JCAn3t_qcJ+d!8=X%_JiUJ9Q5@3z?v>KM6O0_1vfrnydIH>aJx2c29Q^=`@>Y516S| z4k#V1%8r>U{DWLdaR=hCZXdR4=2pyB0fvd;^5+X02m#?5whAbiPk<#IQ0$;uEywPG zCOkHe_;+&Qx~JO)O6cPx=pt9ToJy+=_Hc}F;PNZd zY9={>6qN^ZgH-|Dp;(q}ZHJU*6rhEzl*@BS(kb`i;tk#mqF^JiG+P!fF+QX?>N~f_WH+l+ityQsG)iD}y z*`QKKDgg?pfm(Y7u!=zV9&*@mL(CUsPz)VsSdG|%d%zXT1}^X)tEUOng)}^`^?-R> z?N5t6$2{mDKiF?u1*u`im<{|Op7`X_=OaJp%8!57^MkI+Up{>8y=lA!*YJLG^}Clp zUwVk$nPxklOqJBNDg1T!OjE&5A>G62y8GFSLiP3;%HYj&mEY2IcWm(tU(SCHr&DKf z-p%P||BZ7M`1|Jw^7GUB;_*~d^z^IL)vf7n#_Bm5`<-bz_1bxE)}yJ`^@B6i3~=q@ z|NM=gU-^9LHEb%A`p$P)Z%_4(uAkxLT{*);rKhQj*UmTT-V_bqNSd$_$J52Yt^`8{b0|8 zYgobl3eD_O$y$+bM)t1Alji4oXMcY+ef`wwislSI`6fik-`-)$LqT zi06A7a3BM}mQL4Nbh8xW#Lf!c?R7*lcaR8(g+S$iN*kRR!&Vu(U?{Aqi4tQ9s6y5^ zBkh2-)2fNd_y+zM!>^}9R7tG~mB>B}af)*?Xnc-c8)T;26X-Q#P@ogLzH86Ig+mw`|;9_R80AkKSq@Rl4*FO-IyfI2e*U zrI=7^X3;??d9Yolx1+^GZ__d)lMm4)DYw_iGM2u_XzASz{0WBNP8YUpgAF8uNBI?c zzZw>kVyoW|RLwwAI|zqh@>~ej1SY(jXdXrqo!vT2yj!HxI*jIm^3I`*zk}g-(yc=} za=@646k4IP`@Q|zLA!W#!1WV{;f5?%$?dJIn9so!YTK5Ld`7Ny_mf7ZSLD@bJyDYJ zr?9w@W-Y6;T}3sK0*#c|%Iv4Av>Dwi9aZe8nNm73irVp3Gawx0K$ugpq{?-I+sNMS zMteD4#-C&Oy>u?w<%+>hq0?NU8zELZ(ga5jg$%Ql;Eqad3#MOOEzyk@kF0j08En|W zU9#PXbdpTYZd)?`K8D{R}ZH8c2SaX62l*+^;&vo#{e^#TA^hwQ>gbl=?=YhkY+X` z{ak#vXa!KXcd*Y@&F)^W$8QB>YF|kOa=BegGG&~`@JDH_bXYKpoEFhQ#paHJ(dgdc zVdThyaVYd#JCVd5+G4i#NN~$)HX{nz+_jxx`+#rKu})uBa!{5J;fA9b&AL8^QoP9iKJivW%?Vq@fV~f}YYzf1$i`X*e!!BW$ zu`AeBYz4c9UB_-fbdy`yZR`$q7rTeu#~xr0u}9cr7rF(S{Xf_L>C&YWF94&i{D+@> z_rLw%XSc8`Uk)?)ZT#KMZ8;9-F{AVuukYZ`l5#ei&uoQ5%o*?R;_r<x>7?vH-rHV&EZ|0~Gg4{_!gHn{W)&;Rn@ z4l8`|Q@6q+oI9y->5K}GapAZEknAZ#-S}rN#qisU_?-**-6cQ(zkd;bu#7+S;g2qX z;`OQ}ZvJzx+PjPRvkUlpOZXa&`!C|uGS2vL?h-Dz)jnswy!9`Z7J>d4=zuWW?wDaY zm@yeAzq!4~Cd0{&+LgP3;-1uMwDU=Or%(hdYQ~f8qNyoy7e5!~|MI6lyY&Zuwgzgk zdU%-WW=K*?XyCXB5&DQXq)2r$6*HVzuFk7FNQ@r_l>My(dq=JBBxoEkbldpTFMoFH zfBo1GP~9TM+dp!l!XGXU(78okyYpl33A5-yzW4?G@9&-+HV0y?{c6MJ{PA%#ni<08 z48qY&M9mr9d7m|8ju(f5F%^8%CE_h*ch9!i&usOq$VR&J41|@@4y|6jM5(hDekJ~gj!wZ`; zeCGzgKY0gt0ZvMcuD%d9XA5{9!sdK$4>aNicHuw$<{*XJ8EzSFXJFWGZD5!35Utrw zVQbG#VQUZ4&#)`M2Ul+0^vA#JrLfe6VZXhBUH!lR5Yo@EYyU9<=@;0w|MA-x_B$AM z?XTgg$M0-l*EjzTq@Q8eO94o~z^<1e!ol}3?E2sR3{rUi_W&&Tx&8xacm6Y{z?=ee w3d|`mr@)*7a|+BUFsHzr0&@z?De(U{1y0A`8;_!Q9RE*o(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.runSync(ConnectJob.java:109) + at org.jkiss.dbeaver.ui.actions.datasource.DataSourceHandler.connectToDataSource(DataSourceHandler.java:123) + at org.jkiss.dbeaver.ui.actions.datasource.UIServiceConnectionsImpl.initConnection(UIServiceConnectionsImpl.java:87) + at org.jkiss.dbeaver.model.DBUtils.initDataSource(DBUtils.java:2455) + at org.jkiss.dbeaver.model.navigator.DBNDataSource.initializeNode(DBNDataSource.java:159) + at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:226) + at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:1) + at org.jkiss.dbeaver.model.navigator.DBNUtils.getNodeChildrenFiltered(DBNUtils.java:94) + at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:49) + at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:23:17.483064+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:23:24.233009+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:23:24.234007+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:24:03.110022+04:00 database: flush +org.h2.message.DbException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.get(DbException.java:212) + at org.h2.message.DbException.convert(DbException.java:407) + at org.h2.mvstore.db.Store.lambda$new$0(Store.java:122) + at org.h2.mvstore.MVStore.handleException(MVStore.java:1546) + at org.h2.mvstore.MVStore.panic(MVStore.java:371) + at org.h2.mvstore.MVStore.(MVStore.java:291) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:2035) + at org.h2.mvstore.db.Store.(Store.java:133) + at org.h2.engine.Database.(Database.java:326) + at org.h2.engine.Engine.openSession(Engine.java:92) + at org.h2.engine.Engine.openSession(Engine.java:222) + at org.h2.engine.Engine.createSession(Engine.java:201) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:343) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:125) + at org.h2.Driver.connect(Driver.java:59) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:52) + at org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer.runScripts(DataSourceScriptDatabaseInitializer.java:87) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.runScripts(AbstractScriptDatabaseInitializer.java:146) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applyScripts(AbstractScriptDatabaseInitializer.java:108) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applySchemaScripts(AbstractScriptDatabaseInitializer.java:98) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.initializeDatabase(AbstractScriptDatabaseInitializer.java:76) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.afterPropertiesSet(AbstractScriptDatabaseInitializer.java:66) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) + at ru.practicum.shareit.ShareItApp.main(ShareItApp.java:10) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:566) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + ... 51 more +Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7] + at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996) + at org.h2.mvstore.SingleFileStore.lockFileChannel(SingleFileStore.java:143) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:117) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:81) + at org.h2.mvstore.MVStore.(MVStore.java:286) + ... 45 more +2025-06-15 10:24:15.622555+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Синтаксическая ошибка в выражении SQL "CREATE TABLE IF NOT EXISTS items ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar NOT NULL, description varchar NOT NULL, available boolean, [*])"; ожидалось "identifier" +Syntax error in SQL statement "CREATE TABLE IF NOT EXISTS items ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar NOT NULL, description varchar NOT NULL, available boolean, [*])"; expected "identifier"; SQL statement: +CREATE TABLE IF NOT EXISTS items ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar NOT NULL, description varchar NOT NULL, available boolean, ) [42001-224] +2025-06-15 10:25:21.880348+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:25:22.027954+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:25:22.027954+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:25:27.917201+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:25:51.041350+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.runSync(ConnectJob.java:109) + at org.jkiss.dbeaver.ui.actions.datasource.DataSourceHandler.connectToDataSource(DataSourceHandler.java:123) + at org.jkiss.dbeaver.ui.actions.datasource.UIServiceConnectionsImpl.initConnection(UIServiceConnectionsImpl.java:87) + at org.jkiss.dbeaver.model.DBUtils.initDataSource(DBUtils.java:2455) + at org.jkiss.dbeaver.model.navigator.DBNDataSource.initializeNode(DBNDataSource.java:159) + at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:226) + at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:1) + at org.jkiss.dbeaver.model.navigator.DBNUtils.getNodeChildrenFiltered(DBNUtils.java:94) + at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:49) + at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:25:51.304645+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:25:51.304645+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:25:51.421333+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:53:07.537143+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:53:07.657821+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:53:07.658818+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:53:07.658818+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:54:16.640552+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:54:16.766215+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:54:16.767213+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:54:16.767213+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:55:57.804961+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:55:57.974507+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:55:57.975505+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 10:55:57.975505+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 11:52:19.042831+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 11:52:19.279200+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 11:52:19.279200+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 11:52:19.280197+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:06:21.364223+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.ui.editors.DatabaseLazyEditorInput.initializeRealInput(DatabaseLazyEditorInput.java:266) + at org.jkiss.dbeaver.ui.editors.ProgressEditorPart$InitNodeService.evaluate(ProgressEditorPart.java:173) + at org.jkiss.dbeaver.ui.editors.ProgressEditorPart$InitNodeService.evaluate(ProgressEditorPart.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:06:23.021791+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:06:23.023785+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:06:27.743161+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:09:35.028259+04:00 database: flush +org.h2.message.DbException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.get(DbException.java:212) + at org.h2.message.DbException.convert(DbException.java:407) + at org.h2.mvstore.db.Store.lambda$new$0(Store.java:122) + at org.h2.mvstore.MVStore.handleException(MVStore.java:1546) + at org.h2.mvstore.MVStore.panic(MVStore.java:371) + at org.h2.mvstore.MVStore.(MVStore.java:291) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:2035) + at org.h2.mvstore.db.Store.(Store.java:133) + at org.h2.engine.Database.(Database.java:326) + at org.h2.engine.Engine.openSession(Engine.java:92) + at org.h2.engine.Engine.openSession(Engine.java:222) + at org.h2.engine.Engine.createSession(Engine.java:201) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:343) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:125) + at org.h2.Driver.connect(Driver.java:59) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:52) + at org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer.runScripts(DataSourceScriptDatabaseInitializer.java:87) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.runScripts(AbstractScriptDatabaseInitializer.java:146) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applyScripts(AbstractScriptDatabaseInitializer.java:108) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applySchemaScripts(AbstractScriptDatabaseInitializer.java:98) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.initializeDatabase(AbstractScriptDatabaseInitializer.java:76) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.afterPropertiesSet(AbstractScriptDatabaseInitializer.java:66) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) + at ru.practicum.shareit.ShareItApp.main(ShareItApp.java:10) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:566) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + ... 51 more +Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7] + at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996) + at org.h2.mvstore.SingleFileStore.lockFileChannel(SingleFileStore.java:143) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:117) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:81) + at org.h2.mvstore.MVStore.(MVStore.java:286) + ... 45 more +2025-06-15 17:10:19.086414+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:10:19.293860+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:10:19.294857+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:10:19.502302+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:12:02.590577+04:00 database: flush +org.h2.message.DbException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.get(DbException.java:212) + at org.h2.message.DbException.convert(DbException.java:407) + at org.h2.mvstore.db.Store.lambda$new$0(Store.java:122) + at org.h2.mvstore.MVStore.handleException(MVStore.java:1546) + at org.h2.mvstore.MVStore.panic(MVStore.java:371) + at org.h2.mvstore.MVStore.(MVStore.java:291) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:2035) + at org.h2.mvstore.db.Store.(Store.java:133) + at org.h2.engine.Database.(Database.java:326) + at org.h2.engine.Engine.openSession(Engine.java:92) + at org.h2.engine.Engine.openSession(Engine.java:222) + at org.h2.engine.Engine.createSession(Engine.java:201) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:343) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:125) + at org.h2.Driver.connect(Driver.java:59) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:52) + at org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer.runScripts(DataSourceScriptDatabaseInitializer.java:87) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.runScripts(AbstractScriptDatabaseInitializer.java:146) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applyScripts(AbstractScriptDatabaseInitializer.java:108) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applySchemaScripts(AbstractScriptDatabaseInitializer.java:98) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.initializeDatabase(AbstractScriptDatabaseInitializer.java:76) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.afterPropertiesSet(AbstractScriptDatabaseInitializer.java:66) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) + at ru.practicum.shareit.ShareItApp.main(ShareItApp.java:10) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:566) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + ... 51 more +Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7] + at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996) + at org.h2.mvstore.SingleFileStore.lockFileChannel(SingleFileStore.java:143) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:117) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:81) + at org.h2.mvstore.MVStore.(MVStore.java:286) + ... 45 more +2025-06-15 17:15:33.389813+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:15:33.575317+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:15:33.575317+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:15:33.746859+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:15:40.009108+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:16:31.330835+04:00 database: flush +org.h2.message.DbException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.get(DbException.java:212) + at org.h2.message.DbException.convert(DbException.java:407) + at org.h2.mvstore.db.Store.lambda$new$0(Store.java:122) + at org.h2.mvstore.MVStore.handleException(MVStore.java:1546) + at org.h2.mvstore.MVStore.panic(MVStore.java:371) + at org.h2.mvstore.MVStore.(MVStore.java:291) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:2035) + at org.h2.mvstore.db.Store.(Store.java:133) + at org.h2.engine.Database.(Database.java:326) + at org.h2.engine.Engine.openSession(Engine.java:92) + at org.h2.engine.Engine.openSession(Engine.java:222) + at org.h2.engine.Engine.createSession(Engine.java:201) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:343) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:125) + at org.h2.Driver.connect(Driver.java:59) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:52) + at org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer.runScripts(DataSourceScriptDatabaseInitializer.java:87) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.runScripts(AbstractScriptDatabaseInitializer.java:146) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applyScripts(AbstractScriptDatabaseInitializer.java:108) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applySchemaScripts(AbstractScriptDatabaseInitializer.java:98) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.initializeDatabase(AbstractScriptDatabaseInitializer.java:76) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.afterPropertiesSet(AbstractScriptDatabaseInitializer.java:66) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) + at ru.practicum.shareit.ShareItApp.main(ShareItApp.java:10) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:566) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + ... 51 more +Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7] + at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996) + at org.h2.mvstore.SingleFileStore.lockFileChannel(SingleFileStore.java:143) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:117) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:81) + at org.h2.mvstore.MVStore.(MVStore.java:286) + ... 45 more +2025-06-15 17:16:38.545537+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.runSync(ConnectJob.java:109) + at org.jkiss.dbeaver.ui.actions.datasource.DataSourceHandler.connectToDataSource(DataSourceHandler.java:123) + at org.jkiss.dbeaver.ui.actions.datasource.UIServiceConnectionsImpl.initConnection(UIServiceConnectionsImpl.java:87) + at org.jkiss.dbeaver.model.DBUtils.initDataSource(DBUtils.java:2455) + at org.jkiss.dbeaver.model.navigator.DBNDataSource.initializeNode(DBNDataSource.java:159) + at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:226) + at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:1) + at org.jkiss.dbeaver.model.navigator.DBNUtils.getNodeChildrenFiltered(DBNUtils.java:94) + at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:49) + at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:16:38.822795+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:16:38.822795+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) + at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) + at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) + at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) + at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) + at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:16:38.959430+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:16:38.960427+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:16:41.950429+04:00 database: flush +org.h2.message.DbException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.get(DbException.java:212) + at org.h2.message.DbException.convert(DbException.java:407) + at org.h2.mvstore.db.Store.lambda$new$0(Store.java:122) + at org.h2.mvstore.MVStore.handleException(MVStore.java:1546) + at org.h2.mvstore.MVStore.panic(MVStore.java:371) + at org.h2.mvstore.MVStore.(MVStore.java:291) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:2035) + at org.h2.mvstore.db.Store.(Store.java:133) + at org.h2.engine.Database.(Database.java:326) + at org.h2.engine.Engine.openSession(Engine.java:92) + at org.h2.engine.Engine.openSession(Engine.java:222) + at org.h2.engine.Engine.createSession(Engine.java:201) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:343) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:125) + at org.h2.Driver.connect(Driver.java:59) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:52) + at org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer.runScripts(DataSourceScriptDatabaseInitializer.java:87) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.runScripts(AbstractScriptDatabaseInitializer.java:146) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applyScripts(AbstractScriptDatabaseInitializer.java:108) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applySchemaScripts(AbstractScriptDatabaseInitializer.java:98) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.initializeDatabase(AbstractScriptDatabaseInitializer.java:76) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.afterPropertiesSet(AbstractScriptDatabaseInitializer.java:66) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) + at ru.practicum.shareit.ShareItApp.main(ShareItApp.java:10) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:566) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + ... 51 more +Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7] + at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996) + at org.h2.mvstore.SingleFileStore.lockFileChannel(SingleFileStore.java:143) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:117) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:81) + at org.h2.mvstore.MVStore.(MVStore.java:286) + ... 45 more +2025-06-15 17:22:35.220042+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "REQUEST" не найден +Column "REQUEST" not found; SQL statement: +insert into items (available,description,name,owner_id,request,id) values (?,?,?,?,?,default) [42122-224] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.table.Table.getColumn(Table.java:759) + at org.h2.command.Parser.parseColumn(Parser.java:1190) + at org.h2.command.Parser.parseColumnList(Parser.java:1175) + at org.h2.command.Parser.parseInsert(Parser.java:1549) + at org.h2.command.Parser.parsePrepared(Parser.java:719) + at org.h2.command.Parser.parse(Parser.java:592) + at org.h2.command.Parser.parse(Parser.java:564) + at org.h2.command.Parser.prepareCommand(Parser.java:483) + at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:639) + at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:559) + at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1166) + at org.h2.jdbc.JdbcPreparedStatement.(JdbcPreparedStatement.java:93) + at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:1149) + at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:363) + at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) + at org.hibernate.engine.jdbc.internal.MutationStatementPreparerImpl$3.doPrepare(MutationStatementPreparerImpl.java:78) + at org.hibernate.engine.jdbc.internal.MutationStatementPreparerImpl$StatementPreparationTemplate.prepareStatement(MutationStatementPreparerImpl.java:106) + at org.hibernate.engine.jdbc.internal.MutationStatementPreparerImpl.prepareStatement(MutationStatementPreparerImpl.java:80) + at org.hibernate.id.insert.GetGeneratedKeysDelegate.prepareStatement(GetGeneratedKeysDelegate.java:96) + at org.hibernate.engine.jdbc.mutation.internal.ModelMutationHelper.delegateStatementPreparation(ModelMutationHelper.java:131) + at org.hibernate.engine.jdbc.mutation.internal.ModelMutationHelper.lambda$standardPreparation$0(ModelMutationHelper.java:121) + at org.hibernate.engine.jdbc.mutation.internal.PreparedStatementDetailsStandard.resolveStatement(PreparedStatementDetailsStandard.java:87) + at org.hibernate.id.insert.GetGeneratedKeysDelegate.performMutation(GetGeneratedKeysDelegate.java:113) + at org.hibernate.engine.jdbc.mutation.internal.MutationExecutorSingleNonBatched.performNonBatchedOperations(MutationExecutorSingleNonBatched.java:47) + at org.hibernate.engine.jdbc.mutation.internal.AbstractMutationExecutor.execute(AbstractMutationExecutor.java:55) + at org.hibernate.persister.entity.mutation.InsertCoordinatorStandard.doStaticInserts(InsertCoordinatorStandard.java:194) + at org.hibernate.persister.entity.mutation.InsertCoordinatorStandard.coordinateInsert(InsertCoordinatorStandard.java:132) + at org.hibernate.persister.entity.mutation.InsertCoordinatorStandard.insert(InsertCoordinatorStandard.java:95) + at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:85) + at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:670) + at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:291) + at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:272) + at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:322) + at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:391) + at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:305) + at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:224) + at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:137) + at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:175) + at org.hibernate.event.internal.DefaultPersistEventListener.persist(DefaultPersistEventListener.java:93) + at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:77) + at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:54) + at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:127) + at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:757) + at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:741) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:364) + at jdk.proxy2/jdk.proxy2.$Proxy142.persist(Unknown Source) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:319) + at jdk.proxy2/jdk.proxy2.$Proxy142.persist(Unknown Source) + at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:629) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354) + at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:277) + at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:170) + at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:158) + at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:516) + at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:285) + at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:628) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:168) + at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:143) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:70) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:138) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:165) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223) + at jdk.proxy2/jdk.proxy2.$Proxy146.save(Unknown Source) + at ru.practicum.shareit.item.ItemServiceImpl.create(ItemServiceImpl.java:26) + at ru.practicum.shareit.item.ItemController.create(ItemController.java:27) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) + at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:174) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) + at ru.practicum.shareit.item.ItemController$$SpringCGLIB$$0.create() + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:113) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:904) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:1583) +2025-06-15 17:24:34.051791+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "REQUEST_ID" не найден +Column "REQUEST_ID" not found; SQL statement: +insert into items (available,description,name,owner_id,request_id,id) values (?,?,?,?,?,default) [42122-224] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.table.Table.getColumn(Table.java:759) + at org.h2.command.Parser.parseColumn(Parser.java:1190) + at org.h2.command.Parser.parseColumnList(Parser.java:1175) + at org.h2.command.Parser.parseInsert(Parser.java:1549) + at org.h2.command.Parser.parsePrepared(Parser.java:719) + at org.h2.command.Parser.parse(Parser.java:592) + at org.h2.command.Parser.parse(Parser.java:564) + at org.h2.command.Parser.prepareCommand(Parser.java:483) + at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:639) + at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:559) + at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1166) + at org.h2.jdbc.JdbcPreparedStatement.(JdbcPreparedStatement.java:93) + at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:1149) + at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:363) + at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) + at org.hibernate.engine.jdbc.internal.MutationStatementPreparerImpl$3.doPrepare(MutationStatementPreparerImpl.java:78) + at org.hibernate.engine.jdbc.internal.MutationStatementPreparerImpl$StatementPreparationTemplate.prepareStatement(MutationStatementPreparerImpl.java:106) + at org.hibernate.engine.jdbc.internal.MutationStatementPreparerImpl.prepareStatement(MutationStatementPreparerImpl.java:80) + at org.hibernate.id.insert.GetGeneratedKeysDelegate.prepareStatement(GetGeneratedKeysDelegate.java:96) + at org.hibernate.engine.jdbc.mutation.internal.ModelMutationHelper.delegateStatementPreparation(ModelMutationHelper.java:131) + at org.hibernate.engine.jdbc.mutation.internal.ModelMutationHelper.lambda$standardPreparation$0(ModelMutationHelper.java:121) + at org.hibernate.engine.jdbc.mutation.internal.PreparedStatementDetailsStandard.resolveStatement(PreparedStatementDetailsStandard.java:87) + at org.hibernate.id.insert.GetGeneratedKeysDelegate.performMutation(GetGeneratedKeysDelegate.java:113) + at org.hibernate.engine.jdbc.mutation.internal.MutationExecutorSingleNonBatched.performNonBatchedOperations(MutationExecutorSingleNonBatched.java:47) + at org.hibernate.engine.jdbc.mutation.internal.AbstractMutationExecutor.execute(AbstractMutationExecutor.java:55) + at org.hibernate.persister.entity.mutation.InsertCoordinatorStandard.doStaticInserts(InsertCoordinatorStandard.java:194) + at org.hibernate.persister.entity.mutation.InsertCoordinatorStandard.coordinateInsert(InsertCoordinatorStandard.java:132) + at org.hibernate.persister.entity.mutation.InsertCoordinatorStandard.insert(InsertCoordinatorStandard.java:95) + at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:85) + at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:670) + at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:291) + at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:272) + at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:322) + at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:391) + at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:305) + at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:224) + at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:137) + at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:175) + at org.hibernate.event.internal.DefaultPersistEventListener.persist(DefaultPersistEventListener.java:93) + at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:77) + at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:54) + at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:127) + at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:757) + at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:741) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:364) + at jdk.proxy2/jdk.proxy2.$Proxy142.persist(Unknown Source) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:319) + at jdk.proxy2/jdk.proxy2.$Proxy142.persist(Unknown Source) + at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:629) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354) + at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:277) + at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:170) + at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:158) + at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:516) + at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:285) + at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:628) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:168) + at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:143) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:70) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379) + at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:138) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:165) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223) + at jdk.proxy2/jdk.proxy2.$Proxy146.save(Unknown Source) + at ru.practicum.shareit.item.ItemServiceImpl.create(ItemServiceImpl.java:26) + at ru.practicum.shareit.item.ItemController.create(ItemController.java:27) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354) + at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) + at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:174) + at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) + at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) + at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) + at ru.practicum.shareit.item.ItemController$$SpringCGLIB$$0.create() + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) + at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) + at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) + at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) + at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) + at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) + at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) + at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) + at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) + at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) + at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:113) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) + at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:904) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) + at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) + at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) + at java.base/java.lang.Thread.run(Thread.java:1583) +2025-06-15 17:26:10.889380+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:26:11.100814+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:26:11.100814+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:26:11.101812+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:26:11.101812+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-15 17:26:33.515858+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Таблица "ITEMS" не найдена +Table "ITEMS" not found; SQL statement: +DROP TABLE ITEMS CASCADE [42102-232] +2025-06-15 17:26:46.065292+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Таблица "REQUEST" не найдена +Table "REQUEST" not found; SQL statement: +CREATE TABLE IF NOT EXISTS items ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar NOT NULL, description varchar NOT NULL, available boolean, owner_id BIGINT REFERENCES users (id), request_id BIGINT REFERENCES request (id) ) [42102-224] +2025-06-16 06:37:12.404905+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 06:37:18.829024+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 06:37:18.831019+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 06:37:18.832016+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 06:37:18.833013+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 06:37:18.834011+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 06:38:12.752513+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.runSync(ConnectJob.java:109) + at org.jkiss.dbeaver.ui.actions.datasource.DataSourceHandler.connectToDataSource(DataSourceHandler.java:123) + at org.jkiss.dbeaver.ui.actions.datasource.UIServiceConnectionsImpl.initConnection(UIServiceConnectionsImpl.java:87) + at org.jkiss.dbeaver.model.DBUtils.initDataSource(DBUtils.java:2455) + at org.jkiss.dbeaver.model.navigator.DBNDataSource.initializeNode(DBNDataSource.java:159) + at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:226) + at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:1) + at org.jkiss.dbeaver.model.navigator.DBNUtils.getNodeChildrenFiltered(DBNUtils.java:94) + at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:49) + at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 06:38:13.027828+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 06:38:13.028826+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 06:38:13.029823+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 06:38:13.031817+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 06:38:13.033812+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 07:49:33.065618+04:00 jdbc[3]: exception +java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. + at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) + at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) + at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) + at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) + at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) + at org.jkiss.dbeaver.runtime.jobs.ConnectJob.runSync(ConnectJob.java:109) + at org.jkiss.dbeaver.ui.actions.datasource.DataSourceHandler.connectToDataSource(DataSourceHandler.java:123) + at org.jkiss.dbeaver.ui.actions.datasource.UIServiceConnectionsImpl.initConnection(UIServiceConnectionsImpl.java:87) + at org.jkiss.dbeaver.model.DBUtils.initDataSource(DBUtils.java:2455) + at org.jkiss.dbeaver.model.navigator.DBNDataSource.initializeNode(DBNDataSource.java:159) + at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:226) + at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:1) + at org.jkiss.dbeaver.model.navigator.DBNUtils.getNodeChildrenFiltered(DBNUtils.java:94) + at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:49) + at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 07:49:33.300536+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 07:49:33.301534+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 07:49:33.301534+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 07:49:33.302531+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 07:49:33.302531+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден +Column "KEY_SEQ" not found [42122-232] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + at org.h2.message.DbException.get(DbException.java:223) + at org.h2.message.DbException.get(DbException.java:199) + at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) + at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) + at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) + at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) + at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) + at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) + at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) + at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) + at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) + at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) + at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) + at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) + at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) + at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) + at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) + at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) +2025-06-16 07:52:52.356997+04:00 database: flush +org.h2.message.DbException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.get(DbException.java:212) + at org.h2.message.DbException.convert(DbException.java:407) + at org.h2.mvstore.db.Store.lambda$new$0(Store.java:122) + at org.h2.mvstore.MVStore.handleException(MVStore.java:1546) + at org.h2.mvstore.MVStore.panic(MVStore.java:371) + at org.h2.mvstore.MVStore.(MVStore.java:291) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:2035) + at org.h2.mvstore.db.Store.(Store.java:133) + at org.h2.engine.Database.(Database.java:326) + at org.h2.engine.Engine.openSession(Engine.java:92) + at org.h2.engine.Engine.openSession(Engine.java:222) + at org.h2.engine.Engine.createSession(Engine.java:201) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:343) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:125) + at org.h2.Driver.connect(Driver.java:59) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) + at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) + at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) + at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) + at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:52) + at org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer.runScripts(DataSourceScriptDatabaseInitializer.java:87) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.runScripts(AbstractScriptDatabaseInitializer.java:146) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applyScripts(AbstractScriptDatabaseInitializer.java:108) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applySchemaScripts(AbstractScriptDatabaseInitializer.java:98) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.initializeDatabase(AbstractScriptDatabaseInitializer.java:76) + at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.afterPropertiesSet(AbstractScriptDatabaseInitializer.java:66) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) + at ru.practicum.shareit.ShareItApp.main(ShareItApp.java:10) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:566) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) + ... 51 more +Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7] + at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996) + at org.h2.mvstore.SingleFileStore.lockFileChannel(SingleFileStore.java:143) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:117) + at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:81) + at org.h2.mvstore.MVStore.(MVStore.java:286) + ... 45 more diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..abe6570 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,39 @@ +services: + gateway: + build: gateway + image: shareit-gateway + container_name: shareit-gateway + ports: + - "8080:8080" + depends_on: + - server + environment: + - SHAREIT_SERVER_URL=http://server:9090 + + server: + build: server + image: shareit-server + container_name: shareit-server + ports: + - "9090:9090" + depends_on: + - db + environment: + - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/shareit + - SPRING_DATASOURCE_USERNAME=shareit + - SPRING_DATASOURCE_PASSWORD=shareit + + db: + image: postgres:16.1 + container_name: postgres + ports: + - "6541:5432" + environment: + - POSTGRES_PASSWORD=shareit + - POSTGRES_USER=shareit + - POSTGRES_DB=shareit + healthcheck: + test: pg_isready -q -d $$POSTGRES_DB -U $$POSTGRES_USER + timeout: 5s + interval: 5s + retries: 10 \ No newline at end of file diff --git a/gateway/Dockerfile b/gateway/Dockerfile new file mode 100644 index 0000000..0ff1817 --- /dev/null +++ b/gateway/Dockerfile @@ -0,0 +1,5 @@ +FROM eclipse-temurin:21-jre-jammy +VOLUME /tmp +ARG JAR_FILE=target/*.jar +COPY ${JAR_FILE} app.jar +ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /app.jar"] \ No newline at end of file diff --git a/gateway/pom.xml b/gateway/pom.xml new file mode 100644 index 0000000..f3394c1 --- /dev/null +++ b/gateway/pom.xml @@ -0,0 +1,70 @@ + + + 4.0.0 + + ru.practicum + shareit + 0.0.1-SNAPSHOT + + + shareit-gateway + 0.0.1-SNAPSHOT + + ShareIt Gateway + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-validation + + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.hibernate.validator + hibernate-validator + + + + org.apache.httpcomponents.client5 + httpclient5 + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + org.projectlombok + lombok + true + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + \ No newline at end of file diff --git a/gateway/src/main/java/ru/practicum/shareit/ShareItGateway.java b/gateway/src/main/java/ru/practicum/shareit/ShareItGateway.java new file mode 100644 index 0000000..0aa75c3 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/ShareItGateway.java @@ -0,0 +1,12 @@ +package ru.practicum.shareit; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ShareItGateway { + public static void main(String[] args) { + SpringApplication.run(ShareItGateway.class, args); + } + +} diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/BookingClient.java b/gateway/src/main/java/ru/practicum/shareit/booking/BookingClient.java new file mode 100644 index 0000000..6cff564 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/booking/BookingClient.java @@ -0,0 +1,83 @@ +package ru.practicum.shareit.booking; + +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.http.ResponseEntity; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.stereotype.Service; +import org.springframework.web.util.DefaultUriBuilderFactory; + +import ru.practicum.shareit.booking.dto.BookItemRequestDto; +import ru.practicum.shareit.booking.dto.BookingState; +import ru.practicum.shareit.booking.dto.NewBookingDto; +import ru.practicum.shareit.client.BaseClient; + +@Service +public class BookingClient extends BaseClient { + private static final String API_PREFIX = "/bookings"; + private static final String BOOKING_ID_PATH = "/{bookingId}"; + private static final String BOOKING_PATH = BOOKING_ID_PATH + "?approved={approved}"; + + @Autowired + public BookingClient(@Value("${shareit-server.url}") String serverUrl, RestTemplateBuilder builder) { + super( + builder + .uriTemplateHandler(new DefaultUriBuilderFactory(serverUrl + API_PREFIX)) + .requestFactory(() -> new HttpComponentsClientHttpRequestFactory()) + .build() + ); + } + + public ResponseEntity getBookings(long userId, BookingState state, Integer from, Integer size) { + Map parameters = Map.of( + "state", state.name(), + "from", from, + "size", size + ); + return get("?state={state}&from={from}&size={size}", userId, parameters); + } + + + public ResponseEntity bookItem(long userId, BookItemRequestDto requestDto) { + return post("", userId, requestDto); + } + + public ResponseEntity getBooking(long userId, Long bookingId) { + return get("/" + bookingId, userId); + } + + public ResponseEntity create(NewBookingDto newBookingDto, long userId) { + return post("",userId,newBookingDto); + } + + /*public ResponseEntity approveBooking(long userId, long bookingId, boolean approved) { + Map uriVariables = Map.of("bookingId",bookingId,"approved", approved); + return patch(BOOKING_PATH,userId,uriVariables); + }*/ + + public ResponseEntity approveBooking(long userId, long bookingId, boolean approved) { + Map uriVariables = Map.of("bookingId",bookingId,"approved", approved); + return patch("/" + bookingId+"?approved="+approved, userId, approved); + } + + public ResponseEntity findById(long userId, long bookingId) { + return get("/" + bookingId,userId); + } + + public ResponseEntity findByBooker(long userId, BookingState state) { + Map parameters = Map.of( + "state", state.name() + ); + return get("?state={state}",userId,parameters); + } + + public ResponseEntity findByOwner(long userId, BookingState state) { + Map parameters = Map.of( + "state", state.name() + ); + return get("/owner", userId, parameters); + } +} diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookItemRequestDto.java b/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookItemRequestDto.java new file mode 100644 index 0000000..efe3980 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookItemRequestDto.java @@ -0,0 +1,20 @@ +package ru.practicum.shareit.booking.dto; + +import java.time.LocalDateTime; + +import jakarta.validation.constraints.Future; +import jakarta.validation.constraints.FutureOrPresent; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class BookItemRequestDto { + private long itemId; + @FutureOrPresent + private LocalDateTime start; + @Future + private LocalDateTime end; +} diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingState.java b/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingState.java new file mode 100644 index 0000000..135de62 --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingState.java @@ -0,0 +1,27 @@ +package ru.practicum.shareit.booking.dto; + +import java.util.Optional; + +public enum BookingState { + // Все + ALL, + // Текущие + CURRENT, + // Будущие + FUTURE, + // Завершенные + PAST, + // Отклоненные + REJECTED, + // Ожидающие подтверждения + WAITING; + + public static Optional from(String stringState) { + for (BookingState state : values()) { + if (state.name().equalsIgnoreCase(stringState)) { + return Optional.of(state); + } + } + return Optional.empty(); + } +} diff --git a/gateway/src/main/java/ru/practicum/shareit/client/BaseClient.java b/gateway/src/main/java/ru/practicum/shareit/client/BaseClient.java new file mode 100644 index 0000000..1a2d33a --- /dev/null +++ b/gateway/src/main/java/ru/practicum/shareit/client/BaseClient.java @@ -0,0 +1,121 @@ +package ru.practicum.shareit.client; + +import java.util.List; +import java.util.Map; + +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.lang.Nullable; +import org.springframework.web.client.HttpStatusCodeException; +import org.springframework.web.client.RestTemplate; + +public class BaseClient { + protected final RestTemplate rest; + + public BaseClient(RestTemplate rest) { + this.rest = rest; + } + + protected ResponseEntity get(String path) { + return get(path, null, null); + } + + protected ResponseEntity get(String path, long userId) { + return get(path, userId, null); + } + + protected ResponseEntity get(String path, Long userId, @Nullable Map parameters) { + return makeAndSendRequest(HttpMethod.GET, path, userId, parameters, null); + } + + protected ResponseEntity post(String path, T body) { + return post(path, null, null, body); + } + + protected ResponseEntity post(String path, long userId, T body) { + return post(path, userId, null, body); + } + + protected ResponseEntity post(String path, Long userId, @Nullable Map parameters, T body) { + return makeAndSendRequest(HttpMethod.POST, path, userId, parameters, body); + } + + protected ResponseEntity put(String path, long userId, T body) { + return put(path, userId, null, body); + } + + protected ResponseEntity put(String path, long userId, @Nullable Map parameters, T body) { + return makeAndSendRequest(HttpMethod.PUT, path, userId, parameters, body); + } + + protected ResponseEntity patch(String path, T body) { + return patch(path, null, null, body); + } + + protected ResponseEntity patch(String path, long userId) { + return patch(path, userId, null, null); + } + + protected ResponseEntity patch(String path, long userId, T body) { + return patch(path, userId, null, body); + } + + protected ResponseEntity patch(String path, Long userId, @Nullable Map parameters, T body) { + return makeAndSendRequest(HttpMethod.PATCH, path, userId, parameters, body); + } + + protected ResponseEntity delete(String path) { + return delete(path, null, null); + } + + protected ResponseEntity delete(String path, long userId) { + return delete(path, userId, null); + } + + protected ResponseEntity delete(String path, Long userId, @Nullable Map parameters) { + return makeAndSendRequest(HttpMethod.DELETE, path, userId, parameters, null); + } + + private ResponseEntity makeAndSendRequest(HttpMethod method, String path, Long userId, @Nullable Map parameters, @Nullable T body) { + HttpEntity requestEntity = new HttpEntity<>(body, defaultHeaders(userId)); + + ResponseEntity shareitServerResponse; + try { + if (parameters != null) { + shareitServerResponse = rest.exchange(path, method, requestEntity, Object.class, parameters); + } else { + shareitServerResponse = rest.exchange(path, method, requestEntity, Object.class); + } + } catch (HttpStatusCodeException e) { + return ResponseEntity.status(e.getStatusCode()).body(e.getResponseBodyAsByteArray()); + } + return prepareGatewayResponse(shareitServerResponse); + } + + private HttpHeaders defaultHeaders(Long userId) { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setAccept(List.of(MediaType.APPLICATION_JSON)); + if (userId != null) { + headers.set("X-Sharer-User-Id", String.valueOf(userId)); + } + return headers; + } + + private static ResponseEntity prepareGatewayResponse(ResponseEntity response) { + if (response.getStatusCode().is2xxSuccessful()) { + return response; + } + + ResponseEntity.BodyBuilder responseBuilder = ResponseEntity.status(response.getStatusCode()); + + if (response.hasBody()) { + return responseBuilder.body(response.getBody()); + } + + return responseBuilder.build(); + } +} diff --git a/gateway/src/main/resources/application.properties b/gateway/src/main/resources/application.properties new file mode 100644 index 0000000..2ee0851 --- /dev/null +++ b/gateway/src/main/resources/application.properties @@ -0,0 +1,7 @@ +logging.level.org.springframework.web.client.RestTemplate=DEBUG +#logging.level.org.apache.http=DEBUG +#logging.level.httpclient.wire=DEBUG + +server.port=8080 + +shareit-server.url=http://localhost:9090 \ No newline at end of file diff --git a/server/Dockerfile b/server/Dockerfile new file mode 100644 index 0000000..0ff1817 --- /dev/null +++ b/server/Dockerfile @@ -0,0 +1,5 @@ +FROM eclipse-temurin:21-jre-jammy +VOLUME /tmp +ARG JAR_FILE=target/*.jar +COPY ${JAR_FILE} app.jar +ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /app.jar"] \ No newline at end of file diff --git a/server/pom.xml b/server/pom.xml new file mode 100644 index 0000000..566db3e --- /dev/null +++ b/server/pom.xml @@ -0,0 +1,86 @@ + + + 4.0.0 + + ru.practicum + shareit + 0.0.1-SNAPSHOT + + + shareit-server + 0.0.1-SNAPSHOT + + ShareIt Server + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.postgresql + postgresql + runtime + + + + com.h2database + h2 + runtime + + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + org.projectlombok + lombok + true + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + + coverage + + + + org.jacoco + jacoco-maven-plugin + + + + + + + diff --git a/server/src/main/java/ru/practicum/shareit/ShareItServer.java b/server/src/main/java/ru/practicum/shareit/ShareItServer.java new file mode 100644 index 0000000..303541d --- /dev/null +++ b/server/src/main/java/ru/practicum/shareit/ShareItServer.java @@ -0,0 +1,13 @@ +package ru.practicum.shareit; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ShareItServer { + + public static void main(String[] args) { + SpringApplication.run(ShareItServer.class, args); + } + +} From 572b45a83b52c7664d673c768d8c5e7e75eebca3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 18:03:35 +0400 Subject: [PATCH 17/55] test fix --- .../java/ru/practicum/shareit/ShareItApp.java | 13 -- .../ru/practicum/shareit/booking/Booking.java | 39 ------ .../shareit/booking/BookingController.java | 58 --------- .../shareit/booking/BookingMapper.java | 35 ------ .../shareit/booking/BookingRepository.java | 47 ------- .../shareit/booking/BookingService.java | 18 --- .../shareit/booking/BookingServiceImpl.java | 107 ---------------- .../shareit/booking/BookingState.java | 5 - .../shareit/booking/BookingStatus.java | 5 - .../shareit/booking/dto/BookingDto.java | 24 ---- .../shareit/booking/dto/NewBookingDto.java | 21 ---- .../shareit/comment/CommentMapper.java | 32 ----- .../shareit/comment/CommentRepository.java | 10 -- .../shareit/comment/dto/CommentDto.java | 17 --- .../shareit/comment/dto/NewCommentDto.java | 10 -- .../shareit/comment/model/Comment.java | 40 ------ .../practicum/shareit/eror/ErrorHandler.java | 62 --------- .../practicum/shareit/eror/ErrorResponse.java | 15 --- .../shareit/exception/ConflictException.java | 7 -- .../shareit/exception/NoAccessException.java | 7 -- .../exception/NoDataFoundException.java | 7 -- .../exception/NotAvailableItemException.java | 7 -- .../shareit/exception/NotFoundException.java | 7 -- .../exception/ValidationException.java | 7 -- .../shareit/item/ItemController.java | 67 ---------- .../ru/practicum/shareit/item/ItemMapper.java | 71 ----------- .../shareit/item/ItemRepository.java | 23 ---- .../practicum/shareit/item/ItemService.java | 25 ---- .../shareit/item/ItemServiceImpl.java | 119 ------------------ .../practicum/shareit/item/dto/ItemDto.java | 19 --- .../shareit/item/dto/ItemWithCommentsDto.java | 21 ---- .../shareit/item/dto/NewItemDto.java | 22 ---- .../shareit/item/dto/UpdateItemDto.java | 22 ---- .../ru/practicum/shareit/item/model/Item.java | 40 ------ .../shareit/request/ItemRequest.java | 34 ----- .../request/ItemRequestController.java | 12 -- .../shareit/request/dto/ItemRequestDto.java | 19 --- .../java/ru/practicum/shareit/user/User.java | 27 ---- .../shareit/user/UserController.java | 47 ------- .../ru/practicum/shareit/user/UserMapper.java | 41 ------ .../shareit/user/UserRepository.java | 6 - .../practicum/shareit/user/UserService.java | 18 --- .../shareit/user/UserServiceImpl.java | 56 --------- .../shareit/user/dto/NewUserDto.java | 17 --- .../shareit/user/dto/UpdateUserDto.java | 20 --- .../practicum/shareit/user/dto/UserDto.java | 16 --- src/main/resources/application.properties | 11 -- src/main/resources/schema.sql | 45 ------- .../ru/practicum/shareit/ShareItTests.java | 13 -- 49 files changed, 1411 deletions(-) delete mode 100644 src/main/java/ru/practicum/shareit/ShareItApp.java delete mode 100644 src/main/java/ru/practicum/shareit/booking/Booking.java delete mode 100644 src/main/java/ru/practicum/shareit/booking/BookingController.java delete mode 100644 src/main/java/ru/practicum/shareit/booking/BookingMapper.java delete mode 100644 src/main/java/ru/practicum/shareit/booking/BookingRepository.java delete mode 100644 src/main/java/ru/practicum/shareit/booking/BookingService.java delete mode 100644 src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java delete mode 100644 src/main/java/ru/practicum/shareit/booking/BookingState.java delete mode 100644 src/main/java/ru/practicum/shareit/booking/BookingStatus.java delete mode 100644 src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java delete mode 100644 src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java delete mode 100644 src/main/java/ru/practicum/shareit/comment/CommentMapper.java delete mode 100644 src/main/java/ru/practicum/shareit/comment/CommentRepository.java delete mode 100644 src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java delete mode 100644 src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java delete mode 100644 src/main/java/ru/practicum/shareit/comment/model/Comment.java delete mode 100644 src/main/java/ru/practicum/shareit/eror/ErrorHandler.java delete mode 100644 src/main/java/ru/practicum/shareit/eror/ErrorResponse.java delete mode 100644 src/main/java/ru/practicum/shareit/exception/ConflictException.java delete mode 100644 src/main/java/ru/practicum/shareit/exception/NoAccessException.java delete mode 100644 src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java delete mode 100644 src/main/java/ru/practicum/shareit/exception/NotAvailableItemException.java delete mode 100644 src/main/java/ru/practicum/shareit/exception/NotFoundException.java delete mode 100644 src/main/java/ru/practicum/shareit/exception/ValidationException.java delete mode 100644 src/main/java/ru/practicum/shareit/item/ItemController.java delete mode 100644 src/main/java/ru/practicum/shareit/item/ItemMapper.java delete mode 100644 src/main/java/ru/practicum/shareit/item/ItemRepository.java delete mode 100644 src/main/java/ru/practicum/shareit/item/ItemService.java delete mode 100644 src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java delete mode 100644 src/main/java/ru/practicum/shareit/item/dto/ItemDto.java delete mode 100644 src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java delete mode 100644 src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java delete mode 100644 src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java delete mode 100644 src/main/java/ru/practicum/shareit/item/model/Item.java delete mode 100644 src/main/java/ru/practicum/shareit/request/ItemRequest.java delete mode 100644 src/main/java/ru/practicum/shareit/request/ItemRequestController.java delete mode 100644 src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java delete mode 100644 src/main/java/ru/practicum/shareit/user/User.java delete mode 100644 src/main/java/ru/practicum/shareit/user/UserController.java delete mode 100644 src/main/java/ru/practicum/shareit/user/UserMapper.java delete mode 100644 src/main/java/ru/practicum/shareit/user/UserRepository.java delete mode 100644 src/main/java/ru/practicum/shareit/user/UserService.java delete mode 100644 src/main/java/ru/practicum/shareit/user/UserServiceImpl.java delete mode 100644 src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java delete mode 100644 src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java delete mode 100644 src/main/java/ru/practicum/shareit/user/dto/UserDto.java delete mode 100644 src/main/resources/application.properties delete mode 100644 src/main/resources/schema.sql delete mode 100644 src/test/java/ru/practicum/shareit/ShareItTests.java diff --git a/src/main/java/ru/practicum/shareit/ShareItApp.java b/src/main/java/ru/practicum/shareit/ShareItApp.java deleted file mode 100644 index a00ad56..0000000 --- a/src/main/java/ru/practicum/shareit/ShareItApp.java +++ /dev/null @@ -1,13 +0,0 @@ -package ru.practicum.shareit; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class ShareItApp { - - public static void main(String[] args) { - SpringApplication.run(ShareItApp.class, args); - } - -} diff --git a/src/main/java/ru/practicum/shareit/booking/Booking.java b/src/main/java/ru/practicum/shareit/booking/Booking.java deleted file mode 100644 index c94f8e2..0000000 --- a/src/main/java/ru/practicum/shareit/booking/Booking.java +++ /dev/null @@ -1,39 +0,0 @@ -package ru.practicum.shareit.booking; - -import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import ru.practicum.shareit.item.model.Item; -import ru.practicum.shareit.user.User; - - -import java.time.LocalDateTime; - -/** - * TODO Sprint add-bookings. - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@Entity -@Table(name = "bookings") -@Builder -public class Booking { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - @Column(name = "start_time") - private LocalDateTime start; - @Column(name = "end_time") - private LocalDateTime end; - @ManyToOne - @JoinColumn(name = "item_id") - private Item item; - @ManyToOne - @JoinColumn(name = "booker_id") - private User booker; - @Enumerated(EnumType.STRING) - private BookingStatus status; -} diff --git a/src/main/java/ru/practicum/shareit/booking/BookingController.java b/src/main/java/ru/practicum/shareit/booking/BookingController.java deleted file mode 100644 index 889b7c1..0000000 --- a/src/main/java/ru/practicum/shareit/booking/BookingController.java +++ /dev/null @@ -1,58 +0,0 @@ -package ru.practicum.shareit.booking; - -import jakarta.validation.Valid; -import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.data.web.PageableDefault; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.*; -import ru.practicum.shareit.booking.dto.BookingDto; -import ru.practicum.shareit.booking.dto.NewBookingDto; - -import java.util.List; - - -/** - * TODO Sprint add-bookings. - */ -@RestController -@RequestMapping(path = "/bookings") -@RequiredArgsConstructor -public class BookingController { - private final BookingService bookingService; - - @PostMapping - @ResponseStatus(HttpStatus.CREATED) - public BookingDto create(@RequestBody @Valid NewBookingDto newBookingDto, @RequestHeader("X-Sharer-User-Id") long userId) { - return bookingService.create(newBookingDto, userId); - } - - @PatchMapping("/{bookingId}") - @ResponseStatus(HttpStatus.OK) - public BookingDto approveBooking(@RequestHeader("X-Sharer-User-Id") long userId, @PathVariable long bookingId, @RequestParam boolean approved) { - return bookingService.approveBooking(userId, bookingId, approved); - } - - @GetMapping - @ResponseStatus(HttpStatus.OK) - public List findByBooker(@RequestHeader("X-Sharer-User-Id") long userId, - @RequestParam(defaultValue = "ALL") BookingState state, - @PageableDefault(size = 20, sort = "start", direction = Sort.Direction.DESC) Pageable pageable) { - return bookingService.findByBooker(userId, state, pageable).getContent(); - } - - @GetMapping("/owner") - @ResponseStatus(HttpStatus.OK) - public List findByOwner(@RequestHeader("X-Sharer-User-Id") long userId, - @RequestParam(defaultValue = "ALL") BookingState state, - @PageableDefault(size = 20, sort = "start", direction = Sort.Direction.DESC) Pageable pageable) { - return bookingService.findByOwner(userId, state, pageable).getContent(); - } - - @GetMapping("/{bookingId}") - @ResponseStatus(HttpStatus.OK) - public BookingDto findById(@RequestHeader("X-Sharer-User-Id") long userId, @PathVariable long bookingId) { - return bookingService.findById(userId, bookingId); - } -} diff --git a/src/main/java/ru/practicum/shareit/booking/BookingMapper.java b/src/main/java/ru/practicum/shareit/booking/BookingMapper.java deleted file mode 100644 index dd91f9f..0000000 --- a/src/main/java/ru/practicum/shareit/booking/BookingMapper.java +++ /dev/null @@ -1,35 +0,0 @@ -package ru.practicum.shareit.booking; - - -import ru.practicum.shareit.booking.dto.BookingDto; -import ru.practicum.shareit.booking.dto.NewBookingDto; -import ru.practicum.shareit.item.ItemMapper; -import ru.practicum.shareit.item.model.Item; -import ru.practicum.shareit.user.User; -import ru.practicum.shareit.user.UserMapper; - - -public class BookingMapper { - public static BookingDto mapToBookingDto(Booking booking) { - return BookingDto.builder() - .id(booking.getId()) - .start(booking.getStart()) - .end(booking.getEnd()) - .item(ItemMapper.mapToItemDto(booking.getItem())) - .booker(UserMapper.mapToUserDto(booking.getBooker())) - .status(booking.getStatus()) - .build(); - } - - public static Booking mapToNewBookingDto(NewBookingDto newBookingDto, User user, Item item) { - return Booking.builder() - .start(newBookingDto.getStart()) - .end(newBookingDto.getEnd()) - .item(item) - .booker(user) - .status(BookingStatus.WAITING) - .build(); - } - - -} diff --git a/src/main/java/ru/practicum/shareit/booking/BookingRepository.java b/src/main/java/ru/practicum/shareit/booking/BookingRepository.java deleted file mode 100644 index 2bf7bd5..0000000 --- a/src/main/java/ru/practicum/shareit/booking/BookingRepository.java +++ /dev/null @@ -1,47 +0,0 @@ -package ru.practicum.shareit.booking; - -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; - -import java.time.LocalDateTime; -import java.util.List; -import java.util.Optional; - -public interface BookingRepository extends JpaRepository { - Page findByBooker_Id(long bookerId, Pageable pageable); - - Page findByItemOwner_Id(long ownerId, Pageable pageable); - - @Query("SELECT b FROM Booking b " + - " WHERE b.booker.id = :bookerId " + - " AND b.start <= :now " + - " AND b.end >= :now " + - " AND b.status = ru.practicum.shareit.booking.BookingStatus.APPROVED") - Page findCurrentByBooker(@Param("bookerId") long bookerId, @Param("now") LocalDateTime now, Pageable pageable); - - @Query("SELECT b FROM Booking b " + - " WHERE b.item.owner.id = :ownerId " + - " AND b.start <= :now " + - " AND b.end >= :now " + - " AND b.status = ru.practicum.shareit.booking.BookingStatus.APPROVED") - Page findCurrentByOwner(@Param("ownerId") long ownerId, @Param("now") LocalDateTime now, Pageable pageable); - - Page findByBooker_IdAndEndBefore(long bookerId, LocalDateTime now, Pageable pageable); - - Page findByItemOwner_IdAndEndBefore(long ownerId, LocalDateTime now, Pageable pageable); - - Page findByBooker_IdAndStartAfter(long bookerId, LocalDateTime now, Pageable pageable); - - Page findByItemOwner_IdAndStartAfter(long ownerId, LocalDateTime now, Pageable pageable); - - Page findByBooker_IdAndStatus(long bookerId, BookingStatus status, Pageable pageable); - - Page findByItemOwner_IdAndStatus(long ownerId, BookingStatus status, Pageable pageable); - - List findByItem_idAndStatus(long itemId, BookingStatus status); - - Optional findByItem_idAndBooker_id(long itemId, long bookerId); -} diff --git a/src/main/java/ru/practicum/shareit/booking/BookingService.java b/src/main/java/ru/practicum/shareit/booking/BookingService.java deleted file mode 100644 index 8d4c2bb..0000000 --- a/src/main/java/ru/practicum/shareit/booking/BookingService.java +++ /dev/null @@ -1,18 +0,0 @@ -package ru.practicum.shareit.booking; - -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import ru.practicum.shareit.booking.dto.BookingDto; -import ru.practicum.shareit.booking.dto.NewBookingDto; - -public interface BookingService { - BookingDto create(NewBookingDto newBookingDto, long bookerId); - - BookingDto approveBooking(long userId, long bookingId, boolean approved); - - Page findByBooker(long bookerId, BookingState state, Pageable pageable); - - Page findByOwner(long ownerId, BookingState state, Pageable pageable); - - BookingDto findById(long userId, long bookingId); -} diff --git a/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java b/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java deleted file mode 100644 index 6067f84..0000000 --- a/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java +++ /dev/null @@ -1,107 +0,0 @@ -package ru.practicum.shareit.booking; - - -import lombok.RequiredArgsConstructor; - -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.stereotype.Service; -import ru.practicum.shareit.booking.dto.BookingDto; -import ru.practicum.shareit.booking.dto.NewBookingDto; -import ru.practicum.shareit.exception.NoAccessException; -import ru.practicum.shareit.exception.NotAvailableItemException; -import ru.practicum.shareit.exception.NotFoundException; -import ru.practicum.shareit.item.ItemRepository; -import ru.practicum.shareit.item.model.Item; -import ru.practicum.shareit.user.User; -import ru.practicum.shareit.user.UserRepository; - -import java.time.LocalDateTime; - -@Service -@RequiredArgsConstructor -public class BookingServiceImpl implements BookingService { - private final BookingRepository bookingRepository; - private final ItemRepository itemRepository; - private final UserRepository userRepository; - - @Override - public BookingDto create(NewBookingDto newBookingDto, long bookerId) { - User booker = userRepository.findById(bookerId) - .orElseThrow(() -> new NotFoundException("Пользователь не найден")); - Item item = itemRepository.findById(newBookingDto.getItemId()) - .orElseThrow(() -> new NotFoundException("Вещь не найдена")); - if (!item.isAvailable()) { - throw new NotAvailableItemException("Вещь недоступна для бронирования"); - - } - Booking booking = BookingMapper.mapToNewBookingDto(newBookingDto, booker, item); - bookingRepository.save(booking); - return BookingMapper.mapToBookingDto(booking); - } - - @Override - public BookingDto approveBooking(long userId, long bookingId, boolean approved) { - Booking booking = bookingRepository.findById(bookingId) - .orElseThrow(() -> new NotFoundException("Бронирование не найдено")); - long ownerId = booking.getItem().getOwner().getId(); - if (userId != ownerId) { - throw new NoAccessException("Только владелец вещи имеет доступ к изменению статуса бронирования"); - } - booking.setStatus(approved ? BookingStatus.APPROVED : BookingStatus.REJECTED); - bookingRepository.save(booking); - return BookingMapper.mapToBookingDto(booking); - } - - @Override - public Page findByBooker(long bookerId, BookingState state, Pageable pageable) { - if (!userExistById(bookerId)) { - throw new NotFoundException("Пользователь не найден"); - } - LocalDateTime timeNow = LocalDateTime.now(); - Page page = switch (state) { - case CURRENT -> bookingRepository.findCurrentByBooker(bookerId, timeNow, pageable); - case PAST -> bookingRepository.findByBooker_IdAndEndBefore(bookerId, timeNow, pageable); - case FUTURE -> bookingRepository.findByBooker_IdAndStartAfter(bookerId, timeNow, pageable); - case WAITING -> bookingRepository.findByBooker_IdAndStatus(bookerId, BookingStatus.WAITING, pageable); - case REJECTED -> bookingRepository.findByBooker_IdAndStatus(bookerId, BookingStatus.REJECTED, pageable); - case ALL -> bookingRepository.findByBooker_Id(bookerId, pageable); - default -> throw new NotFoundException("Некорректный параметр state"); - }; - return page.map(BookingMapper::mapToBookingDto); - } - - @Override - public Page findByOwner(long ownerId, BookingState state, Pageable pageable) { - if (!userExistById(ownerId)) { - throw new NotFoundException("Пользователь не найден"); - } - LocalDateTime timeNow = LocalDateTime.now(); - Page page = switch (state) { - case CURRENT -> bookingRepository.findCurrentByOwner(ownerId, timeNow, pageable); - case PAST -> bookingRepository.findByItemOwner_IdAndEndBefore(ownerId, timeNow, pageable); - case FUTURE -> bookingRepository.findByItemOwner_IdAndStartAfter(ownerId, timeNow, pageable); - case WAITING -> bookingRepository.findByItemOwner_IdAndStatus(ownerId, BookingStatus.WAITING, pageable); - case REJECTED -> bookingRepository.findByItemOwner_IdAndStatus(ownerId, BookingStatus.REJECTED, pageable); - case ALL -> bookingRepository.findByItemOwner_Id(ownerId, pageable); - default -> throw new NotFoundException("Некорректный параметр state"); - }; - return page.map(BookingMapper::mapToBookingDto); - } - - @Override - public BookingDto findById(long userId, long bookingId) { - Booking booking = bookingRepository.findById(bookingId) - .orElseThrow(() -> new NotFoundException("Бронирование не найдено")); - long ownerId = booking.getItem().getOwner().getId(); - if (booking.getBooker().getId() != userId && ownerId != userId) { - throw new NoAccessException("No access to booking"); - } - return BookingMapper.mapToBookingDto(booking); - } - - public boolean userExistById(long userId) { - return userRepository.existsById(userId); - } - -} diff --git a/src/main/java/ru/practicum/shareit/booking/BookingState.java b/src/main/java/ru/practicum/shareit/booking/BookingState.java deleted file mode 100644 index 1ffe7c9..0000000 --- a/src/main/java/ru/practicum/shareit/booking/BookingState.java +++ /dev/null @@ -1,5 +0,0 @@ -package ru.practicum.shareit.booking; - -public enum BookingState { - CURRENT, PAST, FUTURE, WAITING, REJECTED, ALL -} diff --git a/src/main/java/ru/practicum/shareit/booking/BookingStatus.java b/src/main/java/ru/practicum/shareit/booking/BookingStatus.java deleted file mode 100644 index ee6f096..0000000 --- a/src/main/java/ru/practicum/shareit/booking/BookingStatus.java +++ /dev/null @@ -1,5 +0,0 @@ -package ru.practicum.shareit.booking; - -public enum BookingStatus { - WAITING, APPROVED, REJECTED, CANCELED -} diff --git a/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java b/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java deleted file mode 100644 index 81f314e..0000000 --- a/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java +++ /dev/null @@ -1,24 +0,0 @@ -package ru.practicum.shareit.booking.dto; - -import lombok.Builder; -import lombok.Data; -import ru.practicum.shareit.booking.BookingStatus; -import ru.practicum.shareit.item.dto.ItemDto; -import ru.practicum.shareit.user.dto.UserDto; - -import java.time.LocalDateTime; - -/** - * TODO Sprint add-bookings. - */ -@Data -@Builder - -public class BookingDto { - private Long id; - private LocalDateTime start; - private LocalDateTime end; - private ItemDto item; - private UserDto booker; - private BookingStatus status; -} diff --git a/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java b/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java deleted file mode 100644 index be4d6e6..0000000 --- a/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java +++ /dev/null @@ -1,21 +0,0 @@ -package ru.practicum.shareit.booking.dto; - -import jakarta.validation.constraints.FutureOrPresent; -import jakarta.validation.constraints.NotNull; -import lombok.Builder; -import lombok.Data; - -import java.time.LocalDateTime; - -@Data -@Builder -public class NewBookingDto { - @FutureOrPresent - private LocalDateTime start; - - @FutureOrPresent - private LocalDateTime end; - - @NotNull - private Long itemId; -} diff --git a/src/main/java/ru/practicum/shareit/comment/CommentMapper.java b/src/main/java/ru/practicum/shareit/comment/CommentMapper.java deleted file mode 100644 index 056001f..0000000 --- a/src/main/java/ru/practicum/shareit/comment/CommentMapper.java +++ /dev/null @@ -1,32 +0,0 @@ -package ru.practicum.shareit.comment; - -import lombok.NoArgsConstructor; -import ru.practicum.shareit.comment.dto.CommentDto; -import ru.practicum.shareit.comment.dto.NewCommentDto; -import ru.practicum.shareit.comment.model.Comment; -import ru.practicum.shareit.item.model.Item; -import ru.practicum.shareit.user.User; - -import java.time.Instant; - -@NoArgsConstructor -public class CommentMapper { - public static Comment mapToNewComment(NewCommentDto newCommentDto, Item item, User user) { - return Comment.builder() - .text(newCommentDto.getText()) - .created(Instant.now()) - .item(item) - .author(user) - .build(); - } - - public static CommentDto mapToCommentDto(Comment comment) { - return CommentDto.builder() - .id(comment.getId()) - .text(comment.getText()) - .authorName(comment.getAuthor().getName()) - .item(comment.getItem()) - .created(comment.getCreated()) - .build(); - } -} diff --git a/src/main/java/ru/practicum/shareit/comment/CommentRepository.java b/src/main/java/ru/practicum/shareit/comment/CommentRepository.java deleted file mode 100644 index ad69c08..0000000 --- a/src/main/java/ru/practicum/shareit/comment/CommentRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package ru.practicum.shareit.comment; - -import org.springframework.data.jpa.repository.JpaRepository; -import ru.practicum.shareit.comment.model.Comment; - -import java.util.List; - -public interface CommentRepository extends JpaRepository { - List findByItem_id(long itemId); -} diff --git a/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java b/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java deleted file mode 100644 index da53c85..0000000 --- a/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java +++ /dev/null @@ -1,17 +0,0 @@ -package ru.practicum.shareit.comment.dto; - -import lombok.Builder; -import lombok.Data; -import ru.practicum.shareit.item.model.Item; - -import java.time.Instant; - -@Data -@Builder -public class CommentDto { - private Long id; - private String text; - private Item item; - private String authorName; - private Instant created; -} diff --git a/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java b/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java deleted file mode 100644 index 56968a0..0000000 --- a/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java +++ /dev/null @@ -1,10 +0,0 @@ -package ru.practicum.shareit.comment.dto; - -import jakarta.validation.constraints.NotBlank; -import lombok.Data; - -@Data -public class NewCommentDto { - @NotBlank - private String text; -} diff --git a/src/main/java/ru/practicum/shareit/comment/model/Comment.java b/src/main/java/ru/practicum/shareit/comment/model/Comment.java deleted file mode 100644 index b3cb9f8..0000000 --- a/src/main/java/ru/practicum/shareit/comment/model/Comment.java +++ /dev/null @@ -1,40 +0,0 @@ -package ru.practicum.shareit.comment.model; - -import jakarta.persistence.*; -import jakarta.validation.constraints.NotBlank; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import ru.practicum.shareit.item.model.Item; -import ru.practicum.shareit.user.User; - -import java.time.Instant; - -@Entity -@Table(name = "comments") -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class Comment { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - Long id; - - @Column(name = "text") - @NotBlank - String text; - - @ManyToOne(cascade = CascadeType.PERSIST) - @JoinColumn(name = "item_id") - Item item; - - @ManyToOne - @JoinColumn(name = "author_id") - User author; - - @Column(name = "created") - Instant created; - -} diff --git a/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java b/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java deleted file mode 100644 index 4257b59..0000000 --- a/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java +++ /dev/null @@ -1,62 +0,0 @@ -package ru.practicum.shareit.eror; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.bind.annotation.RestControllerAdvice; -import ru.practicum.shareit.exception.*; - -@RestControllerAdvice -@Slf4j -public class ErrorHandler { - @ExceptionHandler - @ResponseStatus(HttpStatus.BAD_REQUEST) - public ErrorResponse handleValidationError(final ValidationException e) { - log.error("Ошибка валидации {}", e.getMessage()); - return new ErrorResponse( - "Ошибка валидации", - e.getMessage() - ); - } - - @ExceptionHandler - @ResponseStatus(HttpStatus.NOT_FOUND) - public ErrorResponse handleNotFound(final NotFoundException e) { - log.error("Искомый объект не найдена {}", e.getMessage()); - return new ErrorResponse( - "Искомый объект не найден", - e.getMessage() - ); - } - - @ExceptionHandler - @ResponseStatus(HttpStatus.BAD_REQUEST) - public ErrorResponse handleNoDataFound(final NoDataFoundException e) { - log.error("Ошибка заполнения данных {}", e.getMessage()); - return new ErrorResponse( - "Ошибка заполнения данных", - e.getMessage() - ); - } - - @ExceptionHandler - @ResponseStatus(HttpStatus.BAD_REQUEST) - public ErrorResponse handleAvailableError(final NotAvailableItemException e) { - log.error("Ошибка с доступностью вещи {}", e.getMessage()); - return new ErrorResponse( - "Ошибка с доступностью вещи", - e.getMessage() - ); - } - - @ExceptionHandler - @ResponseStatus(HttpStatus.BAD_REQUEST) - public ErrorResponse handleNoAccessException(final NoAccessException e) { - log.error("Ошибка доступа {}", e.getMessage()); - return new ErrorResponse( - "Ошибка доступа", - e.getMessage() - ); - } -} diff --git a/src/main/java/ru/practicum/shareit/eror/ErrorResponse.java b/src/main/java/ru/practicum/shareit/eror/ErrorResponse.java deleted file mode 100644 index d2e6225..0000000 --- a/src/main/java/ru/practicum/shareit/eror/ErrorResponse.java +++ /dev/null @@ -1,15 +0,0 @@ -package ru.practicum.shareit.eror; - -import lombok.Getter; - -@Getter -public class ErrorResponse { - String error; - String description; - - public ErrorResponse(String error, String description) { - this.error = error; - this.description = description; - } - -} diff --git a/src/main/java/ru/practicum/shareit/exception/ConflictException.java b/src/main/java/ru/practicum/shareit/exception/ConflictException.java deleted file mode 100644 index 7885123..0000000 --- a/src/main/java/ru/practicum/shareit/exception/ConflictException.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.practicum.shareit.exception; - -public class ConflictException extends RuntimeException { - public ConflictException(String message) { - super(message); - } -} diff --git a/src/main/java/ru/practicum/shareit/exception/NoAccessException.java b/src/main/java/ru/practicum/shareit/exception/NoAccessException.java deleted file mode 100644 index 7c24051..0000000 --- a/src/main/java/ru/practicum/shareit/exception/NoAccessException.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.practicum.shareit.exception; - -public class NoAccessException extends RuntimeException { - public NoAccessException(String message) { - super(message); - } -} diff --git a/src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java b/src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java deleted file mode 100644 index dbef4b4..0000000 --- a/src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.practicum.shareit.exception; - -public class NoDataFoundException extends RuntimeException { - public NoDataFoundException(String message) { - super(message); - } -} diff --git a/src/main/java/ru/practicum/shareit/exception/NotAvailableItemException.java b/src/main/java/ru/practicum/shareit/exception/NotAvailableItemException.java deleted file mode 100644 index cb02e2e..0000000 --- a/src/main/java/ru/practicum/shareit/exception/NotAvailableItemException.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.practicum.shareit.exception; - -public class NotAvailableItemException extends RuntimeException { - public NotAvailableItemException(String message) { - super(message); - } -} diff --git a/src/main/java/ru/practicum/shareit/exception/NotFoundException.java b/src/main/java/ru/practicum/shareit/exception/NotFoundException.java deleted file mode 100644 index 98610d2..0000000 --- a/src/main/java/ru/practicum/shareit/exception/NotFoundException.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.practicum.shareit.exception; - -public class NotFoundException extends RuntimeException { - public NotFoundException(String message) { - super(message); - } -} \ No newline at end of file diff --git a/src/main/java/ru/practicum/shareit/exception/ValidationException.java b/src/main/java/ru/practicum/shareit/exception/ValidationException.java deleted file mode 100644 index 59043da..0000000 --- a/src/main/java/ru/practicum/shareit/exception/ValidationException.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.practicum.shareit.exception; - -public class ValidationException extends RuntimeException { - public ValidationException(String message) { - super(message); - } -} diff --git a/src/main/java/ru/practicum/shareit/item/ItemController.java b/src/main/java/ru/practicum/shareit/item/ItemController.java deleted file mode 100644 index 8f1185d..0000000 --- a/src/main/java/ru/practicum/shareit/item/ItemController.java +++ /dev/null @@ -1,67 +0,0 @@ -package ru.practicum.shareit.item; - -import jakarta.validation.Valid; -import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpStatus; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; -import ru.practicum.shareit.comment.dto.CommentDto; -import ru.practicum.shareit.comment.dto.NewCommentDto; -import ru.practicum.shareit.item.dto.ItemDto; -import ru.practicum.shareit.item.dto.ItemWithCommentsDto; -import ru.practicum.shareit.item.dto.NewItemDto; -import ru.practicum.shareit.item.dto.UpdateItemDto; - -import java.util.List; - -/** - * TODO Sprint add-controllers. - */ -@RestController -@RequestMapping("/items") -@RequiredArgsConstructor -@Validated -public class ItemController { - private final ItemService itemService; - - @PostMapping - @ResponseStatus(HttpStatus.CREATED) - public ItemDto create(@Valid @RequestBody NewItemDto itemDto, @RequestHeader("X-Sharer-User-Id") Long userId) { - - return itemService.create(itemDto, userId); - } - - @PatchMapping("/{itemId}") - public ItemDto update(@PathVariable("itemId") Long itemId, - @RequestBody UpdateItemDto itemDto, - @RequestHeader(value = "X-Sharer-User-Id") Long userId) { - - return itemService.update(itemId, itemDto, userId); - } - - @GetMapping("/{itemId}") - public ItemWithCommentsDto getItemById(@PathVariable("itemId") Long itemId) { - - return itemService.get(itemId); - } - - @GetMapping - public List getUserItems(@RequestHeader("X-Sharer-User-Id") Long userId) { - - return itemService.getAllItemsByOwner(userId); - } - - @GetMapping("/search") - public List search(@RequestParam("text") String searchText) { - - return itemService.search(searchText); - } - - @PostMapping("/{itemId}/comment") - @ResponseStatus(HttpStatus.CREATED) - public CommentDto createComment(@RequestHeader("X-Sharer-User-Id") long userId, - @PathVariable("itemId") long itemId, - @RequestBody @Valid NewCommentDto newCommentDto) { - return itemService.createComment(newCommentDto, itemId, userId); - } -} diff --git a/src/main/java/ru/practicum/shareit/item/ItemMapper.java b/src/main/java/ru/practicum/shareit/item/ItemMapper.java deleted file mode 100644 index 197ac47..0000000 --- a/src/main/java/ru/practicum/shareit/item/ItemMapper.java +++ /dev/null @@ -1,71 +0,0 @@ -package ru.practicum.shareit.item; - - -import ru.practicum.shareit.booking.Booking; -import ru.practicum.shareit.booking.BookingMapper; -import ru.practicum.shareit.comment.CommentMapper; -import ru.practicum.shareit.comment.model.Comment; -import ru.practicum.shareit.item.dto.ItemDto; -import ru.practicum.shareit.item.dto.ItemWithCommentsDto; -import ru.practicum.shareit.item.dto.NewItemDto; -import ru.practicum.shareit.item.dto.UpdateItemDto; -import ru.practicum.shareit.item.model.Item; -import ru.practicum.shareit.user.User; -import ru.practicum.shareit.user.UserMapper; - -import java.util.List; - - -public class ItemMapper { - public static ItemDto mapToItemDto(Item item) { - return ItemDto.builder() - .id(item.getId()) - .name(item.getName()) - .description(item.getDescription()) - .available(item.isAvailable()) - .owner(UserMapper.mapToUserDto(item.getOwner())) - .build(); - } - - public static Item mapToNewItem(NewItemDto newItemDto, User owner) { - return Item.builder() - .name(newItemDto.getName()) - .description(newItemDto.getDescription()) - .available(newItemDto.getAvailable()) - .owner(owner) - .request(newItemDto.getRequest()) - .build(); - } - - public static Item mapToUpdateItemDto(Item item, UpdateItemDto updateItemDto) { - if (updateItemDto.hasName()) { - item.setName(updateItemDto.getName()); - } - if (updateItemDto.hasDescription()) { - item.setDescription(updateItemDto.getDescription()); - } - if (updateItemDto.hasAvailable()) { - item.setAvailable(updateItemDto.getAvailable()); - } - return item; - - } - - public static ItemWithCommentsDto mapToItemWithCommentsDto(Item item, List bookings, List comments) { - ItemWithCommentsDto itemWithCommentsDto = ItemWithCommentsDto.builder() - .id(item.getId()) - .name(item.getName()) - .description(item.getDescription()) - .available(item.isAvailable()) - .comments(comments.stream().map(CommentMapper::mapToCommentDto).toList()) - .build(); - if (!bookings.isEmpty()) { - itemWithCommentsDto.setLastBooking(BookingMapper.mapToBookingDto(bookings.getLast())); - if (bookings.size() > 1) { - itemWithCommentsDto.setNextBooking(BookingMapper.mapToBookingDto(bookings.get(bookings.size() - 2))); - } - } - return itemWithCommentsDto; - } -} - diff --git a/src/main/java/ru/practicum/shareit/item/ItemRepository.java b/src/main/java/ru/practicum/shareit/item/ItemRepository.java deleted file mode 100644 index e93c564..0000000 --- a/src/main/java/ru/practicum/shareit/item/ItemRepository.java +++ /dev/null @@ -1,23 +0,0 @@ -package ru.practicum.shareit.item; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import ru.practicum.shareit.item.model.Item; -import ru.practicum.shareit.user.User; - -import java.util.List; - - -public interface ItemRepository extends JpaRepository { - List findByOwner(User owner); - - @Query("select it from Item it " + - "where it.available = true and " + - "(upper(it.name) like upper(concat('%', ?1, '%')) " + - " or upper(it.description) like upper(concat('%', ?1, '%')))") - List searchItem(String text); - - -} - - diff --git a/src/main/java/ru/practicum/shareit/item/ItemService.java b/src/main/java/ru/practicum/shareit/item/ItemService.java deleted file mode 100644 index 44dac1d..0000000 --- a/src/main/java/ru/practicum/shareit/item/ItemService.java +++ /dev/null @@ -1,25 +0,0 @@ -package ru.practicum.shareit.item; - -import ru.practicum.shareit.comment.dto.CommentDto; -import ru.practicum.shareit.comment.dto.NewCommentDto; -import ru.practicum.shareit.item.dto.ItemDto; -import ru.practicum.shareit.item.dto.ItemWithCommentsDto; -import ru.practicum.shareit.item.dto.NewItemDto; -import ru.practicum.shareit.item.dto.UpdateItemDto; - -import java.util.List; - -public interface ItemService { - - ItemDto create(NewItemDto newItemDto, long userId); - - ItemDto update(long itemId, UpdateItemDto itemDto, long userID); - - ItemWithCommentsDto get(long itemId); - - List getAllItemsByOwner(long ownerId); - - List search(String searchText); - - CommentDto createComment(NewCommentDto newCommentDto, long itemId, long userId); -} diff --git a/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java b/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java deleted file mode 100644 index 3215e11..0000000 --- a/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java +++ /dev/null @@ -1,119 +0,0 @@ -package ru.practicum.shareit.item; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import ru.practicum.shareit.booking.Booking; -import ru.practicum.shareit.booking.BookingRepository; -import ru.practicum.shareit.booking.BookingStatus; -import ru.practicum.shareit.comment.CommentMapper; -import ru.practicum.shareit.comment.CommentRepository; -import ru.practicum.shareit.comment.dto.CommentDto; -import ru.practicum.shareit.comment.dto.NewCommentDto; -import ru.practicum.shareit.comment.model.Comment; -import ru.practicum.shareit.exception.NoAccessException; -import ru.practicum.shareit.exception.NotFoundException; -import ru.practicum.shareit.item.dto.ItemDto; -import ru.practicum.shareit.item.dto.ItemWithCommentsDto; -import ru.practicum.shareit.item.dto.NewItemDto; -import ru.practicum.shareit.item.dto.UpdateItemDto; -import ru.practicum.shareit.item.model.Item; -import ru.practicum.shareit.user.User; -import ru.practicum.shareit.user.UserMapper; -import ru.practicum.shareit.user.UserService; - -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; - -@Service -@RequiredArgsConstructor -@Slf4j -public class ItemServiceImpl implements ItemService { - private final ItemRepository itemRepository; - private final UserService userService; - private final BookingRepository bookingRepository; - private final CommentRepository commentRepository; - - @Override - public ItemDto create(NewItemDto newItemDto, long userId) { - log.debug("==> Creating item: {}", newItemDto); - User owner = UserMapper.mapToUser(userService.getById(userId)); - Item item = ItemMapper.mapToNewItem(newItemDto, owner); - itemRepository.save(item); - log.debug("<== Creating item: {}", newItemDto); - return ItemMapper.mapToItemDto(item); - } - - @Override - public ItemDto update(long itemId, UpdateItemDto itemDto, long userID) { - log.debug("==> Updating item: {}", itemDto); - Item oldItem = itemRepository.findById(itemId) - .orElseThrow(() -> new NotFoundException("Предмет не найден")); - - if (userID == oldItem.getOwner().getId()) { - Item updateItem = ItemMapper.mapToUpdateItemDto(oldItem, itemDto); - itemRepository.save(updateItem); - log.debug("<== Updating item: {}", itemDto); - return ItemMapper.mapToItemDto(updateItem); - } - throw new NotFoundException("У вас недостаточно прав для обновления вещи"); - } - - - @Override - public ItemWithCommentsDto get(long itemId) { - log.debug("==> get item by id: {}", itemId); - Item item = itemRepository.findById(itemId) - .orElseThrow(() -> new NotFoundException("Предмет не найден")); - List bookings = bookingRepository.findByItem_idAndStatus(itemId, BookingStatus.WAITING); - List comments = commentRepository.findByItem_id(itemId); - ItemWithCommentsDto itemWithCommentsDto = ItemMapper.mapToItemWithCommentsDto(item, bookings, comments); - log.debug("<== get item by id: {}", item); - return itemWithCommentsDto; - } - - @Override - public List getAllItemsByOwner(long ownerId) { - log.debug("==> get user items by user id: {}", ownerId); - return itemRepository.findByOwner(UserMapper.mapToUser(userService.getById(ownerId))) - .stream() - .map(ItemMapper::mapToItemDto) - .toList(); - - - } - - @Override - public List search(String searchText) { - log.debug("==> search items: {}", searchText); - List foundItems = new ArrayList<>(); - if (searchText.isEmpty() || searchText.isBlank() || searchText == null) { - return foundItems; - } - foundItems = itemRepository.searchItem(searchText) - .stream() - .map(ItemMapper::mapToItemDto) - .toList(); - log.debug("<== search items: {}", searchText); - return foundItems; - } - - @Override - public CommentDto createComment(NewCommentDto newCommentDto, long itemId, long userId) { - log.debug("==> create comment for item: {}", itemId); - Booking booking = bookingRepository.findByItem_idAndBooker_id(itemId, userId) - .orElseThrow(() -> new NotFoundException("Бронирование для предмета не найдено, невозможно добавить комментарий")); - if (booking.getEnd().isAfter(LocalDateTime.now())) { - throw new NoAccessException("Срок бронирования предмета еще не закончился"); - } - User commentAuthor = UserMapper.mapToUser(userService.getById(userId)); - Item item = itemRepository.findById(itemId) - .orElseThrow(() -> new NotFoundException("Предмет не найден")); - Comment comment = CommentMapper.mapToNewComment(newCommentDto, item, commentAuthor); - commentRepository.save(comment); - log.debug("<== create comment for item: {}", itemId); - return CommentMapper.mapToCommentDto(comment); - } - -} diff --git a/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java b/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java deleted file mode 100644 index 286020c..0000000 --- a/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java +++ /dev/null @@ -1,19 +0,0 @@ -package ru.practicum.shareit.item.dto; - -import lombok.*; -import ru.practicum.shareit.user.dto.UserDto; - - -/** - * TODO Sprint add-controllers. - */ -@Data -@Builder -public class ItemDto { - private Long id; - private String name; - private String description; - private Boolean available; - private UserDto owner; - -} diff --git a/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java b/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java deleted file mode 100644 index 710de60..0000000 --- a/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java +++ /dev/null @@ -1,21 +0,0 @@ -package ru.practicum.shareit.item.dto; - -import lombok.Builder; -import lombok.Data; -import ru.practicum.shareit.booking.dto.BookingDto; -import ru.practicum.shareit.comment.dto.CommentDto; - -import java.util.List; - -@Data -@Builder -public class ItemWithCommentsDto { - private long id; - - private String name; - private String description; - private Boolean available; - private BookingDto lastBooking; - private BookingDto nextBooking; - private List comments; -} diff --git a/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java b/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java deleted file mode 100644 index 3c02052..0000000 --- a/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java +++ /dev/null @@ -1,22 +0,0 @@ -package ru.practicum.shareit.item.dto; - -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import lombok.Builder; -import lombok.Data; -import ru.practicum.shareit.request.ItemRequest; - -@Data -@Builder -public class NewItemDto { - @NotBlank(message = "название предмета не может быть пустым") - private String name; - - @NotBlank(message = "описание не должно быть пустым") - private String description; - - @NotNull(message = "не установлен статус доступности бронирования") - private Boolean available; - - private ItemRequest request; -} diff --git a/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java b/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java deleted file mode 100644 index ead598d..0000000 --- a/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java +++ /dev/null @@ -1,22 +0,0 @@ -package ru.practicum.shareit.item.dto; - -import lombok.Data; - -@Data -public class UpdateItemDto { - private String name; - private String description; - private Boolean available; - - public boolean hasName() { - return !(name == null || name.isBlank()); - } - - public boolean hasDescription() { - return !(description == null || description.isBlank()); - } - - public boolean hasAvailable() { - return Boolean.FALSE.equals(available); - } -} diff --git a/src/main/java/ru/practicum/shareit/item/model/Item.java b/src/main/java/ru/practicum/shareit/item/model/Item.java deleted file mode 100644 index a8f7e3b..0000000 --- a/src/main/java/ru/practicum/shareit/item/model/Item.java +++ /dev/null @@ -1,40 +0,0 @@ -package ru.practicum.shareit.item.model; - - -import jakarta.persistence.*; -import jakarta.validation.constraints.NotBlank; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import ru.practicum.shareit.request.ItemRequest; -import ru.practicum.shareit.user.User; - -/** - * TODO Sprint add-controllers. - */ -@Data -@Entity -@Table(name = "items") -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class Item { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - @Column(name = "name", nullable = false) - @NotBlank - private String name; - @Column(name = "description", nullable = false) - @NotBlank - private String description; - @Column(name = "available") - private boolean available; - @ManyToOne - @JoinColumn(name = "owner_id") - private User owner; - @ManyToOne - @JoinColumn(name = "request_id") - private ItemRequest request; -} diff --git a/src/main/java/ru/practicum/shareit/request/ItemRequest.java b/src/main/java/ru/practicum/shareit/request/ItemRequest.java deleted file mode 100644 index f90c328..0000000 --- a/src/main/java/ru/practicum/shareit/request/ItemRequest.java +++ /dev/null @@ -1,34 +0,0 @@ -package ru.practicum.shareit.request; - -import jakarta.persistence.*; -import jakarta.validation.constraints.NotBlank; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import ru.practicum.shareit.user.User; - - -/** - * TODO Sprint add-item-requests. - */ - -@Entity -@Table(name = "request") -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class ItemRequest { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - long id; - @Column(name = "description", nullable = false) - @NotBlank - String description; - @ManyToOne - @JoinColumn(name = "requestor_id") - User requestor; - - -} diff --git a/src/main/java/ru/practicum/shareit/request/ItemRequestController.java b/src/main/java/ru/practicum/shareit/request/ItemRequestController.java deleted file mode 100644 index 064e2e9..0000000 --- a/src/main/java/ru/practicum/shareit/request/ItemRequestController.java +++ /dev/null @@ -1,12 +0,0 @@ -package ru.practicum.shareit.request; - -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * TODO Sprint add-item-requests. - */ -@RestController -@RequestMapping(path = "/requests") -public class ItemRequestController { -} diff --git a/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java b/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java deleted file mode 100644 index c6aa1c7..0000000 --- a/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java +++ /dev/null @@ -1,19 +0,0 @@ -package ru.practicum.shareit.request.dto; - -import lombok.Builder; -import lombok.Data; -import ru.practicum.shareit.user.dto.UserDto; - -import java.time.LocalDateTime; - -/** - * TODO Sprint add-item-requests. - */ -@Data -@Builder -public class ItemRequestDto { - private Long id; - private String description; - private UserDto requestor; - private LocalDateTime created; -} diff --git a/src/main/java/ru/practicum/shareit/user/User.java b/src/main/java/ru/practicum/shareit/user/User.java deleted file mode 100644 index 1edc191..0000000 --- a/src/main/java/ru/practicum/shareit/user/User.java +++ /dev/null @@ -1,27 +0,0 @@ -package ru.practicum.shareit.user; - - -import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * TODO Sprint add-controllers. - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@Entity -@Table(name = "users") -@Builder -public class User { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - @Column(name = "name") - private String name; - @Column(name = "email") - private String email; -} diff --git a/src/main/java/ru/practicum/shareit/user/UserController.java b/src/main/java/ru/practicum/shareit/user/UserController.java deleted file mode 100644 index c849a60..0000000 --- a/src/main/java/ru/practicum/shareit/user/UserController.java +++ /dev/null @@ -1,47 +0,0 @@ -package ru.practicum.shareit.user; - -import jakarta.validation.Valid; -import lombok.AllArgsConstructor; -import org.springframework.http.HttpStatus; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; -import ru.practicum.shareit.user.dto.NewUserDto; -import ru.practicum.shareit.user.dto.UpdateUserDto; -import ru.practicum.shareit.user.dto.UserDto; - -/** - * TODO Sprint add-controllers. - */ - -@RestController -@AllArgsConstructor -@RequestMapping(path = "/users") -@Validated -public class UserController { - private final UserService userService; - - @PostMapping - @ResponseStatus(HttpStatus.CREATED) - public UserDto createUser(@Valid @RequestBody NewUserDto userDto) { - return userService.create(userDto); - } - - @GetMapping("/{userId}") - public UserDto getUserById(@PathVariable("userId") Long userId) { - - return userService.getById(userId); - } - - @PatchMapping("/{userId}") - @ResponseStatus(HttpStatus.OK) - public UserDto updateUser(@PathVariable("userId") Long userId, @Validated @RequestBody(required = false) UpdateUserDto userDto) { - - return userService.update(userId, userDto); - } - - @DeleteMapping("/{userId}") - @ResponseStatus(HttpStatus.OK) - public void deleteUser(@PathVariable("userId") Long userId) { - userService.deleteUser(userId); - } -} diff --git a/src/main/java/ru/practicum/shareit/user/UserMapper.java b/src/main/java/ru/practicum/shareit/user/UserMapper.java deleted file mode 100644 index e920c5f..0000000 --- a/src/main/java/ru/practicum/shareit/user/UserMapper.java +++ /dev/null @@ -1,41 +0,0 @@ -package ru.practicum.shareit.user; - -import ru.practicum.shareit.user.dto.NewUserDto; -import ru.practicum.shareit.user.dto.UpdateUserDto; -import ru.practicum.shareit.user.dto.UserDto; - -public class UserMapper { - public static UserDto mapToUserDto(User user) { - return UserDto.builder() - .id(user.getId()) - .name(user.getName()) - .email(user.getEmail()) - .build(); - } - - public static User mapToUser(UserDto userDto) { - return User.builder() - .id(userDto.getId()) - .name(userDto.getName()) - .email(userDto.getEmail()) - .build(); - } - - public static User mapToNewUser(NewUserDto newUserDto) { - return User.builder() - .name(newUserDto.getName()) - .email(newUserDto.getEmail()) - .build(); - } - - public static User mapToUserUpdate(User user, UpdateUserDto updateUserDto) { - if (updateUserDto.hasEmail()) { - user.setEmail(updateUserDto.getEmail()); - } - if (updateUserDto.hasName()) { - user.setName(updateUserDto.getName()); - } - return user; - } - -} diff --git a/src/main/java/ru/practicum/shareit/user/UserRepository.java b/src/main/java/ru/practicum/shareit/user/UserRepository.java deleted file mode 100644 index e303ab5..0000000 --- a/src/main/java/ru/practicum/shareit/user/UserRepository.java +++ /dev/null @@ -1,6 +0,0 @@ -package ru.practicum.shareit.user; - -import org.springframework.data.jpa.repository.JpaRepository; - -public interface UserRepository extends JpaRepository { -} diff --git a/src/main/java/ru/practicum/shareit/user/UserService.java b/src/main/java/ru/practicum/shareit/user/UserService.java deleted file mode 100644 index 3beaf8c..0000000 --- a/src/main/java/ru/practicum/shareit/user/UserService.java +++ /dev/null @@ -1,18 +0,0 @@ -package ru.practicum.shareit.user; - -import org.springframework.stereotype.Service; -import ru.practicum.shareit.user.dto.NewUserDto; -import ru.practicum.shareit.user.dto.UpdateUserDto; -import ru.practicum.shareit.user.dto.UserDto; - -@Service -public interface UserService { - - UserDto create(NewUserDto userDto); - - UserDto update(long id, UpdateUserDto updateUserDto); - - UserDto getById(long id); - - void deleteUser(long id); -} diff --git a/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java b/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java deleted file mode 100644 index 7f78138..0000000 --- a/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java +++ /dev/null @@ -1,56 +0,0 @@ -package ru.practicum.shareit.user; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import ru.practicum.shareit.exception.NotFoundException; -import ru.practicum.shareit.user.dto.NewUserDto; -import ru.practicum.shareit.user.dto.UpdateUserDto; -import ru.practicum.shareit.user.dto.UserDto; - -@Service -@RequiredArgsConstructor -@Slf4j -public class UserServiceImpl implements UserService { - private final UserRepository userRepository; - - @Override - public UserDto create(NewUserDto userDto) { - log.debug("==> Creating user: {}", userDto); - User user = UserMapper.mapToNewUser(userDto); - userRepository.save(user); - log.debug("<== Creating user: {}", user); - return UserMapper.mapToUserDto(user); - - } - - @Override - public UserDto update(long id, UpdateUserDto updateUserDto) { - log.debug("==> Updating user: {}", id); - User oldUser = UserMapper.mapToUser(getById(id)); - User updateUser = UserMapper.mapToUserUpdate(oldUser, updateUserDto); - updateUser = userRepository.save(updateUser); - log.debug("<== Updating user: {}", id); - return UserMapper.mapToUserDto(updateUser); - } - - @Override - public UserDto getById(long id) { - User user = userRepository.findById(id) - .orElseThrow(() -> new NotFoundException("Пользователь с id = " + id + " не найден")); - return UserMapper.mapToUserDto(user); - } - - @Override - public void deleteUser(long id) { - log.debug("==> Deleting user: {}", id); - User user = userRepository.findById(id) - .orElseThrow(() -> new NotFoundException("Пользователь с id = " + id + " не найден")); - if (user != null) { - userRepository.delete(user); - log.debug("<== Deleting user: {}", id); - } - } - - -} diff --git a/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java b/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java deleted file mode 100644 index f95ecb8..0000000 --- a/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java +++ /dev/null @@ -1,17 +0,0 @@ -package ru.practicum.shareit.user.dto; - -import jakarta.validation.constraints.Email; -import jakarta.validation.constraints.NotBlank; -import lombok.Builder; -import lombok.Data; - -@Data -@Builder -public class NewUserDto { - @NotBlank(message = "Имя не может быть пустым") - private String name; - - @NotBlank(message = "email не может быть пустым") - @Email(message = "Указан некорректный формат email") - private String email; -} diff --git a/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java b/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java deleted file mode 100644 index bd9e396..0000000 --- a/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java +++ /dev/null @@ -1,20 +0,0 @@ -package ru.practicum.shareit.user.dto; - -import jakarta.validation.constraints.Email; -import lombok.Data; - -@Data -public class UpdateUserDto { - private String name; - - @Email(message = "Указан некорректный формат email") - private String email; - - public boolean hasName() { - return !(name == null || name.isBlank()); - } - - public boolean hasEmail() { - return !(email == null || email.isBlank()); - } -} diff --git a/src/main/java/ru/practicum/shareit/user/dto/UserDto.java b/src/main/java/ru/practicum/shareit/user/dto/UserDto.java deleted file mode 100644 index eef5ae4..0000000 --- a/src/main/java/ru/practicum/shareit/user/dto/UserDto.java +++ /dev/null @@ -1,16 +0,0 @@ -package ru.practicum.shareit.user.dto; - -import jakarta.validation.constraints.Email; -import lombok.*; - - -@Getter -@Setter -@ToString -@Builder -public class UserDto { - private Long id; - private String name; - @Email(message = "Электронная почта должна содержать символ @") - private String email; -} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index d678861..0000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1,11 +0,0 @@ -server.port=9090 - -# ???? ???????????? ???????????? -spring.jpa.hibernate.ddl-auto=none -spring.jpa.properties.hibernate.format_sql=true -spring.sql.init.mode=always - -logging.level.org.springframework.orm.jpa=INFO -logging.level.org.springframework.transaction=INFO -logging.level.org.springframework.transaction.interceptor=TRACE -logging.level.org.springframework.orm.jpa.JpaTransactionManager=DEBUG diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql deleted file mode 100644 index 0c75e00..0000000 --- a/src/main/resources/schema.sql +++ /dev/null @@ -1,45 +0,0 @@ -drop table IF EXISTS users, - items, - requests, - items, - bookings, - comments; - - -CREATE TABLE IF NOT EXISTS users ( -id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, -name varchar, -email varchar UNIQUE NOT NULL -); -CREATE TABLE IF NOT EXISTS requests -( -id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY NOT NULL, -description VARCHAR(360) NOT NULL, -requestor_id BIGINT REFERENCES users(id), -created TIMESTAMP WITHOUT TIME ZONE NOT NULL -); - - -CREATE TABLE IF NOT EXISTS items ( -id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, -name varchar NOT NULL, -description varchar NOT NULL, -available boolean, -owner_id BIGINT REFERENCES users (id), -request_id BIGINT REFERENCES request (id) -); -CREATE TABLE IF NOT EXISTS bookings ( -id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, -start_time TIMESTAMP WITHOUT TIME ZONE NOT NULL, -end_time TIMESTAMP WITHOUT TIME ZONE NOT NULL, -item_id BIGINT REFERENCES items (id) ON DELETE CASCADE, -booker_id BIGINT REFERENCES users (id) ON DELETE CASCADE, -status varchar NOT NULL -); -CREATE TABLE IF NOT EXISTS comments ( -id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, -text varchar NOT NULL, -item_id BIGINT REFERENCES items (id) ON DELETE CASCADE, -author_id BIGINT REFERENCES users (id) ON DELETE CASCADE, -created TIMESTAMP WITHOUT TIME ZONE NOT NULL -); diff --git a/src/test/java/ru/practicum/shareit/ShareItTests.java b/src/test/java/ru/practicum/shareit/ShareItTests.java deleted file mode 100644 index 4d79052..0000000 --- a/src/test/java/ru/practicum/shareit/ShareItTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package ru.practicum.shareit; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class ShareItTests { - - @Test - void contextLoads() { - } - -} From 416250238fc5bb505c4b6c2e6a09c3662bdac427 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 18:03:35 +0400 Subject: [PATCH 18/55] test fix --- .../java/ru/practicum/shareit/ShareItApp.java | 13 -- .../ru/practicum/shareit/booking/Booking.java | 39 ------ .../shareit/booking/BookingController.java | 58 --------- .../shareit/booking/BookingMapper.java | 35 ------ .../shareit/booking/BookingRepository.java | 47 ------- .../shareit/booking/BookingService.java | 18 --- .../shareit/booking/BookingServiceImpl.java | 107 ---------------- .../shareit/booking/BookingState.java | 5 - .../shareit/booking/BookingStatus.java | 5 - .../shareit/booking/dto/BookingDto.java | 24 ---- .../shareit/booking/dto/NewBookingDto.java | 21 ---- .../shareit/comment/CommentMapper.java | 32 ----- .../shareit/comment/CommentRepository.java | 10 -- .../shareit/comment/dto/CommentDto.java | 17 --- .../shareit/comment/dto/NewCommentDto.java | 10 -- .../shareit/comment/model/Comment.java | 40 ------ .../practicum/shareit/eror/ErrorHandler.java | 62 --------- .../practicum/shareit/eror/ErrorResponse.java | 15 --- .../shareit/exception/ConflictException.java | 7 -- .../shareit/exception/NoAccessException.java | 7 -- .../exception/NoDataFoundException.java | 7 -- .../exception/NotAvailableItemException.java | 7 -- .../shareit/exception/NotFoundException.java | 7 -- .../exception/ValidationException.java | 7 -- .../shareit/item/ItemController.java | 67 ---------- .../ru/practicum/shareit/item/ItemMapper.java | 71 ----------- .../shareit/item/ItemRepository.java | 23 ---- .../practicum/shareit/item/ItemService.java | 25 ---- .../shareit/item/ItemServiceImpl.java | 119 ------------------ .../practicum/shareit/item/dto/ItemDto.java | 19 --- .../shareit/item/dto/ItemWithCommentsDto.java | 21 ---- .../shareit/item/dto/NewItemDto.java | 22 ---- .../shareit/item/dto/UpdateItemDto.java | 22 ---- .../ru/practicum/shareit/item/model/Item.java | 40 ------ .../shareit/request/ItemRequest.java | 34 ----- .../request/ItemRequestController.java | 12 -- .../shareit/request/dto/ItemRequestDto.java | 19 --- .../java/ru/practicum/shareit/user/User.java | 27 ---- .../shareit/user/UserController.java | 47 ------- .../ru/practicum/shareit/user/UserMapper.java | 41 ------ .../shareit/user/UserRepository.java | 6 - .../practicum/shareit/user/UserService.java | 18 --- .../shareit/user/UserServiceImpl.java | 56 --------- .../shareit/user/dto/NewUserDto.java | 17 --- .../shareit/user/dto/UpdateUserDto.java | 20 --- .../practicum/shareit/user/dto/UserDto.java | 16 --- src/main/resources/application.properties | 11 -- src/main/resources/schema.sql | 45 ------- .../ru/practicum/shareit/ShareItTests.java | 13 -- 49 files changed, 1411 deletions(-) delete mode 100644 src/main/java/ru/practicum/shareit/ShareItApp.java delete mode 100644 src/main/java/ru/practicum/shareit/booking/Booking.java delete mode 100644 src/main/java/ru/practicum/shareit/booking/BookingController.java delete mode 100644 src/main/java/ru/practicum/shareit/booking/BookingMapper.java delete mode 100644 src/main/java/ru/practicum/shareit/booking/BookingRepository.java delete mode 100644 src/main/java/ru/practicum/shareit/booking/BookingService.java delete mode 100644 src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java delete mode 100644 src/main/java/ru/practicum/shareit/booking/BookingState.java delete mode 100644 src/main/java/ru/practicum/shareit/booking/BookingStatus.java delete mode 100644 src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java delete mode 100644 src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java delete mode 100644 src/main/java/ru/practicum/shareit/comment/CommentMapper.java delete mode 100644 src/main/java/ru/practicum/shareit/comment/CommentRepository.java delete mode 100644 src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java delete mode 100644 src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java delete mode 100644 src/main/java/ru/practicum/shareit/comment/model/Comment.java delete mode 100644 src/main/java/ru/practicum/shareit/eror/ErrorHandler.java delete mode 100644 src/main/java/ru/practicum/shareit/eror/ErrorResponse.java delete mode 100644 src/main/java/ru/practicum/shareit/exception/ConflictException.java delete mode 100644 src/main/java/ru/practicum/shareit/exception/NoAccessException.java delete mode 100644 src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java delete mode 100644 src/main/java/ru/practicum/shareit/exception/NotAvailableItemException.java delete mode 100644 src/main/java/ru/practicum/shareit/exception/NotFoundException.java delete mode 100644 src/main/java/ru/practicum/shareit/exception/ValidationException.java delete mode 100644 src/main/java/ru/practicum/shareit/item/ItemController.java delete mode 100644 src/main/java/ru/practicum/shareit/item/ItemMapper.java delete mode 100644 src/main/java/ru/practicum/shareit/item/ItemRepository.java delete mode 100644 src/main/java/ru/practicum/shareit/item/ItemService.java delete mode 100644 src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java delete mode 100644 src/main/java/ru/practicum/shareit/item/dto/ItemDto.java delete mode 100644 src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java delete mode 100644 src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java delete mode 100644 src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java delete mode 100644 src/main/java/ru/practicum/shareit/item/model/Item.java delete mode 100644 src/main/java/ru/practicum/shareit/request/ItemRequest.java delete mode 100644 src/main/java/ru/practicum/shareit/request/ItemRequestController.java delete mode 100644 src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java delete mode 100644 src/main/java/ru/practicum/shareit/user/User.java delete mode 100644 src/main/java/ru/practicum/shareit/user/UserController.java delete mode 100644 src/main/java/ru/practicum/shareit/user/UserMapper.java delete mode 100644 src/main/java/ru/practicum/shareit/user/UserRepository.java delete mode 100644 src/main/java/ru/practicum/shareit/user/UserService.java delete mode 100644 src/main/java/ru/practicum/shareit/user/UserServiceImpl.java delete mode 100644 src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java delete mode 100644 src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java delete mode 100644 src/main/java/ru/practicum/shareit/user/dto/UserDto.java delete mode 100644 src/main/resources/application.properties delete mode 100644 src/main/resources/schema.sql delete mode 100644 src/test/java/ru/practicum/shareit/ShareItTests.java diff --git a/src/main/java/ru/practicum/shareit/ShareItApp.java b/src/main/java/ru/practicum/shareit/ShareItApp.java deleted file mode 100644 index a00ad56..0000000 --- a/src/main/java/ru/practicum/shareit/ShareItApp.java +++ /dev/null @@ -1,13 +0,0 @@ -package ru.practicum.shareit; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class ShareItApp { - - public static void main(String[] args) { - SpringApplication.run(ShareItApp.class, args); - } - -} diff --git a/src/main/java/ru/practicum/shareit/booking/Booking.java b/src/main/java/ru/practicum/shareit/booking/Booking.java deleted file mode 100644 index c94f8e2..0000000 --- a/src/main/java/ru/practicum/shareit/booking/Booking.java +++ /dev/null @@ -1,39 +0,0 @@ -package ru.practicum.shareit.booking; - -import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import ru.practicum.shareit.item.model.Item; -import ru.practicum.shareit.user.User; - - -import java.time.LocalDateTime; - -/** - * TODO Sprint add-bookings. - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@Entity -@Table(name = "bookings") -@Builder -public class Booking { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private long id; - @Column(name = "start_time") - private LocalDateTime start; - @Column(name = "end_time") - private LocalDateTime end; - @ManyToOne - @JoinColumn(name = "item_id") - private Item item; - @ManyToOne - @JoinColumn(name = "booker_id") - private User booker; - @Enumerated(EnumType.STRING) - private BookingStatus status; -} diff --git a/src/main/java/ru/practicum/shareit/booking/BookingController.java b/src/main/java/ru/practicum/shareit/booking/BookingController.java deleted file mode 100644 index 889b7c1..0000000 --- a/src/main/java/ru/practicum/shareit/booking/BookingController.java +++ /dev/null @@ -1,58 +0,0 @@ -package ru.practicum.shareit.booking; - -import jakarta.validation.Valid; -import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.data.web.PageableDefault; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.*; -import ru.practicum.shareit.booking.dto.BookingDto; -import ru.practicum.shareit.booking.dto.NewBookingDto; - -import java.util.List; - - -/** - * TODO Sprint add-bookings. - */ -@RestController -@RequestMapping(path = "/bookings") -@RequiredArgsConstructor -public class BookingController { - private final BookingService bookingService; - - @PostMapping - @ResponseStatus(HttpStatus.CREATED) - public BookingDto create(@RequestBody @Valid NewBookingDto newBookingDto, @RequestHeader("X-Sharer-User-Id") long userId) { - return bookingService.create(newBookingDto, userId); - } - - @PatchMapping("/{bookingId}") - @ResponseStatus(HttpStatus.OK) - public BookingDto approveBooking(@RequestHeader("X-Sharer-User-Id") long userId, @PathVariable long bookingId, @RequestParam boolean approved) { - return bookingService.approveBooking(userId, bookingId, approved); - } - - @GetMapping - @ResponseStatus(HttpStatus.OK) - public List findByBooker(@RequestHeader("X-Sharer-User-Id") long userId, - @RequestParam(defaultValue = "ALL") BookingState state, - @PageableDefault(size = 20, sort = "start", direction = Sort.Direction.DESC) Pageable pageable) { - return bookingService.findByBooker(userId, state, pageable).getContent(); - } - - @GetMapping("/owner") - @ResponseStatus(HttpStatus.OK) - public List findByOwner(@RequestHeader("X-Sharer-User-Id") long userId, - @RequestParam(defaultValue = "ALL") BookingState state, - @PageableDefault(size = 20, sort = "start", direction = Sort.Direction.DESC) Pageable pageable) { - return bookingService.findByOwner(userId, state, pageable).getContent(); - } - - @GetMapping("/{bookingId}") - @ResponseStatus(HttpStatus.OK) - public BookingDto findById(@RequestHeader("X-Sharer-User-Id") long userId, @PathVariable long bookingId) { - return bookingService.findById(userId, bookingId); - } -} diff --git a/src/main/java/ru/practicum/shareit/booking/BookingMapper.java b/src/main/java/ru/practicum/shareit/booking/BookingMapper.java deleted file mode 100644 index dd91f9f..0000000 --- a/src/main/java/ru/practicum/shareit/booking/BookingMapper.java +++ /dev/null @@ -1,35 +0,0 @@ -package ru.practicum.shareit.booking; - - -import ru.practicum.shareit.booking.dto.BookingDto; -import ru.practicum.shareit.booking.dto.NewBookingDto; -import ru.practicum.shareit.item.ItemMapper; -import ru.practicum.shareit.item.model.Item; -import ru.practicum.shareit.user.User; -import ru.practicum.shareit.user.UserMapper; - - -public class BookingMapper { - public static BookingDto mapToBookingDto(Booking booking) { - return BookingDto.builder() - .id(booking.getId()) - .start(booking.getStart()) - .end(booking.getEnd()) - .item(ItemMapper.mapToItemDto(booking.getItem())) - .booker(UserMapper.mapToUserDto(booking.getBooker())) - .status(booking.getStatus()) - .build(); - } - - public static Booking mapToNewBookingDto(NewBookingDto newBookingDto, User user, Item item) { - return Booking.builder() - .start(newBookingDto.getStart()) - .end(newBookingDto.getEnd()) - .item(item) - .booker(user) - .status(BookingStatus.WAITING) - .build(); - } - - -} diff --git a/src/main/java/ru/practicum/shareit/booking/BookingRepository.java b/src/main/java/ru/practicum/shareit/booking/BookingRepository.java deleted file mode 100644 index 2bf7bd5..0000000 --- a/src/main/java/ru/practicum/shareit/booking/BookingRepository.java +++ /dev/null @@ -1,47 +0,0 @@ -package ru.practicum.shareit.booking; - -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; - -import java.time.LocalDateTime; -import java.util.List; -import java.util.Optional; - -public interface BookingRepository extends JpaRepository { - Page findByBooker_Id(long bookerId, Pageable pageable); - - Page findByItemOwner_Id(long ownerId, Pageable pageable); - - @Query("SELECT b FROM Booking b " + - " WHERE b.booker.id = :bookerId " + - " AND b.start <= :now " + - " AND b.end >= :now " + - " AND b.status = ru.practicum.shareit.booking.BookingStatus.APPROVED") - Page findCurrentByBooker(@Param("bookerId") long bookerId, @Param("now") LocalDateTime now, Pageable pageable); - - @Query("SELECT b FROM Booking b " + - " WHERE b.item.owner.id = :ownerId " + - " AND b.start <= :now " + - " AND b.end >= :now " + - " AND b.status = ru.practicum.shareit.booking.BookingStatus.APPROVED") - Page findCurrentByOwner(@Param("ownerId") long ownerId, @Param("now") LocalDateTime now, Pageable pageable); - - Page findByBooker_IdAndEndBefore(long bookerId, LocalDateTime now, Pageable pageable); - - Page findByItemOwner_IdAndEndBefore(long ownerId, LocalDateTime now, Pageable pageable); - - Page findByBooker_IdAndStartAfter(long bookerId, LocalDateTime now, Pageable pageable); - - Page findByItemOwner_IdAndStartAfter(long ownerId, LocalDateTime now, Pageable pageable); - - Page findByBooker_IdAndStatus(long bookerId, BookingStatus status, Pageable pageable); - - Page findByItemOwner_IdAndStatus(long ownerId, BookingStatus status, Pageable pageable); - - List findByItem_idAndStatus(long itemId, BookingStatus status); - - Optional findByItem_idAndBooker_id(long itemId, long bookerId); -} diff --git a/src/main/java/ru/practicum/shareit/booking/BookingService.java b/src/main/java/ru/practicum/shareit/booking/BookingService.java deleted file mode 100644 index 8d4c2bb..0000000 --- a/src/main/java/ru/practicum/shareit/booking/BookingService.java +++ /dev/null @@ -1,18 +0,0 @@ -package ru.practicum.shareit.booking; - -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import ru.practicum.shareit.booking.dto.BookingDto; -import ru.practicum.shareit.booking.dto.NewBookingDto; - -public interface BookingService { - BookingDto create(NewBookingDto newBookingDto, long bookerId); - - BookingDto approveBooking(long userId, long bookingId, boolean approved); - - Page findByBooker(long bookerId, BookingState state, Pageable pageable); - - Page findByOwner(long ownerId, BookingState state, Pageable pageable); - - BookingDto findById(long userId, long bookingId); -} diff --git a/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java b/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java deleted file mode 100644 index 6067f84..0000000 --- a/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java +++ /dev/null @@ -1,107 +0,0 @@ -package ru.practicum.shareit.booking; - - -import lombok.RequiredArgsConstructor; - -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.stereotype.Service; -import ru.practicum.shareit.booking.dto.BookingDto; -import ru.practicum.shareit.booking.dto.NewBookingDto; -import ru.practicum.shareit.exception.NoAccessException; -import ru.practicum.shareit.exception.NotAvailableItemException; -import ru.practicum.shareit.exception.NotFoundException; -import ru.practicum.shareit.item.ItemRepository; -import ru.practicum.shareit.item.model.Item; -import ru.practicum.shareit.user.User; -import ru.practicum.shareit.user.UserRepository; - -import java.time.LocalDateTime; - -@Service -@RequiredArgsConstructor -public class BookingServiceImpl implements BookingService { - private final BookingRepository bookingRepository; - private final ItemRepository itemRepository; - private final UserRepository userRepository; - - @Override - public BookingDto create(NewBookingDto newBookingDto, long bookerId) { - User booker = userRepository.findById(bookerId) - .orElseThrow(() -> new NotFoundException("Пользователь не найден")); - Item item = itemRepository.findById(newBookingDto.getItemId()) - .orElseThrow(() -> new NotFoundException("Вещь не найдена")); - if (!item.isAvailable()) { - throw new NotAvailableItemException("Вещь недоступна для бронирования"); - - } - Booking booking = BookingMapper.mapToNewBookingDto(newBookingDto, booker, item); - bookingRepository.save(booking); - return BookingMapper.mapToBookingDto(booking); - } - - @Override - public BookingDto approveBooking(long userId, long bookingId, boolean approved) { - Booking booking = bookingRepository.findById(bookingId) - .orElseThrow(() -> new NotFoundException("Бронирование не найдено")); - long ownerId = booking.getItem().getOwner().getId(); - if (userId != ownerId) { - throw new NoAccessException("Только владелец вещи имеет доступ к изменению статуса бронирования"); - } - booking.setStatus(approved ? BookingStatus.APPROVED : BookingStatus.REJECTED); - bookingRepository.save(booking); - return BookingMapper.mapToBookingDto(booking); - } - - @Override - public Page findByBooker(long bookerId, BookingState state, Pageable pageable) { - if (!userExistById(bookerId)) { - throw new NotFoundException("Пользователь не найден"); - } - LocalDateTime timeNow = LocalDateTime.now(); - Page page = switch (state) { - case CURRENT -> bookingRepository.findCurrentByBooker(bookerId, timeNow, pageable); - case PAST -> bookingRepository.findByBooker_IdAndEndBefore(bookerId, timeNow, pageable); - case FUTURE -> bookingRepository.findByBooker_IdAndStartAfter(bookerId, timeNow, pageable); - case WAITING -> bookingRepository.findByBooker_IdAndStatus(bookerId, BookingStatus.WAITING, pageable); - case REJECTED -> bookingRepository.findByBooker_IdAndStatus(bookerId, BookingStatus.REJECTED, pageable); - case ALL -> bookingRepository.findByBooker_Id(bookerId, pageable); - default -> throw new NotFoundException("Некорректный параметр state"); - }; - return page.map(BookingMapper::mapToBookingDto); - } - - @Override - public Page findByOwner(long ownerId, BookingState state, Pageable pageable) { - if (!userExistById(ownerId)) { - throw new NotFoundException("Пользователь не найден"); - } - LocalDateTime timeNow = LocalDateTime.now(); - Page page = switch (state) { - case CURRENT -> bookingRepository.findCurrentByOwner(ownerId, timeNow, pageable); - case PAST -> bookingRepository.findByItemOwner_IdAndEndBefore(ownerId, timeNow, pageable); - case FUTURE -> bookingRepository.findByItemOwner_IdAndStartAfter(ownerId, timeNow, pageable); - case WAITING -> bookingRepository.findByItemOwner_IdAndStatus(ownerId, BookingStatus.WAITING, pageable); - case REJECTED -> bookingRepository.findByItemOwner_IdAndStatus(ownerId, BookingStatus.REJECTED, pageable); - case ALL -> bookingRepository.findByItemOwner_Id(ownerId, pageable); - default -> throw new NotFoundException("Некорректный параметр state"); - }; - return page.map(BookingMapper::mapToBookingDto); - } - - @Override - public BookingDto findById(long userId, long bookingId) { - Booking booking = bookingRepository.findById(bookingId) - .orElseThrow(() -> new NotFoundException("Бронирование не найдено")); - long ownerId = booking.getItem().getOwner().getId(); - if (booking.getBooker().getId() != userId && ownerId != userId) { - throw new NoAccessException("No access to booking"); - } - return BookingMapper.mapToBookingDto(booking); - } - - public boolean userExistById(long userId) { - return userRepository.existsById(userId); - } - -} diff --git a/src/main/java/ru/practicum/shareit/booking/BookingState.java b/src/main/java/ru/practicum/shareit/booking/BookingState.java deleted file mode 100644 index 1ffe7c9..0000000 --- a/src/main/java/ru/practicum/shareit/booking/BookingState.java +++ /dev/null @@ -1,5 +0,0 @@ -package ru.practicum.shareit.booking; - -public enum BookingState { - CURRENT, PAST, FUTURE, WAITING, REJECTED, ALL -} diff --git a/src/main/java/ru/practicum/shareit/booking/BookingStatus.java b/src/main/java/ru/practicum/shareit/booking/BookingStatus.java deleted file mode 100644 index ee6f096..0000000 --- a/src/main/java/ru/practicum/shareit/booking/BookingStatus.java +++ /dev/null @@ -1,5 +0,0 @@ -package ru.practicum.shareit.booking; - -public enum BookingStatus { - WAITING, APPROVED, REJECTED, CANCELED -} diff --git a/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java b/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java deleted file mode 100644 index 81f314e..0000000 --- a/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java +++ /dev/null @@ -1,24 +0,0 @@ -package ru.practicum.shareit.booking.dto; - -import lombok.Builder; -import lombok.Data; -import ru.practicum.shareit.booking.BookingStatus; -import ru.practicum.shareit.item.dto.ItemDto; -import ru.practicum.shareit.user.dto.UserDto; - -import java.time.LocalDateTime; - -/** - * TODO Sprint add-bookings. - */ -@Data -@Builder - -public class BookingDto { - private Long id; - private LocalDateTime start; - private LocalDateTime end; - private ItemDto item; - private UserDto booker; - private BookingStatus status; -} diff --git a/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java b/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java deleted file mode 100644 index be4d6e6..0000000 --- a/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java +++ /dev/null @@ -1,21 +0,0 @@ -package ru.practicum.shareit.booking.dto; - -import jakarta.validation.constraints.FutureOrPresent; -import jakarta.validation.constraints.NotNull; -import lombok.Builder; -import lombok.Data; - -import java.time.LocalDateTime; - -@Data -@Builder -public class NewBookingDto { - @FutureOrPresent - private LocalDateTime start; - - @FutureOrPresent - private LocalDateTime end; - - @NotNull - private Long itemId; -} diff --git a/src/main/java/ru/practicum/shareit/comment/CommentMapper.java b/src/main/java/ru/practicum/shareit/comment/CommentMapper.java deleted file mode 100644 index 056001f..0000000 --- a/src/main/java/ru/practicum/shareit/comment/CommentMapper.java +++ /dev/null @@ -1,32 +0,0 @@ -package ru.practicum.shareit.comment; - -import lombok.NoArgsConstructor; -import ru.practicum.shareit.comment.dto.CommentDto; -import ru.practicum.shareit.comment.dto.NewCommentDto; -import ru.practicum.shareit.comment.model.Comment; -import ru.practicum.shareit.item.model.Item; -import ru.practicum.shareit.user.User; - -import java.time.Instant; - -@NoArgsConstructor -public class CommentMapper { - public static Comment mapToNewComment(NewCommentDto newCommentDto, Item item, User user) { - return Comment.builder() - .text(newCommentDto.getText()) - .created(Instant.now()) - .item(item) - .author(user) - .build(); - } - - public static CommentDto mapToCommentDto(Comment comment) { - return CommentDto.builder() - .id(comment.getId()) - .text(comment.getText()) - .authorName(comment.getAuthor().getName()) - .item(comment.getItem()) - .created(comment.getCreated()) - .build(); - } -} diff --git a/src/main/java/ru/practicum/shareit/comment/CommentRepository.java b/src/main/java/ru/practicum/shareit/comment/CommentRepository.java deleted file mode 100644 index ad69c08..0000000 --- a/src/main/java/ru/practicum/shareit/comment/CommentRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package ru.practicum.shareit.comment; - -import org.springframework.data.jpa.repository.JpaRepository; -import ru.practicum.shareit.comment.model.Comment; - -import java.util.List; - -public interface CommentRepository extends JpaRepository { - List findByItem_id(long itemId); -} diff --git a/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java b/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java deleted file mode 100644 index da53c85..0000000 --- a/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java +++ /dev/null @@ -1,17 +0,0 @@ -package ru.practicum.shareit.comment.dto; - -import lombok.Builder; -import lombok.Data; -import ru.practicum.shareit.item.model.Item; - -import java.time.Instant; - -@Data -@Builder -public class CommentDto { - private Long id; - private String text; - private Item item; - private String authorName; - private Instant created; -} diff --git a/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java b/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java deleted file mode 100644 index 56968a0..0000000 --- a/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java +++ /dev/null @@ -1,10 +0,0 @@ -package ru.practicum.shareit.comment.dto; - -import jakarta.validation.constraints.NotBlank; -import lombok.Data; - -@Data -public class NewCommentDto { - @NotBlank - private String text; -} diff --git a/src/main/java/ru/practicum/shareit/comment/model/Comment.java b/src/main/java/ru/practicum/shareit/comment/model/Comment.java deleted file mode 100644 index b3cb9f8..0000000 --- a/src/main/java/ru/practicum/shareit/comment/model/Comment.java +++ /dev/null @@ -1,40 +0,0 @@ -package ru.practicum.shareit.comment.model; - -import jakarta.persistence.*; -import jakarta.validation.constraints.NotBlank; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import ru.practicum.shareit.item.model.Item; -import ru.practicum.shareit.user.User; - -import java.time.Instant; - -@Entity -@Table(name = "comments") -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class Comment { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - Long id; - - @Column(name = "text") - @NotBlank - String text; - - @ManyToOne(cascade = CascadeType.PERSIST) - @JoinColumn(name = "item_id") - Item item; - - @ManyToOne - @JoinColumn(name = "author_id") - User author; - - @Column(name = "created") - Instant created; - -} diff --git a/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java b/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java deleted file mode 100644 index 4257b59..0000000 --- a/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java +++ /dev/null @@ -1,62 +0,0 @@ -package ru.practicum.shareit.eror; - -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.bind.annotation.RestControllerAdvice; -import ru.practicum.shareit.exception.*; - -@RestControllerAdvice -@Slf4j -public class ErrorHandler { - @ExceptionHandler - @ResponseStatus(HttpStatus.BAD_REQUEST) - public ErrorResponse handleValidationError(final ValidationException e) { - log.error("Ошибка валидации {}", e.getMessage()); - return new ErrorResponse( - "Ошибка валидации", - e.getMessage() - ); - } - - @ExceptionHandler - @ResponseStatus(HttpStatus.NOT_FOUND) - public ErrorResponse handleNotFound(final NotFoundException e) { - log.error("Искомый объект не найдена {}", e.getMessage()); - return new ErrorResponse( - "Искомый объект не найден", - e.getMessage() - ); - } - - @ExceptionHandler - @ResponseStatus(HttpStatus.BAD_REQUEST) - public ErrorResponse handleNoDataFound(final NoDataFoundException e) { - log.error("Ошибка заполнения данных {}", e.getMessage()); - return new ErrorResponse( - "Ошибка заполнения данных", - e.getMessage() - ); - } - - @ExceptionHandler - @ResponseStatus(HttpStatus.BAD_REQUEST) - public ErrorResponse handleAvailableError(final NotAvailableItemException e) { - log.error("Ошибка с доступностью вещи {}", e.getMessage()); - return new ErrorResponse( - "Ошибка с доступностью вещи", - e.getMessage() - ); - } - - @ExceptionHandler - @ResponseStatus(HttpStatus.BAD_REQUEST) - public ErrorResponse handleNoAccessException(final NoAccessException e) { - log.error("Ошибка доступа {}", e.getMessage()); - return new ErrorResponse( - "Ошибка доступа", - e.getMessage() - ); - } -} diff --git a/src/main/java/ru/practicum/shareit/eror/ErrorResponse.java b/src/main/java/ru/practicum/shareit/eror/ErrorResponse.java deleted file mode 100644 index d2e6225..0000000 --- a/src/main/java/ru/practicum/shareit/eror/ErrorResponse.java +++ /dev/null @@ -1,15 +0,0 @@ -package ru.practicum.shareit.eror; - -import lombok.Getter; - -@Getter -public class ErrorResponse { - String error; - String description; - - public ErrorResponse(String error, String description) { - this.error = error; - this.description = description; - } - -} diff --git a/src/main/java/ru/practicum/shareit/exception/ConflictException.java b/src/main/java/ru/practicum/shareit/exception/ConflictException.java deleted file mode 100644 index 7885123..0000000 --- a/src/main/java/ru/practicum/shareit/exception/ConflictException.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.practicum.shareit.exception; - -public class ConflictException extends RuntimeException { - public ConflictException(String message) { - super(message); - } -} diff --git a/src/main/java/ru/practicum/shareit/exception/NoAccessException.java b/src/main/java/ru/practicum/shareit/exception/NoAccessException.java deleted file mode 100644 index 7c24051..0000000 --- a/src/main/java/ru/practicum/shareit/exception/NoAccessException.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.practicum.shareit.exception; - -public class NoAccessException extends RuntimeException { - public NoAccessException(String message) { - super(message); - } -} diff --git a/src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java b/src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java deleted file mode 100644 index dbef4b4..0000000 --- a/src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.practicum.shareit.exception; - -public class NoDataFoundException extends RuntimeException { - public NoDataFoundException(String message) { - super(message); - } -} diff --git a/src/main/java/ru/practicum/shareit/exception/NotAvailableItemException.java b/src/main/java/ru/practicum/shareit/exception/NotAvailableItemException.java deleted file mode 100644 index cb02e2e..0000000 --- a/src/main/java/ru/practicum/shareit/exception/NotAvailableItemException.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.practicum.shareit.exception; - -public class NotAvailableItemException extends RuntimeException { - public NotAvailableItemException(String message) { - super(message); - } -} diff --git a/src/main/java/ru/practicum/shareit/exception/NotFoundException.java b/src/main/java/ru/practicum/shareit/exception/NotFoundException.java deleted file mode 100644 index 98610d2..0000000 --- a/src/main/java/ru/practicum/shareit/exception/NotFoundException.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.practicum.shareit.exception; - -public class NotFoundException extends RuntimeException { - public NotFoundException(String message) { - super(message); - } -} \ No newline at end of file diff --git a/src/main/java/ru/practicum/shareit/exception/ValidationException.java b/src/main/java/ru/practicum/shareit/exception/ValidationException.java deleted file mode 100644 index 59043da..0000000 --- a/src/main/java/ru/practicum/shareit/exception/ValidationException.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.practicum.shareit.exception; - -public class ValidationException extends RuntimeException { - public ValidationException(String message) { - super(message); - } -} diff --git a/src/main/java/ru/practicum/shareit/item/ItemController.java b/src/main/java/ru/practicum/shareit/item/ItemController.java deleted file mode 100644 index 8f1185d..0000000 --- a/src/main/java/ru/practicum/shareit/item/ItemController.java +++ /dev/null @@ -1,67 +0,0 @@ -package ru.practicum.shareit.item; - -import jakarta.validation.Valid; -import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpStatus; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; -import ru.practicum.shareit.comment.dto.CommentDto; -import ru.practicum.shareit.comment.dto.NewCommentDto; -import ru.practicum.shareit.item.dto.ItemDto; -import ru.practicum.shareit.item.dto.ItemWithCommentsDto; -import ru.practicum.shareit.item.dto.NewItemDto; -import ru.practicum.shareit.item.dto.UpdateItemDto; - -import java.util.List; - -/** - * TODO Sprint add-controllers. - */ -@RestController -@RequestMapping("/items") -@RequiredArgsConstructor -@Validated -public class ItemController { - private final ItemService itemService; - - @PostMapping - @ResponseStatus(HttpStatus.CREATED) - public ItemDto create(@Valid @RequestBody NewItemDto itemDto, @RequestHeader("X-Sharer-User-Id") Long userId) { - - return itemService.create(itemDto, userId); - } - - @PatchMapping("/{itemId}") - public ItemDto update(@PathVariable("itemId") Long itemId, - @RequestBody UpdateItemDto itemDto, - @RequestHeader(value = "X-Sharer-User-Id") Long userId) { - - return itemService.update(itemId, itemDto, userId); - } - - @GetMapping("/{itemId}") - public ItemWithCommentsDto getItemById(@PathVariable("itemId") Long itemId) { - - return itemService.get(itemId); - } - - @GetMapping - public List getUserItems(@RequestHeader("X-Sharer-User-Id") Long userId) { - - return itemService.getAllItemsByOwner(userId); - } - - @GetMapping("/search") - public List search(@RequestParam("text") String searchText) { - - return itemService.search(searchText); - } - - @PostMapping("/{itemId}/comment") - @ResponseStatus(HttpStatus.CREATED) - public CommentDto createComment(@RequestHeader("X-Sharer-User-Id") long userId, - @PathVariable("itemId") long itemId, - @RequestBody @Valid NewCommentDto newCommentDto) { - return itemService.createComment(newCommentDto, itemId, userId); - } -} diff --git a/src/main/java/ru/practicum/shareit/item/ItemMapper.java b/src/main/java/ru/practicum/shareit/item/ItemMapper.java deleted file mode 100644 index 197ac47..0000000 --- a/src/main/java/ru/practicum/shareit/item/ItemMapper.java +++ /dev/null @@ -1,71 +0,0 @@ -package ru.practicum.shareit.item; - - -import ru.practicum.shareit.booking.Booking; -import ru.practicum.shareit.booking.BookingMapper; -import ru.practicum.shareit.comment.CommentMapper; -import ru.practicum.shareit.comment.model.Comment; -import ru.practicum.shareit.item.dto.ItemDto; -import ru.practicum.shareit.item.dto.ItemWithCommentsDto; -import ru.practicum.shareit.item.dto.NewItemDto; -import ru.practicum.shareit.item.dto.UpdateItemDto; -import ru.practicum.shareit.item.model.Item; -import ru.practicum.shareit.user.User; -import ru.practicum.shareit.user.UserMapper; - -import java.util.List; - - -public class ItemMapper { - public static ItemDto mapToItemDto(Item item) { - return ItemDto.builder() - .id(item.getId()) - .name(item.getName()) - .description(item.getDescription()) - .available(item.isAvailable()) - .owner(UserMapper.mapToUserDto(item.getOwner())) - .build(); - } - - public static Item mapToNewItem(NewItemDto newItemDto, User owner) { - return Item.builder() - .name(newItemDto.getName()) - .description(newItemDto.getDescription()) - .available(newItemDto.getAvailable()) - .owner(owner) - .request(newItemDto.getRequest()) - .build(); - } - - public static Item mapToUpdateItemDto(Item item, UpdateItemDto updateItemDto) { - if (updateItemDto.hasName()) { - item.setName(updateItemDto.getName()); - } - if (updateItemDto.hasDescription()) { - item.setDescription(updateItemDto.getDescription()); - } - if (updateItemDto.hasAvailable()) { - item.setAvailable(updateItemDto.getAvailable()); - } - return item; - - } - - public static ItemWithCommentsDto mapToItemWithCommentsDto(Item item, List bookings, List comments) { - ItemWithCommentsDto itemWithCommentsDto = ItemWithCommentsDto.builder() - .id(item.getId()) - .name(item.getName()) - .description(item.getDescription()) - .available(item.isAvailable()) - .comments(comments.stream().map(CommentMapper::mapToCommentDto).toList()) - .build(); - if (!bookings.isEmpty()) { - itemWithCommentsDto.setLastBooking(BookingMapper.mapToBookingDto(bookings.getLast())); - if (bookings.size() > 1) { - itemWithCommentsDto.setNextBooking(BookingMapper.mapToBookingDto(bookings.get(bookings.size() - 2))); - } - } - return itemWithCommentsDto; - } -} - diff --git a/src/main/java/ru/practicum/shareit/item/ItemRepository.java b/src/main/java/ru/practicum/shareit/item/ItemRepository.java deleted file mode 100644 index e93c564..0000000 --- a/src/main/java/ru/practicum/shareit/item/ItemRepository.java +++ /dev/null @@ -1,23 +0,0 @@ -package ru.practicum.shareit.item; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import ru.practicum.shareit.item.model.Item; -import ru.practicum.shareit.user.User; - -import java.util.List; - - -public interface ItemRepository extends JpaRepository { - List findByOwner(User owner); - - @Query("select it from Item it " + - "where it.available = true and " + - "(upper(it.name) like upper(concat('%', ?1, '%')) " + - " or upper(it.description) like upper(concat('%', ?1, '%')))") - List searchItem(String text); - - -} - - diff --git a/src/main/java/ru/practicum/shareit/item/ItemService.java b/src/main/java/ru/practicum/shareit/item/ItemService.java deleted file mode 100644 index 44dac1d..0000000 --- a/src/main/java/ru/practicum/shareit/item/ItemService.java +++ /dev/null @@ -1,25 +0,0 @@ -package ru.practicum.shareit.item; - -import ru.practicum.shareit.comment.dto.CommentDto; -import ru.practicum.shareit.comment.dto.NewCommentDto; -import ru.practicum.shareit.item.dto.ItemDto; -import ru.practicum.shareit.item.dto.ItemWithCommentsDto; -import ru.practicum.shareit.item.dto.NewItemDto; -import ru.practicum.shareit.item.dto.UpdateItemDto; - -import java.util.List; - -public interface ItemService { - - ItemDto create(NewItemDto newItemDto, long userId); - - ItemDto update(long itemId, UpdateItemDto itemDto, long userID); - - ItemWithCommentsDto get(long itemId); - - List getAllItemsByOwner(long ownerId); - - List search(String searchText); - - CommentDto createComment(NewCommentDto newCommentDto, long itemId, long userId); -} diff --git a/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java b/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java deleted file mode 100644 index 3215e11..0000000 --- a/src/main/java/ru/practicum/shareit/item/ItemServiceImpl.java +++ /dev/null @@ -1,119 +0,0 @@ -package ru.practicum.shareit.item; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import ru.practicum.shareit.booking.Booking; -import ru.practicum.shareit.booking.BookingRepository; -import ru.practicum.shareit.booking.BookingStatus; -import ru.practicum.shareit.comment.CommentMapper; -import ru.practicum.shareit.comment.CommentRepository; -import ru.practicum.shareit.comment.dto.CommentDto; -import ru.practicum.shareit.comment.dto.NewCommentDto; -import ru.practicum.shareit.comment.model.Comment; -import ru.practicum.shareit.exception.NoAccessException; -import ru.practicum.shareit.exception.NotFoundException; -import ru.practicum.shareit.item.dto.ItemDto; -import ru.practicum.shareit.item.dto.ItemWithCommentsDto; -import ru.practicum.shareit.item.dto.NewItemDto; -import ru.practicum.shareit.item.dto.UpdateItemDto; -import ru.practicum.shareit.item.model.Item; -import ru.practicum.shareit.user.User; -import ru.practicum.shareit.user.UserMapper; -import ru.practicum.shareit.user.UserService; - -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; - -@Service -@RequiredArgsConstructor -@Slf4j -public class ItemServiceImpl implements ItemService { - private final ItemRepository itemRepository; - private final UserService userService; - private final BookingRepository bookingRepository; - private final CommentRepository commentRepository; - - @Override - public ItemDto create(NewItemDto newItemDto, long userId) { - log.debug("==> Creating item: {}", newItemDto); - User owner = UserMapper.mapToUser(userService.getById(userId)); - Item item = ItemMapper.mapToNewItem(newItemDto, owner); - itemRepository.save(item); - log.debug("<== Creating item: {}", newItemDto); - return ItemMapper.mapToItemDto(item); - } - - @Override - public ItemDto update(long itemId, UpdateItemDto itemDto, long userID) { - log.debug("==> Updating item: {}", itemDto); - Item oldItem = itemRepository.findById(itemId) - .orElseThrow(() -> new NotFoundException("Предмет не найден")); - - if (userID == oldItem.getOwner().getId()) { - Item updateItem = ItemMapper.mapToUpdateItemDto(oldItem, itemDto); - itemRepository.save(updateItem); - log.debug("<== Updating item: {}", itemDto); - return ItemMapper.mapToItemDto(updateItem); - } - throw new NotFoundException("У вас недостаточно прав для обновления вещи"); - } - - - @Override - public ItemWithCommentsDto get(long itemId) { - log.debug("==> get item by id: {}", itemId); - Item item = itemRepository.findById(itemId) - .orElseThrow(() -> new NotFoundException("Предмет не найден")); - List bookings = bookingRepository.findByItem_idAndStatus(itemId, BookingStatus.WAITING); - List comments = commentRepository.findByItem_id(itemId); - ItemWithCommentsDto itemWithCommentsDto = ItemMapper.mapToItemWithCommentsDto(item, bookings, comments); - log.debug("<== get item by id: {}", item); - return itemWithCommentsDto; - } - - @Override - public List getAllItemsByOwner(long ownerId) { - log.debug("==> get user items by user id: {}", ownerId); - return itemRepository.findByOwner(UserMapper.mapToUser(userService.getById(ownerId))) - .stream() - .map(ItemMapper::mapToItemDto) - .toList(); - - - } - - @Override - public List search(String searchText) { - log.debug("==> search items: {}", searchText); - List foundItems = new ArrayList<>(); - if (searchText.isEmpty() || searchText.isBlank() || searchText == null) { - return foundItems; - } - foundItems = itemRepository.searchItem(searchText) - .stream() - .map(ItemMapper::mapToItemDto) - .toList(); - log.debug("<== search items: {}", searchText); - return foundItems; - } - - @Override - public CommentDto createComment(NewCommentDto newCommentDto, long itemId, long userId) { - log.debug("==> create comment for item: {}", itemId); - Booking booking = bookingRepository.findByItem_idAndBooker_id(itemId, userId) - .orElseThrow(() -> new NotFoundException("Бронирование для предмета не найдено, невозможно добавить комментарий")); - if (booking.getEnd().isAfter(LocalDateTime.now())) { - throw new NoAccessException("Срок бронирования предмета еще не закончился"); - } - User commentAuthor = UserMapper.mapToUser(userService.getById(userId)); - Item item = itemRepository.findById(itemId) - .orElseThrow(() -> new NotFoundException("Предмет не найден")); - Comment comment = CommentMapper.mapToNewComment(newCommentDto, item, commentAuthor); - commentRepository.save(comment); - log.debug("<== create comment for item: {}", itemId); - return CommentMapper.mapToCommentDto(comment); - } - -} diff --git a/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java b/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java deleted file mode 100644 index 286020c..0000000 --- a/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java +++ /dev/null @@ -1,19 +0,0 @@ -package ru.practicum.shareit.item.dto; - -import lombok.*; -import ru.practicum.shareit.user.dto.UserDto; - - -/** - * TODO Sprint add-controllers. - */ -@Data -@Builder -public class ItemDto { - private Long id; - private String name; - private String description; - private Boolean available; - private UserDto owner; - -} diff --git a/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java b/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java deleted file mode 100644 index 710de60..0000000 --- a/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java +++ /dev/null @@ -1,21 +0,0 @@ -package ru.practicum.shareit.item.dto; - -import lombok.Builder; -import lombok.Data; -import ru.practicum.shareit.booking.dto.BookingDto; -import ru.practicum.shareit.comment.dto.CommentDto; - -import java.util.List; - -@Data -@Builder -public class ItemWithCommentsDto { - private long id; - - private String name; - private String description; - private Boolean available; - private BookingDto lastBooking; - private BookingDto nextBooking; - private List comments; -} diff --git a/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java b/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java deleted file mode 100644 index 3c02052..0000000 --- a/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java +++ /dev/null @@ -1,22 +0,0 @@ -package ru.practicum.shareit.item.dto; - -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import lombok.Builder; -import lombok.Data; -import ru.practicum.shareit.request.ItemRequest; - -@Data -@Builder -public class NewItemDto { - @NotBlank(message = "название предмета не может быть пустым") - private String name; - - @NotBlank(message = "описание не должно быть пустым") - private String description; - - @NotNull(message = "не установлен статус доступности бронирования") - private Boolean available; - - private ItemRequest request; -} diff --git a/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java b/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java deleted file mode 100644 index ead598d..0000000 --- a/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java +++ /dev/null @@ -1,22 +0,0 @@ -package ru.practicum.shareit.item.dto; - -import lombok.Data; - -@Data -public class UpdateItemDto { - private String name; - private String description; - private Boolean available; - - public boolean hasName() { - return !(name == null || name.isBlank()); - } - - public boolean hasDescription() { - return !(description == null || description.isBlank()); - } - - public boolean hasAvailable() { - return Boolean.FALSE.equals(available); - } -} diff --git a/src/main/java/ru/practicum/shareit/item/model/Item.java b/src/main/java/ru/practicum/shareit/item/model/Item.java deleted file mode 100644 index a8f7e3b..0000000 --- a/src/main/java/ru/practicum/shareit/item/model/Item.java +++ /dev/null @@ -1,40 +0,0 @@ -package ru.practicum.shareit.item.model; - - -import jakarta.persistence.*; -import jakarta.validation.constraints.NotBlank; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import ru.practicum.shareit.request.ItemRequest; -import ru.practicum.shareit.user.User; - -/** - * TODO Sprint add-controllers. - */ -@Data -@Entity -@Table(name = "items") -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class Item { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - @Column(name = "name", nullable = false) - @NotBlank - private String name; - @Column(name = "description", nullable = false) - @NotBlank - private String description; - @Column(name = "available") - private boolean available; - @ManyToOne - @JoinColumn(name = "owner_id") - private User owner; - @ManyToOne - @JoinColumn(name = "request_id") - private ItemRequest request; -} diff --git a/src/main/java/ru/practicum/shareit/request/ItemRequest.java b/src/main/java/ru/practicum/shareit/request/ItemRequest.java deleted file mode 100644 index f90c328..0000000 --- a/src/main/java/ru/practicum/shareit/request/ItemRequest.java +++ /dev/null @@ -1,34 +0,0 @@ -package ru.practicum.shareit.request; - -import jakarta.persistence.*; -import jakarta.validation.constraints.NotBlank; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import ru.practicum.shareit.user.User; - - -/** - * TODO Sprint add-item-requests. - */ - -@Entity -@Table(name = "request") -@Data -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class ItemRequest { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - long id; - @Column(name = "description", nullable = false) - @NotBlank - String description; - @ManyToOne - @JoinColumn(name = "requestor_id") - User requestor; - - -} diff --git a/src/main/java/ru/practicum/shareit/request/ItemRequestController.java b/src/main/java/ru/practicum/shareit/request/ItemRequestController.java deleted file mode 100644 index 064e2e9..0000000 --- a/src/main/java/ru/practicum/shareit/request/ItemRequestController.java +++ /dev/null @@ -1,12 +0,0 @@ -package ru.practicum.shareit.request; - -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * TODO Sprint add-item-requests. - */ -@RestController -@RequestMapping(path = "/requests") -public class ItemRequestController { -} diff --git a/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java b/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java deleted file mode 100644 index c6aa1c7..0000000 --- a/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java +++ /dev/null @@ -1,19 +0,0 @@ -package ru.practicum.shareit.request.dto; - -import lombok.Builder; -import lombok.Data; -import ru.practicum.shareit.user.dto.UserDto; - -import java.time.LocalDateTime; - -/** - * TODO Sprint add-item-requests. - */ -@Data -@Builder -public class ItemRequestDto { - private Long id; - private String description; - private UserDto requestor; - private LocalDateTime created; -} diff --git a/src/main/java/ru/practicum/shareit/user/User.java b/src/main/java/ru/practicum/shareit/user/User.java deleted file mode 100644 index 1edc191..0000000 --- a/src/main/java/ru/practicum/shareit/user/User.java +++ /dev/null @@ -1,27 +0,0 @@ -package ru.practicum.shareit.user; - - -import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -/** - * TODO Sprint add-controllers. - */ -@Data -@NoArgsConstructor -@AllArgsConstructor -@Entity -@Table(name = "users") -@Builder -public class User { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - @Column(name = "name") - private String name; - @Column(name = "email") - private String email; -} diff --git a/src/main/java/ru/practicum/shareit/user/UserController.java b/src/main/java/ru/practicum/shareit/user/UserController.java deleted file mode 100644 index c849a60..0000000 --- a/src/main/java/ru/practicum/shareit/user/UserController.java +++ /dev/null @@ -1,47 +0,0 @@ -package ru.practicum.shareit.user; - -import jakarta.validation.Valid; -import lombok.AllArgsConstructor; -import org.springframework.http.HttpStatus; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; -import ru.practicum.shareit.user.dto.NewUserDto; -import ru.practicum.shareit.user.dto.UpdateUserDto; -import ru.practicum.shareit.user.dto.UserDto; - -/** - * TODO Sprint add-controllers. - */ - -@RestController -@AllArgsConstructor -@RequestMapping(path = "/users") -@Validated -public class UserController { - private final UserService userService; - - @PostMapping - @ResponseStatus(HttpStatus.CREATED) - public UserDto createUser(@Valid @RequestBody NewUserDto userDto) { - return userService.create(userDto); - } - - @GetMapping("/{userId}") - public UserDto getUserById(@PathVariable("userId") Long userId) { - - return userService.getById(userId); - } - - @PatchMapping("/{userId}") - @ResponseStatus(HttpStatus.OK) - public UserDto updateUser(@PathVariable("userId") Long userId, @Validated @RequestBody(required = false) UpdateUserDto userDto) { - - return userService.update(userId, userDto); - } - - @DeleteMapping("/{userId}") - @ResponseStatus(HttpStatus.OK) - public void deleteUser(@PathVariable("userId") Long userId) { - userService.deleteUser(userId); - } -} diff --git a/src/main/java/ru/practicum/shareit/user/UserMapper.java b/src/main/java/ru/practicum/shareit/user/UserMapper.java deleted file mode 100644 index e920c5f..0000000 --- a/src/main/java/ru/practicum/shareit/user/UserMapper.java +++ /dev/null @@ -1,41 +0,0 @@ -package ru.practicum.shareit.user; - -import ru.practicum.shareit.user.dto.NewUserDto; -import ru.practicum.shareit.user.dto.UpdateUserDto; -import ru.practicum.shareit.user.dto.UserDto; - -public class UserMapper { - public static UserDto mapToUserDto(User user) { - return UserDto.builder() - .id(user.getId()) - .name(user.getName()) - .email(user.getEmail()) - .build(); - } - - public static User mapToUser(UserDto userDto) { - return User.builder() - .id(userDto.getId()) - .name(userDto.getName()) - .email(userDto.getEmail()) - .build(); - } - - public static User mapToNewUser(NewUserDto newUserDto) { - return User.builder() - .name(newUserDto.getName()) - .email(newUserDto.getEmail()) - .build(); - } - - public static User mapToUserUpdate(User user, UpdateUserDto updateUserDto) { - if (updateUserDto.hasEmail()) { - user.setEmail(updateUserDto.getEmail()); - } - if (updateUserDto.hasName()) { - user.setName(updateUserDto.getName()); - } - return user; - } - -} diff --git a/src/main/java/ru/practicum/shareit/user/UserRepository.java b/src/main/java/ru/practicum/shareit/user/UserRepository.java deleted file mode 100644 index e303ab5..0000000 --- a/src/main/java/ru/practicum/shareit/user/UserRepository.java +++ /dev/null @@ -1,6 +0,0 @@ -package ru.practicum.shareit.user; - -import org.springframework.data.jpa.repository.JpaRepository; - -public interface UserRepository extends JpaRepository { -} diff --git a/src/main/java/ru/practicum/shareit/user/UserService.java b/src/main/java/ru/practicum/shareit/user/UserService.java deleted file mode 100644 index 3beaf8c..0000000 --- a/src/main/java/ru/practicum/shareit/user/UserService.java +++ /dev/null @@ -1,18 +0,0 @@ -package ru.practicum.shareit.user; - -import org.springframework.stereotype.Service; -import ru.practicum.shareit.user.dto.NewUserDto; -import ru.practicum.shareit.user.dto.UpdateUserDto; -import ru.practicum.shareit.user.dto.UserDto; - -@Service -public interface UserService { - - UserDto create(NewUserDto userDto); - - UserDto update(long id, UpdateUserDto updateUserDto); - - UserDto getById(long id); - - void deleteUser(long id); -} diff --git a/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java b/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java deleted file mode 100644 index 7f78138..0000000 --- a/src/main/java/ru/practicum/shareit/user/UserServiceImpl.java +++ /dev/null @@ -1,56 +0,0 @@ -package ru.practicum.shareit.user; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import ru.practicum.shareit.exception.NotFoundException; -import ru.practicum.shareit.user.dto.NewUserDto; -import ru.practicum.shareit.user.dto.UpdateUserDto; -import ru.practicum.shareit.user.dto.UserDto; - -@Service -@RequiredArgsConstructor -@Slf4j -public class UserServiceImpl implements UserService { - private final UserRepository userRepository; - - @Override - public UserDto create(NewUserDto userDto) { - log.debug("==> Creating user: {}", userDto); - User user = UserMapper.mapToNewUser(userDto); - userRepository.save(user); - log.debug("<== Creating user: {}", user); - return UserMapper.mapToUserDto(user); - - } - - @Override - public UserDto update(long id, UpdateUserDto updateUserDto) { - log.debug("==> Updating user: {}", id); - User oldUser = UserMapper.mapToUser(getById(id)); - User updateUser = UserMapper.mapToUserUpdate(oldUser, updateUserDto); - updateUser = userRepository.save(updateUser); - log.debug("<== Updating user: {}", id); - return UserMapper.mapToUserDto(updateUser); - } - - @Override - public UserDto getById(long id) { - User user = userRepository.findById(id) - .orElseThrow(() -> new NotFoundException("Пользователь с id = " + id + " не найден")); - return UserMapper.mapToUserDto(user); - } - - @Override - public void deleteUser(long id) { - log.debug("==> Deleting user: {}", id); - User user = userRepository.findById(id) - .orElseThrow(() -> new NotFoundException("Пользователь с id = " + id + " не найден")); - if (user != null) { - userRepository.delete(user); - log.debug("<== Deleting user: {}", id); - } - } - - -} diff --git a/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java b/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java deleted file mode 100644 index f95ecb8..0000000 --- a/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java +++ /dev/null @@ -1,17 +0,0 @@ -package ru.practicum.shareit.user.dto; - -import jakarta.validation.constraints.Email; -import jakarta.validation.constraints.NotBlank; -import lombok.Builder; -import lombok.Data; - -@Data -@Builder -public class NewUserDto { - @NotBlank(message = "Имя не может быть пустым") - private String name; - - @NotBlank(message = "email не может быть пустым") - @Email(message = "Указан некорректный формат email") - private String email; -} diff --git a/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java b/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java deleted file mode 100644 index bd9e396..0000000 --- a/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java +++ /dev/null @@ -1,20 +0,0 @@ -package ru.practicum.shareit.user.dto; - -import jakarta.validation.constraints.Email; -import lombok.Data; - -@Data -public class UpdateUserDto { - private String name; - - @Email(message = "Указан некорректный формат email") - private String email; - - public boolean hasName() { - return !(name == null || name.isBlank()); - } - - public boolean hasEmail() { - return !(email == null || email.isBlank()); - } -} diff --git a/src/main/java/ru/practicum/shareit/user/dto/UserDto.java b/src/main/java/ru/practicum/shareit/user/dto/UserDto.java deleted file mode 100644 index eef5ae4..0000000 --- a/src/main/java/ru/practicum/shareit/user/dto/UserDto.java +++ /dev/null @@ -1,16 +0,0 @@ -package ru.practicum.shareit.user.dto; - -import jakarta.validation.constraints.Email; -import lombok.*; - - -@Getter -@Setter -@ToString -@Builder -public class UserDto { - private Long id; - private String name; - @Email(message = "Электронная почта должна содержать символ @") - private String email; -} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index d678861..0000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1,11 +0,0 @@ -server.port=9090 - -# ???? ???????????? ???????????? -spring.jpa.hibernate.ddl-auto=none -spring.jpa.properties.hibernate.format_sql=true -spring.sql.init.mode=always - -logging.level.org.springframework.orm.jpa=INFO -logging.level.org.springframework.transaction=INFO -logging.level.org.springframework.transaction.interceptor=TRACE -logging.level.org.springframework.orm.jpa.JpaTransactionManager=DEBUG diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql deleted file mode 100644 index 0c75e00..0000000 --- a/src/main/resources/schema.sql +++ /dev/null @@ -1,45 +0,0 @@ -drop table IF EXISTS users, - items, - requests, - items, - bookings, - comments; - - -CREATE TABLE IF NOT EXISTS users ( -id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, -name varchar, -email varchar UNIQUE NOT NULL -); -CREATE TABLE IF NOT EXISTS requests -( -id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY NOT NULL, -description VARCHAR(360) NOT NULL, -requestor_id BIGINT REFERENCES users(id), -created TIMESTAMP WITHOUT TIME ZONE NOT NULL -); - - -CREATE TABLE IF NOT EXISTS items ( -id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, -name varchar NOT NULL, -description varchar NOT NULL, -available boolean, -owner_id BIGINT REFERENCES users (id), -request_id BIGINT REFERENCES request (id) -); -CREATE TABLE IF NOT EXISTS bookings ( -id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, -start_time TIMESTAMP WITHOUT TIME ZONE NOT NULL, -end_time TIMESTAMP WITHOUT TIME ZONE NOT NULL, -item_id BIGINT REFERENCES items (id) ON DELETE CASCADE, -booker_id BIGINT REFERENCES users (id) ON DELETE CASCADE, -status varchar NOT NULL -); -CREATE TABLE IF NOT EXISTS comments ( -id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, -text varchar NOT NULL, -item_id BIGINT REFERENCES items (id) ON DELETE CASCADE, -author_id BIGINT REFERENCES users (id) ON DELETE CASCADE, -created TIMESTAMP WITHOUT TIME ZONE NOT NULL -); diff --git a/src/test/java/ru/practicum/shareit/ShareItTests.java b/src/test/java/ru/practicum/shareit/ShareItTests.java deleted file mode 100644 index 4d79052..0000000 --- a/src/test/java/ru/practicum/shareit/ShareItTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package ru.practicum.shareit; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class ShareItTests { - - @Test - void contextLoads() { - } - -} From 21fb8dfc49b7aa918665e4460bb2bbdc5c7fc59c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 19:11:41 +0400 Subject: [PATCH 19/55] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D1=82=D0=B7=2016=20=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../practicum/shareit/ShareItGateway.java | 2 +- .../practicum/shareit/booking/BookingClient.java | 13 ++++++------- .../shareit/booking/BookingController.java | 6 +++--- .../practicum/shareit/booking/BookingStatus.java | 2 +- .../shareit/booking/dto/BookItemRequestDto.java | 6 +++--- .../practicum/shareit/booking/dto/BookingDto.java | 8 ++++---- .../shareit/booking/dto/BookingState.java | 2 +- .../shareit/booking/dto/NewBookingDto.java | 3 +-- .../practicum/shareit/client/BaseClient.java | 14 +++++--------- .../practicum/shareit}/dto/CommentDto.java | 4 ++-- .../practicum/shareit}/dto/NewCommentDto.java | 2 +- .../practicum/shareit/item/Item.java | 6 +++--- .../practicum/shareit/item/ItemClient.java | 12 +++++------- .../practicum/shareit/item/ItemController.java | 8 ++++---- .../practicum/shareit/item/dto/ItemDto.java | 4 ++-- .../shareit/item/dto/ItemResponseToRequestDto.java | 2 +- .../shareit/item/dto/ItemWithCommentsDto.java | 8 ++++---- .../practicum/shareit/item/dto/NewItemDto.java | 5 ++--- .../practicum/shareit/item/dto/UpdateItemDto.java | 2 +- .../practicum/shareit/request/ItemRequest.java | 6 +++--- .../shareit/request/ItemRequestClient.java | 6 +++--- .../shareit/request/ItemRequestController.java | 7 ++----- .../shareit/request/dto/ItemRequestDto.java | 4 ++-- .../shareit/request/dto/NewItemRequestDto.java | 2 +- .../practicum/shareit/user/User.java | 2 +- .../practicum/shareit/user/UserClient.java | 8 ++++---- .../practicum/shareit/user/UserController.java | 7 +++---- .../practicum/shareit/user/dto/NewUserDto.java | 2 +- .../practicum/shareit/user/dto/UpdateUserDto.java | 2 +- .../practicum/shareit/user/dto/UserDto.java | 2 +- 30 files changed, 72 insertions(+), 85 deletions(-) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/ShareItGateway.java (85%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/booking/BookingClient.java (89%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/booking/BookingController.java (91%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/booking/BookingStatus.java (56%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/booking/dto/BookItemRequestDto.java (87%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/booking/dto/BookingDto.java (56%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/booking/dto/BookingState.java (90%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/booking/dto/NewBookingDto.java (75%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/client/BaseClient.java (94%) rename gateway/src/main/java/{ru/practicum/shareit/comment => ru.practicum.shareit/practicum/shareit}/dto/CommentDto.java (69%) rename gateway/src/main/java/{ru/practicum/shareit/comment => ru.practicum.shareit/practicum/shareit}/dto/NewCommentDto.java (73%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/item/Item.java (69%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/item/ItemClient.java (84%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/item/ItemController.java (88%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/item/dto/ItemDto.java (70%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/item/dto/ItemResponseToRequestDto.java (83%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/item/dto/ItemWithCommentsDto.java (61%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/item/dto/NewItemDto.java (83%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/item/dto/UpdateItemDto.java (88%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/request/ItemRequest.java (75%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/request/ItemRequestClient.java (86%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/request/ItemRequestController.java (84%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/request/dto/ItemRequestDto.java (69%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/request/dto/NewItemRequestDto.java (83%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/user/User.java (85%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/user/UserClient.java (84%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/user/UserController.java (88%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/user/dto/NewUserDto.java (88%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/user/dto/UpdateUserDto.java (87%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/user/dto/UserDto.java (86%) diff --git a/gateway/src/main/java/ru/practicum/shareit/ShareItGateway.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/ShareItGateway.java similarity index 85% rename from gateway/src/main/java/ru/practicum/shareit/ShareItGateway.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/ShareItGateway.java index 0aa75c3..0276c51 100644 --- a/gateway/src/main/java/ru/practicum/shareit/ShareItGateway.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/ShareItGateway.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit; +package ru.practicum.shareit.practicum.shareit; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/BookingClient.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingClient.java similarity index 89% rename from gateway/src/main/java/ru/practicum/shareit/booking/BookingClient.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingClient.java index 6cff564..d8c81ef 100644 --- a/gateway/src/main/java/ru/practicum/shareit/booking/BookingClient.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingClient.java @@ -1,6 +1,4 @@ -package ru.practicum.shareit.booking; - -import java.util.Map; +package ru.practicum.shareit.practicum.shareit.booking; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -9,11 +7,12 @@ import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.stereotype.Service; import org.springframework.web.util.DefaultUriBuilderFactory; +import ru.practicum.shareit.practicum.shareit.booking.dto.BookItemRequestDto; +import ru.practicum.shareit.practicum.shareit.booking.dto.BookingState; +import ru.practicum.shareit.practicum.shareit.booking.dto.NewBookingDto; +import ru.practicum.shareit.practicum.shareit.client.BaseClient; -import ru.practicum.shareit.booking.dto.BookItemRequestDto; -import ru.practicum.shareit.booking.dto.BookingState; -import ru.practicum.shareit.booking.dto.NewBookingDto; -import ru.practicum.shareit.client.BaseClient; +import java.util.Map; @Service public class BookingClient extends BaseClient { diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/BookingController.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingController.java similarity index 91% rename from gateway/src/main/java/ru/practicum/shareit/booking/BookingController.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingController.java index db8e820..db1dd91 100644 --- a/gateway/src/main/java/ru/practicum/shareit/booking/BookingController.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingController.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.booking; +package ru.practicum.shareit.practicum.shareit.booking; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; @@ -7,8 +7,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import ru.practicum.shareit.booking.dto.BookingState; -import ru.practicum.shareit.booking.dto.NewBookingDto; +import ru.practicum.shareit.practicum.shareit.booking.dto.BookingState; +import ru.practicum.shareit.practicum.shareit.booking.dto.NewBookingDto; /** diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/BookingStatus.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingStatus.java similarity index 56% rename from gateway/src/main/java/ru/practicum/shareit/booking/BookingStatus.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingStatus.java index ee6f096..7a87396 100644 --- a/gateway/src/main/java/ru/practicum/shareit/booking/BookingStatus.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingStatus.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.booking; +package ru.practicum.shareit.practicum.shareit.booking; public enum BookingStatus { WAITING, APPROVED, REJECTED, CANCELED diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookItemRequestDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/BookItemRequestDto.java similarity index 87% rename from gateway/src/main/java/ru/practicum/shareit/booking/dto/BookItemRequestDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/BookItemRequestDto.java index efe3980..cf5f384 100644 --- a/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookItemRequestDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/BookItemRequestDto.java @@ -1,6 +1,4 @@ -package ru.practicum.shareit.booking.dto; - -import java.time.LocalDateTime; +package ru.practicum.shareit.practicum.shareit.booking.dto; import jakarta.validation.constraints.Future; import jakarta.validation.constraints.FutureOrPresent; @@ -8,6 +6,8 @@ import lombok.Getter; import lombok.NoArgsConstructor; +import java.time.LocalDateTime; + @Getter @NoArgsConstructor @AllArgsConstructor diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/BookingDto.java similarity index 56% rename from gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/BookingDto.java index 46d8f48..07f556a 100644 --- a/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/BookingDto.java @@ -1,10 +1,10 @@ -package ru.practicum.shareit.booking.dto; +package ru.practicum.shareit.practicum.shareit.booking.dto; import lombok.Builder; import lombok.Data; -import ru.practicum.shareit.booking.BookingStatus; -import ru.practicum.shareit.item.dto.ItemDto; -import ru.practicum.shareit.user.dto.UserDto; +import ru.practicum.shareit.practicum.shareit.booking.BookingStatus; +import ru.practicum.shareit.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.practicum.shareit.user.dto.UserDto; import java.time.LocalDateTime; diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingState.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/BookingState.java similarity index 90% rename from gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingState.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/BookingState.java index 135de62..1ebf974 100644 --- a/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingState.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/BookingState.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.booking.dto; +package ru.practicum.shareit.practicum.shareit.booking.dto; import java.util.Optional; diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/NewBookingDto.java similarity index 75% rename from gateway/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/NewBookingDto.java index f1a92fd..47a2cd4 100644 --- a/gateway/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/NewBookingDto.java @@ -1,6 +1,5 @@ -package ru.practicum.shareit.booking.dto; +package ru.practicum.shareit.practicum.shareit.booking.dto; -import jakarta.validation.constraints.FutureOrPresent; import jakarta.validation.constraints.NotNull; import lombok.Builder; import lombok.Data; diff --git a/gateway/src/main/java/ru/practicum/shareit/client/BaseClient.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/client/BaseClient.java similarity index 94% rename from gateway/src/main/java/ru/practicum/shareit/client/BaseClient.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/client/BaseClient.java index 1a2d33a..e7bf6c0 100644 --- a/gateway/src/main/java/ru/practicum/shareit/client/BaseClient.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/client/BaseClient.java @@ -1,17 +1,13 @@ -package ru.practicum.shareit.client; +package ru.practicum.shareit.practicum.shareit.client; -import java.util.List; -import java.util.Map; - -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; +import org.springframework.http.*; import org.springframework.lang.Nullable; import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.RestTemplate; +import java.util.List; +import java.util.Map; + public class BaseClient { protected final RestTemplate rest; diff --git a/gateway/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/dto/CommentDto.java similarity index 69% rename from gateway/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/dto/CommentDto.java index a9a154d..2af0cb4 100644 --- a/gateway/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/dto/CommentDto.java @@ -1,8 +1,8 @@ -package ru.practicum.shareit.comment.dto; +package ru.practicum.shareit.practicum.shareit.dto; import lombok.Builder; import lombok.Data; -import ru.practicum.shareit.item.Item; +import ru.practicum.shareit.practicum.shareit.item.Item; import java.time.Instant; diff --git a/gateway/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/dto/NewCommentDto.java similarity index 73% rename from gateway/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/dto/NewCommentDto.java index 56968a0..4eaab28 100644 --- a/gateway/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/dto/NewCommentDto.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.comment.dto; +package ru.practicum.shareit.practicum.shareit.dto; import jakarta.validation.constraints.NotBlank; import lombok.Data; diff --git a/gateway/src/main/java/ru/practicum/shareit/item/Item.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/Item.java similarity index 69% rename from gateway/src/main/java/ru/practicum/shareit/item/Item.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/Item.java index 76374b5..7ee7d97 100644 --- a/gateway/src/main/java/ru/practicum/shareit/item/Item.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/Item.java @@ -1,12 +1,12 @@ -package ru.practicum.shareit.item; +package ru.practicum.shareit.practicum.shareit.item; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import ru.practicum.shareit.request.ItemRequest; -import ru.practicum.shareit.user.User; +import ru.practicum.shareit.practicum.shareit.request.ItemRequest; +import ru.practicum.shareit.practicum.shareit.user.User; /** * TODO Sprint add-controllers. diff --git a/gateway/src/main/java/ru/practicum/shareit/item/ItemClient.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemClient.java similarity index 84% rename from gateway/src/main/java/ru/practicum/shareit/item/ItemClient.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemClient.java index 7f0148e..9653a04 100644 --- a/gateway/src/main/java/ru/practicum/shareit/item/ItemClient.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemClient.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.item; +package ru.practicum.shareit.practicum.shareit.item; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -7,12 +7,10 @@ import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.stereotype.Service; import org.springframework.web.util.DefaultUriBuilderFactory; -import ru.practicum.shareit.client.BaseClient; -import ru.practicum.shareit.comment.dto.NewCommentDto; -import ru.practicum.shareit.item.dto.NewItemDto; -import ru.practicum.shareit.item.dto.UpdateItemDto; - -import java.util.Map; +import ru.practicum.shareit.practicum.shareit.client.BaseClient; +import ru.practicum.shareit.practicum.shareit.dto.NewCommentDto; +import ru.practicum.shareit.practicum.shareit.item.dto.NewItemDto; +import ru.practicum.shareit.practicum.shareit.item.dto.UpdateItemDto; @Service public class ItemClient extends BaseClient { diff --git a/gateway/src/main/java/ru/practicum/shareit/item/ItemController.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemController.java similarity index 88% rename from gateway/src/main/java/ru/practicum/shareit/item/ItemController.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemController.java index f493873..9ec3214 100644 --- a/gateway/src/main/java/ru/practicum/shareit/item/ItemController.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemController.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.item; +package ru.practicum.shareit.practicum.shareit.item; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -6,9 +6,9 @@ import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import ru.practicum.shareit.comment.dto.NewCommentDto; -import ru.practicum.shareit.item.dto.NewItemDto; -import ru.practicum.shareit.item.dto.UpdateItemDto; +import ru.practicum.shareit.practicum.shareit.dto.NewCommentDto; +import ru.practicum.shareit.practicum.shareit.item.dto.NewItemDto; +import ru.practicum.shareit.practicum.shareit.item.dto.UpdateItemDto; /** diff --git a/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/ItemDto.java similarity index 70% rename from gateway/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/ItemDto.java index fb8eaf2..21844c6 100644 --- a/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/ItemDto.java @@ -1,8 +1,8 @@ -package ru.practicum.shareit.item.dto; +package ru.practicum.shareit.practicum.shareit.item.dto; import lombok.Builder; import lombok.Data; -import ru.practicum.shareit.user.dto.UserDto; +import ru.practicum.shareit.practicum.shareit.user.dto.UserDto; /** diff --git a/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemResponseToRequestDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/ItemResponseToRequestDto.java similarity index 83% rename from gateway/src/main/java/ru/practicum/shareit/item/dto/ItemResponseToRequestDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/ItemResponseToRequestDto.java index 610d1f3..f331c35 100644 --- a/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemResponseToRequestDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/ItemResponseToRequestDto.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.item.dto; +package ru.practicum.shareit.practicum.shareit.item.dto; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/ItemWithCommentsDto.java similarity index 61% rename from gateway/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/ItemWithCommentsDto.java index 496b7e2..349e543 100644 --- a/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/ItemWithCommentsDto.java @@ -1,10 +1,10 @@ -package ru.practicum.shareit.item.dto; +package ru.practicum.shareit.practicum.shareit.item.dto; import lombok.Builder; import lombok.Data; -import ru.practicum.shareit.booking.dto.BookingDto; -import ru.practicum.shareit.comment.dto.CommentDto; -import ru.practicum.shareit.user.dto.UserDto; +import ru.practicum.shareit.practicum.shareit.booking.dto.BookingDto; +import ru.practicum.shareit.practicum.shareit.dto.CommentDto; +import ru.practicum.shareit.practicum.shareit.user.dto.UserDto; import java.util.List; diff --git a/gateway/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/NewItemDto.java similarity index 83% rename from gateway/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/NewItemDto.java index f8139d5..ff3fccb 100644 --- a/gateway/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/NewItemDto.java @@ -1,11 +1,10 @@ -package ru.practicum.shareit.item.dto; +package ru.practicum.shareit.practicum.shareit.item.dto; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Positive; import lombok.Builder; import lombok.Data; -import ru.practicum.shareit.user.User; +import ru.practicum.shareit.practicum.shareit.user.User; @Data @Builder diff --git a/gateway/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/UpdateItemDto.java similarity index 88% rename from gateway/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/UpdateItemDto.java index ead598d..3ecd8b7 100644 --- a/gateway/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/UpdateItemDto.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.item.dto; +package ru.practicum.shareit.practicum.shareit.item.dto; import lombok.Data; diff --git a/gateway/src/main/java/ru/practicum/shareit/request/ItemRequest.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequest.java similarity index 75% rename from gateway/src/main/java/ru/practicum/shareit/request/ItemRequest.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequest.java index 299ccd2..0e24d1e 100644 --- a/gateway/src/main/java/ru/practicum/shareit/request/ItemRequest.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequest.java @@ -1,11 +1,11 @@ -package ru.practicum.shareit.request; +package ru.practicum.shareit.practicum.shareit.request; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import ru.practicum.shareit.item.Item; -import ru.practicum.shareit.user.User; +import ru.practicum.shareit.practicum.shareit.item.Item; +import ru.practicum.shareit.practicum.shareit.user.User; import java.time.LocalDateTime; import java.util.ArrayList; diff --git a/gateway/src/main/java/ru/practicum/shareit/request/ItemRequestClient.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestClient.java similarity index 86% rename from gateway/src/main/java/ru/practicum/shareit/request/ItemRequestClient.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestClient.java index 4f35300..163dc38 100644 --- a/gateway/src/main/java/ru/practicum/shareit/request/ItemRequestClient.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestClient.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.request; +package ru.practicum.shareit.practicum.shareit.request; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -7,8 +7,8 @@ import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.stereotype.Service; import org.springframework.web.util.DefaultUriBuilderFactory; -import ru.practicum.shareit.client.BaseClient; -import ru.practicum.shareit.request.dto.NewItemRequestDto; +import ru.practicum.shareit.practicum.shareit.client.BaseClient; +import ru.practicum.shareit.practicum.shareit.request.dto.NewItemRequestDto; @Service public class ItemRequestClient extends BaseClient { diff --git a/gateway/src/main/java/ru/practicum/shareit/request/ItemRequestController.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestController.java similarity index 84% rename from gateway/src/main/java/ru/practicum/shareit/request/ItemRequestController.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestController.java index edb69cb..3e4e09a 100644 --- a/gateway/src/main/java/ru/practicum/shareit/request/ItemRequestController.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestController.java @@ -1,12 +1,9 @@ -package ru.practicum.shareit.request; +package ru.practicum.shareit.practicum.shareit.request; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -import ru.practicum.shareit.request.dto.ItemRequestDto; -import ru.practicum.shareit.request.dto.NewItemRequestDto; - -import java.util.List; +import ru.practicum.shareit.practicum.shareit.request.dto.NewItemRequestDto; /** * TODO Sprint add-item-requests. diff --git a/gateway/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/dto/ItemRequestDto.java similarity index 69% rename from gateway/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/dto/ItemRequestDto.java index 64a69dc..dcc0645 100644 --- a/gateway/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/dto/ItemRequestDto.java @@ -1,8 +1,8 @@ -package ru.practicum.shareit.request.dto; +package ru.practicum.shareit.practicum.shareit.request.dto; import lombok.Builder; import lombok.Data; -import ru.practicum.shareit.item.dto.ItemResponseToRequestDto; +import ru.practicum.shareit.practicum.shareit.item.dto.ItemResponseToRequestDto; import java.time.LocalDateTime; import java.util.List; diff --git a/gateway/src/main/java/ru/practicum/shareit/request/dto/NewItemRequestDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/dto/NewItemRequestDto.java similarity index 83% rename from gateway/src/main/java/ru/practicum/shareit/request/dto/NewItemRequestDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/dto/NewItemRequestDto.java index 647df5d..3822829 100644 --- a/gateway/src/main/java/ru/practicum/shareit/request/dto/NewItemRequestDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/dto/NewItemRequestDto.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.request.dto; +package ru.practicum.shareit.practicum.shareit.request.dto; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/gateway/src/main/java/ru/practicum/shareit/user/User.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/User.java similarity index 85% rename from gateway/src/main/java/ru/practicum/shareit/user/User.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/User.java index c0687c8..a8dd7e1 100644 --- a/gateway/src/main/java/ru/practicum/shareit/user/User.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/User.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.user; +package ru.practicum.shareit.practicum.shareit.user; import lombok.AllArgsConstructor; diff --git a/gateway/src/main/java/ru/practicum/shareit/user/UserClient.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserClient.java similarity index 84% rename from gateway/src/main/java/ru/practicum/shareit/user/UserClient.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserClient.java index f151af6..d8e4641 100644 --- a/gateway/src/main/java/ru/practicum/shareit/user/UserClient.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserClient.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.user; +package ru.practicum.shareit.practicum.shareit.user; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -7,9 +7,9 @@ import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.stereotype.Service; import org.springframework.web.util.DefaultUriBuilderFactory; -import ru.practicum.shareit.client.BaseClient; -import ru.practicum.shareit.user.dto.NewUserDto; -import ru.practicum.shareit.user.dto.UpdateUserDto; +import ru.practicum.shareit.practicum.shareit.client.BaseClient; +import ru.practicum.shareit.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.practicum.shareit.user.dto.UpdateUserDto; @Service public class UserClient extends BaseClient { diff --git a/gateway/src/main/java/ru/practicum/shareit/user/UserController.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserController.java similarity index 88% rename from gateway/src/main/java/ru/practicum/shareit/user/UserController.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserController.java index 8677d5a..d1f56fe 100644 --- a/gateway/src/main/java/ru/practicum/shareit/user/UserController.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserController.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.user; +package ru.practicum.shareit.practicum.shareit.user; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; @@ -8,9 +8,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import ru.practicum.shareit.user.dto.NewUserDto; -import ru.practicum.shareit.user.dto.UpdateUserDto; -import ru.practicum.shareit.user.dto.UserDto; +import ru.practicum.shareit.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.practicum.shareit.user.dto.UpdateUserDto; /** * TODO Sprint add-controllers. diff --git a/gateway/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/dto/NewUserDto.java similarity index 88% rename from gateway/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/dto/NewUserDto.java index f95ecb8..d3eaa2b 100644 --- a/gateway/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/dto/NewUserDto.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.user.dto; +package ru.practicum.shareit.practicum.shareit.user.dto; import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; diff --git a/gateway/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/dto/UpdateUserDto.java similarity index 87% rename from gateway/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/dto/UpdateUserDto.java index bd9e396..1a5d595 100644 --- a/gateway/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/dto/UpdateUserDto.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.user.dto; +package ru.practicum.shareit.practicum.shareit.user.dto; import jakarta.validation.constraints.Email; import lombok.Data; diff --git a/gateway/src/main/java/ru/practicum/shareit/user/dto/UserDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/dto/UserDto.java similarity index 86% rename from gateway/src/main/java/ru/practicum/shareit/user/dto/UserDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/dto/UserDto.java index 46410f9..eb1c70c 100644 --- a/gateway/src/main/java/ru/practicum/shareit/user/dto/UserDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/dto/UserDto.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.user.dto; +package ru.practicum.shareit.practicum.shareit.user.dto; import jakarta.validation.constraints.Email; import lombok.Builder; From 9b55131cbe2041b9d3678c490dbc12b367fdcdfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 19:11:41 +0400 Subject: [PATCH 20/55] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D1=82=D0=B7=2016=20=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../practicum/shareit/ShareItGateway.java | 2 +- .../practicum/shareit/booking/BookingClient.java | 13 ++++++------- .../shareit/booking/BookingController.java | 6 +++--- .../practicum/shareit/booking/BookingStatus.java | 2 +- .../shareit/booking/dto/BookItemRequestDto.java | 6 +++--- .../practicum/shareit/booking/dto/BookingDto.java | 8 ++++---- .../shareit/booking/dto/BookingState.java | 2 +- .../shareit/booking/dto/NewBookingDto.java | 3 +-- .../practicum/shareit/client/BaseClient.java | 14 +++++--------- .../practicum/shareit}/dto/CommentDto.java | 4 ++-- .../practicum/shareit}/dto/NewCommentDto.java | 2 +- .../practicum/shareit/item/Item.java | 6 +++--- .../practicum/shareit/item/ItemClient.java | 12 +++++------- .../practicum/shareit/item/ItemController.java | 8 ++++---- .../practicum/shareit/item/dto/ItemDto.java | 4 ++-- .../shareit/item/dto/ItemResponseToRequestDto.java | 2 +- .../shareit/item/dto/ItemWithCommentsDto.java | 8 ++++---- .../practicum/shareit/item/dto/NewItemDto.java | 5 ++--- .../practicum/shareit/item/dto/UpdateItemDto.java | 2 +- .../practicum/shareit/request/ItemRequest.java | 6 +++--- .../shareit/request/ItemRequestClient.java | 6 +++--- .../shareit/request/ItemRequestController.java | 7 ++----- .../shareit/request/dto/ItemRequestDto.java | 4 ++-- .../shareit/request/dto/NewItemRequestDto.java | 2 +- .../practicum/shareit/user/User.java | 2 +- .../practicum/shareit/user/UserClient.java | 8 ++++---- .../practicum/shareit/user/UserController.java | 7 +++---- .../practicum/shareit/user/dto/NewUserDto.java | 2 +- .../practicum/shareit/user/dto/UpdateUserDto.java | 2 +- .../practicum/shareit/user/dto/UserDto.java | 2 +- 30 files changed, 72 insertions(+), 85 deletions(-) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/ShareItGateway.java (85%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/booking/BookingClient.java (89%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/booking/BookingController.java (91%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/booking/BookingStatus.java (56%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/booking/dto/BookItemRequestDto.java (87%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/booking/dto/BookingDto.java (56%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/booking/dto/BookingState.java (90%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/booking/dto/NewBookingDto.java (75%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/client/BaseClient.java (94%) rename gateway/src/main/java/{ru/practicum/shareit/comment => ru.practicum.shareit/practicum/shareit}/dto/CommentDto.java (69%) rename gateway/src/main/java/{ru/practicum/shareit/comment => ru.practicum.shareit/practicum/shareit}/dto/NewCommentDto.java (73%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/item/Item.java (69%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/item/ItemClient.java (84%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/item/ItemController.java (88%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/item/dto/ItemDto.java (70%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/item/dto/ItemResponseToRequestDto.java (83%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/item/dto/ItemWithCommentsDto.java (61%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/item/dto/NewItemDto.java (83%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/item/dto/UpdateItemDto.java (88%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/request/ItemRequest.java (75%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/request/ItemRequestClient.java (86%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/request/ItemRequestController.java (84%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/request/dto/ItemRequestDto.java (69%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/request/dto/NewItemRequestDto.java (83%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/user/User.java (85%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/user/UserClient.java (84%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/user/UserController.java (88%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/user/dto/NewUserDto.java (88%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/user/dto/UpdateUserDto.java (87%) rename gateway/src/main/java/{ru => ru.practicum.shareit}/practicum/shareit/user/dto/UserDto.java (86%) diff --git a/gateway/src/main/java/ru/practicum/shareit/ShareItGateway.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/ShareItGateway.java similarity index 85% rename from gateway/src/main/java/ru/practicum/shareit/ShareItGateway.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/ShareItGateway.java index 0aa75c3..0276c51 100644 --- a/gateway/src/main/java/ru/practicum/shareit/ShareItGateway.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/ShareItGateway.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit; +package ru.practicum.shareit.practicum.shareit; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/BookingClient.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingClient.java similarity index 89% rename from gateway/src/main/java/ru/practicum/shareit/booking/BookingClient.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingClient.java index 6cff564..d8c81ef 100644 --- a/gateway/src/main/java/ru/practicum/shareit/booking/BookingClient.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingClient.java @@ -1,6 +1,4 @@ -package ru.practicum.shareit.booking; - -import java.util.Map; +package ru.practicum.shareit.practicum.shareit.booking; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -9,11 +7,12 @@ import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.stereotype.Service; import org.springframework.web.util.DefaultUriBuilderFactory; +import ru.practicum.shareit.practicum.shareit.booking.dto.BookItemRequestDto; +import ru.practicum.shareit.practicum.shareit.booking.dto.BookingState; +import ru.practicum.shareit.practicum.shareit.booking.dto.NewBookingDto; +import ru.practicum.shareit.practicum.shareit.client.BaseClient; -import ru.practicum.shareit.booking.dto.BookItemRequestDto; -import ru.practicum.shareit.booking.dto.BookingState; -import ru.practicum.shareit.booking.dto.NewBookingDto; -import ru.practicum.shareit.client.BaseClient; +import java.util.Map; @Service public class BookingClient extends BaseClient { diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/BookingController.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingController.java similarity index 91% rename from gateway/src/main/java/ru/practicum/shareit/booking/BookingController.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingController.java index db8e820..db1dd91 100644 --- a/gateway/src/main/java/ru/practicum/shareit/booking/BookingController.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingController.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.booking; +package ru.practicum.shareit.practicum.shareit.booking; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; @@ -7,8 +7,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import ru.practicum.shareit.booking.dto.BookingState; -import ru.practicum.shareit.booking.dto.NewBookingDto; +import ru.practicum.shareit.practicum.shareit.booking.dto.BookingState; +import ru.practicum.shareit.practicum.shareit.booking.dto.NewBookingDto; /** diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/BookingStatus.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingStatus.java similarity index 56% rename from gateway/src/main/java/ru/practicum/shareit/booking/BookingStatus.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingStatus.java index ee6f096..7a87396 100644 --- a/gateway/src/main/java/ru/practicum/shareit/booking/BookingStatus.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingStatus.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.booking; +package ru.practicum.shareit.practicum.shareit.booking; public enum BookingStatus { WAITING, APPROVED, REJECTED, CANCELED diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookItemRequestDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/BookItemRequestDto.java similarity index 87% rename from gateway/src/main/java/ru/practicum/shareit/booking/dto/BookItemRequestDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/BookItemRequestDto.java index efe3980..cf5f384 100644 --- a/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookItemRequestDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/BookItemRequestDto.java @@ -1,6 +1,4 @@ -package ru.practicum.shareit.booking.dto; - -import java.time.LocalDateTime; +package ru.practicum.shareit.practicum.shareit.booking.dto; import jakarta.validation.constraints.Future; import jakarta.validation.constraints.FutureOrPresent; @@ -8,6 +6,8 @@ import lombok.Getter; import lombok.NoArgsConstructor; +import java.time.LocalDateTime; + @Getter @NoArgsConstructor @AllArgsConstructor diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/BookingDto.java similarity index 56% rename from gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/BookingDto.java index 46d8f48..07f556a 100644 --- a/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/BookingDto.java @@ -1,10 +1,10 @@ -package ru.practicum.shareit.booking.dto; +package ru.practicum.shareit.practicum.shareit.booking.dto; import lombok.Builder; import lombok.Data; -import ru.practicum.shareit.booking.BookingStatus; -import ru.practicum.shareit.item.dto.ItemDto; -import ru.practicum.shareit.user.dto.UserDto; +import ru.practicum.shareit.practicum.shareit.booking.BookingStatus; +import ru.practicum.shareit.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.practicum.shareit.user.dto.UserDto; import java.time.LocalDateTime; diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingState.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/BookingState.java similarity index 90% rename from gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingState.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/BookingState.java index 135de62..1ebf974 100644 --- a/gateway/src/main/java/ru/practicum/shareit/booking/dto/BookingState.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/BookingState.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.booking.dto; +package ru.practicum.shareit.practicum.shareit.booking.dto; import java.util.Optional; diff --git a/gateway/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/NewBookingDto.java similarity index 75% rename from gateway/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/NewBookingDto.java index f1a92fd..47a2cd4 100644 --- a/gateway/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/dto/NewBookingDto.java @@ -1,6 +1,5 @@ -package ru.practicum.shareit.booking.dto; +package ru.practicum.shareit.practicum.shareit.booking.dto; -import jakarta.validation.constraints.FutureOrPresent; import jakarta.validation.constraints.NotNull; import lombok.Builder; import lombok.Data; diff --git a/gateway/src/main/java/ru/practicum/shareit/client/BaseClient.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/client/BaseClient.java similarity index 94% rename from gateway/src/main/java/ru/practicum/shareit/client/BaseClient.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/client/BaseClient.java index 1a2d33a..e7bf6c0 100644 --- a/gateway/src/main/java/ru/practicum/shareit/client/BaseClient.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/client/BaseClient.java @@ -1,17 +1,13 @@ -package ru.practicum.shareit.client; +package ru.practicum.shareit.practicum.shareit.client; -import java.util.List; -import java.util.Map; - -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; +import org.springframework.http.*; import org.springframework.lang.Nullable; import org.springframework.web.client.HttpStatusCodeException; import org.springframework.web.client.RestTemplate; +import java.util.List; +import java.util.Map; + public class BaseClient { protected final RestTemplate rest; diff --git a/gateway/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/dto/CommentDto.java similarity index 69% rename from gateway/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/dto/CommentDto.java index a9a154d..2af0cb4 100644 --- a/gateway/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/dto/CommentDto.java @@ -1,8 +1,8 @@ -package ru.practicum.shareit.comment.dto; +package ru.practicum.shareit.practicum.shareit.dto; import lombok.Builder; import lombok.Data; -import ru.practicum.shareit.item.Item; +import ru.practicum.shareit.practicum.shareit.item.Item; import java.time.Instant; diff --git a/gateway/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/dto/NewCommentDto.java similarity index 73% rename from gateway/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/dto/NewCommentDto.java index 56968a0..4eaab28 100644 --- a/gateway/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/dto/NewCommentDto.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.comment.dto; +package ru.practicum.shareit.practicum.shareit.dto; import jakarta.validation.constraints.NotBlank; import lombok.Data; diff --git a/gateway/src/main/java/ru/practicum/shareit/item/Item.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/Item.java similarity index 69% rename from gateway/src/main/java/ru/practicum/shareit/item/Item.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/Item.java index 76374b5..7ee7d97 100644 --- a/gateway/src/main/java/ru/practicum/shareit/item/Item.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/Item.java @@ -1,12 +1,12 @@ -package ru.practicum.shareit.item; +package ru.practicum.shareit.practicum.shareit.item; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import ru.practicum.shareit.request.ItemRequest; -import ru.practicum.shareit.user.User; +import ru.practicum.shareit.practicum.shareit.request.ItemRequest; +import ru.practicum.shareit.practicum.shareit.user.User; /** * TODO Sprint add-controllers. diff --git a/gateway/src/main/java/ru/practicum/shareit/item/ItemClient.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemClient.java similarity index 84% rename from gateway/src/main/java/ru/practicum/shareit/item/ItemClient.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemClient.java index 7f0148e..9653a04 100644 --- a/gateway/src/main/java/ru/practicum/shareit/item/ItemClient.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemClient.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.item; +package ru.practicum.shareit.practicum.shareit.item; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -7,12 +7,10 @@ import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.stereotype.Service; import org.springframework.web.util.DefaultUriBuilderFactory; -import ru.practicum.shareit.client.BaseClient; -import ru.practicum.shareit.comment.dto.NewCommentDto; -import ru.practicum.shareit.item.dto.NewItemDto; -import ru.practicum.shareit.item.dto.UpdateItemDto; - -import java.util.Map; +import ru.practicum.shareit.practicum.shareit.client.BaseClient; +import ru.practicum.shareit.practicum.shareit.dto.NewCommentDto; +import ru.practicum.shareit.practicum.shareit.item.dto.NewItemDto; +import ru.practicum.shareit.practicum.shareit.item.dto.UpdateItemDto; @Service public class ItemClient extends BaseClient { diff --git a/gateway/src/main/java/ru/practicum/shareit/item/ItemController.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemController.java similarity index 88% rename from gateway/src/main/java/ru/practicum/shareit/item/ItemController.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemController.java index f493873..9ec3214 100644 --- a/gateway/src/main/java/ru/practicum/shareit/item/ItemController.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemController.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.item; +package ru.practicum.shareit.practicum.shareit.item; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -6,9 +6,9 @@ import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import ru.practicum.shareit.comment.dto.NewCommentDto; -import ru.practicum.shareit.item.dto.NewItemDto; -import ru.practicum.shareit.item.dto.UpdateItemDto; +import ru.practicum.shareit.practicum.shareit.dto.NewCommentDto; +import ru.practicum.shareit.practicum.shareit.item.dto.NewItemDto; +import ru.practicum.shareit.practicum.shareit.item.dto.UpdateItemDto; /** diff --git a/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/ItemDto.java similarity index 70% rename from gateway/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/ItemDto.java index fb8eaf2..21844c6 100644 --- a/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/ItemDto.java @@ -1,8 +1,8 @@ -package ru.practicum.shareit.item.dto; +package ru.practicum.shareit.practicum.shareit.item.dto; import lombok.Builder; import lombok.Data; -import ru.practicum.shareit.user.dto.UserDto; +import ru.practicum.shareit.practicum.shareit.user.dto.UserDto; /** diff --git a/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemResponseToRequestDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/ItemResponseToRequestDto.java similarity index 83% rename from gateway/src/main/java/ru/practicum/shareit/item/dto/ItemResponseToRequestDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/ItemResponseToRequestDto.java index 610d1f3..f331c35 100644 --- a/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemResponseToRequestDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/ItemResponseToRequestDto.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.item.dto; +package ru.practicum.shareit.practicum.shareit.item.dto; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/ItemWithCommentsDto.java similarity index 61% rename from gateway/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/ItemWithCommentsDto.java index 496b7e2..349e543 100644 --- a/gateway/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/ItemWithCommentsDto.java @@ -1,10 +1,10 @@ -package ru.practicum.shareit.item.dto; +package ru.practicum.shareit.practicum.shareit.item.dto; import lombok.Builder; import lombok.Data; -import ru.practicum.shareit.booking.dto.BookingDto; -import ru.practicum.shareit.comment.dto.CommentDto; -import ru.practicum.shareit.user.dto.UserDto; +import ru.practicum.shareit.practicum.shareit.booking.dto.BookingDto; +import ru.practicum.shareit.practicum.shareit.dto.CommentDto; +import ru.practicum.shareit.practicum.shareit.user.dto.UserDto; import java.util.List; diff --git a/gateway/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/NewItemDto.java similarity index 83% rename from gateway/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/NewItemDto.java index f8139d5..ff3fccb 100644 --- a/gateway/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/NewItemDto.java @@ -1,11 +1,10 @@ -package ru.practicum.shareit.item.dto; +package ru.practicum.shareit.practicum.shareit.item.dto; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Positive; import lombok.Builder; import lombok.Data; -import ru.practicum.shareit.user.User; +import ru.practicum.shareit.practicum.shareit.user.User; @Data @Builder diff --git a/gateway/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/UpdateItemDto.java similarity index 88% rename from gateway/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/UpdateItemDto.java index ead598d..3ecd8b7 100644 --- a/gateway/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/dto/UpdateItemDto.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.item.dto; +package ru.practicum.shareit.practicum.shareit.item.dto; import lombok.Data; diff --git a/gateway/src/main/java/ru/practicum/shareit/request/ItemRequest.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequest.java similarity index 75% rename from gateway/src/main/java/ru/practicum/shareit/request/ItemRequest.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequest.java index 299ccd2..0e24d1e 100644 --- a/gateway/src/main/java/ru/practicum/shareit/request/ItemRequest.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequest.java @@ -1,11 +1,11 @@ -package ru.practicum.shareit.request; +package ru.practicum.shareit.practicum.shareit.request; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import ru.practicum.shareit.item.Item; -import ru.practicum.shareit.user.User; +import ru.practicum.shareit.practicum.shareit.item.Item; +import ru.practicum.shareit.practicum.shareit.user.User; import java.time.LocalDateTime; import java.util.ArrayList; diff --git a/gateway/src/main/java/ru/practicum/shareit/request/ItemRequestClient.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestClient.java similarity index 86% rename from gateway/src/main/java/ru/practicum/shareit/request/ItemRequestClient.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestClient.java index 4f35300..163dc38 100644 --- a/gateway/src/main/java/ru/practicum/shareit/request/ItemRequestClient.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestClient.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.request; +package ru.practicum.shareit.practicum.shareit.request; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -7,8 +7,8 @@ import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.stereotype.Service; import org.springframework.web.util.DefaultUriBuilderFactory; -import ru.practicum.shareit.client.BaseClient; -import ru.practicum.shareit.request.dto.NewItemRequestDto; +import ru.practicum.shareit.practicum.shareit.client.BaseClient; +import ru.practicum.shareit.practicum.shareit.request.dto.NewItemRequestDto; @Service public class ItemRequestClient extends BaseClient { diff --git a/gateway/src/main/java/ru/practicum/shareit/request/ItemRequestController.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestController.java similarity index 84% rename from gateway/src/main/java/ru/practicum/shareit/request/ItemRequestController.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestController.java index edb69cb..3e4e09a 100644 --- a/gateway/src/main/java/ru/practicum/shareit/request/ItemRequestController.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestController.java @@ -1,12 +1,9 @@ -package ru.practicum.shareit.request; +package ru.practicum.shareit.practicum.shareit.request; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -import ru.practicum.shareit.request.dto.ItemRequestDto; -import ru.practicum.shareit.request.dto.NewItemRequestDto; - -import java.util.List; +import ru.practicum.shareit.practicum.shareit.request.dto.NewItemRequestDto; /** * TODO Sprint add-item-requests. diff --git a/gateway/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/dto/ItemRequestDto.java similarity index 69% rename from gateway/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/dto/ItemRequestDto.java index 64a69dc..dcc0645 100644 --- a/gateway/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/dto/ItemRequestDto.java @@ -1,8 +1,8 @@ -package ru.practicum.shareit.request.dto; +package ru.practicum.shareit.practicum.shareit.request.dto; import lombok.Builder; import lombok.Data; -import ru.practicum.shareit.item.dto.ItemResponseToRequestDto; +import ru.practicum.shareit.practicum.shareit.item.dto.ItemResponseToRequestDto; import java.time.LocalDateTime; import java.util.List; diff --git a/gateway/src/main/java/ru/practicum/shareit/request/dto/NewItemRequestDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/dto/NewItemRequestDto.java similarity index 83% rename from gateway/src/main/java/ru/practicum/shareit/request/dto/NewItemRequestDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/dto/NewItemRequestDto.java index 647df5d..3822829 100644 --- a/gateway/src/main/java/ru/practicum/shareit/request/dto/NewItemRequestDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/dto/NewItemRequestDto.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.request.dto; +package ru.practicum.shareit.practicum.shareit.request.dto; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/gateway/src/main/java/ru/practicum/shareit/user/User.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/User.java similarity index 85% rename from gateway/src/main/java/ru/practicum/shareit/user/User.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/User.java index c0687c8..a8dd7e1 100644 --- a/gateway/src/main/java/ru/practicum/shareit/user/User.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/User.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.user; +package ru.practicum.shareit.practicum.shareit.user; import lombok.AllArgsConstructor; diff --git a/gateway/src/main/java/ru/practicum/shareit/user/UserClient.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserClient.java similarity index 84% rename from gateway/src/main/java/ru/practicum/shareit/user/UserClient.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserClient.java index f151af6..d8e4641 100644 --- a/gateway/src/main/java/ru/practicum/shareit/user/UserClient.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserClient.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.user; +package ru.practicum.shareit.practicum.shareit.user; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -7,9 +7,9 @@ import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.stereotype.Service; import org.springframework.web.util.DefaultUriBuilderFactory; -import ru.practicum.shareit.client.BaseClient; -import ru.practicum.shareit.user.dto.NewUserDto; -import ru.practicum.shareit.user.dto.UpdateUserDto; +import ru.practicum.shareit.practicum.shareit.client.BaseClient; +import ru.practicum.shareit.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.practicum.shareit.user.dto.UpdateUserDto; @Service public class UserClient extends BaseClient { diff --git a/gateway/src/main/java/ru/practicum/shareit/user/UserController.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserController.java similarity index 88% rename from gateway/src/main/java/ru/practicum/shareit/user/UserController.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserController.java index 8677d5a..d1f56fe 100644 --- a/gateway/src/main/java/ru/practicum/shareit/user/UserController.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserController.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.user; +package ru.practicum.shareit.practicum.shareit.user; import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; @@ -8,9 +8,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import ru.practicum.shareit.user.dto.NewUserDto; -import ru.practicum.shareit.user.dto.UpdateUserDto; -import ru.practicum.shareit.user.dto.UserDto; +import ru.practicum.shareit.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.practicum.shareit.user.dto.UpdateUserDto; /** * TODO Sprint add-controllers. diff --git a/gateway/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/dto/NewUserDto.java similarity index 88% rename from gateway/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/dto/NewUserDto.java index f95ecb8..d3eaa2b 100644 --- a/gateway/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/dto/NewUserDto.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.user.dto; +package ru.practicum.shareit.practicum.shareit.user.dto; import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; diff --git a/gateway/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/dto/UpdateUserDto.java similarity index 87% rename from gateway/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/dto/UpdateUserDto.java index bd9e396..1a5d595 100644 --- a/gateway/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/dto/UpdateUserDto.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.user.dto; +package ru.practicum.shareit.practicum.shareit.user.dto; import jakarta.validation.constraints.Email; import lombok.Data; diff --git a/gateway/src/main/java/ru/practicum/shareit/user/dto/UserDto.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/dto/UserDto.java similarity index 86% rename from gateway/src/main/java/ru/practicum/shareit/user/dto/UserDto.java rename to gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/dto/UserDto.java index 46410f9..eb1c70c 100644 --- a/gateway/src/main/java/ru/practicum/shareit/user/dto/UserDto.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/dto/UserDto.java @@ -1,4 +1,4 @@ -package ru.practicum.shareit.user.dto; +package ru.practicum.shareit.practicum.shareit.user.dto; import jakarta.validation.constraints.Email; import lombok.Builder; From 131a8e6e31cedede1f469d8919262e7cb3a59d91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 19:17:07 +0400 Subject: [PATCH 21/55] Trigger rebuild after cleanup From 50307baf3334640101bedf33746777feb6ddc3a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 19:18:13 +0400 Subject: [PATCH 22/55] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D1=82=D0=B7=2016=20=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 549e00a..605918c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ target/ !.mvn/wrapper/maven-wrapper.jar !**/src/main/**/target/ !**/src/test/**/target/ +/target/ + ### STS ### .apt_generated @@ -18,6 +20,7 @@ target/ *.iws *.iml *.ipr +*.class ### NetBeans ### /nbproject/private/ From 5025cc51ce83e44d2fd6ed25f4d8e250f987d5cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 19:18:13 +0400 Subject: [PATCH 23/55] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D1=82=D0=B7=2016=20=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 549e00a..605918c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ target/ !.mvn/wrapper/maven-wrapper.jar !**/src/main/**/target/ !**/src/test/**/target/ +/target/ + ### STS ### .apt_generated @@ -18,6 +20,7 @@ target/ *.iws *.iml *.ipr +*.class ### NetBeans ### /nbproject/private/ From ccc7c2a7b900485d42dff4a3f70806da9cd4caea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 19:36:57 +0400 Subject: [PATCH 24/55] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D1=82=D0=B7=2016=20=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../practicum/shareit/booking/BookingClient.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingClient.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingClient.java index d8c81ef..55f392c 100644 --- a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingClient.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingClient.java @@ -49,7 +49,7 @@ public ResponseEntity getBooking(long userId, Long bookingId) { } public ResponseEntity create(NewBookingDto newBookingDto, long userId) { - return post("",userId,newBookingDto); + return post("", userId, newBookingDto); } /*public ResponseEntity approveBooking(long userId, long bookingId, boolean approved) { @@ -58,23 +58,23 @@ public ResponseEntity create(NewBookingDto newBookingDto, long userId) { }*/ public ResponseEntity approveBooking(long userId, long bookingId, boolean approved) { - Map uriVariables = Map.of("bookingId",bookingId,"approved", approved); - return patch("/" + bookingId+"?approved="+approved, userId, approved); + Map uriVariables = Map.of("bookingId", bookingId, "approved", approved); + return patch("/" + bookingId + "?approved=" + approved, userId, approved); } public ResponseEntity findById(long userId, long bookingId) { - return get("/" + bookingId,userId); + return get("/" + bookingId, userId); } public ResponseEntity findByBooker(long userId, BookingState state) { - Map parameters = Map.of( + Map parameters = Map.of( "state", state.name() ); - return get("?state={state}",userId,parameters); + return get("?state={state}", userId, parameters); } public ResponseEntity findByOwner(long userId, BookingState state) { - Map parameters = Map.of( + Map parameters = Map.of( "state", state.name() ); return get("/owner", userId, parameters); From 516019d171caa53ed7da9fb7e96110542e2343de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 19:49:48 +0400 Subject: [PATCH 25/55] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D1=82=D0=B7=2016=20=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/shareit.mv.db | Bin 36864 -> 0 bytes db/shareit.trace.db | 2616 ------------------------------------------- 2 files changed, 2616 deletions(-) delete mode 100644 db/shareit.mv.db delete mode 100644 db/shareit.trace.db diff --git a/db/shareit.mv.db b/db/shareit.mv.db deleted file mode 100644 index d1505832982f86011e978ce870b95ade91934ad3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36864 zcmeHwNo*romRLxsNHG`XzGp2_%BsrDDiu5SMZlmH+(~g?wAI3jW56B^=45yZgKl6>M!PN^z_4M=$p^#B#W!R8B1lT4QdBW} zvbx(<6d?WoBYyn<-urL++f!_vUQ_F~R$FHWX~FEHb&4d(HLcpQYU_v**R(oPtaWNl zbCA+T`Z^^E0?i5j;SOrcjdN;|xX>SylJ(EQ2%y8IaL6k=J-1 z&yy;pNbpKvID@80$OxJ$@dz>!V+b7WgJTdn5(W55QW$|Tpt7QiyrgSBUL`5S(;{Sa ziRKu{=mte0iSqG=O42-qd;-M?qJ%V`z>@|=ij+^#S(4J=bHU&!gA+xcNYT6oZ+#*s zvLeYDK9M(gPLOz?sKB^MI^$A95+y*?BMYUGgA6C2cWkHPuhRZTx7D^C9JukfiJ06QoO^#o>uTaqvWES&b$kgLH#oD8(llqDE7^1{sCs zXp;3wq)su2)qD~yfgNz42(-pfU>_tfMPTG8pQIyJ0E^{Q7>0#{;Zs;rBUzF5DWafC zlnNOzpMr?^Wkmt=rK-zd1{qD{d@4n9EDZ)orI0|Xis(~m5($QYAj1j_OMT3Q60ljO^{VkS24K{pUJp-wZP}3l_7~nRCmxfm?q4NBNt2}ht_^HVv?a^z!EV`A}hwTmTq6}99)^&qktD)Zd z$O&HSD)sfz!p-2r0ilIy9}ZVVybocShT#R3AMa6`_TkX&p6F5XKphS3v@g%!zsuaUyerq7loESXHdL}&>4LW zXiNVBc#ary7HCHcbmJ6axM^Pkg#=hnn+h#+9-aa$z)gHfcsz706Q?>w3_n?cezAfl z%R$<>BwFg?ptA!L5 zk+i^iNYk9cX(AfHHq=qm+ghM6(3A+j3jC_@tHUq4K+`1rQjq5tqy>IKTwoSBC`s_E z!LOS);8$1>pdPeAGZ?n`#UtMmb`!hgt%Um#!yV_qXrQ*@H}#9|;fL35)F zKgvj>j55loql`An=%Wl8WsG5lCP$fJPu%Y>jF#uQ;UzuETc+oS%k&f!%`VD%YxWfD zE!y)iCp;4b-aQP({qwy5#o+l@JWG`l(ml4X(3&1k0c*hY;0AZ^Oo~D zUeMNTP3trjOY5zZI!TJq+P^sllpg|Wcz{wPK*!*80RqV2f}sn$3*`xj-o^n%9)k*P z!w;ha#g`H=G-VS(iM9YZ0JJ}J>6J62+7QaO3Y2_iXGg3Xsv zi4+thQm|V38HT;TJV;?9#4WoUAsDuSEzu7k#W4KOzVy=hpE(8Q6qr+BPJv$^3XBZ= zX#c%?e2ZRKJHACPGNjH*2J>q6(Z^f4JnCQc>@_#C*ZjapOW;eKIskxNt4JCm>{E|y zvZ5+*K;Q&&ac}^@7}#CX;KzIX#q)#x|NlJL|NjRtglFyl!}Epjef9o7?z{4{g~dmh z4SCSXM_mvrO^43VZNA3bynq3N|h%P17jYjQ3H9k|>HJAtQhv zC^9~prCHeS*O!NmtdEAe672ZIOI;tdE6F8t`uoA4jSNsWX(1V>De?4AIB2l+L=l zMc@H?E<9uegEe?&mL;Bfos)wPU+0mAUnZSjYVmQlO}C4#tLgpxG7^JxN1 zlXTb-)+9rabXN3fDoslogCN675^PfYbW+zzUetU#%jt|JkUpK4VD*5dm!TVup$(rd z@RUv=cq3>ehYaL{Hc8l_rhK{r%8^vz$#6*yGO)W1C(wMlA!)jyyBULmooLlJT2WXw zNJ@ZSeQ<=zV0qYk9xYe+3;>i;VY}N<1ON&)pAA(&G-9Ne8j4rNkFUJbd4uy!B{+vS zek^VlUi}ub&73U$v)r6-At(I$qfDPVYy$%a`(_0=^a?A#u!Hw@0G7;QT^%{d($L$p zp3;5gh<`8(oGDmS_dtB*-T(SG2(H=d3!4}41vtSDGt~=!^_O0XfA6)Ghu2^W`(XLc zm+%#AVe!HeesS4%>GGAUE7)7ayE}z&kqG9)axq*El;X({LDTFivAXj8g~3yzR0!vZ zc!Wr2ibQxPUMLob)lk5Fx=Iw}WRZ9(fZGO6oo28C0?!9MC1P?RMm(iO6?R^DIDoEE z;2y#LpdpeXqDXL|D8%V7Gvyd$7;ySrS7Cw)>+f)S9MQbUX_C${PYF4cil?6t#L9mk zK@*gNv2che%7J8*H1~KYyEe zvhufwyC__Pd9%fK+1^w_)MXt)FM{9WRml{T;m(BbSsgFy}v!A!bP%**bOoeb*9 zL$`-9FrIlW6Y+E?yfapR5~Qbqf;r;hbR347aL1@Xgn)0t4N@5lP{nx2Z+a0my@ zMdJBF@%b}A^XPAmCU9=agZ0_!pp)mbK=~Xb@<+VA%EKo$urLL+sl18#iy=zH|59{Ra;pJ$~)=H{K-PT7B~NJMUtC z!2e$_yb1yYSBXd_AC5=Uu8w-PIsw-V0t6W5!;x^_wFO|@P8*ehvPoya@B}x%1ETiR z#Ubsc7^66tkgvlSu@cEJk)Ti(=wPr6x3D7RfE1R?p%BS)3@P$qT6{s!rWm8YnLNr{ zV8dJ!42Cw7NrvV0P*5}5U~k8SbW(oDUR-{@bmQf$+-%rSi0_1zqs14*dFdtyLS$xn zX6aJ`JsfC{L6&Y!m*+vfnWWk6Ub+K_{m~RbeJRWW zr{wgwzZqoI1$t&7UAhbO*qfam0N8~8G8)&RBJtREf+Y8VB!B!$NCFacmhN)9oQWy` z`k7=InUJBYG}K;8_d$LA#aE~=kmyZtSHBJo7NAK!z)?~emU)FT%gRz&46t-L!pR{f z5agMN^rAcMiFCObcb#hYFO*Z+)A}o%4t-S>cT~qT&`>qG*q)`bpqFB)aGq}hD(u0_ zsj%75pRU3v@ar((v50uy=VC=)QZSrx|ne-TR^m1xUUR`<&sO-!t zwdY|n8t4g`eGO3icT;5cC2<3XVM1s}oHc{Q0@!ED>qzBzau3QV6i$YVVIn9Of^rCE zE(7ml>2)B{hclDtwCi?^=Cf5dJ7oI_D!lEu z>}|mAiz(vyvgiRzOo-=*t!5FP}iYRp|;nt1{$2LRFu|LhpkXRBjeKcUCmWv8FM zDngx}V4ie36RiOJGj;y>GMS6u**YIqcHem4y733mj-o^Sj3y$YwyhtU)=pMw`(vopLiLTFQnhWrW;f_; zvQtCEri081a<+nX)Ie5?->5Vcv+h=4b4j=t(Lz0<=-7?s$HA&&w%WaN!me7ajjG)q zRpjzf1Z(w(h?(^!a@wCHQQK^rN_o3#wh=pCmCq*4dfh}sTG64?Bx-a}on}uu6>?dm zJ2tUp*J};M`XsMdx>?QyZOcOSIyF`k_hm!Kvdk6{br72}xD*l}pD0m4p?h;?+ps2o)s3$@#Rc-AnH!$>FO!mnosuo2rx1%f6zmT5ceIG{HQ zLA&F$Ef~i^drC^FYj(ZiFKE?<*=|$Z1o}7gNn~4!qZ6r))2#MB4gq7d9kbK&ha2#C z46|E1G2}qEZRp)>wJfDgBpm<85kN^dQF*%uBPfYuAKcEQ6h|`^A`hhdC}Fou#X|lV z{9%}}YIkx;r32(40>Fx>_n};=E2vy(qYiX-QV-6e|J9Q}@%?b=3HIVz)6-|q-+O=U z1OIoxdNC~AG{Eq?Tfiyqe-g5YkkYBZe-vu>cI3L@-vq{{#;JO*Gz8#;nfBmrf!Q$Y z05LsY^?okZ@&l(JBIt_8ZW5V>KW!q*J{%jS2f2XDs~~Q6wT_$*;ck21F2ewT7+5D5 z;SaM(#ZrijV-fLq{A1aHI7+A-Q=sFz$c|NfR7fa5W+H&JY8%xR=OY-3hG{9~08*-o zHP-jzLcVHSx&qpu-3HlHKZ+=D|3UF@c7Pb%IN@I_MNr)Y#Sya)LEMN?sGw~2;GUjb zZzJmv27QRoSdzq?Kr3>jC1K~E@an1JX_GN)kdF0924n^f2iHqaoK*7Pbd~( zPGoIRYg+XqxrR`~pHv(W+=;&5E(Gg69ViR`{0c-7luEFQ>Mf+uV?*^$4lYV+CNX67 z4+oN8&TJysjvX8QcXLrd*3oScyt-E1O`$prf+9^y^3yB;r?|+vVy;Do|3<5PGME%K z*7>t75Kgn+vk0IG2)--JCAn3t_qcJ+d!8=X%_JiUJ9Q5@3z?v>KM6O0_1vfrnydIH>aJx2c29Q^=`@>Y516S| z4k#V1%8r>U{DWLdaR=hCZXdR4=2pyB0fvd;^5+X02m#?5whAbiPk<#IQ0$;uEywPG zCOkHe_;+&Qx~JO)O6cPx=pt9ToJy+=_Hc}F;PNZd zY9={>6qN^ZgH-|Dp;(q}ZHJU*6rhEzl*@BS(kb`i;tk#mqF^JiG+P!fF+QX?>N~f_WH+l+ityQsG)iD}y z*`QKKDgg?pfm(Y7u!=zV9&*@mL(CUsPz)VsSdG|%d%zXT1}^X)tEUOng)}^`^?-R> z?N5t6$2{mDKiF?u1*u`im<{|Op7`X_=OaJp%8!57^MkI+Up{>8y=lA!*YJLG^}Clp zUwVk$nPxklOqJBNDg1T!OjE&5A>G62y8GFSLiP3;%HYj&mEY2IcWm(tU(SCHr&DKf z-p%P||BZ7M`1|Jw^7GUB;_*~d^z^IL)vf7n#_Bm5`<-bz_1bxE)}yJ`^@B6i3~=q@ z|NM=gU-^9LHEb%A`p$P)Z%_4(uAkxLT{*);rKhQj*UmTT-V_bqNSd$_$J52Yt^`8{b0|8 zYgobl3eD_O$y$+bM)t1Alji4oXMcY+ef`wwislSI`6fik-`-)$LqT zi06A7a3BM}mQL4Nbh8xW#Lf!c?R7*lcaR8(g+S$iN*kRR!&Vu(U?{Aqi4tQ9s6y5^ zBkh2-)2fNd_y+zM!>^}9R7tG~mB>B}af)*?Xnc-c8)T;26X-Q#P@ogLzH86Ig+mw`|;9_R80AkKSq@Rl4*FO-IyfI2e*U zrI=7^X3;??d9Yolx1+^GZ__d)lMm4)DYw_iGM2u_XzASz{0WBNP8YUpgAF8uNBI?c zzZw>kVyoW|RLwwAI|zqh@>~ej1SY(jXdXrqo!vT2yj!HxI*jIm^3I`*zk}g-(yc=} za=@646k4IP`@Q|zLA!W#!1WV{;f5?%$?dJIn9so!YTK5Ld`7Ny_mf7ZSLD@bJyDYJ zr?9w@W-Y6;T}3sK0*#c|%Iv4Av>Dwi9aZe8nNm73irVp3Gawx0K$ugpq{?-I+sNMS zMteD4#-C&Oy>u?w<%+>hq0?NU8zELZ(ga5jg$%Ql;Eqad3#MOOEzyk@kF0j08En|W zU9#PXbdpTYZd)?`K8D{R}ZH8c2SaX62l*+^;&vo#{e^#TA^hwQ>gbl=?=YhkY+X` z{ak#vXa!KXcd*Y@&F)^W$8QB>YF|kOa=BegGG&~`@JDH_bXYKpoEFhQ#paHJ(dgdc zVdThyaVYd#JCVd5+G4i#NN~$)HX{nz+_jxx`+#rKu})uBa!{5J;fA9b&AL8^QoP9iKJivW%?Vq@fV~f}YYzf1$i`X*e!!BW$ zu`AeBYz4c9UB_-fbdy`yZR`$q7rTeu#~xr0u}9cr7rF(S{Xf_L>C&YWF94&i{D+@> z_rLw%XSc8`Uk)?)ZT#KMZ8;9-F{AVuukYZ`l5#ei&uoQ5%o*?R;_r<x>7?vH-rHV&EZ|0~Gg4{_!gHn{W)&;Rn@ z4l8`|Q@6q+oI9y->5K}GapAZEknAZ#-S}rN#qisU_?-**-6cQ(zkd;bu#7+S;g2qX z;`OQ}ZvJzx+PjPRvkUlpOZXa&`!C|uGS2vL?h-Dz)jnswy!9`Z7J>d4=zuWW?wDaY zm@yeAzq!4~Cd0{&+LgP3;-1uMwDU=Or%(hdYQ~f8qNyoy7e5!~|MI6lyY&Zuwgzgk zdU%-WW=K*?XyCXB5&DQXq)2r$6*HVzuFk7FNQ@r_l>My(dq=JBBxoEkbldpTFMoFH zfBo1GP~9TM+dp!l!XGXU(78okyYpl33A5-yzW4?G@9&-+HV0y?{c6MJ{PA%#ni<08 z48qY&M9mr9d7m|8ju(f5F%^8%CE_h*ch9!i&usOq$VR&J41|@@4y|6jM5(hDekJ~gj!wZ`; zeCGzgKY0gt0ZvMcuD%d9XA5{9!sdK$4>aNicHuw$<{*XJ8EzSFXJFWGZD5!35Utrw zVQbG#VQUZ4&#)`M2Ul+0^vA#JrLfe6VZXhBUH!lR5Yo@EYyU9<=@;0w|MA-x_B$AM z?XTgg$M0-l*EjzTq@Q8eO94o~z^<1e!ol}3?E2sR3{rUi_W&&Tx&8xacm6Y{z?=ee w3d|`mr@)*7a|+BUFsHzr0&@z?De(U{1y0A`8;_!Q9RE*o(JDBCRemoteInstance.java:61) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) - at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) - at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) - at org.jkiss.dbeaver.runtime.jobs.ConnectJob.runSync(ConnectJob.java:109) - at org.jkiss.dbeaver.ui.actions.datasource.DataSourceHandler.connectToDataSource(DataSourceHandler.java:123) - at org.jkiss.dbeaver.ui.actions.datasource.UIServiceConnectionsImpl.initConnection(UIServiceConnectionsImpl.java:87) - at org.jkiss.dbeaver.model.DBUtils.initDataSource(DBUtils.java:2455) - at org.jkiss.dbeaver.model.navigator.DBNDataSource.initializeNode(DBNDataSource.java:159) - at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:226) - at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:1) - at org.jkiss.dbeaver.model.navigator.DBNUtils.getNodeChildrenFiltered(DBNUtils.java:94) - at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:49) - at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:23:17.483064+04:00 jdbc[3]: exception -java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. - at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) - at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) - at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:23:24.233009+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) - at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) - at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) - at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:23:24.234007+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) - at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) - at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) - at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:24:03.110022+04:00 database: flush -org.h2.message.DbException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" -General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] - at org.h2.message.DbException.get(DbException.java:212) - at org.h2.message.DbException.convert(DbException.java:407) - at org.h2.mvstore.db.Store.lambda$new$0(Store.java:122) - at org.h2.mvstore.MVStore.handleException(MVStore.java:1546) - at org.h2.mvstore.MVStore.panic(MVStore.java:371) - at org.h2.mvstore.MVStore.(MVStore.java:291) - at org.h2.mvstore.MVStore$Builder.open(MVStore.java:2035) - at org.h2.mvstore.db.Store.(Store.java:133) - at org.h2.engine.Database.(Database.java:326) - at org.h2.engine.Engine.openSession(Engine.java:92) - at org.h2.engine.Engine.openSession(Engine.java:222) - at org.h2.engine.Engine.createSession(Engine.java:201) - at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:343) - at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:125) - at org.h2.Driver.connect(Driver.java:59) - at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) - at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) - at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) - at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) - at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) - at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) - at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) - at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) - at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:52) - at org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer.runScripts(DataSourceScriptDatabaseInitializer.java:87) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.runScripts(AbstractScriptDatabaseInitializer.java:146) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applyScripts(AbstractScriptDatabaseInitializer.java:108) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applySchemaScripts(AbstractScriptDatabaseInitializer.java:98) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.initializeDatabase(AbstractScriptDatabaseInitializer.java:76) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.afterPropertiesSet(AbstractScriptDatabaseInitializer.java:66) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) - at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) - at ru.practicum.shareit.ShareItApp.main(ShareItApp.java:10) -Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" -General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:566) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - ... 51 more -Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7] - at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996) - at org.h2.mvstore.SingleFileStore.lockFileChannel(SingleFileStore.java:143) - at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:117) - at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:81) - at org.h2.mvstore.MVStore.(MVStore.java:286) - ... 45 more -2025-06-15 10:24:15.622555+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Синтаксическая ошибка в выражении SQL "CREATE TABLE IF NOT EXISTS items ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar NOT NULL, description varchar NOT NULL, available boolean, [*])"; ожидалось "identifier" -Syntax error in SQL statement "CREATE TABLE IF NOT EXISTS items ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar NOT NULL, description varchar NOT NULL, available boolean, [*])"; expected "identifier"; SQL statement: -CREATE TABLE IF NOT EXISTS items ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar NOT NULL, description varchar NOT NULL, available boolean, ) [42001-224] -2025-06-15 10:25:21.880348+04:00 jdbc[3]: exception -java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. - at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) - at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) - at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:25:22.027954+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) - at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) - at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) - at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:25:22.027954+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) - at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) - at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) - at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:25:27.917201+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) - at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) - at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) - at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:25:51.041350+04:00 jdbc[3]: exception -java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. - at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) - at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) - at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) - at org.jkiss.dbeaver.runtime.jobs.ConnectJob.runSync(ConnectJob.java:109) - at org.jkiss.dbeaver.ui.actions.datasource.DataSourceHandler.connectToDataSource(DataSourceHandler.java:123) - at org.jkiss.dbeaver.ui.actions.datasource.UIServiceConnectionsImpl.initConnection(UIServiceConnectionsImpl.java:87) - at org.jkiss.dbeaver.model.DBUtils.initDataSource(DBUtils.java:2455) - at org.jkiss.dbeaver.model.navigator.DBNDataSource.initializeNode(DBNDataSource.java:159) - at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:226) - at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:1) - at org.jkiss.dbeaver.model.navigator.DBNUtils.getNodeChildrenFiltered(DBNUtils.java:94) - at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:49) - at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:25:51.304645+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) - at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) - at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) - at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:25:51.304645+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) - at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) - at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) - at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:25:51.421333+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) - at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) - at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) - at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:53:07.537143+04:00 jdbc[3]: exception -java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. - at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) - at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) - at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:53:07.657821+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:53:07.658818+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:53:07.658818+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:54:16.640552+04:00 jdbc[3]: exception -java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. - at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) - at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) - at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:54:16.766215+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:54:16.767213+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:54:16.767213+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:55:57.804961+04:00 jdbc[3]: exception -java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. - at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) - at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) - at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:55:57.974507+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:55:57.975505+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 10:55:57.975505+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 11:52:19.042831+04:00 jdbc[3]: exception -java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. - at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) - at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) - at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 11:52:19.279200+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 11:52:19.279200+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 11:52:19.280197+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:06:21.364223+04:00 jdbc[3]: exception -java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. - at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) - at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) - at org.jkiss.dbeaver.ui.editors.DatabaseLazyEditorInput.initializeRealInput(DatabaseLazyEditorInput.java:266) - at org.jkiss.dbeaver.ui.editors.ProgressEditorPart$InitNodeService.evaluate(ProgressEditorPart.java:173) - at org.jkiss.dbeaver.ui.editors.ProgressEditorPart$InitNodeService.evaluate(ProgressEditorPart.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:06:23.021791+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) - at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) - at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) - at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:06:23.023785+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) - at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) - at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) - at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:06:27.743161+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) - at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) - at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) - at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:09:35.028259+04:00 database: flush -org.h2.message.DbException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" -General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] - at org.h2.message.DbException.get(DbException.java:212) - at org.h2.message.DbException.convert(DbException.java:407) - at org.h2.mvstore.db.Store.lambda$new$0(Store.java:122) - at org.h2.mvstore.MVStore.handleException(MVStore.java:1546) - at org.h2.mvstore.MVStore.panic(MVStore.java:371) - at org.h2.mvstore.MVStore.(MVStore.java:291) - at org.h2.mvstore.MVStore$Builder.open(MVStore.java:2035) - at org.h2.mvstore.db.Store.(Store.java:133) - at org.h2.engine.Database.(Database.java:326) - at org.h2.engine.Engine.openSession(Engine.java:92) - at org.h2.engine.Engine.openSession(Engine.java:222) - at org.h2.engine.Engine.createSession(Engine.java:201) - at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:343) - at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:125) - at org.h2.Driver.connect(Driver.java:59) - at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) - at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) - at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) - at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) - at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) - at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) - at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) - at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) - at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:52) - at org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer.runScripts(DataSourceScriptDatabaseInitializer.java:87) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.runScripts(AbstractScriptDatabaseInitializer.java:146) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applyScripts(AbstractScriptDatabaseInitializer.java:108) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applySchemaScripts(AbstractScriptDatabaseInitializer.java:98) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.initializeDatabase(AbstractScriptDatabaseInitializer.java:76) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.afterPropertiesSet(AbstractScriptDatabaseInitializer.java:66) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) - at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) - at ru.practicum.shareit.ShareItApp.main(ShareItApp.java:10) -Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" -General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:566) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - ... 51 more -Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7] - at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996) - at org.h2.mvstore.SingleFileStore.lockFileChannel(SingleFileStore.java:143) - at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:117) - at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:81) - at org.h2.mvstore.MVStore.(MVStore.java:286) - ... 45 more -2025-06-15 17:10:19.086414+04:00 jdbc[3]: exception -java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. - at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) - at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) - at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:10:19.293860+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) - at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) - at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) - at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:10:19.294857+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) - at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) - at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) - at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:10:19.502302+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) - at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) - at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) - at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:12:02.590577+04:00 database: flush -org.h2.message.DbException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" -General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] - at org.h2.message.DbException.get(DbException.java:212) - at org.h2.message.DbException.convert(DbException.java:407) - at org.h2.mvstore.db.Store.lambda$new$0(Store.java:122) - at org.h2.mvstore.MVStore.handleException(MVStore.java:1546) - at org.h2.mvstore.MVStore.panic(MVStore.java:371) - at org.h2.mvstore.MVStore.(MVStore.java:291) - at org.h2.mvstore.MVStore$Builder.open(MVStore.java:2035) - at org.h2.mvstore.db.Store.(Store.java:133) - at org.h2.engine.Database.(Database.java:326) - at org.h2.engine.Engine.openSession(Engine.java:92) - at org.h2.engine.Engine.openSession(Engine.java:222) - at org.h2.engine.Engine.createSession(Engine.java:201) - at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:343) - at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:125) - at org.h2.Driver.connect(Driver.java:59) - at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) - at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) - at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) - at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) - at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) - at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) - at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) - at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) - at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:52) - at org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer.runScripts(DataSourceScriptDatabaseInitializer.java:87) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.runScripts(AbstractScriptDatabaseInitializer.java:146) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applyScripts(AbstractScriptDatabaseInitializer.java:108) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applySchemaScripts(AbstractScriptDatabaseInitializer.java:98) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.initializeDatabase(AbstractScriptDatabaseInitializer.java:76) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.afterPropertiesSet(AbstractScriptDatabaseInitializer.java:66) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) - at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) - at ru.practicum.shareit.ShareItApp.main(ShareItApp.java:10) -Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" -General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:566) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - ... 51 more -Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7] - at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996) - at org.h2.mvstore.SingleFileStore.lockFileChannel(SingleFileStore.java:143) - at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:117) - at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:81) - at org.h2.mvstore.MVStore.(MVStore.java:286) - ... 45 more -2025-06-15 17:15:33.389813+04:00 jdbc[3]: exception -java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. - at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) - at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) - at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:15:33.575317+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) - at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) - at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) - at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:15:33.575317+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) - at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) - at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) - at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:15:33.746859+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) - at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) - at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) - at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:15:40.009108+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:16:31.330835+04:00 database: flush -org.h2.message.DbException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" -General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] - at org.h2.message.DbException.get(DbException.java:212) - at org.h2.message.DbException.convert(DbException.java:407) - at org.h2.mvstore.db.Store.lambda$new$0(Store.java:122) - at org.h2.mvstore.MVStore.handleException(MVStore.java:1546) - at org.h2.mvstore.MVStore.panic(MVStore.java:371) - at org.h2.mvstore.MVStore.(MVStore.java:291) - at org.h2.mvstore.MVStore$Builder.open(MVStore.java:2035) - at org.h2.mvstore.db.Store.(Store.java:133) - at org.h2.engine.Database.(Database.java:326) - at org.h2.engine.Engine.openSession(Engine.java:92) - at org.h2.engine.Engine.openSession(Engine.java:222) - at org.h2.engine.Engine.createSession(Engine.java:201) - at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:343) - at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:125) - at org.h2.Driver.connect(Driver.java:59) - at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) - at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) - at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) - at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) - at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) - at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) - at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) - at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) - at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:52) - at org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer.runScripts(DataSourceScriptDatabaseInitializer.java:87) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.runScripts(AbstractScriptDatabaseInitializer.java:146) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applyScripts(AbstractScriptDatabaseInitializer.java:108) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applySchemaScripts(AbstractScriptDatabaseInitializer.java:98) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.initializeDatabase(AbstractScriptDatabaseInitializer.java:76) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.afterPropertiesSet(AbstractScriptDatabaseInitializer.java:66) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) - at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) - at ru.practicum.shareit.ShareItApp.main(ShareItApp.java:10) -Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" -General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:566) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - ... 51 more -Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7] - at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996) - at org.h2.mvstore.SingleFileStore.lockFileChannel(SingleFileStore.java:143) - at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:117) - at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:81) - at org.h2.mvstore.MVStore.(MVStore.java:286) - ... 45 more -2025-06-15 17:16:38.545537+04:00 jdbc[3]: exception -java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. - at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) - at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) - at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) - at org.jkiss.dbeaver.runtime.jobs.ConnectJob.runSync(ConnectJob.java:109) - at org.jkiss.dbeaver.ui.actions.datasource.DataSourceHandler.connectToDataSource(DataSourceHandler.java:123) - at org.jkiss.dbeaver.ui.actions.datasource.UIServiceConnectionsImpl.initConnection(UIServiceConnectionsImpl.java:87) - at org.jkiss.dbeaver.model.DBUtils.initDataSource(DBUtils.java:2455) - at org.jkiss.dbeaver.model.navigator.DBNDataSource.initializeNode(DBNDataSource.java:159) - at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:226) - at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:1) - at org.jkiss.dbeaver.model.navigator.DBNUtils.getNodeChildrenFiltered(DBNUtils.java:94) - at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:49) - at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:16:38.822795+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) - at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) - at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) - at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:16:38.822795+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:251) - at org.jkiss.dbeaver.ext.generic.model.GenericTableBase.getConstraints(GenericTableBase.java:1) - at org.jkiss.dbeaver.model.exec.DBExecUtils.getBestIdentifier(DBExecUtils.java:538) - at org.jkiss.dbeaver.model.exec.DBExecUtils.bindAttributes(DBExecUtils.java:875) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetDataReceiver.fetchEnd(ResultSetDataReceiver.java:166) - at org.jkiss.dbeaver.model.impl.jdbc.struct.JDBCTable.readData(JDBCTable.java:228) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.lambda$0(ResultSetJobDataRead.java:128) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetJobDataRead.run(ResultSetJobDataRead.java:126) - at org.jkiss.dbeaver.ui.controls.resultset.ResultSetViewer$ResultSetDataPumpJob.run(ResultSetViewer.java:5146) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:16:38.959430+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:16:38.960427+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:16:41.950429+04:00 database: flush -org.h2.message.DbException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" -General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] - at org.h2.message.DbException.get(DbException.java:212) - at org.h2.message.DbException.convert(DbException.java:407) - at org.h2.mvstore.db.Store.lambda$new$0(Store.java:122) - at org.h2.mvstore.MVStore.handleException(MVStore.java:1546) - at org.h2.mvstore.MVStore.panic(MVStore.java:371) - at org.h2.mvstore.MVStore.(MVStore.java:291) - at org.h2.mvstore.MVStore$Builder.open(MVStore.java:2035) - at org.h2.mvstore.db.Store.(Store.java:133) - at org.h2.engine.Database.(Database.java:326) - at org.h2.engine.Engine.openSession(Engine.java:92) - at org.h2.engine.Engine.openSession(Engine.java:222) - at org.h2.engine.Engine.createSession(Engine.java:201) - at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:343) - at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:125) - at org.h2.Driver.connect(Driver.java:59) - at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) - at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) - at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) - at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) - at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) - at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) - at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) - at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) - at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:52) - at org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer.runScripts(DataSourceScriptDatabaseInitializer.java:87) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.runScripts(AbstractScriptDatabaseInitializer.java:146) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applyScripts(AbstractScriptDatabaseInitializer.java:108) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applySchemaScripts(AbstractScriptDatabaseInitializer.java:98) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.initializeDatabase(AbstractScriptDatabaseInitializer.java:76) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.afterPropertiesSet(AbstractScriptDatabaseInitializer.java:66) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) - at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) - at ru.practicum.shareit.ShareItApp.main(ShareItApp.java:10) -Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" -General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:566) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - ... 51 more -Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7] - at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996) - at org.h2.mvstore.SingleFileStore.lockFileChannel(SingleFileStore.java:143) - at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:117) - at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:81) - at org.h2.mvstore.MVStore.(MVStore.java:286) - ... 45 more -2025-06-15 17:22:35.220042+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "REQUEST" не найден -Column "REQUEST" not found; SQL statement: -insert into items (available,description,name,owner_id,request,id) values (?,?,?,?,?,default) [42122-224] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.table.Table.getColumn(Table.java:759) - at org.h2.command.Parser.parseColumn(Parser.java:1190) - at org.h2.command.Parser.parseColumnList(Parser.java:1175) - at org.h2.command.Parser.parseInsert(Parser.java:1549) - at org.h2.command.Parser.parsePrepared(Parser.java:719) - at org.h2.command.Parser.parse(Parser.java:592) - at org.h2.command.Parser.parse(Parser.java:564) - at org.h2.command.Parser.prepareCommand(Parser.java:483) - at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:639) - at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:559) - at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1166) - at org.h2.jdbc.JdbcPreparedStatement.(JdbcPreparedStatement.java:93) - at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:1149) - at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:363) - at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) - at org.hibernate.engine.jdbc.internal.MutationStatementPreparerImpl$3.doPrepare(MutationStatementPreparerImpl.java:78) - at org.hibernate.engine.jdbc.internal.MutationStatementPreparerImpl$StatementPreparationTemplate.prepareStatement(MutationStatementPreparerImpl.java:106) - at org.hibernate.engine.jdbc.internal.MutationStatementPreparerImpl.prepareStatement(MutationStatementPreparerImpl.java:80) - at org.hibernate.id.insert.GetGeneratedKeysDelegate.prepareStatement(GetGeneratedKeysDelegate.java:96) - at org.hibernate.engine.jdbc.mutation.internal.ModelMutationHelper.delegateStatementPreparation(ModelMutationHelper.java:131) - at org.hibernate.engine.jdbc.mutation.internal.ModelMutationHelper.lambda$standardPreparation$0(ModelMutationHelper.java:121) - at org.hibernate.engine.jdbc.mutation.internal.PreparedStatementDetailsStandard.resolveStatement(PreparedStatementDetailsStandard.java:87) - at org.hibernate.id.insert.GetGeneratedKeysDelegate.performMutation(GetGeneratedKeysDelegate.java:113) - at org.hibernate.engine.jdbc.mutation.internal.MutationExecutorSingleNonBatched.performNonBatchedOperations(MutationExecutorSingleNonBatched.java:47) - at org.hibernate.engine.jdbc.mutation.internal.AbstractMutationExecutor.execute(AbstractMutationExecutor.java:55) - at org.hibernate.persister.entity.mutation.InsertCoordinatorStandard.doStaticInserts(InsertCoordinatorStandard.java:194) - at org.hibernate.persister.entity.mutation.InsertCoordinatorStandard.coordinateInsert(InsertCoordinatorStandard.java:132) - at org.hibernate.persister.entity.mutation.InsertCoordinatorStandard.insert(InsertCoordinatorStandard.java:95) - at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:85) - at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:670) - at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:291) - at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:272) - at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:322) - at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:391) - at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:305) - at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:224) - at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:137) - at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:175) - at org.hibernate.event.internal.DefaultPersistEventListener.persist(DefaultPersistEventListener.java:93) - at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:77) - at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:54) - at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:127) - at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:757) - at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:741) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:364) - at jdk.proxy2/jdk.proxy2.$Proxy142.persist(Unknown Source) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:319) - at jdk.proxy2/jdk.proxy2.$Proxy142.persist(Unknown Source) - at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:629) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354) - at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:277) - at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:170) - at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:158) - at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:516) - at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:285) - at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:628) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:168) - at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:143) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:70) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379) - at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:138) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:165) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223) - at jdk.proxy2/jdk.proxy2.$Proxy146.save(Unknown Source) - at ru.practicum.shareit.item.ItemServiceImpl.create(ItemServiceImpl.java:26) - at ru.practicum.shareit.item.ItemController.create(ItemController.java:27) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354) - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:174) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) - at ru.practicum.shareit.item.ItemController$$SpringCGLIB$$0.create() - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) - at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) - at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:113) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389) - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:904) - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.base/java.lang.Thread.run(Thread.java:1583) -2025-06-15 17:24:34.051791+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "REQUEST_ID" не найден -Column "REQUEST_ID" not found; SQL statement: -insert into items (available,description,name,owner_id,request_id,id) values (?,?,?,?,?,default) [42122-224] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.table.Table.getColumn(Table.java:759) - at org.h2.command.Parser.parseColumn(Parser.java:1190) - at org.h2.command.Parser.parseColumnList(Parser.java:1175) - at org.h2.command.Parser.parseInsert(Parser.java:1549) - at org.h2.command.Parser.parsePrepared(Parser.java:719) - at org.h2.command.Parser.parse(Parser.java:592) - at org.h2.command.Parser.parse(Parser.java:564) - at org.h2.command.Parser.prepareCommand(Parser.java:483) - at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:639) - at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:559) - at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1166) - at org.h2.jdbc.JdbcPreparedStatement.(JdbcPreparedStatement.java:93) - at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:1149) - at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:363) - at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) - at org.hibernate.engine.jdbc.internal.MutationStatementPreparerImpl$3.doPrepare(MutationStatementPreparerImpl.java:78) - at org.hibernate.engine.jdbc.internal.MutationStatementPreparerImpl$StatementPreparationTemplate.prepareStatement(MutationStatementPreparerImpl.java:106) - at org.hibernate.engine.jdbc.internal.MutationStatementPreparerImpl.prepareStatement(MutationStatementPreparerImpl.java:80) - at org.hibernate.id.insert.GetGeneratedKeysDelegate.prepareStatement(GetGeneratedKeysDelegate.java:96) - at org.hibernate.engine.jdbc.mutation.internal.ModelMutationHelper.delegateStatementPreparation(ModelMutationHelper.java:131) - at org.hibernate.engine.jdbc.mutation.internal.ModelMutationHelper.lambda$standardPreparation$0(ModelMutationHelper.java:121) - at org.hibernate.engine.jdbc.mutation.internal.PreparedStatementDetailsStandard.resolveStatement(PreparedStatementDetailsStandard.java:87) - at org.hibernate.id.insert.GetGeneratedKeysDelegate.performMutation(GetGeneratedKeysDelegate.java:113) - at org.hibernate.engine.jdbc.mutation.internal.MutationExecutorSingleNonBatched.performNonBatchedOperations(MutationExecutorSingleNonBatched.java:47) - at org.hibernate.engine.jdbc.mutation.internal.AbstractMutationExecutor.execute(AbstractMutationExecutor.java:55) - at org.hibernate.persister.entity.mutation.InsertCoordinatorStandard.doStaticInserts(InsertCoordinatorStandard.java:194) - at org.hibernate.persister.entity.mutation.InsertCoordinatorStandard.coordinateInsert(InsertCoordinatorStandard.java:132) - at org.hibernate.persister.entity.mutation.InsertCoordinatorStandard.insert(InsertCoordinatorStandard.java:95) - at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:85) - at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:670) - at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:291) - at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:272) - at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:322) - at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:391) - at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:305) - at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:224) - at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:137) - at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:175) - at org.hibernate.event.internal.DefaultPersistEventListener.persist(DefaultPersistEventListener.java:93) - at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:77) - at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:54) - at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:127) - at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:757) - at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:741) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:364) - at jdk.proxy2/jdk.proxy2.$Proxy142.persist(Unknown Source) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:319) - at jdk.proxy2/jdk.proxy2.$Proxy142.persist(Unknown Source) - at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:629) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354) - at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:277) - at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:170) - at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:158) - at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:516) - at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:285) - at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:628) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:168) - at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:143) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:70) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379) - at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:138) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:165) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223) - at jdk.proxy2/jdk.proxy2.$Proxy146.save(Unknown Source) - at ru.practicum.shareit.item.ItemServiceImpl.create(ItemServiceImpl.java:26) - at ru.practicum.shareit.item.ItemController.create(ItemController.java:27) - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354) - at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:174) - at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) - at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) - at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) - at ru.practicum.shareit.item.ItemController$$SpringCGLIB$$0.create() - at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) - at java.base/java.lang.reflect.Method.invoke(Method.java:580) - at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) - at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) - at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) - at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) - at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) - at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) - at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:113) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389) - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:904) - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) - at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) - at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) - at java.base/java.lang.Thread.run(Thread.java:1583) -2025-06-15 17:26:10.889380+04:00 jdbc[3]: exception -java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. - at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) - at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) - at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:26:11.100814+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:26:11.100814+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:26:11.101812+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:26:11.101812+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-15 17:26:33.515858+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Таблица "ITEMS" не найдена -Table "ITEMS" not found; SQL statement: -DROP TABLE ITEMS CASCADE [42102-232] -2025-06-15 17:26:46.065292+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Таблица "REQUEST" не найдена -Table "REQUEST" not found; SQL statement: -CREATE TABLE IF NOT EXISTS items ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar NOT NULL, description varchar NOT NULL, available boolean, owner_id BIGINT REFERENCES users (id), request_id BIGINT REFERENCES request (id) ) [42102-224] -2025-06-16 06:37:12.404905+04:00 jdbc[3]: exception -java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. - at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) - at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) - at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-16 06:37:18.829024+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-16 06:37:18.831019+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-16 06:37:18.832016+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-16 06:37:18.833013+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-16 06:37:18.834011+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-16 06:38:12.752513+04:00 jdbc[3]: exception -java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. - at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) - at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) - at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) - at org.jkiss.dbeaver.runtime.jobs.ConnectJob.runSync(ConnectJob.java:109) - at org.jkiss.dbeaver.ui.actions.datasource.DataSourceHandler.connectToDataSource(DataSourceHandler.java:123) - at org.jkiss.dbeaver.ui.actions.datasource.UIServiceConnectionsImpl.initConnection(UIServiceConnectionsImpl.java:87) - at org.jkiss.dbeaver.model.DBUtils.initDataSource(DBUtils.java:2455) - at org.jkiss.dbeaver.model.navigator.DBNDataSource.initializeNode(DBNDataSource.java:159) - at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:226) - at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:1) - at org.jkiss.dbeaver.model.navigator.DBNUtils.getNodeChildrenFiltered(DBNUtils.java:94) - at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:49) - at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-16 06:38:13.027828+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-16 06:38:13.028826+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-16 06:38:13.029823+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-16 06:38:13.031817+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-16 06:38:13.033812+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-16 07:49:33.065618+04:00 jdbc[3]: exception -java.sql.SQLClientInfoException: Client info name 'ApplicationName' not supported. - at org.h2.jdbc.JdbcConnection.setClientInfo(JdbcConnection.java:1624) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.populateClientAppName(GenericDataSource.java:200) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.openConnection(GenericDataSource.java:163) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.openConnection(H2DataSource.java:74) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCExecutionContext.connect(JDBCExecutionContext.java:124) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.initializeMainContext(JDBCRemoteInstance.java:106) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCRemoteInstance.(JDBCRemoteInstance.java:61) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCDataSource.initializeRemoteInstance(JDBCDataSource.java:125) - at org.jkiss.dbeaver.ext.generic.model.GenericDataSource.(GenericDataSource.java:125) - at org.jkiss.dbeaver.ext.h2.model.H2DataSource.(H2DataSource.java:43) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createDataSourceImpl(H2MetaModel.java:56) - at org.jkiss.dbeaver.ext.generic.GenericDataSourceProvider.openDataSource(GenericDataSourceProvider.java:57) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.openDataSource(DataSourceDescriptor.java:1417) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect0(DataSourceDescriptor.java:1280) - at org.jkiss.dbeaver.registry.DataSourceDescriptor.connect(DataSourceDescriptor.java:1070) - at org.jkiss.dbeaver.runtime.jobs.ConnectJob.run(ConnectJob.java:78) - at org.jkiss.dbeaver.runtime.jobs.ConnectJob.runSync(ConnectJob.java:109) - at org.jkiss.dbeaver.ui.actions.datasource.DataSourceHandler.connectToDataSource(DataSourceHandler.java:123) - at org.jkiss.dbeaver.ui.actions.datasource.UIServiceConnectionsImpl.initConnection(UIServiceConnectionsImpl.java:87) - at org.jkiss.dbeaver.model.DBUtils.initDataSource(DBUtils.java:2455) - at org.jkiss.dbeaver.model.navigator.DBNDataSource.initializeNode(DBNDataSource.java:159) - at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:226) - at org.jkiss.dbeaver.model.navigator.DBNDatabaseNode.getChildren(DBNDatabaseNode.java:1) - at org.jkiss.dbeaver.model.navigator.DBNUtils.getNodeChildrenFiltered(DBNUtils.java:94) - at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:49) - at org.jkiss.dbeaver.ui.navigator.database.load.TreeLoadService.evaluate(TreeLoadService.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-16 07:49:33.300536+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-16 07:49:33.301534+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-16 07:49:33.301534+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-16 07:49:33.302531+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-16 07:49:33.302531+04:00 jdbc[3]: exception -org.h2.jdbc.JdbcSQLSyntaxErrorException: Столбец "KEY_SEQ" не найден -Column "KEY_SEQ" not found [42122-232] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - at org.h2.message.DbException.get(DbException.java:223) - at org.h2.message.DbException.get(DbException.java:199) - at org.h2.jdbc.JdbcResultSet.getColumnIndex(JdbcResultSet.java:3492) - at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:337) - at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCResultSetImpl.getInt(JDBCResultSetImpl.java:510) - at org.jkiss.dbeaver.model.impl.jdbc.JDBCUtils.safeGetInt(JDBCUtils.java:117) - at org.jkiss.dbeaver.ext.generic.model.GenericUtils.safeGetInt(GenericUtils.java:84) - at org.jkiss.dbeaver.ext.generic.model.meta.GenericMetaModel.createConstraintColumnsImpl(GenericMetaModel.java:949) - at org.jkiss.dbeaver.ext.h2.model.H2MetaModel.createConstraintColumnsImpl(H2MetaModel.java:179) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:98) - at org.jkiss.dbeaver.ext.generic.model.ConstraintKeysCache.fetchObjectRow(ConstraintKeysCache.java:1) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.loadObjects(JDBCCompositeCache.java:369) - at org.jkiss.dbeaver.model.impl.jdbc.cache.JDBCCompositeCache.getObjects(JDBCCompositeCache.java:123) - at org.jkiss.dbeaver.ext.generic.model.GenericObjectContainer.cacheStructure(GenericObjectContainer.java:264) - at org.jkiss.dbeaver.erd.model.ERDUtils.lambda$0(ERDUtils.java:171) - at org.jkiss.dbeaver.model.exec.DBExecUtils.tryExecuteRecover(DBExecUtils.java:189) - at org.jkiss.dbeaver.erd.model.ERDUtils.collectDatabaseTables(ERDUtils.java:169) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded.loadFromDatabase(ERDEditorEmbedded.java:257) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:180) - at org.jkiss.dbeaver.erd.ui.editor.ERDEditorEmbedded$1.evaluate(ERDEditorEmbedded.java:1) - at org.jkiss.dbeaver.ui.LoadingJob.run(LoadingJob.java:88) - at org.jkiss.dbeaver.model.runtime.AbstractJob.run(AbstractJob.java:119) - at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) -2025-06-16 07:52:52.356997+04:00 database: flush -org.h2.message.DbException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" -General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] - at org.h2.message.DbException.get(DbException.java:212) - at org.h2.message.DbException.convert(DbException.java:407) - at org.h2.mvstore.db.Store.lambda$new$0(Store.java:122) - at org.h2.mvstore.MVStore.handleException(MVStore.java:1546) - at org.h2.mvstore.MVStore.panic(MVStore.java:371) - at org.h2.mvstore.MVStore.(MVStore.java:291) - at org.h2.mvstore.MVStore$Builder.open(MVStore.java:2035) - at org.h2.mvstore.db.Store.(Store.java:133) - at org.h2.engine.Database.(Database.java:326) - at org.h2.engine.Engine.openSession(Engine.java:92) - at org.h2.engine.Engine.openSession(Engine.java:222) - at org.h2.engine.Engine.createSession(Engine.java:201) - at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:343) - at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:125) - at org.h2.Driver.connect(Driver.java:59) - at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:137) - at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:360) - at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) - at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:461) - at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:550) - at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:98) - at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:111) - at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:160) - at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:118) - at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81) - at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:52) - at org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer.runScripts(DataSourceScriptDatabaseInitializer.java:87) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.runScripts(AbstractScriptDatabaseInitializer.java:146) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applyScripts(AbstractScriptDatabaseInitializer.java:108) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.applySchemaScripts(AbstractScriptDatabaseInitializer.java:98) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.initializeDatabase(AbstractScriptDatabaseInitializer.java:76) - at org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer.afterPropertiesSet(AbstractScriptDatabaseInitializer.java:66) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) - at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) - at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) - at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) - at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313) - at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) - at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) - at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) - at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) - at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) - at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) - at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) - at ru.practicum.shareit.ShareItApp.main(ShareItApp.java:10) -Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" -General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7]" [50000-224] - at org.h2.message.DbException.getJdbcSQLException(DbException.java:566) - at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) - ... 51 more -Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/Слава/IdeaProjects/java-shareit/db/shareit.mv.db [2.2.224/7] - at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:996) - at org.h2.mvstore.SingleFileStore.lockFileChannel(SingleFileStore.java:143) - at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:117) - at org.h2.mvstore.SingleFileStore.open(SingleFileStore.java:81) - at org.h2.mvstore.MVStore.(MVStore.java:286) - ... 45 more From 91905c7743aae82c9a78be2f085d6d9133211922 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 19:54:28 +0400 Subject: [PATCH 26/55] fix test --- .../practicum/shareit/item/ItemClient.java | 12 ++++++------ .../practicum/shareit/item/ItemController.java | 8 ++++---- .../practicum/shareit/request/ItemRequestClient.java | 6 +++--- .../shareit/request/ItemRequestController.java | 7 ++++--- .../practicum/shareit/user/UserClient.java | 8 ++++---- .../practicum/shareit/user/UserController.java | 2 +- 6 files changed, 22 insertions(+), 21 deletions(-) diff --git a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemClient.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemClient.java index 9653a04..c603f02 100644 --- a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemClient.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemClient.java @@ -27,26 +27,26 @@ public ItemClient(@Value("${shareit-server.url}") String serverUrl, RestTemplate } public ResponseEntity create(NewItemDto itemDto, Long userId) { - return post("",userId,itemDto); + return post("", userId, itemDto); } public ResponseEntity update(Long itemId, UpdateItemDto itemDto, Long userId) { - return patch("/"+itemId,userId,itemDto); + return patch("/" + itemId, userId, itemDto); } public ResponseEntity getById(Long itemId) { - return get("/"+itemId); + return get("/" + itemId); } public ResponseEntity getAllItemsByOwner(Long userId) { - return get("",userId); + return get("", userId); } public ResponseEntity search(String searchText) { - return get("/search?text"+searchText); + return get("/search?text" + searchText); } public ResponseEntity createComment(NewCommentDto newCommentDto, long itemId, long userId) { - return post("/"+itemId+"/comment",userId,newCommentDto); + return post("/" + itemId + "/comment", userId, newCommentDto); } } diff --git a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemController.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemController.java index 9ec3214..95e3acd 100644 --- a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemController.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemController.java @@ -30,8 +30,8 @@ public ResponseEntity create(@Valid @RequestBody NewItemDto itemDto, @Re @PatchMapping("/{itemId}") public ResponseEntity update(@PathVariable("itemId") Long itemId, - @RequestBody UpdateItemDto itemDto, - @RequestHeader(value = "X-Sharer-User-Id") Long userId) { + @RequestBody UpdateItemDto itemDto, + @RequestHeader(value = "X-Sharer-User-Id") Long userId) { return itemClient.update(itemId, itemDto, userId); } @@ -57,8 +57,8 @@ public ResponseEntity search(@RequestParam("text") String searchText) { @PostMapping("/{itemId}/comment") @ResponseStatus(HttpStatus.CREATED) public ResponseEntity createComment(@RequestHeader("X-Sharer-User-Id") long userId, - @PathVariable("itemId") long itemId, - @RequestBody @Valid NewCommentDto newCommentDto) { + @PathVariable("itemId") long itemId, + @RequestBody @Valid NewCommentDto newCommentDto) { return itemClient.createComment(newCommentDto, itemId, userId); } } diff --git a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestClient.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestClient.java index 163dc38..4a15c2b 100644 --- a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestClient.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestClient.java @@ -26,14 +26,14 @@ public ItemRequestClient(@Value("${shareit-server.url}") String serverUrl, RestT } public ResponseEntity create(NewItemRequestDto newItemRequestDto, Long userId) { - return post("",userId,newItemRequestDto); + return post("", userId, newItemRequestDto); } public ResponseEntity getByUser(Long userId) { - return get("",userId); + return get("", userId); } public ResponseEntity getById(Long requestId) { - return get("/"+requestId); + return get("/" + requestId); } } diff --git a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestController.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestController.java index 3e4e09a..d1ef0f3 100644 --- a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestController.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestController.java @@ -16,14 +16,15 @@ public class ItemRequestController { @PostMapping public ResponseEntity create(@RequestBody NewItemRequestDto newItemRequestDto, - @RequestHeader("X-Sharer-User-Id") Long userId){ - return requestClient.create(newItemRequestDto,userId); + @RequestHeader("X-Sharer-User-Id") Long userId) { + return requestClient.create(newItemRequestDto, userId); } @GetMapping - public ResponseEntity getRequestsByUser(@RequestHeader("X-Sharer-User-Id") Long userId){ + public ResponseEntity getRequestsByUser(@RequestHeader("X-Sharer-User-Id") Long userId) { return requestClient.getByUser(userId); } + @GetMapping("/{requestId}") public ResponseEntity getRequestById(@PathVariable Long requestId) { return requestClient.getById(requestId); diff --git a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserClient.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserClient.java index d8e4641..e00db03 100644 --- a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserClient.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserClient.java @@ -16,7 +16,7 @@ public class UserClient extends BaseClient { private static final String API_PREFIX = "/users"; @Autowired - public UserClient(@Value("${shareit-server.url}") String serverUrl, RestTemplateBuilder builder){ + public UserClient(@Value("${shareit-server.url}") String serverUrl, RestTemplateBuilder builder) { super( builder .uriTemplateHandler(new DefaultUriBuilderFactory(serverUrl + API_PREFIX)) @@ -26,7 +26,7 @@ public UserClient(@Value("${shareit-server.url}") String serverUrl, RestTemplate } public ResponseEntity create(NewUserDto userDto) { - return post("",userDto); + return post("", userDto); } public ResponseEntity getById(Long userId) { @@ -34,10 +34,10 @@ public ResponseEntity getById(Long userId) { } public ResponseEntity update(Long userId, UpdateUserDto userDto) { - return patch("/" + userId,userId,userDto); + return patch("/" + userId, userId, userDto); } public ResponseEntity deleteUser(Long userId) { - return delete( "/" + userId,userId); + return delete("/" + userId, userId); } } diff --git a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserController.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserController.java index d1f56fe..49bd021 100644 --- a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserController.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserController.java @@ -44,7 +44,7 @@ public ResponseEntity updateUser(@PathVariable("userId") @NotNull @Posit @DeleteMapping("/{userId}") @ResponseStatus(HttpStatus.OK) public ResponseEntity deleteUser(@PathVariable("userId") @NotNull @Positive Long userId) { - return userClient.deleteUser(userId); + return userClient.deleteUser(userId); } } From fd52f460073c61c012c771b6a3128ed93421449b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 19:58:04 +0400 Subject: [PATCH 27/55] fix test --- .../java/ru/practicum/shareit/item/ItemController.java | 4 ++-- .../main/java/ru/practicum/shareit/item/ItemMapper.java | 3 ++- .../java/ru/practicum/shareit/item/dto/NewItemDto.java | 1 - .../java/ru/practicum/shareit/request/ItemRequest.java | 1 - .../practicum/shareit/request/ItemRequestController.java | 7 ++++--- .../practicum/shareit/request/ItemRequestRepository.java | 2 +- .../practicum/shareit/request/ItemRequestServiseImpl.java | 2 +- .../java/ru/practicum/shareit/request/RequestMapper.java | 1 + 8 files changed, 11 insertions(+), 10 deletions(-) diff --git a/server/src/main/java/ru/practicum/shareit/item/ItemController.java b/server/src/main/java/ru/practicum/shareit/item/ItemController.java index 43405b9..658db31 100644 --- a/server/src/main/java/ru/practicum/shareit/item/ItemController.java +++ b/server/src/main/java/ru/practicum/shareit/item/ItemController.java @@ -26,7 +26,7 @@ public class ItemController { @PostMapping @ResponseStatus(HttpStatus.CREATED) - public ItemDto create( @RequestBody NewItemDto itemDto, @RequestHeader("X-Sharer-User-Id") Long userId) { + public ItemDto create(@RequestBody NewItemDto itemDto, @RequestHeader("X-Sharer-User-Id") Long userId) { return itemService.create(itemDto, userId); } @@ -61,7 +61,7 @@ public List search(@RequestParam("text") String searchText) { @ResponseStatus(HttpStatus.CREATED) public CommentDto createComment(@RequestHeader("X-Sharer-User-Id") long userId, @PathVariable("itemId") long itemId, - @RequestBody NewCommentDto newCommentDto) { + @RequestBody NewCommentDto newCommentDto) { return itemService.createComment(newCommentDto, itemId, userId); } } diff --git a/server/src/main/java/ru/practicum/shareit/item/ItemMapper.java b/server/src/main/java/ru/practicum/shareit/item/ItemMapper.java index 4e24206..5466457 100644 --- a/server/src/main/java/ru/practicum/shareit/item/ItemMapper.java +++ b/server/src/main/java/ru/practicum/shareit/item/ItemMapper.java @@ -28,7 +28,7 @@ public static ItemDto mapToItemDto(Item item) { } public static Item mapToNewItem(NewItemDto newItemDto, User owner) { - ItemRequest request = newItemDto.getRequestId() == null ? null :ItemRequest.builder().id(newItemDto.getRequestId()).build(); + ItemRequest request = newItemDto.getRequestId() == null ? null : ItemRequest.builder().id(newItemDto.getRequestId()).build(); return Item.builder() .name(newItemDto.getName()) @@ -70,6 +70,7 @@ public static ItemWithCommentsDto mapToItemWithCommentsDto(Item item, List getRequestsByUser(@RequestHeader("X-Sharer-User-Id") Long userId){ + public List getRequestsByUser(@RequestHeader("X-Sharer-User-Id") Long userId) { return requestService.getByUser(userId); } + @GetMapping("/{requestId}") public ItemRequestDto getRequestById(@PathVariable Long requestId) { return requestService.getById(requestId); diff --git a/server/src/main/java/ru/practicum/shareit/request/ItemRequestRepository.java b/server/src/main/java/ru/practicum/shareit/request/ItemRequestRepository.java index 9db13ad..6581a77 100644 --- a/server/src/main/java/ru/practicum/shareit/request/ItemRequestRepository.java +++ b/server/src/main/java/ru/practicum/shareit/request/ItemRequestRepository.java @@ -4,7 +4,7 @@ import java.util.List; -public interface ItemRequestRepository extends JpaRepository { +public interface ItemRequestRepository extends JpaRepository { List getAllByRequestorId(long userId); } diff --git a/server/src/main/java/ru/practicum/shareit/request/ItemRequestServiseImpl.java b/server/src/main/java/ru/practicum/shareit/request/ItemRequestServiseImpl.java index f61db77..31e2d37 100644 --- a/server/src/main/java/ru/practicum/shareit/request/ItemRequestServiseImpl.java +++ b/server/src/main/java/ru/practicum/shareit/request/ItemRequestServiseImpl.java @@ -35,7 +35,7 @@ public List getByUser(long id) { } @Override - public ItemRequestDto getById(long id){ + public ItemRequestDto getById(long id) { return RequestMapper.toDto(getRequestById(id)); } diff --git a/server/src/main/java/ru/practicum/shareit/request/RequestMapper.java b/server/src/main/java/ru/practicum/shareit/request/RequestMapper.java index fb34a2b..ce537f4 100644 --- a/server/src/main/java/ru/practicum/shareit/request/RequestMapper.java +++ b/server/src/main/java/ru/practicum/shareit/request/RequestMapper.java @@ -13,6 +13,7 @@ public static ItemRequest toModel(NewItemRequestDto requestCreateDto) { .created(LocalDateTime.now()) .build(); } + public static ItemRequestDto toDto(ItemRequest request) { return ItemRequestDto.builder() .id(request.getId()) From f0e59c199ac4943bb8a1d2244fbe588a73d98f3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 19:59:59 +0400 Subject: [PATCH 28/55] fix test --- .../src/main/java/ru/practicum/shareit/user/UserController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/ru/practicum/shareit/user/UserController.java b/server/src/main/java/ru/practicum/shareit/user/UserController.java index 9a29e1c..662d8df 100644 --- a/server/src/main/java/ru/practicum/shareit/user/UserController.java +++ b/server/src/main/java/ru/practicum/shareit/user/UserController.java @@ -22,7 +22,7 @@ public class UserController { @PostMapping @ResponseStatus(HttpStatus.CREATED) - public UserDto createUser( @RequestBody NewUserDto userDto) { + public UserDto createUser(@RequestBody NewUserDto userDto) { return userService.create(userDto); } From b817d83406af427f7842c5a3c44831c16fbee2b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 20:17:06 +0400 Subject: [PATCH 29/55] fix test --- .../shareit/user/dto/NewUserDto.java | 4 + .../practicum/shareit/user/dto/UserDto.java | 2 + .../resources/application-test.properties | 21 ++++ .../shareit/user/UserControllerTest.java | 103 ++++++++++++++++++ server/src/test/resources/data.sql | 41 +++++++ 5 files changed, 171 insertions(+) create mode 100644 server/src/main/resources/application-test.properties create mode 100644 server/src/test/java/ru/practicum/shareit/user/UserControllerTest.java create mode 100644 server/src/test/resources/data.sql diff --git a/server/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java b/server/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java index ef39e8c..67ee94f 100644 --- a/server/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java +++ b/server/src/main/java/ru/practicum/shareit/user/dto/NewUserDto.java @@ -1,11 +1,15 @@ package ru.practicum.shareit.user.dto; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; @Data @Builder +@AllArgsConstructor +@NoArgsConstructor public class NewUserDto { private String name; diff --git a/server/src/main/java/ru/practicum/shareit/user/dto/UserDto.java b/server/src/main/java/ru/practicum/shareit/user/dto/UserDto.java index e70dd27..50da151 100644 --- a/server/src/main/java/ru/practicum/shareit/user/dto/UserDto.java +++ b/server/src/main/java/ru/practicum/shareit/user/dto/UserDto.java @@ -8,6 +8,8 @@ @Setter @ToString @Builder +@AllArgsConstructor +@NoArgsConstructor public class UserDto { private Long id; private String name; diff --git a/server/src/main/resources/application-test.properties b/server/src/main/resources/application-test.properties new file mode 100644 index 0000000..586a1a7 --- /dev/null +++ b/server/src/main/resources/application-test.properties @@ -0,0 +1,21 @@ +spring.jpa.hibernate.ddl-auto=none +spring.jpa.properties.hibernate.format_sql=true +spring.sql.init.mode=always + +logging.level.org.springframework.orm.jpa=INFO +logging.level.org.springframework.transaction=INFO +logging.level.org.springframework.transaction.interceptor=TRACE +logging.level.org.springframework.orm.jpa.JpaTransactionManager=DEBUG + +# TODO Append connection to DB +spring.datasource.driverClassName=org.h2.Driver +spring.datasource.url=jdbc:h2:mem:shareit +spring.datasource.username=sa +spring.datasource.password=12345 +spring.h2.console.enabled=true +spring.h2.console.path=/h2-console + + +spring.main.banner-mode=OFF +spring.jpa.show-sql=true +spring.jpa.properties.hibernate.jdbc.time_zone=UTC \ No newline at end of file diff --git a/server/src/test/java/ru/practicum/shareit/user/UserControllerTest.java b/server/src/test/java/ru/practicum/shareit/user/UserControllerTest.java new file mode 100644 index 0000000..5e4cd1e --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/user/UserControllerTest.java @@ -0,0 +1,103 @@ +package ru.practicum.shareit.user; + + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import ru.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.user.dto.UserDto; +import ru.practicum.shareit.user.dto.UpdateUserDto; + +import static org.mockito.ArgumentMatchers.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +@WebMvcTest(UserController.class) +class UserControllerTest { + + @Autowired + private MockMvc mockMvc; + + @MockBean + private UserService userService; + + @Autowired + private ObjectMapper objectMapper; + + private final Long userId = 1L; + + + + @Test + void getUserById() throws Exception { + UserDto user = new UserDto(); + user.setId(userId); + user.setName("Jane"); + user.setEmail("jane@example.com"); + + Mockito.when(userService.getById(userId)).thenReturn(user); + + mockMvc.perform(get("/users/{userId}", userId)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.id").value(userId)) + .andExpect(jsonPath("$.name").value("Jane")) + .andExpect(jsonPath("$.email").value("jane@example.com")); + } + + @Test + void createUser() throws Exception { + NewUserDto createDto = new NewUserDto(); + createDto.setName("Alice"); + createDto.setEmail("alice@example.com"); + + UserDto responseDto = new UserDto(); + responseDto.setId(userId); + responseDto.setName("Alice"); + responseDto.setEmail("alice@example.com"); + + Mockito.when(userService.create(any())).thenReturn(responseDto); + + mockMvc.perform(post("/users") + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(createDto))) + .andExpect(status().isCreated()) + .andExpect(jsonPath("$.id").value(userId)) + .andExpect(jsonPath("$.name").value("Alice")) + .andExpect(jsonPath("$.email").value("alice@example.com")); + } + + @Test + void updateUser() throws Exception { + UpdateUserDto updateDto = new UpdateUserDto(); + updateDto.setName("Updated Name"); + updateDto.setEmail("updated@example.com"); + + UserDto updatedUser = new UserDto(); + updatedUser.setId(userId); + updatedUser.setName("Updated Name"); + updatedUser.setEmail("updated@example.com"); + + Mockito.when(userService.update(eq(userId), any())).thenReturn(updatedUser); + + mockMvc.perform(patch("/users/{userId}", userId) + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(updateDto))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.id").value(userId)) + .andExpect(jsonPath("$.name").value("Updated Name")) + .andExpect(jsonPath("$.email").value("updated@example.com")); + } + + @Test + void deleteUserById() throws Exception { + Mockito.doNothing().when(userService).deleteUser(userId); + + mockMvc.perform(delete("/users/{userId}", userId)) + .andExpect(status().isOk()); + } +} diff --git a/server/src/test/resources/data.sql b/server/src/test/resources/data.sql new file mode 100644 index 0000000..99d04fb --- /dev/null +++ b/server/src/test/resources/data.sql @@ -0,0 +1,41 @@ +INSERT INTO users (name, email) +VALUES ('new_user', 'new_user@example.com'); + +INSERT INTO users (name, email) +VALUES ('booker', 'booker@example.com'); + +INSERT INTO users (name, email) +VALUES ('user_3', 'user_3@example.com'); + +INSERT INTO items (name, description, is_available, owner_id) +VALUES ('new_item', 'description_new_item', true, 1); + +INSERT INTO items (name, description, is_available, owner_id) +VALUES ('item_2', 'description_item_2', true, 3); + +INSERT INTO items (name, description, is_available, owner_id) +VALUES ('item_3', 'description_item_3', true, 3); + +INSERT INTO items (name, description, is_available, owner_id) +VALUES ('item_4', 'description_item_4', false, 3); + +INSERT INTO booking (start, ending, item_id, booker_id, status) +VALUES ('2024-06-03 00:00:00', '2024-06-07 00:00:00', 1, 2, 'APPROVED'); + +INSERT INTO booking (start, ending, item_id, booker_id, status) +VALUES ('2025-02-03 00:00:00', '2025-02-07 00:00:00', 2, 2, 'REJECTED'); + +INSERT INTO booking (start, ending, item_id, booker_id, status) +VALUES ('2022-05-01 00:00:00', '2022-06-07 00:00:00', 3, 2, 'APPROVED'); + +INSERT INTO booking (start, ending, item_id, booker_id, status) +VALUES ('2025-07-01 00:00:00', '2025-07-07 00:00:00', 3, 1, 'WAITING'); + +INSERT INTO booking (start, ending, item_id, booker_id, status) +VALUES ('2025-05-01 00:00:00', '2025-06-07 00:00:00', 3, 2, 'APPROVED'); + +INSERT INTO comments(item_id, author_id, text) +VALUES (1, 2, 'comment text'); + +INSERT INTO requests(description, requestor_id, created) +VALUES ('request_description', 1, '2025-02-07 00:00:00'); \ No newline at end of file From ae1f5ce76ad8456d52e1d58d0072d55cd52c5207 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 20:21:35 +0400 Subject: [PATCH 30/55] fix test --- .../java/ru/practicum/shareit/ShareItTests.java | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 server/src/test/java/ru/practicum/shareit/ShareItTests.java diff --git a/server/src/test/java/ru/practicum/shareit/ShareItTests.java b/server/src/test/java/ru/practicum/shareit/ShareItTests.java deleted file mode 100644 index 4d79052..0000000 --- a/server/src/test/java/ru/practicum/shareit/ShareItTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package ru.practicum.shareit; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class ShareItTests { - - @Test - void contextLoads() { - } - -} From 0b7d5944d4b1be02039b3b1293ad385ffd7d7901 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 21:36:52 +0400 Subject: [PATCH 31/55] fix test --- .../shareit/user/UserRepository.java | 3 + .../shareit/user/dto/UpdateUserDto.java | 6 + .../practicum/shareit/user/UserDtoTest.java | 45 +++++++ .../shareit/user/UserRepositoryTest.java | 25 ++++ .../shareit/user/UserServiceTest.java | 117 ++++++++++++++++++ server/src/test/resources/data.sql | 22 ++-- 6 files changed, 207 insertions(+), 11 deletions(-) create mode 100644 server/src/test/java/ru/practicum/shareit/user/UserDtoTest.java create mode 100644 server/src/test/java/ru/practicum/shareit/user/UserRepositoryTest.java create mode 100644 server/src/test/java/ru/practicum/shareit/user/UserServiceTest.java diff --git a/server/src/main/java/ru/practicum/shareit/user/UserRepository.java b/server/src/main/java/ru/practicum/shareit/user/UserRepository.java index e303ab5..7bce122 100644 --- a/server/src/main/java/ru/practicum/shareit/user/UserRepository.java +++ b/server/src/main/java/ru/practicum/shareit/user/UserRepository.java @@ -2,5 +2,8 @@ import org.springframework.data.jpa.repository.JpaRepository; +import java.util.Optional; + public interface UserRepository extends JpaRepository { + Optional findByEmail(String email); } diff --git a/server/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java b/server/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java index 5ae0572..1a87b85 100644 --- a/server/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java +++ b/server/src/main/java/ru/practicum/shareit/user/dto/UpdateUserDto.java @@ -1,9 +1,15 @@ package ru.practicum.shareit.user.dto; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; @Data +@AllArgsConstructor +@NoArgsConstructor +@Builder public class UpdateUserDto { private String name; diff --git a/server/src/test/java/ru/practicum/shareit/user/UserDtoTest.java b/server/src/test/java/ru/practicum/shareit/user/UserDtoTest.java new file mode 100644 index 0000000..8bec5b0 --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/user/UserDtoTest.java @@ -0,0 +1,45 @@ +package ru.practicum.shareit.user; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.json.JsonTest; +import org.springframework.boot.test.json.JacksonTester; +import ru.practicum.shareit.user.dto.UserDto; + +import static org.assertj.core.api.Assertions.assertThat; + +@JsonTest +class UserDtoTest { + + @Autowired + private JacksonTester json; + + @Test + void testSerializeUser() throws Exception { + UserDto userDto = UserDto.builder() + .id(1L) + .name("Ilona") + .email("ilona@example.com") + .build(); + + assertThat(json.write(userDto)).hasJsonPathNumberValue("$.id"); + assertThat(json.write(userDto)).extractingJsonPathNumberValue("$.id").isEqualTo(1); + assertThat(json.write(userDto)).extractingJsonPathStringValue("$.name").isEqualTo("Ilona"); + assertThat(json.write(userDto)).extractingJsonPathStringValue("$.email").isEqualTo("ilona@example.com"); + } + + @Test + void testDeserializeUser() throws Exception { + String jsonContent = "{" + + "\"id\": 1," + + "\"name\": \"Ilona\"," + + "\"email\": \"ilona@example.com\"" + + "}"; + + UserDto userDto = json.parseObject(jsonContent); + + assertThat(userDto.getId()).isEqualTo(1L); + assertThat(userDto.getName()).isEqualTo("Ilona"); + assertThat(userDto.getEmail()).isEqualTo("ilona@example.com"); + } +} \ No newline at end of file diff --git a/server/src/test/java/ru/practicum/shareit/user/UserRepositoryTest.java b/server/src/test/java/ru/practicum/shareit/user/UserRepositoryTest.java new file mode 100644 index 0000000..2ddb2dc --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/user/UserRepositoryTest.java @@ -0,0 +1,25 @@ +package ru.practicum.shareit.user; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; + +import java.util.Optional; + +@DataJpaTest +public class UserRepositoryTest { + @Autowired + private UserRepository userRepository; + + @Test + void findByEmailTest() { + User user = new User(); + user.setName("new_user"); + user.setEmail("new_user@example.com"); + Optional userData = userRepository.findByEmail(user.getEmail()); + + Assertions.assertNotNull(Optional.ofNullable(userData)); + Assertions.assertEquals(userData.get().getName(), "new_user"); + } +} \ No newline at end of file diff --git a/server/src/test/java/ru/practicum/shareit/user/UserServiceTest.java b/server/src/test/java/ru/practicum/shareit/user/UserServiceTest.java new file mode 100644 index 0000000..6227e7e --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/user/UserServiceTest.java @@ -0,0 +1,117 @@ +package ru.practicum.shareit.user; + +import lombok.RequiredArgsConstructor; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.transaction.annotation.Transactional; +import ru.practicum.shareit.exception.NoDataFoundException; +import ru.practicum.shareit.exception.NotFoundException; +import ru.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.user.dto.UserDto; +import ru.practicum.shareit.user.dto.UpdateUserDto; + +import java.util.List; +import java.util.NoSuchElementException; + +import static org.junit.jupiter.api.Assertions.assertThrows; + + +@SpringBootTest +@Transactional +@RequiredArgsConstructor(onConstructor_ = @Autowired) +public class UserServiceTest { + private final UserService userService; + + private NewUserDto newUserDto; + private UpdateUserDto updateUserDto; + + @Test + void addUserTest() { + newUserDto = new NewUserDto("Don", "don@example.com"); + UserDto userDto = userService.create(newUserDto); + + Assertions.assertNotNull(userDto); + Assertions.assertEquals(4, userDto.getId()); + Assertions.assertEquals("Don", userDto.getName()); + Assertions.assertEquals("don@example.com", userDto.getEmail()); + } + + + @Test + void updateUserTest() { + updateUserDto = new UpdateUserDto("Tom", "tom@example.com"); + UserDto userDto = userService.update(3L, updateUserDto); + + Assertions.assertNotNull(userDto); + Assertions.assertEquals(3, userDto.getId()); + Assertions.assertEquals("Tom", userDto.getName()); + Assertions.assertEquals("tom@example.com", userDto.getEmail()); + } + + @Test + void updateUserNameTest() { + UserDto userDto = userService.update(1L, UpdateUserDto.builder().name("new_user_name").build()); + + Assertions.assertNotNull(userDto); + Assertions.assertEquals(1, userDto.getId()); + Assertions.assertEquals("new_user_name", userDto.getName()); + Assertions.assertEquals("new_user@example.com", userDto.getEmail()); + } + + @Test + void updateUserEmailTest() { + UserDto userDto = userService.update(1L, UpdateUserDto.builder().email("new_user_email@example.com").build()); + + Assertions.assertNotNull(userDto); + Assertions.assertEquals(1, userDto.getId()); + Assertions.assertEquals("new_user", userDto.getName()); + Assertions.assertEquals("new_user_email@example.com", userDto.getEmail()); + } + + @Test + void updateUserWithWrongUserIdTest() { + updateUserDto = new UpdateUserDto("Tom", "tom@example.com"); + NotFoundException e = assertThrows(NotFoundException.class, + () -> userService.update(1000L, updateUserDto) + ); + + Assertions.assertEquals(e.getMessage(), "Пользователь с id = 1000 не найден"); + + } + + + + @Test + void getUserByIdTest() { + UserDto userDto = userService.getById(1); + + Assertions.assertNotNull(userDto); + Assertions.assertEquals("new_user", userDto.getName()); + Assertions.assertEquals("new_user@example.com", userDto.getEmail()); + + } + + @Test + void getUserByWrongId() { + NotFoundException e = assertThrows(NotFoundException.class, + () -> userService.getById(1000L) + ); + + Assertions.assertEquals(e.getMessage(), "Пользователь с id = 1000 не найден"); + } + + + @Test + void deleteUserById() { + userService.deleteUser(1); + + NotFoundException e = assertThrows(NotFoundException.class, + () -> userService.getById(1) + ); + + Assertions.assertEquals(e.getMessage(), "Пользователь с id = 1 не найден"); + + } +} \ No newline at end of file diff --git a/server/src/test/resources/data.sql b/server/src/test/resources/data.sql index 99d04fb..6eae99e 100644 --- a/server/src/test/resources/data.sql +++ b/server/src/test/resources/data.sql @@ -7,35 +7,35 @@ VALUES ('booker', 'booker@example.com'); INSERT INTO users (name, email) VALUES ('user_3', 'user_3@example.com'); -INSERT INTO items (name, description, is_available, owner_id) +INSERT INTO items (name, description, available, owner_id) VALUES ('new_item', 'description_new_item', true, 1); -INSERT INTO items (name, description, is_available, owner_id) +INSERT INTO items (name, description, available, owner_id) VALUES ('item_2', 'description_item_2', true, 3); -INSERT INTO items (name, description, is_available, owner_id) +INSERT INTO items (name, description, available, owner_id) VALUES ('item_3', 'description_item_3', true, 3); -INSERT INTO items (name, description, is_available, owner_id) +INSERT INTO items (name, description, available, owner_id) VALUES ('item_4', 'description_item_4', false, 3); -INSERT INTO booking (start, ending, item_id, booker_id, status) +INSERT INTO bookings (start_time, end_time, item_id, booker_id, status) VALUES ('2024-06-03 00:00:00', '2024-06-07 00:00:00', 1, 2, 'APPROVED'); -INSERT INTO booking (start, ending, item_id, booker_id, status) +INSERT INTO bookings (start_time, end_time, item_id, booker_id, status) VALUES ('2025-02-03 00:00:00', '2025-02-07 00:00:00', 2, 2, 'REJECTED'); -INSERT INTO booking (start, ending, item_id, booker_id, status) +INSERT INTO bookings (start_time, end_time, item_id, booker_id, status) VALUES ('2022-05-01 00:00:00', '2022-06-07 00:00:00', 3, 2, 'APPROVED'); -INSERT INTO booking (start, ending, item_id, booker_id, status) +INSERT INTO bookings (start_time, end_time, item_id, booker_id, status) VALUES ('2025-07-01 00:00:00', '2025-07-07 00:00:00', 3, 1, 'WAITING'); -INSERT INTO booking (start, ending, item_id, booker_id, status) +INSERT INTO bookings (start_time, end_time, item_id, booker_id, status) VALUES ('2025-05-01 00:00:00', '2025-06-07 00:00:00', 3, 2, 'APPROVED'); -INSERT INTO comments(item_id, author_id, text) -VALUES (1, 2, 'comment text'); +INSERT INTO comments(item_id, author_id, text,created) +VALUES (1, 2, 'comment text','2025-02-07 00:00:00'); INSERT INTO requests(description, requestor_id, created) VALUES ('request_description', 1, '2025-02-07 00:00:00'); \ No newline at end of file From 1b8e0bf57a4c1c774812aa091e782bcb55875f9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 21:38:53 +0400 Subject: [PATCH 32/55] fix test --- .../test/java/ru/practicum/shareit/user/UserServiceTest.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/server/src/test/java/ru/practicum/shareit/user/UserServiceTest.java b/server/src/test/java/ru/practicum/shareit/user/UserServiceTest.java index 6227e7e..c348930 100644 --- a/server/src/test/java/ru/practicum/shareit/user/UserServiceTest.java +++ b/server/src/test/java/ru/practicum/shareit/user/UserServiceTest.java @@ -6,14 +6,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; -import ru.practicum.shareit.exception.NoDataFoundException; import ru.practicum.shareit.exception.NotFoundException; import ru.practicum.shareit.user.dto.NewUserDto; import ru.practicum.shareit.user.dto.UserDto; import ru.practicum.shareit.user.dto.UpdateUserDto; -import java.util.List; -import java.util.NoSuchElementException; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -82,7 +79,6 @@ void updateUserWithWrongUserIdTest() { } - @Test void getUserByIdTest() { UserDto userDto = userService.getById(1); From 6e322801bdc4828d544a4fe4d54065f590c9183c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 22:33:25 +0400 Subject: [PATCH 33/55] fix test --- .../shareit/comment/dto/CommentDto.java | 4 + .../practicum/shareit/item/dto/ItemDto.java | 2 + .../shareit/item/dto/ItemWithCommentsDto.java | 4 + .../shareit/item/dto/NewItemDto.java | 4 + .../shareit/item/CommentDtoTest.java | 75 +++++++++ .../shareit/item/CommentRepositoryTest.java | 67 ++++++++ .../shareit/item/ItemControllerTest.java | 146 ++++++++++++++++++ .../practicum/shareit/item/ItemDtoTest.java | 75 +++++++++ 8 files changed, 377 insertions(+) create mode 100644 server/src/test/java/ru/practicum/shareit/item/CommentDtoTest.java create mode 100644 server/src/test/java/ru/practicum/shareit/item/CommentRepositoryTest.java create mode 100644 server/src/test/java/ru/practicum/shareit/item/ItemControllerTest.java create mode 100644 server/src/test/java/ru/practicum/shareit/item/ItemDtoTest.java diff --git a/server/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java b/server/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java index da53c85..33db81d 100644 --- a/server/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java +++ b/server/src/main/java/ru/practicum/shareit/comment/dto/CommentDto.java @@ -1,13 +1,17 @@ package ru.practicum.shareit.comment.dto; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import ru.practicum.shareit.item.model.Item; import java.time.Instant; @Data @Builder +@AllArgsConstructor +@NoArgsConstructor public class CommentDto { private Long id; private String text; diff --git a/server/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java b/server/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java index e1b6fe7..2a1240a 100644 --- a/server/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java +++ b/server/src/main/java/ru/practicum/shareit/item/dto/ItemDto.java @@ -9,6 +9,8 @@ */ @Data @Builder +@AllArgsConstructor +@NoArgsConstructor public class ItemDto { private Long id; private String name; diff --git a/server/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java b/server/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java index 107996b..788d0f3 100644 --- a/server/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java +++ b/server/src/main/java/ru/practicum/shareit/item/dto/ItemWithCommentsDto.java @@ -1,7 +1,9 @@ package ru.practicum.shareit.item.dto; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import ru.practicum.shareit.booking.dto.BookingDto; import ru.practicum.shareit.comment.dto.CommentDto; import ru.practicum.shareit.user.dto.UserDto; @@ -10,6 +12,8 @@ @Data @Builder +@AllArgsConstructor +@NoArgsConstructor public class ItemWithCommentsDto { private long id; diff --git a/server/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java b/server/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java index d3a3975..508058f 100644 --- a/server/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java +++ b/server/src/main/java/ru/practicum/shareit/item/dto/NewItemDto.java @@ -1,12 +1,16 @@ package ru.practicum.shareit.item.dto; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import ru.practicum.shareit.user.User; @Data @Builder +@AllArgsConstructor +@NoArgsConstructor public class NewItemDto { private String name; private String description; diff --git a/server/src/test/java/ru/practicum/shareit/item/CommentDtoTest.java b/server/src/test/java/ru/practicum/shareit/item/CommentDtoTest.java new file mode 100644 index 0000000..7fcb62b --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/item/CommentDtoTest.java @@ -0,0 +1,75 @@ +package ru.practicum.shareit.item; + + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.json.JsonTest; +import org.springframework.boot.test.json.JacksonTester; + +import ru.practicum.shareit.comment.dto.CommentDto; +import ru.practicum.shareit.item.model.Item; + +import java.time.Instant; + +import static org.assertj.core.api.Assertions.assertThat; + +@JsonTest +class CommentDtoTest { + + @Autowired + private JacksonTester json; + + @Test + void testSerialize() throws Exception { + Item item = Item.builder() + .id(1L) + .name("item") + .description("description") + .available(true) + .build(); + String instant = "2024-07-01T12:30:00Z"; + Instant created = Instant.parse(instant); + + CommentDto dto = CommentDto.builder() + .id(10L) + .text("text_test") + .item(item) + .authorName("Alice") + .created(created) + .build(); + + assertThat(json.write(dto)) + .extractingJsonPathNumberValue("$.id").isEqualTo(10); + assertThat(json.write(dto)) + .extractingJsonPathStringValue("$.text").isEqualTo("text_test"); + assertThat(json.write(dto)) + .extractingJsonPathStringValue("$.authorName").isEqualTo("Alice"); + assertThat(json.write(dto)) + .extractingJsonPathStringValue("$.created").isEqualTo("2024-07-01T12:30:00Z"); + } + + @Test + void testDeserialize() throws Exception { + + String content = "{" + + "\"id\": 10," + + "\"text\": \"text_test\"," + + "\"item\": {" + + " \"id\": 1," + + " \"name\": \"item\"," + + " \"description\": \"description\"," + + " \"available\": true" + + "}," + + "\"authorName\": \"Bob\"," + + "\"created\": \"2024-07-01T12:30:00Z\"" + + "}"; + + CommentDto dto = json.parseObject(content); + + assertThat(dto.getId()).isEqualTo(10); + assertThat(dto.getText()).isEqualTo("text_test"); + assertThat(dto.getItem().getId()).isEqualTo(1); + assertThat(dto.getAuthorName()).isEqualTo("Bob"); + assertThat(dto.getCreated()).isEqualTo("2024-07-01T12:30:00Z"); + } +} \ No newline at end of file diff --git a/server/src/test/java/ru/practicum/shareit/item/CommentRepositoryTest.java b/server/src/test/java/ru/practicum/shareit/item/CommentRepositoryTest.java new file mode 100644 index 0000000..dbc2659 --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/item/CommentRepositoryTest.java @@ -0,0 +1,67 @@ +package ru.practicum.shareit.item; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import ru.practicum.shareit.comment.CommentRepository; +import ru.practicum.shareit.comment.model.Comment; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; + +import java.util.ArrayList; +import java.util.List; + + +@DataJpaTest +public class CommentRepositoryTest { + @Autowired + private CommentRepository commentRepository; + + private List itemList; + private List commentList; + + @BeforeEach + void beforeEachTest() { + User user = new User(); + User booker = new User(); + Item item = new Item(); + Comment comment = new Comment(); + + user.setId(1L); + user.setName("new_user"); + user.setEmail("new_user@example.com"); + + booker.setId(2L); + booker.setName("booker"); + booker.setEmail("booker@example.com"); + + item.setId(1L); + item.setOwner(user); + item.setName("new_item"); + item.setDescription("description_new_item"); + + comment.setId(1L); + comment.setText("comment text"); + comment.setAuthor(booker); + comment.setItem(item); + + itemList = new ArrayList<>(); + itemList.add(item); + + commentList = new ArrayList<>(); + commentList.add(comment); + } + + @Test + void findAllByItemIdTest() { + List commentDataList = commentRepository.findByItem_id(1); + + Assertions.assertNotNull(commentDataList); + Assertions.assertEquals(1, commentDataList.size()); + Assertions.assertEquals(commentList.get(0).getId(), commentDataList.get(0).getId()); + } + + +} \ No newline at end of file diff --git a/server/src/test/java/ru/practicum/shareit/item/ItemControllerTest.java b/server/src/test/java/ru/practicum/shareit/item/ItemControllerTest.java new file mode 100644 index 0000000..1ba6ddf --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/item/ItemControllerTest.java @@ -0,0 +1,146 @@ +package ru.practicum.shareit.item; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import ru.practicum.shareit.comment.dto.CommentDto; +import ru.practicum.shareit.comment.dto.NewCommentDto; +import ru.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.item.dto.ItemWithCommentsDto; +import ru.practicum.shareit.item.dto.NewItemDto; +import ru.practicum.shareit.item.dto.UpdateItemDto; + + +import java.util.List; + +import static org.mockito.ArgumentMatchers.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +@WebMvcTest(ItemController.class) +class ItemControllerTest { + + @Autowired + private MockMvc mockMvc; + + @MockBean + private ItemService itemService; + + @Autowired + private ObjectMapper objectMapper; + + private final Long userId = 1L; + private final Long itemId = 1L; + + @Test + void getAllItemsFromUserList() throws Exception { + ItemDto item = new ItemDto(); + item.setId(itemId); + item.setName("Drill"); + + Mockito.when(itemService.getAllItemsByOwner(userId)).thenReturn(List.of(item)); + + mockMvc.perform(get("/items") + .header("X-Sharer-User-Id", userId)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$[0].id").value(itemId)) + .andExpect(jsonPath("$[0].name").value("Drill")); + } + + @Test + void getItemInfo() throws Exception { + ItemWithCommentsDto item = new ItemWithCommentsDto(); + item.setId(itemId); + item.setName("Drill"); + + Mockito.when(itemService.get(itemId)).thenReturn(item); + + mockMvc.perform(get("/items/{itemId}", itemId) + .header("X-Sharer-User-Id", userId)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.id").value(itemId)) + .andExpect(jsonPath("$.name").value("Drill")); + } + + @Test + void addNewItem() throws Exception { + NewItemDto createDto = new NewItemDto(); + createDto.setName("Drill"); + + ItemDto responseDto = new ItemDto(); + responseDto.setId(itemId); + responseDto.setName("Drill"); + + Mockito.when(itemService.create(any(), eq(userId))).thenReturn(responseDto); + + mockMvc.perform(post("/items") + .header("X-Sharer-User-Id", userId) + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(createDto))) + .andExpect(status().isCreated()) + .andExpect(jsonPath("$.id").value(itemId)) + .andExpect(jsonPath("$.name").value("Drill")); + } + + @Test + void updateItem() throws Exception { + UpdateItemDto updateDto = new UpdateItemDto(); + updateDto.setName("Updated Drill"); + + ItemDto responseDto = new ItemDto(); + responseDto.setId(itemId); + responseDto.setName("Updated Drill"); + + Mockito.when(itemService.update(eq(itemId), any(), eq(userId))).thenReturn(responseDto); + + mockMvc.perform(patch("/items/{itemId}", itemId) + .header("X-Sharer-User-Id", userId) + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(updateDto))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.id").value(itemId)) + .andExpect(jsonPath("$.name").value("Updated Drill")); + } + + @Test + void searchItems() throws Exception { + ItemDto item = new ItemDto(); + item.setId(itemId); + item.setName("Drill"); + + Mockito.when(itemService.search("drill")).thenReturn(List.of(item)); + + mockMvc.perform(get("/items/search") + .param("text", "drill") + .header("X-Sharer-User-Id", userId)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$[0].id").value(itemId)) + .andExpect(jsonPath("$[0].name").value("Drill")); + } + + @Test + void addComment() throws Exception { + NewCommentDto createDto = new NewCommentDto(); + createDto.setText("Nice item!"); + + CommentDto commentDto = new CommentDto(); + commentDto.setId(1L); + commentDto.setText("Nice item!"); + + Mockito.when(itemService.createComment(any(), eq(itemId), eq(userId))) + .thenReturn(commentDto); + + mockMvc.perform(post("/items/{itemId}/comment", itemId) + .header("X-Sharer-User-Id", userId) + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(createDto))) + .andExpect(status().isCreated()) + .andExpect(jsonPath("$.id").value(1L)) + .andExpect(jsonPath("$.text").value("Nice item!")); + } +} \ No newline at end of file diff --git a/server/src/test/java/ru/practicum/shareit/item/ItemDtoTest.java b/server/src/test/java/ru/practicum/shareit/item/ItemDtoTest.java new file mode 100644 index 0000000..6ae65a5 --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/item/ItemDtoTest.java @@ -0,0 +1,75 @@ +package ru.practicum.shareit.item; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.json.JsonTest; +import org.springframework.boot.test.json.JacksonTester; + +import ru.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.user.dto.UserDto; + + +import static org.assertj.core.api.Assertions.assertThat; + +@JsonTest +class ItemDtoTest { + + @Autowired + private JacksonTester json; + + @Test + void testSerialize() throws Exception { + UserDto ownerDto = UserDto.builder() + .id(1L) + .name("John") + .email("john@example.com") + .build(); + + ItemDto itemDto = ItemDto.builder() + .id(1L) + .name("new_item") + .description("new_description") + .available(true) + .owner(ownerDto) + .requestId(null) + .build(); + + assertThat(json.write(itemDto)).hasJsonPathNumberValue("$.id"); + assertThat(json.write(itemDto)).hasJsonPathStringValue("$.name"); + assertThat(json.write(itemDto)).hasJsonPathStringValue("$.description"); + assertThat(json.write(itemDto)).hasJsonPathBooleanValue("$.available"); + assertThat(json.write(itemDto)).hasJsonPathMapValue("$.owner"); + + + } + + @Test + void testDeserialize() throws Exception { + String content = "{" + + "\"id\": 1," + + "\"name\": \"new_item\"," + + "\"description\": \"new_description\"," + + "\"available\": true," + + "\"owner\": {" + + " \"id\": 1," + + " \"name\": \"John\"," + + " \"email\": \"john@example.com\"" + + "}," + + "\"requestId\": \"null\"" + + "}"; + + + ItemDto itemDto = json.parseObject(content); + + assertThat(itemDto.getId()).isEqualTo(1L); + assertThat(itemDto.getName()).isEqualTo("new_item"); + assertThat(itemDto.getDescription()).isEqualTo("new_description"); + assertThat(itemDto.getAvailable()).isTrue(); + assertThat(itemDto.getOwner().getId()).isEqualTo(1L); + assertThat(itemDto.getOwner().getName()).isEqualTo("John"); + assertThat(itemDto.getOwner().getEmail()).isEqualTo("john@example.com"); + + + } + +} \ No newline at end of file From af5ce70028c389f93a57ab91410ffa02f52f164e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 22:59:15 +0400 Subject: [PATCH 34/55] fix test --- .../shareit/item/ItemRepositoryTest.java | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 server/src/test/java/ru/practicum/shareit/item/ItemRepositoryTest.java diff --git a/server/src/test/java/ru/practicum/shareit/item/ItemRepositoryTest.java b/server/src/test/java/ru/practicum/shareit/item/ItemRepositoryTest.java new file mode 100644 index 0000000..237416c --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/item/ItemRepositoryTest.java @@ -0,0 +1,56 @@ +package ru.practicum.shareit.item; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; +import ru.practicum.shareit.user.UserRepository; + +import java.util.ArrayList; +import java.util.List; + + +@DataJpaTest +public class ItemRepositoryTest { + + @Autowired + private ItemRepository itemRepository; + + @Autowired + private UserRepository userRepository; + + + @BeforeEach + void beforeEachTest() { + Item item = new Item(); + User user = new User(); + List itemList = new ArrayList<>(); + user.setId(1L); + user.setName("new_user"); + user.setEmail("new_user@example.com"); + item.setOwner(user); + item.setName("new_item"); + item.setDescription("description_new_item"); + itemList.add(item); + } + + @Test + void findAllByOwnerIdTest() { + List itemDataList = itemRepository.findByOwner(userRepository.getById(1L)); + + Assertions.assertNotNull(itemDataList); + Assertions.assertEquals(1, itemDataList.size()); + } + + @Test + void findAllByOwnerIdAndTextTest() { + List itemDataList = itemRepository.searchItem("description_new_item"); + + Assertions.assertNotNull(itemDataList); + Assertions.assertEquals(1, itemDataList.size()); + + } +} \ No newline at end of file From dca923a84f157595d096291b6a7704b007357286 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 23:03:07 +0400 Subject: [PATCH 35/55] fix test --- .../java/ru/practicum/shareit/ShareItTests.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 server/src/test/java/ru/practicum/shareit/ShareItTests.java diff --git a/server/src/test/java/ru/practicum/shareit/ShareItTests.java b/server/src/test/java/ru/practicum/shareit/ShareItTests.java new file mode 100644 index 0000000..1d13d7f --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/ShareItTests.java @@ -0,0 +1,13 @@ +package ru.practicum.shareit; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class ShareItTests { + + @Test + void contextLoads() { + } + +} \ No newline at end of file From 23d80e5502945de0ebecc5cf078611c809e39e3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Tue, 1 Jul 2025 23:51:55 +0400 Subject: [PATCH 36/55] fix test --- .../shareit/comment/dto/NewCommentDto.java | 6 + .../shareit/item/dto/UpdateItemDto.java | 6 + .../shareit/item/ItemServiceImplTest.java | 145 ++++++++++++++++++ ...viceTest.java => UserServiceImplTest.java} | 4 +- server/src/test/resources/data.sql | 2 - 5 files changed, 159 insertions(+), 4 deletions(-) create mode 100644 server/src/test/java/ru/practicum/shareit/item/ItemServiceImplTest.java rename server/src/test/java/ru/practicum/shareit/user/{UserServiceTest.java => UserServiceImplTest.java} (98%) diff --git a/server/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java b/server/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java index 553956e..d2be429 100644 --- a/server/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java +++ b/server/src/main/java/ru/practicum/shareit/comment/dto/NewCommentDto.java @@ -1,9 +1,15 @@ package ru.practicum.shareit.comment.dto; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; @Data +@Builder +@AllArgsConstructor +@NoArgsConstructor public class NewCommentDto { private String text; diff --git a/server/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java b/server/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java index ead598d..dd96e3a 100644 --- a/server/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java +++ b/server/src/main/java/ru/practicum/shareit/item/dto/UpdateItemDto.java @@ -1,8 +1,14 @@ package ru.practicum.shareit.item.dto; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; @Data +@Builder +@AllArgsConstructor +@NoArgsConstructor public class UpdateItemDto { private String name; private String description; diff --git a/server/src/test/java/ru/practicum/shareit/item/ItemServiceImplTest.java b/server/src/test/java/ru/practicum/shareit/item/ItemServiceImplTest.java new file mode 100644 index 0000000..d74585b --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/item/ItemServiceImplTest.java @@ -0,0 +1,145 @@ +package ru.practicum.shareit.item; + +import lombok.RequiredArgsConstructor; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.transaction.annotation.Transactional; +import ru.practicum.shareit.comment.dto.CommentDto; +import ru.practicum.shareit.comment.dto.NewCommentDto; +import ru.practicum.shareit.exception.NotFoundException; +import ru.practicum.shareit.item.dto.*; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertThrows; + +@SpringBootTest +@Transactional +@RequiredArgsConstructor(onConstructor_ = @Autowired) +public class ItemServiceImplTest { + private final ItemService itemService; + + @Test + void addNewItemTest() { + NewItemDto newItemDto = NewItemDto.builder() + .name("new_item_5") + .description("new_item_5_description") + .available(true) + .build(); + + ItemDto itemDto = itemService.create(newItemDto, 1); + + Assertions.assertNotNull(itemDto); + Assertions.assertEquals(5, itemDto.getId()); + Assertions.assertEquals("new_item_5", itemDto.getName()); + Assertions.assertEquals("new_item_5_description", itemDto.getDescription()); + Assertions.assertEquals(1, itemDto.getOwner().getId()); + + } + + @Test + void addNewItemWithWrongOwnerTest() { + NewItemDto newItemDto = NewItemDto.builder() + .name("new_item_5") + .description("new_item_5_description") + .available(true) + .build(); + + NotFoundException e = assertThrows(NotFoundException.class, + () -> itemService.create(newItemDto, 1000) + ); + + Assertions.assertEquals(e.getMessage(), "Пользователь с id = 1000 не найден"); + } + + @Test + void updateItemTest() { + UpdateItemDto updateItemDto = UpdateItemDto.builder() + .name("new_item_test") + .build(); + + ItemDto itemDto = itemService.update(1, updateItemDto, 1); + + Assertions.assertNotNull(itemDto); + Assertions.assertEquals("new_item_test", itemDto.getName()); + } + + @Test + void updateItemWithWrongIdTest() { + UpdateItemDto updateItemDto = UpdateItemDto.builder() + .name("new_item_test") + .build(); + + NotFoundException e = assertThrows(NotFoundException.class, + () -> itemService.update(1000, updateItemDto, 2) + ); + + Assertions.assertEquals(e.getMessage(), "Предмет не найден"); + } + + @Test + void updateItemWithUserIsNotOwnerTest() { + UpdateItemDto updateItemDto = UpdateItemDto.builder() + .name("new_item_test") + .build(); + + NotFoundException e = assertThrows(NotFoundException.class, + () -> itemService.update(1, updateItemDto, 3) + ); + + Assertions.assertEquals(e.getMessage(), "У вас недостаточно прав для обновления вещи"); + } + + @Test + void getItemByIdTest() { + ItemWithCommentsDto itemDto = itemService.get(1L); + + Assertions.assertNotNull(itemDto); + Assertions.assertEquals("new_item", itemDto.getName()); + Assertions.assertEquals("description_new_item", itemDto.getDescription()); + } + + @Test + void getItemsByOwner() { + List itemDtoList = itemService.getAllItemsByOwner(3L); + + Assertions.assertNotNull(itemDtoList); + Assertions.assertEquals(3, itemDtoList.size()); + } + + @Test + void searchItemsTest() { + List itemDtoList = itemService.search("item"); + + Assertions.assertNotNull(itemDtoList); + Assertions.assertEquals(3, itemDtoList.size()); + } + + @Test + void addNewCommentTest() { + NewCommentDto newCommentDto = NewCommentDto.builder() + .text("comment_test_text").build(); + + CommentDto commentDto = itemService.createComment(newCommentDto, 3, 2); + + Assertions.assertNotNull(commentDto); + Assertions.assertEquals(2, commentDto.getId()); + Assertions.assertEquals("comment_test_text", commentDto.getText()); + Assertions.assertEquals("booker", commentDto.getAuthorName()); + } + + @Test + void addNewCommentWithWrongBookerIdTest() { + NewCommentDto newCommentDto = NewCommentDto.builder() + .text("comment_test_text").build(); + + NotFoundException e = assertThrows(NotFoundException.class, + () -> itemService.createComment(newCommentDto, 3, 3) + ); + + Assertions.assertEquals(e.getMessage(), "Бронирование для предмета не найдено, невозможно добавить комментарий"); + + } +} \ No newline at end of file diff --git a/server/src/test/java/ru/practicum/shareit/user/UserServiceTest.java b/server/src/test/java/ru/practicum/shareit/user/UserServiceImplTest.java similarity index 98% rename from server/src/test/java/ru/practicum/shareit/user/UserServiceTest.java rename to server/src/test/java/ru/practicum/shareit/user/UserServiceImplTest.java index c348930..9d5dd20 100644 --- a/server/src/test/java/ru/practicum/shareit/user/UserServiceTest.java +++ b/server/src/test/java/ru/practicum/shareit/user/UserServiceImplTest.java @@ -18,7 +18,7 @@ @SpringBootTest @Transactional @RequiredArgsConstructor(onConstructor_ = @Autowired) -public class UserServiceTest { +public class UserServiceImplTest { private final UserService userService; private NewUserDto newUserDto; @@ -100,7 +100,7 @@ void getUserByWrongId() { @Test - void deleteUserById() { + void deleteTest() { userService.deleteUser(1); NotFoundException e = assertThrows(NotFoundException.class, diff --git a/server/src/test/resources/data.sql b/server/src/test/resources/data.sql index 6eae99e..97a8c64 100644 --- a/server/src/test/resources/data.sql +++ b/server/src/test/resources/data.sql @@ -31,8 +31,6 @@ VALUES ('2022-05-01 00:00:00', '2022-06-07 00:00:00', 3, 2, 'APPROVED'); INSERT INTO bookings (start_time, end_time, item_id, booker_id, status) VALUES ('2025-07-01 00:00:00', '2025-07-07 00:00:00', 3, 1, 'WAITING'); -INSERT INTO bookings (start_time, end_time, item_id, booker_id, status) -VALUES ('2025-05-01 00:00:00', '2025-06-07 00:00:00', 3, 2, 'APPROVED'); INSERT INTO comments(item_id, author_id, text,created) VALUES (1, 2, 'comment text','2025-02-07 00:00:00'); From 6f0db52fef23aebd298271c189fe12fe62bf4c2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Wed, 2 Jul 2025 01:37:34 +0400 Subject: [PATCH 37/55] fix test --- .../shareit/booking/BookingController.java | 10 +- .../shareit/booking/BookingRepository.java | 21 ++-- .../shareit/booking/BookingService.java | 6 +- .../shareit/booking/BookingServiceImpl.java | 39 ++++--- .../booking/BookingControllerTest.java | 106 ++++++++++++++++++ .../shareit/booking/BookingDtoTest.java | 99 ++++++++++++++++ .../booking/BookingRepositoryTest.java | 75 +++++++++++++ server/src/test/resources/data.sql | 11 +- 8 files changed, 324 insertions(+), 43 deletions(-) create mode 100644 server/src/test/java/ru/practicum/shareit/booking/BookingControllerTest.java create mode 100644 server/src/test/java/ru/practicum/shareit/booking/BookingDtoTest.java create mode 100644 server/src/test/java/ru/practicum/shareit/booking/BookingRepositoryTest.java diff --git a/server/src/main/java/ru/practicum/shareit/booking/BookingController.java b/server/src/main/java/ru/practicum/shareit/booking/BookingController.java index 6240045..d86a39e 100644 --- a/server/src/main/java/ru/practicum/shareit/booking/BookingController.java +++ b/server/src/main/java/ru/practicum/shareit/booking/BookingController.java @@ -36,17 +36,15 @@ public BookingDto approveBooking(@RequestHeader("X-Sharer-User-Id") long userId, @GetMapping @ResponseStatus(HttpStatus.OK) public List findByBooker(@RequestHeader("X-Sharer-User-Id") long userId, - @RequestParam(defaultValue = "ALL") BookingState state, - @PageableDefault(size = 20, sort = "start", direction = Sort.Direction.DESC) Pageable pageable) { - return bookingService.findByBooker(userId, state, pageable).getContent(); + @RequestParam(defaultValue = "ALL") BookingState state) { + return bookingService.findByBooker(userId, state); } @GetMapping("/owner") @ResponseStatus(HttpStatus.OK) public List findByOwner(@RequestHeader("X-Sharer-User-Id") long userId, - @RequestParam(defaultValue = "ALL") BookingState state, - @PageableDefault(size = 20, sort = "start", direction = Sort.Direction.DESC) Pageable pageable) { - return bookingService.findByOwner(userId, state, pageable).getContent(); + @RequestParam(defaultValue = "ALL") BookingState state) { + return bookingService.findByOwner(userId, state); } @GetMapping("/{bookingId}") diff --git a/server/src/main/java/ru/practicum/shareit/booking/BookingRepository.java b/server/src/main/java/ru/practicum/shareit/booking/BookingRepository.java index 2bf7bd5..7e4a248 100644 --- a/server/src/main/java/ru/practicum/shareit/booking/BookingRepository.java +++ b/server/src/main/java/ru/practicum/shareit/booking/BookingRepository.java @@ -1,6 +1,5 @@ package ru.practicum.shareit.booking; -import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; @@ -11,35 +10,35 @@ import java.util.Optional; public interface BookingRepository extends JpaRepository { - Page findByBooker_Id(long bookerId, Pageable pageable); + List findByBooker_Id(long bookerId); - Page findByItemOwner_Id(long ownerId, Pageable pageable); + List findByItemOwner_Id(long ownerId); @Query("SELECT b FROM Booking b " + " WHERE b.booker.id = :bookerId " + " AND b.start <= :now " + " AND b.end >= :now " + " AND b.status = ru.practicum.shareit.booking.BookingStatus.APPROVED") - Page findCurrentByBooker(@Param("bookerId") long bookerId, @Param("now") LocalDateTime now, Pageable pageable); + List findCurrentByBooker(@Param("bookerId") long bookerId, @Param("now") LocalDateTime now); @Query("SELECT b FROM Booking b " + " WHERE b.item.owner.id = :ownerId " + " AND b.start <= :now " + " AND b.end >= :now " + " AND b.status = ru.practicum.shareit.booking.BookingStatus.APPROVED") - Page findCurrentByOwner(@Param("ownerId") long ownerId, @Param("now") LocalDateTime now, Pageable pageable); + List findCurrentByOwner(@Param("ownerId") long ownerId, @Param("now") LocalDateTime now); - Page findByBooker_IdAndEndBefore(long bookerId, LocalDateTime now, Pageable pageable); + List findByBooker_IdAndEndBefore(long bookerId, LocalDateTime now); - Page findByItemOwner_IdAndEndBefore(long ownerId, LocalDateTime now, Pageable pageable); + List findByItemOwner_IdAndEndBefore(long ownerId, LocalDateTime now); - Page findByBooker_IdAndStartAfter(long bookerId, LocalDateTime now, Pageable pageable); + List findByBooker_IdAndStartAfter(long bookerId, LocalDateTime now); - Page findByItemOwner_IdAndStartAfter(long ownerId, LocalDateTime now, Pageable pageable); + List findByItemOwner_IdAndStartAfter(long ownerId, LocalDateTime now); - Page findByBooker_IdAndStatus(long bookerId, BookingStatus status, Pageable pageable); + List findByBooker_IdAndStatus(long bookerId, BookingStatus status); - Page findByItemOwner_IdAndStatus(long ownerId, BookingStatus status, Pageable pageable); + List findByItemOwner_IdAndStatus(long ownerId, BookingStatus status); List findByItem_idAndStatus(long itemId, BookingStatus status); diff --git a/server/src/main/java/ru/practicum/shareit/booking/BookingService.java b/server/src/main/java/ru/practicum/shareit/booking/BookingService.java index 8d4c2bb..7e931a3 100644 --- a/server/src/main/java/ru/practicum/shareit/booking/BookingService.java +++ b/server/src/main/java/ru/practicum/shareit/booking/BookingService.java @@ -5,14 +5,16 @@ import ru.practicum.shareit.booking.dto.BookingDto; import ru.practicum.shareit.booking.dto.NewBookingDto; +import java.util.List; + public interface BookingService { BookingDto create(NewBookingDto newBookingDto, long bookerId); BookingDto approveBooking(long userId, long bookingId, boolean approved); - Page findByBooker(long bookerId, BookingState state, Pageable pageable); + List findByBooker(long bookerId, BookingState state); - Page findByOwner(long ownerId, BookingState state, Pageable pageable); + List findByOwner(long ownerId, BookingState state); BookingDto findById(long userId, long bookingId); } diff --git a/server/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java b/server/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java index 6067f84..67cdd0d 100644 --- a/server/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java +++ b/server/src/main/java/ru/practicum/shareit/booking/BookingServiceImpl.java @@ -3,8 +3,6 @@ import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import ru.practicum.shareit.booking.dto.BookingDto; import ru.practicum.shareit.booking.dto.NewBookingDto; @@ -17,6 +15,7 @@ import ru.practicum.shareit.user.UserRepository; import java.time.LocalDateTime; +import java.util.List; @Service @RequiredArgsConstructor @@ -54,39 +53,39 @@ public BookingDto approveBooking(long userId, long bookingId, boolean approved) } @Override - public Page findByBooker(long bookerId, BookingState state, Pageable pageable) { + public List findByBooker(long bookerId, BookingState state) { if (!userExistById(bookerId)) { throw new NotFoundException("Пользователь не найден"); } LocalDateTime timeNow = LocalDateTime.now(); - Page page = switch (state) { - case CURRENT -> bookingRepository.findCurrentByBooker(bookerId, timeNow, pageable); - case PAST -> bookingRepository.findByBooker_IdAndEndBefore(bookerId, timeNow, pageable); - case FUTURE -> bookingRepository.findByBooker_IdAndStartAfter(bookerId, timeNow, pageable); - case WAITING -> bookingRepository.findByBooker_IdAndStatus(bookerId, BookingStatus.WAITING, pageable); - case REJECTED -> bookingRepository.findByBooker_IdAndStatus(bookerId, BookingStatus.REJECTED, pageable); - case ALL -> bookingRepository.findByBooker_Id(bookerId, pageable); + List bookings = switch (state) { + case CURRENT -> bookingRepository.findCurrentByBooker(bookerId, timeNow); + case PAST -> bookingRepository.findByBooker_IdAndEndBefore(bookerId, timeNow); + case FUTURE -> bookingRepository.findByBooker_IdAndStartAfter(bookerId, timeNow); + case WAITING -> bookingRepository.findByBooker_IdAndStatus(bookerId, BookingStatus.WAITING); + case REJECTED -> bookingRepository.findByBooker_IdAndStatus(bookerId, BookingStatus.REJECTED); + case ALL -> bookingRepository.findByBooker_Id(bookerId); default -> throw new NotFoundException("Некорректный параметр state"); }; - return page.map(BookingMapper::mapToBookingDto); + return bookings.stream().map(BookingMapper::mapToBookingDto).toList(); } @Override - public Page findByOwner(long ownerId, BookingState state, Pageable pageable) { + public List findByOwner(long ownerId, BookingState state) { if (!userExistById(ownerId)) { throw new NotFoundException("Пользователь не найден"); } LocalDateTime timeNow = LocalDateTime.now(); - Page page = switch (state) { - case CURRENT -> bookingRepository.findCurrentByOwner(ownerId, timeNow, pageable); - case PAST -> bookingRepository.findByItemOwner_IdAndEndBefore(ownerId, timeNow, pageable); - case FUTURE -> bookingRepository.findByItemOwner_IdAndStartAfter(ownerId, timeNow, pageable); - case WAITING -> bookingRepository.findByItemOwner_IdAndStatus(ownerId, BookingStatus.WAITING, pageable); - case REJECTED -> bookingRepository.findByItemOwner_IdAndStatus(ownerId, BookingStatus.REJECTED, pageable); - case ALL -> bookingRepository.findByItemOwner_Id(ownerId, pageable); + List bookings = switch (state) { + case CURRENT -> bookingRepository.findCurrentByOwner(ownerId, timeNow); + case PAST -> bookingRepository.findByItemOwner_IdAndEndBefore(ownerId, timeNow); + case FUTURE -> bookingRepository.findByItemOwner_IdAndStartAfter(ownerId, timeNow); + case WAITING -> bookingRepository.findByItemOwner_IdAndStatus(ownerId, BookingStatus.WAITING); + case REJECTED -> bookingRepository.findByItemOwner_IdAndStatus(ownerId, BookingStatus.REJECTED); + case ALL -> bookingRepository.findByItemOwner_Id(ownerId); default -> throw new NotFoundException("Некорректный параметр state"); }; - return page.map(BookingMapper::mapToBookingDto); + return bookings.stream().map(BookingMapper::mapToBookingDto).toList(); } @Override diff --git a/server/src/test/java/ru/practicum/shareit/booking/BookingControllerTest.java b/server/src/test/java/ru/practicum/shareit/booking/BookingControllerTest.java new file mode 100644 index 0000000..5e0e23e --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/booking/BookingControllerTest.java @@ -0,0 +1,106 @@ +package ru.practicum.shareit.booking; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import ru.practicum.shareit.booking.dto.BookingDto; +import ru.practicum.shareit.booking.dto.NewBookingDto; + +import java.time.LocalDateTime; +import java.util.List; + +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +@WebMvcTest(BookingController.class) +public class BookingControllerTest { + + @Autowired + private MockMvc mockMvc; + + @MockBean + private BookingService bookingService; + + @Autowired + private ObjectMapper objectMapper; + + private final BookingDto bookingDto = BookingDto.builder() + .id(1L) + .start(LocalDateTime.now().plusDays(1)) + .end(LocalDateTime.now().plusDays(2)) + .status(BookingStatus.APPROVED) + .build(); + + @Test + void addBookingTest() throws Exception { + NewBookingDto newBookingDto = NewBookingDto.builder() + .itemId(1L) + .start(LocalDateTime.now().plusDays(1)) + .end(LocalDateTime.now().plusDays(2)) + .build(); + + when(bookingService.create(any(), anyLong())).thenReturn(bookingDto); + + mockMvc.perform(post("/bookings") + .contentType(MediaType.APPLICATION_JSON) + .header("X-Sharer-User-Id", 1) + .content(objectMapper.writeValueAsString(newBookingDto))) + .andExpect(status().isCreated()) + .andExpect(jsonPath("$.id").value(1L)); + } + + @Test + void bookingConfirmationTest() throws Exception { + when(bookingService.approveBooking(anyLong(), anyLong(), anyBoolean())) + .thenReturn(bookingDto); + + mockMvc.perform(patch("/bookings/1?approved=true") + .contentType(MediaType.APPLICATION_JSON) + .header("X-Sharer-User-Id", 1)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.id").value(1L)); + } + + @Test + void getBookingByIdTest() throws Exception { + when(bookingService.findById(anyLong(), anyLong())) + .thenReturn(bookingDto); + + mockMvc.perform(get("/bookings/1") + .header("X-Sharer-User-Id", 1)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.id").value(1L)); + } + + + @Test + void getAllUsersBookingsTest() throws Exception { + Mockito.when(bookingService.findByBooker(anyLong(),any(BookingState.class))) + .thenReturn(List.of(bookingDto)); + + mockMvc.perform(get("/bookings") + .param("state", "ALL") + .header("X-Sharer-User-Id", 1)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$[0].id").value(1L)); + } + + @Test + void getAllBookingsForAllUsersItemsTest() throws Exception { + Mockito.when(bookingService.findByOwner( anyLong(),any(BookingState.class))) + .thenReturn(List.of(bookingDto)); + + mockMvc.perform(get("/bookings/owner") + .param("state", "ALL") + .header("X-Sharer-User-Id", 1)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$[0].id").value(1L)); + } +} \ No newline at end of file diff --git a/server/src/test/java/ru/practicum/shareit/booking/BookingDtoTest.java b/server/src/test/java/ru/practicum/shareit/booking/BookingDtoTest.java new file mode 100644 index 0000000..56a30b7 --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/booking/BookingDtoTest.java @@ -0,0 +1,99 @@ +package ru.practicum.shareit.booking; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.json.JsonTest; +import org.springframework.boot.test.json.JacksonTester; +import ru.practicum.shareit.booking.BookingStatus; +import ru.practicum.shareit.booking.dto.BookingDto; +import ru.practicum.shareit.item.dto.ItemDto; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; +import ru.practicum.shareit.user.dto.UserDto; + +import java.time.LocalDateTime; + +import static org.assertj.core.api.Assertions.assertThat; + +@JsonTest +class BookingDtoTest { + + @Autowired + private JacksonTester json; + + @Test + void testSerializeBookingDto() throws Exception { + UserDto user = new UserDto(); + user.setId(200L); + user.setName("Pol"); + user.setEmail("pol@example.com"); + + UserDto booker = new UserDto(); + booker.setId(201L); + booker.setName("Tom"); + booker.setEmail("tom@example.com"); + + ItemDto item = new ItemDto(); + item.setId(100L); + item.setName("new_item"); + item.setDescription("item_description"); + item.setAvailable(true); + item.setOwner(user); + + BookingDto dto = BookingDto.builder() + .id(1L) + .start(LocalDateTime.of(2025, 5, 4, 10, 0)) + .end(LocalDateTime.of(2025, 5, 4, 12, 0)) + .item(item) + .booker(booker) + .status(BookingStatus.APPROVED) + .build(); + + var result = json.write(dto); + + assertThat(result).hasJsonPathNumberValue("$.id"); + assertThat(result).extractingJsonPathNumberValue("$.id").isEqualTo(1); + assertThat(result).extractingJsonPathStringValue("$.start").isEqualTo("2025-05-04T10:00:00"); + assertThat(result).extractingJsonPathStringValue("$.end").isEqualTo("2025-05-04T12:00:00"); + assertThat(result).extractingJsonPathStringValue("$.status").isEqualTo("APPROVED"); + assertThat(result).extractingJsonPathMapValue("$.item").containsEntry("id", 100); + assertThat(result).extractingJsonPathMapValue("$.booker").containsEntry("id", 201); + } + + @Test + void testDeserializeBookingDto() throws Exception { + String jsonContent = "{" + + "\"id\": 1," + + "\"start\": \"2025-05-04T10:00:00\"," + + "\"end\": \"2025-05-04T12:00:00\"," + + "\"status\": \"APPROVED\"," + + "\"item\": {" + + " \"id\": 100," + + " \"name\": \"new_item\"," + + " \"description\": \"item_description\"," + + " \"available\": true," + + " \"owner\": {" + + " \"id\": 200," + + " \"name\": \"Tom\"," + + " \"email\": \"tom@example.com\"" + + " }" + + "}," + + "\"booker\": {" + + " \"id\": 201," + + " \"name\": \"Pol\"," + + " \"email\": \"pol@example.com\"" + + "}," + + "\"status\": \"APPROVED\"" + + "}"; + + + BookingDto dto = json.parseObject(jsonContent); + + assertThat(dto.getId()).isEqualTo(1L); + assertThat(dto.getStart()).isEqualTo(LocalDateTime.of(2025, 5, 4, 10, 0)); + assertThat(dto.getEnd()).isEqualTo(LocalDateTime.of(2025, 5, 4, 12, 0)); + assertThat(dto.getStatus()).isEqualTo(BookingStatus.APPROVED); + assertThat(dto.getItem().getId()).isEqualTo(100L); + assertThat(dto.getBooker().getId()).isEqualTo(201L); + } +} \ No newline at end of file diff --git a/server/src/test/java/ru/practicum/shareit/booking/BookingRepositoryTest.java b/server/src/test/java/ru/practicum/shareit/booking/BookingRepositoryTest.java new file mode 100644 index 0000000..f2bcd54 --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/booking/BookingRepositoryTest.java @@ -0,0 +1,75 @@ +package ru.practicum.shareit.booking; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import ru.practicum.shareit.item.ItemRepository; +import ru.practicum.shareit.item.model.Item; + + +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + + +@DataJpaTest +public class BookingRepositoryTest { + @Autowired + private BookingRepository bookingRepository; + @Autowired + private ItemRepository itemRepository; + + private List bookingDataList; + + + @Test + void findAllByBookerIdTest() { + bookingDataList = bookingRepository.findByBooker_Id(2); + + Assertions.assertNotNull(bookingDataList); + Assertions.assertEquals(3, bookingDataList.size()); + } + + @Test + void findAllByBookerIdAndEndingBeforeTest() { + bookingDataList = bookingRepository.findByBooker_IdAndEndBefore(2, LocalDateTime.now()); + + Assertions.assertNotNull(bookingDataList); + Assertions.assertEquals(2, bookingDataList.size()); + } + + @Test + void findAllByBookerIdAndStartAfterTest() { + bookingDataList = bookingRepository.findByBooker_IdAndStartAfter(2, LocalDateTime.now()); + + Assertions.assertNotNull(bookingDataList); + Assertions.assertEquals(0, bookingDataList.size()); + } + + @Test + void findAllByBookerIdCurrentBookingTest() { + bookingDataList = bookingRepository.findCurrentByOwner(1, LocalDateTime.now()); + + Assertions.assertNotNull(bookingDataList); + + } + + @Test + void findAllByBookerIdAndStatusTest() { + bookingDataList = bookingRepository.findByBooker_IdAndStatus(2, BookingStatus.WAITING); + + Assertions.assertTrue(bookingDataList.isEmpty()); + } + + @Test + void findAllByOwnerIdTest() { + bookingDataList = bookingRepository.findByItemOwner_Id(2); + + Assertions.assertNotNull(bookingDataList); + Assertions.assertEquals(1, bookingDataList.size()); + } +} \ No newline at end of file diff --git a/server/src/test/resources/data.sql b/server/src/test/resources/data.sql index 97a8c64..8bfb151 100644 --- a/server/src/test/resources/data.sql +++ b/server/src/test/resources/data.sql @@ -20,16 +20,19 @@ INSERT INTO items (name, description, available, owner_id) VALUES ('item_4', 'description_item_4', false, 3); INSERT INTO bookings (start_time, end_time, item_id, booker_id, status) -VALUES ('2024-06-03 00:00:00', '2024-06-07 00:00:00', 1, 2, 'APPROVED'); +VALUES ('2024-06-03 00:00:00', '2024-07-07 00:00:00', 1, 2, 'APPROVED'); INSERT INTO bookings (start_time, end_time, item_id, booker_id, status) -VALUES ('2025-02-03 00:00:00', '2025-02-07 00:00:00', 2, 2, 'REJECTED'); +VALUES ('2025-02-03 00:00:00', '2025-07-07 00:00:00', 2, 2, 'REJECTED'); INSERT INTO bookings (start_time, end_time, item_id, booker_id, status) -VALUES ('2022-05-01 00:00:00', '2022-06-07 00:00:00', 3, 2, 'APPROVED'); +VALUES ('2022-05-01 00:00:00', '2022-07-07 00:00:00', 3, 2, 'APPROVED'); INSERT INTO bookings (start_time, end_time, item_id, booker_id, status) -VALUES ('2025-07-01 00:00:00', '2025-07-07 00:00:00', 3, 1, 'WAITING'); +VALUES ('2025-07-07 00:00:00', '2025-07-08 00:00:00', 3, 1, 'WAITING'); + +--INSERT INTO bookings (start_time, end_time, item_id, booker_id, status) +--VALUES ('2022-05-01 00:00:00', '2022-06-07 00:00:00', 3, 2, 'APPROVED'); INSERT INTO comments(item_id, author_id, text,created) From ca77afeef2541fa82750e08694e420bc4109e647 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Wed, 2 Jul 2025 01:38:58 +0400 Subject: [PATCH 38/55] fix test --- .../java/ru/practicum/shareit/booking/BookingDtoTest.java | 3 --- .../ru/practicum/shareit/booking/BookingRepositoryTest.java | 5 ----- 2 files changed, 8 deletions(-) diff --git a/server/src/test/java/ru/practicum/shareit/booking/BookingDtoTest.java b/server/src/test/java/ru/practicum/shareit/booking/BookingDtoTest.java index 56a30b7..9017c04 100644 --- a/server/src/test/java/ru/practicum/shareit/booking/BookingDtoTest.java +++ b/server/src/test/java/ru/practicum/shareit/booking/BookingDtoTest.java @@ -4,11 +4,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.json.JsonTest; import org.springframework.boot.test.json.JacksonTester; -import ru.practicum.shareit.booking.BookingStatus; import ru.practicum.shareit.booking.dto.BookingDto; import ru.practicum.shareit.item.dto.ItemDto; -import ru.practicum.shareit.item.model.Item; -import ru.practicum.shareit.user.User; import ru.practicum.shareit.user.dto.UserDto; import java.time.LocalDateTime; diff --git a/server/src/test/java/ru/practicum/shareit/booking/BookingRepositoryTest.java b/server/src/test/java/ru/practicum/shareit/booking/BookingRepositoryTest.java index f2bcd54..c38912b 100644 --- a/server/src/test/java/ru/practicum/shareit/booking/BookingRepositoryTest.java +++ b/server/src/test/java/ru/practicum/shareit/booking/BookingRepositoryTest.java @@ -5,15 +5,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import ru.practicum.shareit.item.ItemRepository; -import ru.practicum.shareit.item.model.Item; -import java.time.Instant; import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.ArrayList; import java.util.List; -import java.util.Optional; @DataJpaTest From 8f21fd7b2c369fb72ab9ed2b978b8daeb56c2cf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Wed, 2 Jul 2025 01:39:42 +0400 Subject: [PATCH 39/55] fix test --- .../java/ru/practicum/shareit/booking/BookingController.java | 3 --- .../main/java/ru/practicum/shareit/booking/BookingService.java | 3 +-- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/server/src/main/java/ru/practicum/shareit/booking/BookingController.java b/server/src/main/java/ru/practicum/shareit/booking/BookingController.java index d86a39e..0a4d11e 100644 --- a/server/src/main/java/ru/practicum/shareit/booking/BookingController.java +++ b/server/src/main/java/ru/practicum/shareit/booking/BookingController.java @@ -1,9 +1,6 @@ package ru.practicum.shareit.booking; import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.data.web.PageableDefault; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import ru.practicum.shareit.booking.dto.BookingDto; diff --git a/server/src/main/java/ru/practicum/shareit/booking/BookingService.java b/server/src/main/java/ru/practicum/shareit/booking/BookingService.java index 7e931a3..a1f1610 100644 --- a/server/src/main/java/ru/practicum/shareit/booking/BookingService.java +++ b/server/src/main/java/ru/practicum/shareit/booking/BookingService.java @@ -1,7 +1,6 @@ package ru.practicum.shareit.booking; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; + import ru.practicum.shareit.booking.dto.BookingDto; import ru.practicum.shareit.booking.dto.NewBookingDto; From 9f73d0621f161baaf792681642b3d50c81e48398 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Wed, 2 Jul 2025 01:41:28 +0400 Subject: [PATCH 40/55] fix test --- .../java/ru/practicum/shareit/booking/BookingRepository.java | 1 - .../ru/practicum/shareit/booking/BookingControllerTest.java | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/server/src/main/java/ru/practicum/shareit/booking/BookingRepository.java b/server/src/main/java/ru/practicum/shareit/booking/BookingRepository.java index 7e4a248..94f1295 100644 --- a/server/src/main/java/ru/practicum/shareit/booking/BookingRepository.java +++ b/server/src/main/java/ru/practicum/shareit/booking/BookingRepository.java @@ -1,6 +1,5 @@ package ru.practicum.shareit.booking; -import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; diff --git a/server/src/test/java/ru/practicum/shareit/booking/BookingControllerTest.java b/server/src/test/java/ru/practicum/shareit/booking/BookingControllerTest.java index 5e0e23e..e895255 100644 --- a/server/src/test/java/ru/practicum/shareit/booking/BookingControllerTest.java +++ b/server/src/test/java/ru/practicum/shareit/booking/BookingControllerTest.java @@ -82,7 +82,7 @@ void getBookingByIdTest() throws Exception { @Test void getAllUsersBookingsTest() throws Exception { - Mockito.when(bookingService.findByBooker(anyLong(),any(BookingState.class))) + Mockito.when(bookingService.findByBooker(anyLong(), any(BookingState.class))) .thenReturn(List.of(bookingDto)); mockMvc.perform(get("/bookings") @@ -94,7 +94,7 @@ void getAllUsersBookingsTest() throws Exception { @Test void getAllBookingsForAllUsersItemsTest() throws Exception { - Mockito.when(bookingService.findByOwner( anyLong(),any(BookingState.class))) + Mockito.when(bookingService.findByOwner(anyLong(), any(BookingState.class))) .thenReturn(List.of(bookingDto)); mockMvc.perform(get("/bookings/owner") From 7b8fa91456fe2731f3757a49a17fb5d1388be7c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Wed, 2 Jul 2025 01:44:29 +0400 Subject: [PATCH 41/55] fix test --- .../ru/practicum/shareit/exception/ConflictException.java | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 server/src/main/java/ru/practicum/shareit/exception/ConflictException.java diff --git a/server/src/main/java/ru/practicum/shareit/exception/ConflictException.java b/server/src/main/java/ru/practicum/shareit/exception/ConflictException.java deleted file mode 100644 index 7885123..0000000 --- a/server/src/main/java/ru/practicum/shareit/exception/ConflictException.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.practicum.shareit.exception; - -public class ConflictException extends RuntimeException { - public ConflictException(String message) { - super(message); - } -} From 54568f62ca803fd79215c21a86b7ec37dd22085e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Wed, 2 Jul 2025 02:19:18 +0400 Subject: [PATCH 42/55] fix test --- .../shareit/booking/dto/NewBookingDto.java | 4 + .../shareit/booking/BookingServiceTest.java | 206 ++++++++++++++++++ 2 files changed, 210 insertions(+) create mode 100644 server/src/test/java/ru/practicum/shareit/booking/BookingServiceTest.java diff --git a/server/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java b/server/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java index ca3f91e..0829910 100644 --- a/server/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java +++ b/server/src/main/java/ru/practicum/shareit/booking/dto/NewBookingDto.java @@ -1,13 +1,17 @@ package ru.practicum.shareit.booking.dto; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.time.LocalDateTime; @Data @Builder +@NoArgsConstructor +@AllArgsConstructor public class NewBookingDto { private LocalDateTime start; private LocalDateTime end; diff --git a/server/src/test/java/ru/practicum/shareit/booking/BookingServiceTest.java b/server/src/test/java/ru/practicum/shareit/booking/BookingServiceTest.java new file mode 100644 index 0000000..0fab831 --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/booking/BookingServiceTest.java @@ -0,0 +1,206 @@ +package ru.practicum.shareit.booking; + +import lombok.RequiredArgsConstructor; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.transaction.annotation.Transactional; +import ru.practicum.shareit.booking.dto.BookingDto; +import ru.practicum.shareit.booking.dto.NewBookingDto; +import ru.practicum.shareit.exception.NoAccessException; +import ru.practicum.shareit.exception.NotFoundException; +import ru.practicum.shareit.item.ItemRepository; +import ru.practicum.shareit.user.UserRepository; + +import java.time.LocalDateTime; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertThrows; + +@SpringBootTest +@Transactional +@RequiredArgsConstructor(onConstructor_ = @Autowired) +public class BookingServiceTest { + private final BookingService bookingService; + private final UserRepository userRepository; + private final ItemRepository itemRepository; + + private NewBookingDto newBookingDto; + + @Test + void createBookingTest() { + newBookingDto = new NewBookingDto(LocalDateTime.of(2026, 4, 5, 0, 0, 0), + LocalDateTime.of(2026, 4, 7, 0, 0, 0), 1L); + + BookingDto bookingDto = bookingService.create(newBookingDto, 2); + + Assertions.assertNotNull(bookingDto); + Assertions.assertEquals(5, bookingDto.getId()); + Assertions.assertEquals(1, bookingDto.getItem().getId()); + Assertions.assertEquals(2, bookingDto.getBooker().getId()); + Assertions.assertEquals(BookingStatus.WAITING, bookingDto.getStatus()); + } + + @Test + void createBookingWithWrongBookerIdTest() { + newBookingDto = new NewBookingDto(LocalDateTime.of(2026, 4, 5, 0, 0, 0), + LocalDateTime.of(2026, 4, 7, 0, 0, 0), 1L); + + NotFoundException e = assertThrows(NotFoundException.class, + () -> bookingService.create(newBookingDto, 1000L) + ); + + Assertions.assertEquals(e.getMessage(), "Пользователь не найден"); + } + + @Test + void createBookingWithWrongItemIdTest() { + newBookingDto = new NewBookingDto(LocalDateTime.of(2026, 4, 5, 0, 0, 0), + LocalDateTime.of(2026, 4, 7, 0, 0, 0), 1000L); + + NotFoundException e = assertThrows(NotFoundException.class, + () -> bookingService.create(newBookingDto, 1L) + ); + + Assertions.assertEquals(e.getMessage(), "Вещь не найдена"); + } + + + + @Test + void createBookingWithNotAvailableItemTest() { + newBookingDto = new NewBookingDto(LocalDateTime.of(2026, 4, 5, 0, 0, 0), + LocalDateTime.of(2026, 4, 7, 0, 0, 0), 4L); + + RuntimeException e = assertThrows(RuntimeException.class, + () -> bookingService.create(newBookingDto, 2) + ); + + Assertions.assertEquals(e.getMessage(), "Вещь недоступна для бронирования"); + + } + + @Test + void bookingApproveTest() { + BookingDto bookingDto = bookingService.approveBooking(3, 3, true); + + Assertions.assertNotNull(bookingDto); + Assertions.assertEquals(BookingStatus.APPROVED, bookingDto.getStatus()); + } + + + + @Test + void bookingApproveWhereUserIsNotUserTest() { + RuntimeException e = assertThrows(RuntimeException.class, + () -> bookingService.approveBooking(1, 3, true) + ); + + Assertions.assertEquals(e.getMessage(), "Только владелец вещи имеет доступ к изменению статуса бронирования"); + + } + + @Test + void getBookingByIdTest() { + BookingDto bookingDto1 = bookingService.findById(3, 3); + + Assertions.assertNotNull(bookingDto1); + Assertions.assertEquals(BookingStatus.APPROVED, bookingDto1.getStatus()); + } + + @Test + void getBookingByWrongIdTest() { + NoAccessException e = assertThrows(NoAccessException.class, + () -> bookingService.findById(1000, 2) + ); + + Assertions.assertEquals(e.getMessage(), "No access to booking"); + } + + + @Test + void getAllUsersBookingsTest() { + List bookingDtoList = bookingService.findByBooker( 2,BookingState.ALL); + + Assertions.assertNotNull(bookingDtoList); + Assertions.assertEquals(3, bookingDtoList.size()); + + List bookingDtoList1 = bookingService.findByBooker( 2,BookingState.PAST); + + Assertions.assertNotNull(bookingDtoList1); + Assertions.assertEquals(2, bookingDtoList1.size()); + + List bookingDtoList2 = bookingService.findByBooker( 2,BookingState.FUTURE); + + Assertions.assertNotNull(bookingDtoList2); + Assertions.assertEquals(0, bookingDtoList2.size()); + + List bookingDtoList3 = bookingService.findByBooker( 2,BookingState.CURRENT); + + Assertions.assertNotNull(bookingDtoList3); + Assertions.assertEquals(0, bookingDtoList3.size()); + + List bookingDtoList4 = bookingService.findByBooker( 2,BookingState.WAITING); + + Assertions.assertNotNull(bookingDtoList3); + Assertions.assertEquals(0, bookingDtoList4.size()); + + List bookingDtoList5 = bookingService.findByBooker( 2,BookingState.REJECTED); + + Assertions.assertNotNull(bookingDtoList3); + Assertions.assertEquals(1, bookingDtoList5.size()); + } + + @Test + void getAllUsersBookingsWithWrongStateTest() { + IllegalArgumentException e = assertThrows(IllegalArgumentException.class, + () -> bookingService.findByBooker( 2,BookingState.valueOf("asd")) + ); + + Assertions.assertEquals(e.getMessage(), "No enum constant ru.practicum.shareit.booking.BookingState.asd"); + } + + @Test + void getAllBookingsForAllUsersItemsTest() { + List bookingDtoList = bookingService.findByOwner( 3,BookingState.ALL); + + Assertions.assertNotNull(bookingDtoList); + Assertions.assertEquals(2, bookingDtoList.size()); + + List bookingDtoList1 = bookingService.findByOwner( 3,BookingState.PAST); + + Assertions.assertNotNull(bookingDtoList1); + Assertions.assertEquals(1, bookingDtoList1.size()); + + List bookingDtoList2 = bookingService.findByOwner( 3,BookingState.FUTURE); + + Assertions.assertNotNull(bookingDtoList2); + Assertions.assertEquals(1, bookingDtoList2.size()); + + List bookingDtoList3 = bookingService.findByOwner( 3,BookingState.CURRENT); + + Assertions.assertNotNull(bookingDtoList3); + Assertions.assertEquals(0, bookingDtoList3.size()); + + List bookingDtoList4 = bookingService.findByOwner( 3,BookingState.WAITING); + + Assertions.assertNotNull(bookingDtoList3); + Assertions.assertEquals(1, bookingDtoList4.size()); + + List bookingDtoList5 = bookingService.findByOwner( 3,BookingState.REJECTED); + + Assertions.assertNotNull(bookingDtoList3); + Assertions.assertEquals(0, bookingDtoList5.size()); + } + + @Test + void getAllBookingsForAllUsersItemsWithWrongStatusTest() { + IllegalArgumentException e = assertThrows(IllegalArgumentException.class, + () -> bookingService.findByOwner( 3,BookingState.valueOf("asd")) + ); + + Assertions.assertEquals(e.getMessage(), "No enum constant ru.practicum.shareit.booking.BookingState.asd"); + } + +} \ No newline at end of file From ea02fc7e2cfc9c4d911a417cf06d1bf15a6445be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Wed, 2 Jul 2025 02:20:28 +0400 Subject: [PATCH 43/55] fix test --- .../shareit/booking/BookingServiceTest.java | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/server/src/test/java/ru/practicum/shareit/booking/BookingServiceTest.java b/server/src/test/java/ru/practicum/shareit/booking/BookingServiceTest.java index 0fab831..b5b8d49 100644 --- a/server/src/test/java/ru/practicum/shareit/booking/BookingServiceTest.java +++ b/server/src/test/java/ru/practicum/shareit/booking/BookingServiceTest.java @@ -67,7 +67,6 @@ void createBookingWithWrongItemIdTest() { } - @Test void createBookingWithNotAvailableItemTest() { newBookingDto = new NewBookingDto(LocalDateTime.of(2026, 4, 5, 0, 0, 0), @@ -90,7 +89,6 @@ void bookingApproveTest() { } - @Test void bookingApproveWhereUserIsNotUserTest() { RuntimeException e = assertThrows(RuntimeException.class, @@ -121,32 +119,32 @@ void getBookingByWrongIdTest() { @Test void getAllUsersBookingsTest() { - List bookingDtoList = bookingService.findByBooker( 2,BookingState.ALL); + List bookingDtoList = bookingService.findByBooker(2, BookingState.ALL); Assertions.assertNotNull(bookingDtoList); Assertions.assertEquals(3, bookingDtoList.size()); - List bookingDtoList1 = bookingService.findByBooker( 2,BookingState.PAST); + List bookingDtoList1 = bookingService.findByBooker(2, BookingState.PAST); Assertions.assertNotNull(bookingDtoList1); Assertions.assertEquals(2, bookingDtoList1.size()); - List bookingDtoList2 = bookingService.findByBooker( 2,BookingState.FUTURE); + List bookingDtoList2 = bookingService.findByBooker(2, BookingState.FUTURE); Assertions.assertNotNull(bookingDtoList2); Assertions.assertEquals(0, bookingDtoList2.size()); - List bookingDtoList3 = bookingService.findByBooker( 2,BookingState.CURRENT); + List bookingDtoList3 = bookingService.findByBooker(2, BookingState.CURRENT); Assertions.assertNotNull(bookingDtoList3); Assertions.assertEquals(0, bookingDtoList3.size()); - List bookingDtoList4 = bookingService.findByBooker( 2,BookingState.WAITING); + List bookingDtoList4 = bookingService.findByBooker(2, BookingState.WAITING); Assertions.assertNotNull(bookingDtoList3); Assertions.assertEquals(0, bookingDtoList4.size()); - List bookingDtoList5 = bookingService.findByBooker( 2,BookingState.REJECTED); + List bookingDtoList5 = bookingService.findByBooker(2, BookingState.REJECTED); Assertions.assertNotNull(bookingDtoList3); Assertions.assertEquals(1, bookingDtoList5.size()); @@ -155,7 +153,7 @@ void getAllUsersBookingsTest() { @Test void getAllUsersBookingsWithWrongStateTest() { IllegalArgumentException e = assertThrows(IllegalArgumentException.class, - () -> bookingService.findByBooker( 2,BookingState.valueOf("asd")) + () -> bookingService.findByBooker(2, BookingState.valueOf("asd")) ); Assertions.assertEquals(e.getMessage(), "No enum constant ru.practicum.shareit.booking.BookingState.asd"); @@ -163,32 +161,32 @@ void getAllUsersBookingsWithWrongStateTest() { @Test void getAllBookingsForAllUsersItemsTest() { - List bookingDtoList = bookingService.findByOwner( 3,BookingState.ALL); + List bookingDtoList = bookingService.findByOwner(3, BookingState.ALL); Assertions.assertNotNull(bookingDtoList); Assertions.assertEquals(2, bookingDtoList.size()); - List bookingDtoList1 = bookingService.findByOwner( 3,BookingState.PAST); + List bookingDtoList1 = bookingService.findByOwner(3, BookingState.PAST); Assertions.assertNotNull(bookingDtoList1); Assertions.assertEquals(1, bookingDtoList1.size()); - List bookingDtoList2 = bookingService.findByOwner( 3,BookingState.FUTURE); + List bookingDtoList2 = bookingService.findByOwner(3, BookingState.FUTURE); Assertions.assertNotNull(bookingDtoList2); Assertions.assertEquals(1, bookingDtoList2.size()); - List bookingDtoList3 = bookingService.findByOwner( 3,BookingState.CURRENT); + List bookingDtoList3 = bookingService.findByOwner(3, BookingState.CURRENT); Assertions.assertNotNull(bookingDtoList3); Assertions.assertEquals(0, bookingDtoList3.size()); - List bookingDtoList4 = bookingService.findByOwner( 3,BookingState.WAITING); + List bookingDtoList4 = bookingService.findByOwner(3, BookingState.WAITING); Assertions.assertNotNull(bookingDtoList3); Assertions.assertEquals(1, bookingDtoList4.size()); - List bookingDtoList5 = bookingService.findByOwner( 3,BookingState.REJECTED); + List bookingDtoList5 = bookingService.findByOwner(3, BookingState.REJECTED); Assertions.assertNotNull(bookingDtoList3); Assertions.assertEquals(0, bookingDtoList5.size()); @@ -197,7 +195,7 @@ void getAllBookingsForAllUsersItemsTest() { @Test void getAllBookingsForAllUsersItemsWithWrongStatusTest() { IllegalArgumentException e = assertThrows(IllegalArgumentException.class, - () -> bookingService.findByOwner( 3,BookingState.valueOf("asd")) + () -> bookingService.findByOwner(3, BookingState.valueOf("asd")) ); Assertions.assertEquals(e.getMessage(), "No enum constant ru.practicum.shareit.booking.BookingState.asd"); From 435e606c7c61cc04e6850e1e4f971912ade58ed5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Wed, 2 Jul 2025 02:43:19 +0400 Subject: [PATCH 44/55] fix test --- .../shareit/request/dto/ItemRequestDto.java | 4 + .../request/RequestControllerTest.java | 88 +++++++++++++++++++ .../shareit/request/RequestDtoTest.java | 88 +++++++++++++++++++ .../request/RequestRepositoryTest.java | 48 ++++++++++ .../shareit/request/RequestServiceTest.java | 65 ++++++++++++++ 5 files changed, 293 insertions(+) create mode 100644 server/src/test/java/ru/practicum/shareit/request/RequestControllerTest.java create mode 100644 server/src/test/java/ru/practicum/shareit/request/RequestDtoTest.java create mode 100644 server/src/test/java/ru/practicum/shareit/request/RequestRepositoryTest.java create mode 100644 server/src/test/java/ru/practicum/shareit/request/RequestServiceTest.java diff --git a/server/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java b/server/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java index 64a69dc..e5c455d 100644 --- a/server/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java +++ b/server/src/main/java/ru/practicum/shareit/request/dto/ItemRequestDto.java @@ -1,7 +1,9 @@ package ru.practicum.shareit.request.dto; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import ru.practicum.shareit.item.dto.ItemResponseToRequestDto; import java.time.LocalDateTime; @@ -12,6 +14,8 @@ */ @Data @Builder +@NoArgsConstructor +@AllArgsConstructor public class ItemRequestDto { private long id; private String description; diff --git a/server/src/test/java/ru/practicum/shareit/request/RequestControllerTest.java b/server/src/test/java/ru/practicum/shareit/request/RequestControllerTest.java new file mode 100644 index 0000000..0164662 --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/request/RequestControllerTest.java @@ -0,0 +1,88 @@ +package ru.practicum.shareit.request; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import ru.practicum.shareit.request.dto.ItemRequestDto; +import ru.practicum.shareit.request.dto.NewItemRequestDto; + + +import java.util.List; + +import static org.mockito.ArgumentMatchers.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +@WebMvcTest(ItemRequestController.class) +public class RequestControllerTest { + + @Autowired + private MockMvc mockMvc; + + @MockBean + private ItemRequestService requestService; + + @Autowired + private ObjectMapper objectMapper; + + private final Long userId = 1L; + private final Long requestId = 2L; + + @Test + void postRequest() throws Exception { + NewItemRequestDto newItemRequestDto = new NewItemRequestDto(); + newItemRequestDto.setDescription("Need a drill"); + + ItemRequestDto shortDto = new ItemRequestDto(); + shortDto.setId(requestId); + shortDto.setDescription("Need a drill"); + + Mockito.when(requestService.create(any(), eq(userId))) + .thenReturn(shortDto); + + mockMvc.perform(post("/requests") + .header("X-Sharer-User-Id", userId) + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(newItemRequestDto))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.id").value(requestId)) + .andExpect(jsonPath("$.description").value("Need a drill")); + } + + @Test + void getRequests() throws Exception { + ItemRequestDto dto = new ItemRequestDto(); + dto.setId(requestId); + dto.setDescription("Need a hammer"); + + Mockito.when(requestService.getByUser(userId)) + .thenReturn(List.of(dto)); + + mockMvc.perform(get("/requests") + .header("X-Sharer-User-Id", userId)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$[0].id").value(requestId)) + .andExpect(jsonPath("$[0].description").value("Need a hammer")); + } + + + @Test + void getRequestById() throws Exception { + ItemRequestDto dto = new ItemRequestDto(); + dto.setId(requestId); + dto.setDescription("Need a chainsaw"); + + Mockito.when(requestService.getById(requestId)) + .thenReturn(dto); + + mockMvc.perform(get("/requests/{requestId}", requestId)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.id").value(requestId)) + .andExpect(jsonPath("$.description").value("Need a chainsaw")); + } +} \ No newline at end of file diff --git a/server/src/test/java/ru/practicum/shareit/request/RequestDtoTest.java b/server/src/test/java/ru/practicum/shareit/request/RequestDtoTest.java new file mode 100644 index 0000000..231bfba --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/request/RequestDtoTest.java @@ -0,0 +1,88 @@ +package ru.practicum.shareit.request; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.json.JsonTest; +import org.springframework.boot.test.json.JacksonTester; +import ru.practicum.shareit.item.dto.ItemResponseToRequestDto; +import ru.practicum.shareit.request.dto.ItemRequestDto; +import ru.practicum.shareit.user.User; + + +import java.time.LocalDateTime; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +@JsonTest +class RequestDtoTest { + + @Autowired + private JacksonTester json; + + @Test + void testSerializeRequest() throws Exception { + User requestor = new User(); + requestor.setId(1L); + requestor.setName("Ilona"); + requestor.setEmail("ilona@example.com"); + + LocalDateTime created = LocalDateTime.of(2025, 5, 4, 10, 30); + + ItemRequestDto requestDto = ItemRequestDto.builder() + .id(100L) + .description("description") + .created(created) + .build(); + + User user = new User(); + user.setId(1L); + user.setName("Ilona"); + user.setEmail("ilona@example.com"); + + ItemResponseToRequestDto itemForRequestDto = new ItemResponseToRequestDto(); + itemForRequestDto.setId(10L); + itemForRequestDto.setName("item"); + + requestDto.setItems(List.of(itemForRequestDto)); + + var result = json.write(requestDto); + + assertThat(result).hasJsonPathNumberValue("$.id"); + assertThat(result).extractingJsonPathNumberValue("$.id").isEqualTo(100); + assertThat(result).extractingJsonPathStringValue("$.description").isEqualTo("description"); + assertThat(result).extractingJsonPathStringValue("$.created").isEqualTo("2025-05-04T10:30:00"); + assertThat(result).extractingJsonPathArrayValue("$.items").hasSize(1); + } + + @Test + void testDeserializeRequest() throws Exception { + String jsonContent = + "{\n" + + " \"id\": 100,\n" + + " \"description\": \"description\",\n" + + " \"created\": \"2025-05-04T10:30:00\",\n" + + " \"items\": [\n" + + " {\n" + + " \"id\": 10,\n" + + " \"name\": \"item\",\n" + + " \"ownerId\": 1\n" + + " }\n" + + " ]\n" + + "}"; + + + ItemRequestDto requestDto = json.parseObject(jsonContent); + + assertThat(requestDto.getId()).isEqualTo(100L); + assertThat(requestDto.getDescription()).isEqualTo("description"); + assertThat(requestDto.getCreated()).isEqualTo(LocalDateTime.of(2025, 5, 4, 10, 30)); + + assertThat(requestDto.getItems()).hasSize(1); + ItemResponseToRequestDto item = requestDto.getItems().get(0); + assertThat(item.getId()).isEqualTo(10L); + assertThat(item.getName()).isEqualTo("item"); + assertThat(item.getOwnerId()).isEqualTo(1L); + } + +} \ No newline at end of file diff --git a/server/src/test/java/ru/practicum/shareit/request/RequestRepositoryTest.java b/server/src/test/java/ru/practicum/shareit/request/RequestRepositoryTest.java new file mode 100644 index 0000000..4ebb53a --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/request/RequestRepositoryTest.java @@ -0,0 +1,48 @@ +package ru.practicum.shareit.request; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import ru.practicum.shareit.user.User; + + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + + +@DataJpaTest +public class RequestRepositoryTest { + @Autowired + private ItemRequestRepository requestRepository; + + @BeforeEach + void beforeEachTest() { + + User user = new User(); + ItemRequest request = new ItemRequest(); + List requestList = new ArrayList<>(); + + user.setId(1L); + user.setName("new_user"); + user.setEmail("new_user@example.com"); + + request.setId(1); + request.setRequestor(user); + request.setDescription("request_description"); + request.setCreated(LocalDateTime.of(2025, 2, 7, 0, 0, 0)); + + requestList.add(request); + + } + + @Test + void getAllByRequestorIdTest() { + List requesDatatList = requestRepository.getAllByRequestorId(1); + + Assertions.assertNotNull(requesDatatList); + Assertions.assertEquals(1, requesDatatList.size()); + } +} \ No newline at end of file diff --git a/server/src/test/java/ru/practicum/shareit/request/RequestServiceTest.java b/server/src/test/java/ru/practicum/shareit/request/RequestServiceTest.java new file mode 100644 index 0000000..9c8462e --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/request/RequestServiceTest.java @@ -0,0 +1,65 @@ +package ru.practicum.shareit.request; + +import lombok.RequiredArgsConstructor; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.transaction.annotation.Transactional; +import ru.practicum.shareit.exception.NotFoundException; +import ru.practicum.shareit.request.dto.ItemRequestDto; +import ru.practicum.shareit.request.dto.NewItemRequestDto; + + +import static org.junit.jupiter.api.Assertions.assertThrows; + +@SpringBootTest +@Transactional +@RequiredArgsConstructor(onConstructor_ = @Autowired) +public class RequestServiceTest { + private final ItemRequestService requestService; + + @Test + void postRequestTest() { + NewItemRequestDto newItemRequestDto = NewItemRequestDto.builder() + .description("request_test_description") + .build(); + + ItemRequestDto itemRequestDto = requestService.create(newItemRequestDto, 1); + + Assertions.assertNotNull(itemRequestDto); + Assertions.assertEquals(2, itemRequestDto.getId()); + Assertions.assertEquals("request_test_description", itemRequestDto.getDescription()); + } + + @Test + void postRequestWithWrongUserIdTest() { + NewItemRequestDto newItemRequestDto = NewItemRequestDto.builder() + .description("request_test_description") + .build(); + + NotFoundException e = assertThrows(NotFoundException.class, + () -> requestService.create(newItemRequestDto, 100) + ); + + Assertions.assertEquals(e.getMessage(), "Пользователь с id = 100 не найден"); + } + + @Test + void getRequestByIdTest() { + ItemRequestDto requestDto = requestService.getById(1); + + Assertions.assertNotNull(requestDto); + Assertions.assertEquals("request_description", requestDto.getDescription()); + } + + @Test + void getRequestByWrongIdTest() { + NotFoundException e = assertThrows(NotFoundException.class, + () -> requestService.getById(100) + ); + + Assertions.assertEquals(e.getMessage(), "Запрос вещи с id = 100 не найден"); + } + +} \ No newline at end of file From 4d077d8ec688d8272e6de32ab32e509bf7282476 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Wed, 2 Jul 2025 02:46:35 +0400 Subject: [PATCH 45/55] fix test --- .../practicum/shareit/eror/ErrorHandler.java | 19 ------------------- .../exception/NoDataFoundException.java | 7 ------- .../exception/ValidationException.java | 7 ------- 3 files changed, 33 deletions(-) delete mode 100644 server/src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java delete mode 100644 server/src/main/java/ru/practicum/shareit/exception/ValidationException.java diff --git a/server/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java b/server/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java index 4257b59..bd02b6b 100644 --- a/server/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java +++ b/server/src/main/java/ru/practicum/shareit/eror/ErrorHandler.java @@ -10,15 +10,6 @@ @RestControllerAdvice @Slf4j public class ErrorHandler { - @ExceptionHandler - @ResponseStatus(HttpStatus.BAD_REQUEST) - public ErrorResponse handleValidationError(final ValidationException e) { - log.error("Ошибка валидации {}", e.getMessage()); - return new ErrorResponse( - "Ошибка валидации", - e.getMessage() - ); - } @ExceptionHandler @ResponseStatus(HttpStatus.NOT_FOUND) @@ -30,16 +21,6 @@ public ErrorResponse handleNotFound(final NotFoundException e) { ); } - @ExceptionHandler - @ResponseStatus(HttpStatus.BAD_REQUEST) - public ErrorResponse handleNoDataFound(final NoDataFoundException e) { - log.error("Ошибка заполнения данных {}", e.getMessage()); - return new ErrorResponse( - "Ошибка заполнения данных", - e.getMessage() - ); - } - @ExceptionHandler @ResponseStatus(HttpStatus.BAD_REQUEST) public ErrorResponse handleAvailableError(final NotAvailableItemException e) { diff --git a/server/src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java b/server/src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java deleted file mode 100644 index dbef4b4..0000000 --- a/server/src/main/java/ru/practicum/shareit/exception/NoDataFoundException.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.practicum.shareit.exception; - -public class NoDataFoundException extends RuntimeException { - public NoDataFoundException(String message) { - super(message); - } -} diff --git a/server/src/main/java/ru/practicum/shareit/exception/ValidationException.java b/server/src/main/java/ru/practicum/shareit/exception/ValidationException.java deleted file mode 100644 index 59043da..0000000 --- a/server/src/main/java/ru/practicum/shareit/exception/ValidationException.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.practicum.shareit.exception; - -public class ValidationException extends RuntimeException { - public ValidationException(String message) { - super(message); - } -} From f99cacb0a16efe11e7b685000b1bb47a23082310 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Wed, 2 Jul 2025 03:06:24 +0400 Subject: [PATCH 46/55] fix test --- .../booking/BookingRepositoryTest.java | 56 ++++++++++++++++++- 1 file changed, 53 insertions(+), 3 deletions(-) diff --git a/server/src/test/java/ru/practicum/shareit/booking/BookingRepositoryTest.java b/server/src/test/java/ru/practicum/shareit/booking/BookingRepositoryTest.java index c38912b..6a0dd9c 100644 --- a/server/src/test/java/ru/practicum/shareit/booking/BookingRepositoryTest.java +++ b/server/src/test/java/ru/practicum/shareit/booking/BookingRepositoryTest.java @@ -9,6 +9,7 @@ import java.time.LocalDateTime; import java.util.List; +import java.util.Optional; @DataJpaTest @@ -37,6 +38,14 @@ void findAllByBookerIdAndEndingBeforeTest() { Assertions.assertEquals(2, bookingDataList.size()); } + @Test + void findAllByOwnerIdAndEndingBeforeTest() { + bookingDataList = bookingRepository.findByItemOwner_IdAndEndBefore(1, LocalDateTime.now()); + + Assertions.assertNotNull(bookingDataList); + Assertions.assertEquals(1, bookingDataList.size()); + } + @Test void findAllByBookerIdAndStartAfterTest() { bookingDataList = bookingRepository.findByBooker_IdAndStartAfter(2, LocalDateTime.now()); @@ -46,18 +55,51 @@ void findAllByBookerIdAndStartAfterTest() { } @Test - void findAllByBookerIdCurrentBookingTest() { + void findAllByOwnerIdAndStartAfterTest() { + bookingDataList = bookingRepository.findByItemOwner_IdAndStartAfter(2, LocalDateTime.now()); + + Assertions.assertNotNull(bookingDataList); + Assertions.assertEquals(0, bookingDataList.size()); + } + + @Test + void findCurrentByOwnerTest() { bookingDataList = bookingRepository.findCurrentByOwner(1, LocalDateTime.now()); Assertions.assertNotNull(bookingDataList); } + @Test + void findCurrentByBookerTest() { + bookingDataList = bookingRepository.findCurrentByBooker(1, LocalDateTime.now()); + + Assertions.assertNotNull(bookingDataList); + + } + @Test void findAllByBookerIdAndStatusTest() { - bookingDataList = bookingRepository.findByBooker_IdAndStatus(2, BookingStatus.WAITING); + bookingDataList = bookingRepository.findByBooker_IdAndStatus(1, BookingStatus.WAITING); - Assertions.assertTrue(bookingDataList.isEmpty()); + Assertions.assertNotNull(bookingDataList); + Assertions.assertEquals(1, bookingDataList.size()); + } + + @Test + void findAllByOwnerIdAndStatusTest() { + bookingDataList = bookingRepository.findByItemOwner_IdAndStatus(3, BookingStatus.WAITING); + + Assertions.assertNotNull(bookingDataList); + Assertions.assertEquals(1, bookingDataList.size()); + } + + @Test + void findAllByItemIdAndStatusTest() { + bookingDataList = bookingRepository.findByItem_idAndStatus(3, BookingStatus.WAITING); + + Assertions.assertNotNull(bookingDataList); + Assertions.assertEquals(1, bookingDataList.size()); } @Test @@ -67,4 +109,12 @@ void findAllByOwnerIdTest() { Assertions.assertNotNull(bookingDataList); Assertions.assertEquals(1, bookingDataList.size()); } + + @Test + void findAllByItemIdAndBookerId() { + Optional bookingDataList = bookingRepository.findByItem_idAndBooker_id(3, 2); + + Assertions.assertNotNull(bookingDataList); + Assertions.assertEquals(1, bookingDataList.stream().toList().size()); + } } \ No newline at end of file From c3edd96629c4782396490ecae54802461b0ff9d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Wed, 2 Jul 2025 03:22:42 +0400 Subject: [PATCH 47/55] fix test --- .../shareit/user/UserMapperTest.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 server/src/test/java/ru/practicum/shareit/user/UserMapperTest.java diff --git a/server/src/test/java/ru/practicum/shareit/user/UserMapperTest.java b/server/src/test/java/ru/practicum/shareit/user/UserMapperTest.java new file mode 100644 index 0000000..fa85a70 --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/user/UserMapperTest.java @@ -0,0 +1,53 @@ +package ru.practicum.shareit.user; + +import org.junit.jupiter.api.Test; +import ru.practicum.shareit.user.dto.NewUserDto; +import ru.practicum.shareit.user.dto.UpdateUserDto; +import ru.practicum.shareit.user.dto.UserDto; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class UserMapperTest { + @Test + void userMapToDtoTest() { + User user = new User(); + user.setId(1L); + user.setName("Tom"); + user.setEmail("tom@mail.ru"); + UserMapper mapper = new UserMapper(); + assertEquals(mapper.mapToUserDto(user).getId(), 1); + assertEquals(mapper.mapToUserDto(user).getName(), "Tom"); + assertEquals(mapper.mapToUserDto(user).getEmail(), "tom@mail.ru"); + } + + @Test + void newUserMapTest() { + NewUserDto user = new NewUserDto("Tom", "tom@mail.ru"); + UserMapper mapper = new UserMapper(); + assertEquals(mapper.mapToNewUser(user).getName(), "Tom"); + assertEquals(mapper.mapToNewUser(user).getEmail(), "tom@mail.ru"); + } + + @Test + void updateUserMapTest() { + UpdateUserDto updateUserDto = new UpdateUserDto("Tom", "tom@mail.ru"); + User user = new User(); + user.setId(1L); + user.setName("Sam"); + user.setEmail("sam@mail.ru"); + UserMapper mapper = new UserMapper(); + assertEquals(mapper.mapToUserUpdate(user, updateUserDto).getName(), "Tom"); + assertEquals(mapper.mapToUserUpdate(user, updateUserDto).getEmail(), "tom@mail.ru"); + + } + + @Test + void userMapTest() { + UserDto user = new UserDto(1L, "Tom", "tom@mail.ru"); + UserMapper mapper = new UserMapper(); + assertEquals(mapper.mapToUser(user).getName(), "Tom"); + assertEquals(mapper.mapToUser(user).getEmail(), "tom@mail.ru"); + } + +} + From 1641438d078c0da3eab90bb581b49aa1a0994a05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Wed, 2 Jul 2025 03:31:55 +0400 Subject: [PATCH 48/55] fix test --- .../java/ru/practicum/shareit/booking/BookingServiceTest.java | 2 +- .../java/ru/practicum/shareit/item/ItemServiceImplTest.java | 2 +- .../java/ru/practicum/shareit/request/RequestServiceTest.java | 2 +- .../java/ru/practicum/shareit/user/UserServiceImplTest.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/server/src/test/java/ru/practicum/shareit/booking/BookingServiceTest.java b/server/src/test/java/ru/practicum/shareit/booking/BookingServiceTest.java index b5b8d49..28c8a08 100644 --- a/server/src/test/java/ru/practicum/shareit/booking/BookingServiceTest.java +++ b/server/src/test/java/ru/practicum/shareit/booking/BookingServiceTest.java @@ -22,7 +22,7 @@ @Transactional @RequiredArgsConstructor(onConstructor_ = @Autowired) public class BookingServiceTest { - private final BookingService bookingService; + private final BookingServiceImpl bookingService; private final UserRepository userRepository; private final ItemRepository itemRepository; diff --git a/server/src/test/java/ru/practicum/shareit/item/ItemServiceImplTest.java b/server/src/test/java/ru/practicum/shareit/item/ItemServiceImplTest.java index d74585b..90efc03 100644 --- a/server/src/test/java/ru/practicum/shareit/item/ItemServiceImplTest.java +++ b/server/src/test/java/ru/practicum/shareit/item/ItemServiceImplTest.java @@ -19,7 +19,7 @@ @Transactional @RequiredArgsConstructor(onConstructor_ = @Autowired) public class ItemServiceImplTest { - private final ItemService itemService; + private final ItemServiceImpl itemService; @Test void addNewItemTest() { diff --git a/server/src/test/java/ru/practicum/shareit/request/RequestServiceTest.java b/server/src/test/java/ru/practicum/shareit/request/RequestServiceTest.java index 9c8462e..2a2526d 100644 --- a/server/src/test/java/ru/practicum/shareit/request/RequestServiceTest.java +++ b/server/src/test/java/ru/practicum/shareit/request/RequestServiceTest.java @@ -17,7 +17,7 @@ @Transactional @RequiredArgsConstructor(onConstructor_ = @Autowired) public class RequestServiceTest { - private final ItemRequestService requestService; + private final ItemRequestServiseImpl requestService; @Test void postRequestTest() { diff --git a/server/src/test/java/ru/practicum/shareit/user/UserServiceImplTest.java b/server/src/test/java/ru/practicum/shareit/user/UserServiceImplTest.java index 9d5dd20..e1a12fa 100644 --- a/server/src/test/java/ru/practicum/shareit/user/UserServiceImplTest.java +++ b/server/src/test/java/ru/practicum/shareit/user/UserServiceImplTest.java @@ -19,7 +19,7 @@ @Transactional @RequiredArgsConstructor(onConstructor_ = @Autowired) public class UserServiceImplTest { - private final UserService userService; + private final UserServiceImpl userService; private NewUserDto newUserDto; private UpdateUserDto updateUserDto; From 87320ba9617356a2695a11b511d43dccbfd4e56e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Wed, 2 Jul 2025 03:53:21 +0400 Subject: [PATCH 49/55] fix test --- .../shareit/item/ItemMapperTest.java | 56 +++++++++++++++++++ .../shareit/request/RequestMapperTest.java | 32 +++++++++++ 2 files changed, 88 insertions(+) create mode 100644 server/src/test/java/ru/practicum/shareit/item/ItemMapperTest.java create mode 100644 server/src/test/java/ru/practicum/shareit/request/RequestMapperTest.java diff --git a/server/src/test/java/ru/practicum/shareit/item/ItemMapperTest.java b/server/src/test/java/ru/practicum/shareit/item/ItemMapperTest.java new file mode 100644 index 0000000..d04d0c7 --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/item/ItemMapperTest.java @@ -0,0 +1,56 @@ +package ru.practicum.shareit.item; + +import org.junit.jupiter.api.Test; +import ru.practicum.shareit.item.dto.NewItemDto; +import ru.practicum.shareit.item.dto.UpdateItemDto; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class ItemMapperTest { + + @Test + void mapToDtoTest() { + User user = new User(1L, "test-name", "test@mail.ru"); + Item item = new Item(1L, "Drill", "test-description", true, user, null); + ItemMapper mapper = new ItemMapper(); + assertEquals(mapper.mapToItemDto(item).getName(), "Drill"); + assertEquals(mapper.mapToItemDto(item).getDescription(), "test-description"); + assertEquals(mapper.mapToItemDto(item).getAvailable(), true); + assertEquals(mapper.mapToItemDto(item).getOwner().getId(), user.getId()); + } + + @Test + void mapToNewItemTest() { + User user = new User(1L, "test-name", "test@mail.ru"); + NewItemDto itemDto = NewItemDto.builder() + .name("Drill") + .description("test-description") + .available(true) + .owner(user) + .build(); + ItemMapper mapper = new ItemMapper(); + assertEquals(mapper.mapToNewItem(itemDto, user).getName(), "Drill"); + assertEquals(mapper.mapToNewItem(itemDto, user).getDescription(), "test-description"); + assertEquals(mapper.mapToNewItem(itemDto, user).isAvailable(), true); + assertEquals(mapper.mapToNewItem(itemDto, user).getOwner().getId(), user.getId()); + + } + + @Test + void mapToUpdateIdemDtoTest() { + User user = new User(1L, "test-name", "test@mail.ru"); + Item item = new Item(1L, "Drill", "test-description", true, user, null); + UpdateItemDto itemDto = UpdateItemDto.builder() + .name("update-name") + .description("update-description") + .build(); + ItemMapper mapper = new ItemMapper(); + assertEquals(mapper.mapToUpdateItemDto(item, itemDto).getName(), "update-name"); + assertEquals(mapper.mapToUpdateItemDto(item, itemDto).getDescription(), "update-description"); + assertEquals(mapper.mapToUpdateItemDto(item, itemDto).isAvailable(), true); + assertEquals(mapper.mapToUpdateItemDto(item, itemDto).getOwner().getId(), user.getId()); + + } +} diff --git a/server/src/test/java/ru/practicum/shareit/request/RequestMapperTest.java b/server/src/test/java/ru/practicum/shareit/request/RequestMapperTest.java new file mode 100644 index 0000000..eb57ab8 --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/request/RequestMapperTest.java @@ -0,0 +1,32 @@ +package ru.practicum.shareit.request; + +import org.junit.jupiter.api.Test; +import ru.practicum.shareit.request.dto.NewItemRequestDto; + +import java.time.LocalDateTime; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class RequestMapperTest { + + @Test + void newRequestDtoMapperTest() { + + NewItemRequestDto newItemRequestDto = new NewItemRequestDto("test-description", LocalDateTime.now()); + RequestMapper requestMapper = new RequestMapper(); + assertEquals(requestMapper.toModel(newItemRequestDto).getDescription(), "test-description"); + + + } + + @Test + void toDtoMapperTest() { + + ItemRequest itemRequestDto = new ItemRequest(); + itemRequestDto.setDescription("test-description"); + RequestMapper requestMapper = new RequestMapper(); + assertEquals(requestMapper.toDto(itemRequestDto).getDescription(), "test-description"); + + + } +} From 38ba2b2510b7f2615960d9c184e53f15cd3f9ab3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Wed, 2 Jul 2025 04:25:16 +0400 Subject: [PATCH 50/55] fix test --- .../request/ItemRequestRepository.java | 2 +- ...eImpl.java => ItemRequestServiceImpl.java} | 2 +- .../shareit/item/ItemServiceImplTest.java | 33 ++++++++++--------- .../shareit/request/RequestServiceTest.java | 2 +- 4 files changed, 20 insertions(+), 19 deletions(-) rename server/src/main/java/ru/practicum/shareit/request/{ItemRequestServiseImpl.java => ItemRequestServiceImpl.java} (96%) diff --git a/server/src/main/java/ru/practicum/shareit/request/ItemRequestRepository.java b/server/src/main/java/ru/practicum/shareit/request/ItemRequestRepository.java index 6581a77..a7cfbba 100644 --- a/server/src/main/java/ru/practicum/shareit/request/ItemRequestRepository.java +++ b/server/src/main/java/ru/practicum/shareit/request/ItemRequestRepository.java @@ -6,5 +6,5 @@ public interface ItemRequestRepository extends JpaRepository { - List getAllByRequestorId(long userId); + List getAllByRequestorId(long userId); } diff --git a/server/src/main/java/ru/practicum/shareit/request/ItemRequestServiseImpl.java b/server/src/main/java/ru/practicum/shareit/request/ItemRequestServiceImpl.java similarity index 96% rename from server/src/main/java/ru/practicum/shareit/request/ItemRequestServiseImpl.java rename to server/src/main/java/ru/practicum/shareit/request/ItemRequestServiceImpl.java index 31e2d37..f1b6e5a 100644 --- a/server/src/main/java/ru/practicum/shareit/request/ItemRequestServiseImpl.java +++ b/server/src/main/java/ru/practicum/shareit/request/ItemRequestServiceImpl.java @@ -13,7 +13,7 @@ @Service @RequiredArgsConstructor -public class ItemRequestServiseImpl implements ItemRequestService { +public class ItemRequestServiceImpl implements ItemRequestService { private final ItemRequestRepository requestRepository; private final UserRepository userRepository; diff --git a/server/src/test/java/ru/practicum/shareit/item/ItemServiceImplTest.java b/server/src/test/java/ru/practicum/shareit/item/ItemServiceImplTest.java index 90efc03..457808e 100644 --- a/server/src/test/java/ru/practicum/shareit/item/ItemServiceImplTest.java +++ b/server/src/test/java/ru/practicum/shareit/item/ItemServiceImplTest.java @@ -13,6 +13,7 @@ import java.util.List; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @SpringBootTest @@ -32,10 +33,10 @@ void addNewItemTest() { ItemDto itemDto = itemService.create(newItemDto, 1); Assertions.assertNotNull(itemDto); - Assertions.assertEquals(5, itemDto.getId()); - Assertions.assertEquals("new_item_5", itemDto.getName()); - Assertions.assertEquals("new_item_5_description", itemDto.getDescription()); - Assertions.assertEquals(1, itemDto.getOwner().getId()); + assertEquals(5, itemDto.getId()); + assertEquals("new_item_5", itemDto.getName()); + assertEquals("new_item_5_description", itemDto.getDescription()); + assertEquals(1, itemDto.getOwner().getId()); } @@ -51,7 +52,7 @@ void addNewItemWithWrongOwnerTest() { () -> itemService.create(newItemDto, 1000) ); - Assertions.assertEquals(e.getMessage(), "Пользователь с id = 1000 не найден"); + assertEquals(e.getMessage(), "Пользователь с id = 1000 не найден"); } @Test @@ -63,7 +64,7 @@ void updateItemTest() { ItemDto itemDto = itemService.update(1, updateItemDto, 1); Assertions.assertNotNull(itemDto); - Assertions.assertEquals("new_item_test", itemDto.getName()); + assertEquals("new_item_test", itemDto.getName()); } @Test @@ -76,7 +77,7 @@ void updateItemWithWrongIdTest() { () -> itemService.update(1000, updateItemDto, 2) ); - Assertions.assertEquals(e.getMessage(), "Предмет не найден"); + assertEquals(e.getMessage(), "Предмет не найден"); } @Test @@ -89,7 +90,7 @@ void updateItemWithUserIsNotOwnerTest() { () -> itemService.update(1, updateItemDto, 3) ); - Assertions.assertEquals(e.getMessage(), "У вас недостаточно прав для обновления вещи"); + assertEquals(e.getMessage(), "У вас недостаточно прав для обновления вещи"); } @Test @@ -97,8 +98,8 @@ void getItemByIdTest() { ItemWithCommentsDto itemDto = itemService.get(1L); Assertions.assertNotNull(itemDto); - Assertions.assertEquals("new_item", itemDto.getName()); - Assertions.assertEquals("description_new_item", itemDto.getDescription()); + assertEquals("new_item", itemDto.getName()); + assertEquals("description_new_item", itemDto.getDescription()); } @Test @@ -106,7 +107,7 @@ void getItemsByOwner() { List itemDtoList = itemService.getAllItemsByOwner(3L); Assertions.assertNotNull(itemDtoList); - Assertions.assertEquals(3, itemDtoList.size()); + assertEquals(3, itemDtoList.size()); } @Test @@ -114,7 +115,7 @@ void searchItemsTest() { List itemDtoList = itemService.search("item"); Assertions.assertNotNull(itemDtoList); - Assertions.assertEquals(3, itemDtoList.size()); + assertEquals(3, itemDtoList.size()); } @Test @@ -125,9 +126,9 @@ void addNewCommentTest() { CommentDto commentDto = itemService.createComment(newCommentDto, 3, 2); Assertions.assertNotNull(commentDto); - Assertions.assertEquals(2, commentDto.getId()); - Assertions.assertEquals("comment_test_text", commentDto.getText()); - Assertions.assertEquals("booker", commentDto.getAuthorName()); + assertEquals(2, commentDto.getId()); + assertEquals("comment_test_text", commentDto.getText()); + assertEquals("booker", commentDto.getAuthorName()); } @Test @@ -139,7 +140,7 @@ void addNewCommentWithWrongBookerIdTest() { () -> itemService.createComment(newCommentDto, 3, 3) ); - Assertions.assertEquals(e.getMessage(), "Бронирование для предмета не найдено, невозможно добавить комментарий"); + assertEquals(e.getMessage(), "Бронирование для предмета не найдено, невозможно добавить комментарий"); } } \ No newline at end of file diff --git a/server/src/test/java/ru/practicum/shareit/request/RequestServiceTest.java b/server/src/test/java/ru/practicum/shareit/request/RequestServiceTest.java index 2a2526d..b0d24c4 100644 --- a/server/src/test/java/ru/practicum/shareit/request/RequestServiceTest.java +++ b/server/src/test/java/ru/practicum/shareit/request/RequestServiceTest.java @@ -17,7 +17,7 @@ @Transactional @RequiredArgsConstructor(onConstructor_ = @Autowired) public class RequestServiceTest { - private final ItemRequestServiseImpl requestService; + private final ItemRequestServiceImpl requestService; @Test void postRequestTest() { From 7cb741dd2e16bdb92485fd7faea219d2f2d00f6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Wed, 2 Jul 2025 04:39:51 +0400 Subject: [PATCH 51/55] fix test --- .../shareit/user/UserServiceImplTest.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/server/src/test/java/ru/practicum/shareit/user/UserServiceImplTest.java b/server/src/test/java/ru/practicum/shareit/user/UserServiceImplTest.java index e1a12fa..81bf4b0 100644 --- a/server/src/test/java/ru/practicum/shareit/user/UserServiceImplTest.java +++ b/server/src/test/java/ru/practicum/shareit/user/UserServiceImplTest.java @@ -5,6 +5,7 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.dao.DataIntegrityViolationException; import org.springframework.transaction.annotation.Transactional; import ru.practicum.shareit.exception.NotFoundException; import ru.practicum.shareit.user.dto.NewUserDto; @@ -22,6 +23,7 @@ public class UserServiceImplTest { private final UserServiceImpl userService; private NewUserDto newUserDto; + private NewUserDto newUserDto2; private UpdateUserDto updateUserDto; @Test @@ -35,6 +37,30 @@ void addUserTest() { Assertions.assertEquals("don@example.com", userDto.getEmail()); } + @Test + void addUserWithoutEmailTest() { + newUserDto = new NewUserDto("Don", "don@example.com"); + newUserDto.setEmail(null); + + DataIntegrityViolationException e = assertThrows(DataIntegrityViolationException.class, + () -> userService.create(newUserDto) + ); + + } + + @Test + void addUserWithSameEmailTest() { + newUserDto = new NewUserDto("Don", "don@example.com"); + newUserDto2 = new NewUserDto("Don2", "don@example.com"); + userService.create(newUserDto); + + + DataIntegrityViolationException e = assertThrows(DataIntegrityViolationException.class, + () -> userService.create(newUserDto2) + ); + + } + @Test void updateUserTest() { @@ -110,4 +136,15 @@ void deleteTest() { Assertions.assertEquals(e.getMessage(), "Пользователь с id = 1 не найден"); } + + @Test + void deleteWrongIdTest() { + + NotFoundException e = assertThrows(NotFoundException.class, + () -> userService.deleteUser(1000) + ); + + Assertions.assertEquals(e.getMessage(), "Пользователь с id = 1000 не найден"); + + } } \ No newline at end of file From 1a1c27d4176d08adc15644ca3b06a6d2403882a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Wed, 2 Jul 2025 04:57:25 +0400 Subject: [PATCH 52/55] fix test --- .../shareit/booking/BookingMapperTest.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 server/src/test/java/ru/practicum/shareit/booking/BookingMapperTest.java diff --git a/server/src/test/java/ru/practicum/shareit/booking/BookingMapperTest.java b/server/src/test/java/ru/practicum/shareit/booking/BookingMapperTest.java new file mode 100644 index 0000000..730d98a --- /dev/null +++ b/server/src/test/java/ru/practicum/shareit/booking/BookingMapperTest.java @@ -0,0 +1,52 @@ +package ru.practicum.shareit.booking; + +import org.junit.jupiter.api.Test; +import ru.practicum.shareit.booking.dto.NewBookingDto; +import ru.practicum.shareit.item.model.Item; +import ru.practicum.shareit.user.User; + +import java.time.LocalDateTime; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class BookingMapperTest { + + @Test + void mapToBookingDtoTest() { + User user = new User(1L, "Tom", "tom@mail.ru"); + LocalDateTime localDateTime = LocalDateTime.now(); + LocalDateTime localDateTime2 = LocalDateTime.now(); + Item item = new Item(1L, "test-item", "test-description", true, user, null); + + Booking booking = new Booking(1, localDateTime, localDateTime2, item, user, BookingStatus.WAITING); + BookingMapper mapper = new BookingMapper(); + + assertEquals(mapper.mapToBookingDto(booking).getStart(), localDateTime); + assertEquals(mapper.mapToBookingDto(booking).getEnd(), localDateTime2); + assertEquals(mapper.mapToBookingDto(booking).getStatus(), BookingStatus.WAITING); + assertEquals(mapper.mapToBookingDto(booking).getId(), 1); + assertEquals(mapper.mapToBookingDto(booking).getBooker().getId(), user.getId()); + assertEquals(mapper.mapToBookingDto(booking).getItem().getId(), item.getId()); + } + + @Test + void mapToNewBookingDto() { + User user = new User(1L, "Tom", "tom@mail.ru"); + Item item = new Item(1L, "test-item", "test-description", true, user, null); + LocalDateTime localDateTime = LocalDateTime.now(); + LocalDateTime localDateTime2 = LocalDateTime.now(); + NewBookingDto newBookingDto = NewBookingDto.builder() + .start(localDateTime) + .end(localDateTime2) + .itemId(1L) + .build(); + BookingMapper mapper = new BookingMapper(); + assertEquals(mapper.mapToNewBookingDto(newBookingDto, user, item).getStart(), localDateTime); + assertEquals(mapper.mapToNewBookingDto(newBookingDto, user, item).getEnd(), localDateTime2); + assertEquals(mapper.mapToNewBookingDto(newBookingDto, user, item).getStatus(), BookingStatus.WAITING); + assertEquals(mapper.mapToNewBookingDto(newBookingDto, user, item).getBooker().getId(), user.getId()); + assertEquals(mapper.mapToNewBookingDto(newBookingDto, user, item).getItem().getId(), item.getId()); + + + } +} From 35c3f48b5bc5d9985b448f775116879f27a7dc52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Wed, 2 Jul 2025 05:05:46 +0400 Subject: [PATCH 53/55] fix test --- .../shareit/item/ItemServiceImplTest.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/server/src/test/java/ru/practicum/shareit/item/ItemServiceImplTest.java b/server/src/test/java/ru/practicum/shareit/item/ItemServiceImplTest.java index 457808e..c9053fd 100644 --- a/server/src/test/java/ru/practicum/shareit/item/ItemServiceImplTest.java +++ b/server/src/test/java/ru/practicum/shareit/item/ItemServiceImplTest.java @@ -8,6 +8,7 @@ import org.springframework.transaction.annotation.Transactional; import ru.practicum.shareit.comment.dto.CommentDto; import ru.practicum.shareit.comment.dto.NewCommentDto; +import ru.practicum.shareit.exception.NoAccessException; import ru.practicum.shareit.exception.NotFoundException; import ru.practicum.shareit.item.dto.*; @@ -102,6 +103,14 @@ void getItemByIdTest() { assertEquals("description_new_item", itemDto.getDescription()); } + @Test + void getItemByWrongIdTest() { + NotFoundException e = assertThrows(NotFoundException.class, + () -> itemService.get(1000) + ); + assertEquals(e.getMessage(), "Предмет не найден"); + } + @Test void getItemsByOwner() { List itemDtoList = itemService.getAllItemsByOwner(3L); @@ -143,4 +152,17 @@ void addNewCommentWithWrongBookerIdTest() { assertEquals(e.getMessage(), "Бронирование для предмета не найдено, невозможно добавить комментарий"); } + + @Test + void addNewCommentWithWrongTimeTest() { + NewCommentDto newCommentDto = NewCommentDto.builder() + .text("comment_test_text").build(); + + NoAccessException e = assertThrows(NoAccessException.class, + () -> itemService.createComment(newCommentDto, 3, 1) + ); + + assertEquals(e.getMessage(), "Срок бронирования предмета еще не закончился"); + + } } \ No newline at end of file From 024ababaf78d472c67a414e9a8138028fa420a9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Wed, 2 Jul 2025 14:19:17 +0400 Subject: [PATCH 54/55] fix test --- gateway/src/main/resources/application.properties | 3 ++- pom.xml | 2 +- server/pom.xml | 8 ++++++++ server/src/main/resources/application-test.properties | 1 + server/src/main/resources/application.properties | 2 ++ .../practicum/shareit/booking/BookingControllerTest.java | 4 ++++ .../ru/practicum/shareit/item/ItemControllerTest.java | 4 ++++ .../practicum/shareit/request/RequestControllerTest.java | 4 ++++ .../ru/practicum/shareit/user/UserControllerTest.java | 4 ++++ 9 files changed, 30 insertions(+), 2 deletions(-) diff --git a/gateway/src/main/resources/application.properties b/gateway/src/main/resources/application.properties index 2ee0851..773f8fa 100644 --- a/gateway/src/main/resources/application.properties +++ b/gateway/src/main/resources/application.properties @@ -4,4 +4,5 @@ logging.level.org.springframework.web.client.RestTemplate=DEBUG server.port=8080 -shareit-server.url=http://localhost:9090 \ No newline at end of file +shareit-server.url=http://localhost:9090 +spring.aot.enabled=false \ No newline at end of file diff --git a/pom.xml b/pom.xml index 79cba37..e59910a 100644 --- a/pom.xml +++ b/pom.xml @@ -126,7 +126,7 @@ LINE COVEREDRATIO - 0.9 + 0.8 BRANCH diff --git a/server/pom.xml b/server/pom.xml index 566db3e..7f3f7b1 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -65,10 +65,18 @@ org.springframework.boot spring-boot-maven-plugin + 3.3.2 + + + process-test-aot + none + + + coverage diff --git a/server/src/main/resources/application-test.properties b/server/src/main/resources/application-test.properties index 586a1a7..37265c6 100644 --- a/server/src/main/resources/application-test.properties +++ b/server/src/main/resources/application-test.properties @@ -1,6 +1,7 @@ spring.jpa.hibernate.ddl-auto=none spring.jpa.properties.hibernate.format_sql=true spring.sql.init.mode=always +spring.aot.enabled=false logging.level.org.springframework.orm.jpa=INFO logging.level.org.springframework.transaction=INFO diff --git a/server/src/main/resources/application.properties b/server/src/main/resources/application.properties index d678861..7898400 100644 --- a/server/src/main/resources/application.properties +++ b/server/src/main/resources/application.properties @@ -4,6 +4,8 @@ server.port=9090 spring.jpa.hibernate.ddl-auto=none spring.jpa.properties.hibernate.format_sql=true spring.sql.init.mode=always +spring.aot.enabled=false + logging.level.org.springframework.orm.jpa=INFO logging.level.org.springframework.transaction=INFO diff --git a/server/src/test/java/ru/practicum/shareit/booking/BookingControllerTest.java b/server/src/test/java/ru/practicum/shareit/booking/BookingControllerTest.java index e895255..9fb80fe 100644 --- a/server/src/test/java/ru/practicum/shareit/booking/BookingControllerTest.java +++ b/server/src/test/java/ru/practicum/shareit/booking/BookingControllerTest.java @@ -1,9 +1,11 @@ package ru.practicum.shareit.booking; import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.RequiredArgsConstructor; import org.junit.jupiter.api.Test; import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.MediaType; @@ -20,6 +22,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @WebMvcTest(BookingController.class) +@AutoConfigureMockMvc +@RequiredArgsConstructor(onConstructor_ = @Autowired) public class BookingControllerTest { @Autowired diff --git a/server/src/test/java/ru/practicum/shareit/item/ItemControllerTest.java b/server/src/test/java/ru/practicum/shareit/item/ItemControllerTest.java index 1ba6ddf..78bb9db 100644 --- a/server/src/test/java/ru/practicum/shareit/item/ItemControllerTest.java +++ b/server/src/test/java/ru/practicum/shareit/item/ItemControllerTest.java @@ -1,9 +1,11 @@ package ru.practicum.shareit.item; import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.RequiredArgsConstructor; import org.junit.jupiter.api.Test; import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.MediaType; @@ -23,6 +25,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @WebMvcTest(ItemController.class) +@AutoConfigureMockMvc +@RequiredArgsConstructor(onConstructor_ = @Autowired) class ItemControllerTest { @Autowired diff --git a/server/src/test/java/ru/practicum/shareit/request/RequestControllerTest.java b/server/src/test/java/ru/practicum/shareit/request/RequestControllerTest.java index 0164662..952e113 100644 --- a/server/src/test/java/ru/practicum/shareit/request/RequestControllerTest.java +++ b/server/src/test/java/ru/practicum/shareit/request/RequestControllerTest.java @@ -1,9 +1,11 @@ package ru.practicum.shareit.request; import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.RequiredArgsConstructor; import org.junit.jupiter.api.Test; import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.MediaType; @@ -19,6 +21,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @WebMvcTest(ItemRequestController.class) +@AutoConfigureMockMvc +@RequiredArgsConstructor(onConstructor_ = @Autowired) public class RequestControllerTest { @Autowired diff --git a/server/src/test/java/ru/practicum/shareit/user/UserControllerTest.java b/server/src/test/java/ru/practicum/shareit/user/UserControllerTest.java index 5e4cd1e..4184014 100644 --- a/server/src/test/java/ru/practicum/shareit/user/UserControllerTest.java +++ b/server/src/test/java/ru/practicum/shareit/user/UserControllerTest.java @@ -2,9 +2,11 @@ import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.RequiredArgsConstructor; import org.junit.jupiter.api.Test; import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.MediaType; @@ -18,6 +20,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @WebMvcTest(UserController.class) +@AutoConfigureMockMvc +@RequiredArgsConstructor(onConstructor_ = @Autowired) class UserControllerTest { @Autowired From 68451ab94ff62b668549f0f3c636523f22f1397f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=BB=D0=B0=D0=B2=D0=B0?= Date: Wed, 2 Jul 2025 14:44:55 +0400 Subject: [PATCH 55/55] =?UTF-8?q?=D0=92=D1=82=D0=BE=D1=80=D0=B0=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=82=D0=B7=2016=D0=BE=D0=B3=D0=BE=20=D1=81=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=BD=D1=82=D0=B0.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3?= =?UTF-8?q?=D1=83=D1=80=D0=B0=D1=86=D0=B8=D0=B9=20=D0=BA=D0=BB=D0=B8=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shareit/booking/BookingClient.java | 29 ++++--------------- .../shareit/booking/BookingClientConfig.java | 28 ++++++++++++++++++ .../practicum/shareit/item/ItemClient.java | 25 +++++----------- .../shareit/item/ItemClientConfig.java | 28 ++++++++++++++++++ .../shareit/request/ItemRequestClient.java | 22 ++++---------- .../request/ItemRequestClientConfig.java | 28 ++++++++++++++++++ .../practicum/shareit/user/UserClient.java | 23 ++++----------- .../shareit/user/UserClientConfig.java | 28 ++++++++++++++++++ 8 files changed, 137 insertions(+), 74 deletions(-) create mode 100644 gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingClientConfig.java create mode 100644 gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemClientConfig.java create mode 100644 gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestClientConfig.java create mode 100644 gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserClientConfig.java diff --git a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingClient.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingClient.java index 55f392c..52419a8 100644 --- a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingClient.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingClient.java @@ -1,12 +1,8 @@ package ru.practicum.shareit.practicum.shareit.booking; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.web.client.RestTemplateBuilder; + import org.springframework.http.ResponseEntity; -import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; -import org.springframework.stereotype.Service; -import org.springframework.web.util.DefaultUriBuilderFactory; +import org.springframework.web.client.RestTemplate; import ru.practicum.shareit.practicum.shareit.booking.dto.BookItemRequestDto; import ru.practicum.shareit.practicum.shareit.booking.dto.BookingState; import ru.practicum.shareit.practicum.shareit.booking.dto.NewBookingDto; @@ -14,20 +10,11 @@ import java.util.Map; -@Service + public class BookingClient extends BaseClient { - private static final String API_PREFIX = "/bookings"; - private static final String BOOKING_ID_PATH = "/{bookingId}"; - private static final String BOOKING_PATH = BOOKING_ID_PATH + "?approved={approved}"; - - @Autowired - public BookingClient(@Value("${shareit-server.url}") String serverUrl, RestTemplateBuilder builder) { - super( - builder - .uriTemplateHandler(new DefaultUriBuilderFactory(serverUrl + API_PREFIX)) - .requestFactory(() -> new HttpComponentsClientHttpRequestFactory()) - .build() - ); + + public BookingClient(RestTemplate restTemplate) { + super(restTemplate); } public ResponseEntity getBookings(long userId, BookingState state, Integer from, Integer size) { @@ -52,10 +39,6 @@ public ResponseEntity create(NewBookingDto newBookingDto, long userId) { return post("", userId, newBookingDto); } - /*public ResponseEntity approveBooking(long userId, long bookingId, boolean approved) { - Map uriVariables = Map.of("bookingId",bookingId,"approved", approved); - return patch(BOOKING_PATH,userId,uriVariables); - }*/ public ResponseEntity approveBooking(long userId, long bookingId, boolean approved) { Map uriVariables = Map.of("bookingId", bookingId, "approved", approved); diff --git a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingClientConfig.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingClientConfig.java new file mode 100644 index 0000000..6850032 --- /dev/null +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/booking/BookingClientConfig.java @@ -0,0 +1,28 @@ +package ru.practicum.shareit.practicum.shareit.booking; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.DefaultUriBuilderFactory; + +@Configuration +public class BookingClientConfig { + @Value("${shareit-server.url}") + private String serverUrl; + + @Bean + public RestTemplate bookingRestTemplate(RestTemplateBuilder builder) { + return builder + .uriTemplateHandler(new DefaultUriBuilderFactory(serverUrl + "/bookings")) + .requestFactory(() -> new HttpComponentsClientHttpRequestFactory()) + .build(); + } + + @Bean + public BookingClient bookingClient(RestTemplate bookingRestTemplate) { + return new BookingClient(bookingRestTemplate); + } +} diff --git a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemClient.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemClient.java index c603f02..d0c3b10 100644 --- a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemClient.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemClient.java @@ -1,29 +1,20 @@ package ru.practicum.shareit.practicum.shareit.item; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.web.client.RestTemplateBuilder; + import org.springframework.http.ResponseEntity; -import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; -import org.springframework.stereotype.Service; -import org.springframework.web.util.DefaultUriBuilderFactory; + +import org.springframework.web.client.RestTemplate; import ru.practicum.shareit.practicum.shareit.client.BaseClient; import ru.practicum.shareit.practicum.shareit.dto.NewCommentDto; import ru.practicum.shareit.practicum.shareit.item.dto.NewItemDto; import ru.practicum.shareit.practicum.shareit.item.dto.UpdateItemDto; -@Service + public class ItemClient extends BaseClient { - private static final String API_PREFIX = "/items"; - - @Autowired - public ItemClient(@Value("${shareit-server.url}") String serverUrl, RestTemplateBuilder builder) { - super( - builder - .uriTemplateHandler(new DefaultUriBuilderFactory(serverUrl + API_PREFIX)) - .requestFactory(() -> new HttpComponentsClientHttpRequestFactory()) - .build() - ); + + + public ItemClient(RestTemplate restTemplate) { + super(restTemplate); } public ResponseEntity create(NewItemDto itemDto, Long userId) { diff --git a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemClientConfig.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemClientConfig.java new file mode 100644 index 0000000..97cc1dc --- /dev/null +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/item/ItemClientConfig.java @@ -0,0 +1,28 @@ +package ru.practicum.shareit.practicum.shareit.item; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.DefaultUriBuilderFactory; + +@Configuration +public class ItemClientConfig { + @Value("${shareit-server.url}") + private String serverUrl; + + @Bean + public RestTemplate itemRestTemplate(RestTemplateBuilder builder) { + return builder + .uriTemplateHandler(new DefaultUriBuilderFactory(serverUrl + "/items")) + .requestFactory(() -> new HttpComponentsClientHttpRequestFactory()) + .build(); + } + + @Bean + public ItemClient itemClient(RestTemplate itemRestTemplate) { + return new ItemClient(itemRestTemplate); + } +} diff --git a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestClient.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestClient.java index 4a15c2b..85f3bca 100644 --- a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestClient.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestClient.java @@ -1,28 +1,16 @@ package ru.practicum.shareit.practicum.shareit.request; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.web.client.RestTemplateBuilder; + import org.springframework.http.ResponseEntity; -import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; -import org.springframework.stereotype.Service; -import org.springframework.web.util.DefaultUriBuilderFactory; +import org.springframework.web.client.RestTemplate; import ru.practicum.shareit.practicum.shareit.client.BaseClient; import ru.practicum.shareit.practicum.shareit.request.dto.NewItemRequestDto; -@Service -public class ItemRequestClient extends BaseClient { - private static final String API_PREFIX = "/requests"; +public class ItemRequestClient extends BaseClient { - @Autowired - public ItemRequestClient(@Value("${shareit-server.url}") String serverUrl, RestTemplateBuilder builder) { - super( - builder - .uriTemplateHandler(new DefaultUriBuilderFactory(serverUrl + API_PREFIX)) - .requestFactory(() -> new HttpComponentsClientHttpRequestFactory()) - .build() - ); + public ItemRequestClient(RestTemplate restTemplate) { + super(restTemplate); } public ResponseEntity create(NewItemRequestDto newItemRequestDto, Long userId) { diff --git a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestClientConfig.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestClientConfig.java new file mode 100644 index 0000000..e38ba73 --- /dev/null +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/request/ItemRequestClientConfig.java @@ -0,0 +1,28 @@ +package ru.practicum.shareit.practicum.shareit.request; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.DefaultUriBuilderFactory; + +@Configuration +public class ItemRequestClientConfig { + @Value("${shareit-server.url}") + private String serverUrl; + + @Bean + public RestTemplate itemRequestRestTemplate(RestTemplateBuilder builder) { + return builder + .uriTemplateHandler(new DefaultUriBuilderFactory(serverUrl + "/requests")) + .requestFactory(() -> new HttpComponentsClientHttpRequestFactory()) + .build(); + } + + @Bean + public ItemRequestClient itemRequestClient(RestTemplate itemRequestRestTemplate) { + return new ItemRequestClient(itemRequestRestTemplate); + } +} diff --git a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserClient.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserClient.java index e00db03..4e9605c 100644 --- a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserClient.java +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserClient.java @@ -1,28 +1,17 @@ package ru.practicum.shareit.practicum.shareit.user; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.web.client.RestTemplateBuilder; + import org.springframework.http.ResponseEntity; -import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; -import org.springframework.stereotype.Service; -import org.springframework.web.util.DefaultUriBuilderFactory; +import org.springframework.web.client.RestTemplate; import ru.practicum.shareit.practicum.shareit.client.BaseClient; import ru.practicum.shareit.practicum.shareit.user.dto.NewUserDto; import ru.practicum.shareit.practicum.shareit.user.dto.UpdateUserDto; -@Service + public class UserClient extends BaseClient { - private static final String API_PREFIX = "/users"; - - @Autowired - public UserClient(@Value("${shareit-server.url}") String serverUrl, RestTemplateBuilder builder) { - super( - builder - .uriTemplateHandler(new DefaultUriBuilderFactory(serverUrl + API_PREFIX)) - .requestFactory(() -> new HttpComponentsClientHttpRequestFactory()) - .build() - ); + + public UserClient(RestTemplate restTemplate) { + super(restTemplate); } public ResponseEntity create(NewUserDto userDto) { diff --git a/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserClientConfig.java b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserClientConfig.java new file mode 100644 index 0000000..6e3f152 --- /dev/null +++ b/gateway/src/main/java/ru.practicum.shareit/practicum/shareit/user/UserClientConfig.java @@ -0,0 +1,28 @@ +package ru.practicum.shareit.practicum.shareit.user; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.DefaultUriBuilderFactory; + +@Configuration +public class UserClientConfig { + @Value("${shareit-server.url}") + private String serverUrl; + + @Bean + public RestTemplate userRestTemplate(RestTemplateBuilder builder) { + return builder + .uriTemplateHandler(new DefaultUriBuilderFactory(serverUrl + "/users")) + .requestFactory(() -> new HttpComponentsClientHttpRequestFactory()) + .build(); + } + + @Bean + public UserClient userClient(RestTemplate userRestTemplate) { + return new UserClient(userRestTemplate); + } +}