diff --git a/backend/data.mv.db b/backend/data.mv.db index 8a8df70..c20d614 100644 Binary files a/backend/data.mv.db and b/backend/data.mv.db differ diff --git a/backend/src/main/java/com/example/backend/core/security/UserPrincipal.java b/backend/src/main/java/com/example/backend/core/security/UserPrincipal.java index d51cf25..b81ce30 100644 --- a/backend/src/main/java/com/example/backend/core/security/UserPrincipal.java +++ b/backend/src/main/java/com/example/backend/core/security/UserPrincipal.java @@ -12,6 +12,7 @@ public class UserPrincipal implements UserDetails { private final long id; private final String username; private final String password; + private final boolean isAdmin; private final Set roles; private final boolean active; @@ -19,6 +20,7 @@ public class UserPrincipal implements UserDetails { this.id = user.getId(); this.username = user.getLogin(); this.password = user.getPassword(); + this.isAdmin = user.getIsAdmin(); this.roles = Set.of(user.getRole()); this.active = true; } @@ -37,6 +39,10 @@ public class UserPrincipal implements UserDetails { return password; } + public boolean getIsAdmin() { + return isAdmin; + } + @Override public Collection getAuthorities() { return roles; diff --git a/backend/src/main/java/com/example/backend/users/api/UserController.java b/backend/src/main/java/com/example/backend/users/api/UserController.java index 3145f78..532744c 100644 --- a/backend/src/main/java/com/example/backend/users/api/UserController.java +++ b/backend/src/main/java/com/example/backend/users/api/UserController.java @@ -1,66 +1,61 @@ -package com.example.backend.users.api; +// package com.example.backend.users.api; -import java.util.List; +// import org.modelmapper.ModelMapper; +// import org.springframework.stereotype.Controller; +// import org.springframework.ui.Model; +// import org.springframework.validation.BindingResult; +// import org.springframework.web.bind.annotation.GetMapping; +// import org.springframework.web.bind.annotation.ModelAttribute; +// import org.springframework.web.bind.annotation.PostMapping; +// import org.springframework.web.bind.annotation.RequestMapping; +// import org.springframework.web.bind.annotation.RestController; -import org.modelmapper.ModelMapper; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +// import com.example.backend.core.configurations.Constants; +// import com.example.backend.users.model.UserEntity; +// import com.example.backend.users.service.UserService; -import com.example.backend.core.configurations.Constants; -import com.example.backend.users.model.UserEntity; -import com.example.backend.users.service.UserService; +// import jakarta.validation.Valid; +// import org.springframework.web.bind.annotation.RequestBody; -import jakarta.validation.Valid; +// @Controller +// // @RequestMapping(Constants.API_URL + "/user") +// public class UserController { -@RestController -@RequestMapping(Constants.API_URL + "/user") -public class UserController { +// private static final String CATEGORIES_VIEW = "categories"; +// private static final String LOGIN_VIEW = "login"; +// private static final String USER_ATTRIBUTE = "user"; - private final UserService userService; - private final ModelMapper modelMapper; +// private final UserService userService; +// private final ModelMapper modelMapper; - public UserController(UserService userService, ModelMapper modelMapper) { - this.modelMapper = modelMapper; - this.userService = userService; - } +// public UserController(UserService userService, ModelMapper modelMapper) { +// this.modelMapper = modelMapper; +// this.userService = userService; +// } - private UserEntity toEntity(UserDTO dto) { - return modelMapper.map(dto, UserEntity.class); - } +// private UserEntity toEntity(UserDTO dto) { +// return modelMapper.map(dto, UserEntity.class); +// } - private UserDTO toDto(UserEntity entity) { - return modelMapper.map(entity, UserDTO.class); - } +// private UserDTO toDto(UserEntity entity) { +// return modelMapper.map(entity, UserDTO.class); +// } - @GetMapping() - public List getAll() { - return userService.getAll().stream().map(this::toDto).toList(); - } +// @GetMapping("/edit/") +// public String create(Model model) { +// model.addAttribute(CATEGORIES_VIEW, new UserDTO()); +// return LOGIN_VIEW; +// } - @GetMapping("/{id}") - public UserDTO get(@PathVariable(name = "id") Integer id) { - return toDto(userService.get(id)); - } - - @PostMapping - public UserDTO create(@RequestBody @Valid UserDTO userDTO) { - - return toDto(userService.create(toEntity(userDTO))); - } - - @PutMapping("/{id}") - public UserDTO update(@PathVariable(name = "id") Integer id, @RequestBody UserDTO userDTO) { - return toDto(userService.update(id, toEntity(userDTO))); - } - - @DeleteMapping("/{id}") - public UserDTO delete(@PathVariable(name = "id") Integer id) { - return toDto(userService.delete(id)); - } -} +// @PostMapping("/edit/") +// public String create( +// @ModelAttribute(name = USER_ATTRIBUTE) @Valid UserDTO userDTO, +// BindingResult bindingResult, +// Model model) { +// if (bindingResult.hasErrors()) { +// return LOGIN_VIEW + "/login"; +// } +// userService.create(toEntity(userDTO)); +// return Constants.REDIRECT_VIEW + "/user"; +// } +// } diff --git a/backend/src/main/java/com/example/backend/users/api/UserDTO.java b/backend/src/main/java/com/example/backend/users/api/UserDTO.java index 9ddddab..8b756f7 100644 --- a/backend/src/main/java/com/example/backend/users/api/UserDTO.java +++ b/backend/src/main/java/com/example/backend/users/api/UserDTO.java @@ -13,16 +13,19 @@ public class UserDTO { private Integer id; @NotBlank - @Size(min = 2, max = 50) + @Size(min = 2, max = 90) private String login; @NotBlank - @Size(min = 2, max = 10) + @Size(min = 2, max = 90) private String password; @NotNull private UserRole role; + @NotNull + private boolean isAdmin; + @JsonProperty(access = JsonProperty.Access.READ_ONLY) public Integer getId() { return id; @@ -55,4 +58,12 @@ public class UserDTO { public void setRole(UserRole role) { this.role = role; } + + public boolean getIsAdmin() { + return isAdmin; + } + + public void setIsAdmin(boolean isAdmin) { + this.isAdmin = isAdmin; + } } diff --git a/backend/src/main/java/com/example/backend/users/api/UserSignupController.java b/backend/src/main/java/com/example/backend/users/api/UserSignupController.java index 72a0d56..b464e8e 100644 --- a/backend/src/main/java/com/example/backend/users/api/UserSignupController.java +++ b/backend/src/main/java/com/example/backend/users/api/UserSignupController.java @@ -61,5 +61,4 @@ public class UserSignupController { userService.create(toEntity(user)); return Constants.REDIRECT_VIEW + Constants.LOGIN_URL + "?signup"; } - } diff --git a/backend/src/main/java/com/example/backend/users/api/UserSignupDTO.java b/backend/src/main/java/com/example/backend/users/api/UserSignupDTO.java index 3cdb770..5760da3 100644 --- a/backend/src/main/java/com/example/backend/users/api/UserSignupDTO.java +++ b/backend/src/main/java/com/example/backend/users/api/UserSignupDTO.java @@ -1,19 +1,28 @@ package com.example.backend.users.api; +import com.example.backend.users.model.UserRole; + import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Size; public class UserSignupDTO { @NotBlank - @Size(min = 3, max = 20) + @Size(min = 3, max = 100) private String login; + @NotBlank - @Size(min = 3, max = 20) + @Size(min = 3, max = 90) private String password; + @NotBlank - @Size(min = 3, max = 20) + private UserRole role; + + @NotBlank + @Size(min = 3, max = 90) private String passwordConfirm; + private boolean isAdmin; // Новое поле для определения роли пользователя + public String getLogin() { return login; } @@ -37,4 +46,20 @@ public class UserSignupDTO { public void setPasswordConfirm(String passwordConfirm) { this.passwordConfirm = passwordConfirm; } + + public boolean getIsAdmin() { + return isAdmin; + } + + public void setIsAdmin(boolean isAdmin) { + this.isAdmin = isAdmin; + } + + public UserRole getRole() { + return role; + } + + public void setRole(UserRole role) { + this.role = role; + } } diff --git a/backend/src/main/java/com/example/backend/users/model/UserEntity.java b/backend/src/main/java/com/example/backend/users/model/UserEntity.java index f43a973..b29fc03 100644 --- a/backend/src/main/java/com/example/backend/users/model/UserEntity.java +++ b/backend/src/main/java/com/example/backend/users/model/UserEntity.java @@ -4,6 +4,7 @@ import java.util.Objects; import com.example.backend.core.model.BaseEntity; +import io.micrometer.common.lang.NonNull; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Table; @@ -12,21 +13,25 @@ import jakarta.persistence.Table; @Table(name = "users") public class UserEntity extends BaseEntity { - @Column(nullable = false, unique = true, length = 15) + @Column(nullable = false, unique = true, length = 90) private String login; - @Column(nullable = false, length = 5) + @Column(nullable = false, length = 90) private String password; + @NonNull + private boolean isAdmin; + private UserRole role; public UserEntity() { } - public UserEntity(Integer id, String login, String password) { + public UserEntity(Integer id, String login, String password, boolean isAdmin) { this.login = login; this.password = password; + this.isAdmin = isAdmin; this.role = UserRole.USER; } @@ -46,6 +51,14 @@ public class UserEntity extends BaseEntity { this.password = password; } + public boolean getIsAdmin() { + return isAdmin; + } + + public void setIsAdmin(boolean isAdmin) { + this.isAdmin = isAdmin; + } + public UserRole getRole() { return role; } @@ -69,6 +82,7 @@ public class UserEntity extends BaseEntity { return Objects.equals(other.getId(), id) && Objects.equals(other.getLogin(), login) && Objects.equals(other.getRole(), role) && + Objects.equals(other.getIsAdmin(), isAdmin) && Objects.equals(other.getPassword(), password); } } diff --git a/backend/src/main/java/com/example/backend/users/service/UserService.java b/backend/src/main/java/com/example/backend/users/service/UserService.java index b43472c..d9c6a0f 100644 --- a/backend/src/main/java/com/example/backend/users/service/UserService.java +++ b/backend/src/main/java/com/example/backend/users/service/UserService.java @@ -59,11 +59,16 @@ public class UserService implements UserDetailsService { if (entity == null) { throw new IllegalArgumentException("Entity is null"); } + entity.setLogin(null); checkLogin(null, entity.getLogin()); final String password = Optional.ofNullable(entity.getPassword()).orElse(""); entity.setPassword( passwordEncoder.encode(StringUtils.hasText(password.strip()) ? password : Constants.DEFAULT_PASSWORD)); - entity.setRole(Optional.ofNullable(entity.getRole()).orElse(UserRole.USER)); + if (entity.getIsAdmin() == true) { + entity.setRole(UserRole.ADMIN); + } else { + entity.setRole(UserRole.USER); + } repository.save(entity); return repository.save(entity); } diff --git a/backend/src/main/resources/public/css/style.css b/backend/src/main/resources/public/css/style.css index 678a1cd..5f25b33 100644 --- a/backend/src/main/resources/public/css/style.css +++ b/backend/src/main/resources/public/css/style.css @@ -1,9 +1,8 @@ @font-face { font-family: Candara; - src: url("backend\src\main\resources\public\fonts\candara-light.ttf"); + src: url("../fonts/candara-light.ttf"); } - /* NAVBAR */ .my-navbar { font-family: Candara; @@ -12,13 +11,13 @@ color: white; } -.my-navbar .link a:hover { +.my-navbar.link a:hover { font-family: Candara; text-decoration: underline !important; color: rgb(251, 158, 149); } -.my-navbar .logo { +.my-navbar.logo { height: 30px; } @@ -28,4 +27,108 @@ background-color: #3C2C72; color: white; height: 32px; +} + + +/* SIGNUP РЕГИСТРАЦИЯ!!! */ +#login-page { + font-family: Candara; + background-image: url("../images/logo_light.png"); + background-color: rgb(0, 0, 0); + background-position: center; + background-size: cover; + background-repeat: no-repeat; + color: #ffffff; +} + +.col { + opacity: 0.6; +} + +.input-fill { + font-size: 3vh; + text-align: center; +} + +.btn { + width: 300px; + height: 50px; + font-size: 25px; + transition: 0.3s; +} + +.btn:hover { + transform: scale(1.1); +} + +@media screen and (max-width: 576px) { + + p, + .are-you-admin { + font-size: min(10vw, 25px); + } + + .btn { + font-size: min(10vw, 18px); + width: 30vh; + } +} + +.are-you-admin { + font-size: 20px; +} + +/* LOGIN ВХОД!!! */ + +.main-bg-into { + /* background-color: black; */ + background-color: rgb(92, 55, 137); + background-image: url("../images/logotip_LC.png"); + background-position: center; + background-size: cover; + background-repeat: no-repeat; +} + +#into-page { + font-family: Candara; + background-color: rgba(0, 0, 0, 0.6); + + background-blend-mode: multiply; + color: white; +} + +.text-label { + font-size: 25px; + text-align: center; +} + +.btn { + width: 300px; + height: 50px; + font-size: 25px; + transition: 0.9s; +} + +.btn:hover { + transform: scale(1.1); +} + +@media screen and (max-width: 576px) { + + .p { + font-size: min(10vw, 36px); + } + + .btn { + font-size: min(10vw, 25px); + width: 30vh; + } +} + +.error { + font-family: CandaraBold; + color: #f1ff56; + text-align: center; + font-size: 3.5vh; + text-decoration: underline; } \ No newline at end of file diff --git a/backend/src/main/resources/public/favicon.svg b/backend/src/main/resources/public/favicon.svg deleted file mode 100644 index 7e1bd9a..0000000 --- a/backend/src/main/resources/public/favicon.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/backend/src/main/resources/public/images/logo_light.png b/backend/src/main/resources/public/images/logo_light.png new file mode 100644 index 0000000..829e9b5 Binary files /dev/null and b/backend/src/main/resources/public/images/logo_light.png differ diff --git a/backend/src/main/resources/public/images/logotip_LC.png b/backend/src/main/resources/public/images/logotip_LC.png new file mode 100644 index 0000000..7232619 Binary files /dev/null and b/backend/src/main/resources/public/images/logotip_LC.png differ diff --git a/data.mv.db b/data.mv.db index 44a4b8d..3be0971 100644 Binary files a/data.mv.db and b/data.mv.db differ diff --git a/data.trace.db b/data.trace.db index 575d8b2..2a5d561 100644 --- a/data.trace.db +++ b/data.trace.db @@ -72,3 +72,230 @@ insert into users (is_admin,password,username,id) values (?,?,?,?) [22001-224] org.h2.jdbc.JdbcSQLDataException: Значение слишком длинное для поля "PASSWORD CHARACTER VARYING(5)": "'string' (6)" Value too long for column "PASSWORD CHARACTER VARYING(5)": "'string' (6)"; SQL statement: insert into users (is_admin,password,username,id) values (?,?,?,?) [22001-224] +2024-05-12 10:12:25.785506+04:00 database: flush +org.h2.message.DbException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: D:/code/PIbd-21_Bakalskaya_E.D._INTERNET_PROGRAMMING_BACKEND/data.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: D:/code/PIbd-21_Bakalskaya_E.D._INTERNET_PROGRAMMING_BACKEND/data.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:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.getConnectionUrl(H2ConsoleAutoConfiguration.java:94) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at java.base/java.util.stream.SortedOps$RefSortingSink.end(SortedOps.java:395) + at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) + at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.logDataSources(H2ConsoleAutoConfiguration.java:86) + at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.lambda$h2Console$0(H2ConsoleAutoConfiguration.java:69) + at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.withThreadContextClassLoader(H2ConsoleAutoConfiguration.java:78) + at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.h2Console(H2ConsoleAutoConfiguration.java:69) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:140) + at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:644) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:636) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1335) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1165) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:210) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:201) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addServletContextInitializerBeans(ServletContextInitializerBeans.java:96) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.(ServletContextInitializerBeans.java:85) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getServletContextInitializerBeans(ServletWebServerApplicationContext.java:266) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.selfInitialize(ServletWebServerApplicationContext.java:240) + at org.springframework.boot.web.embedded.tomcat.TomcatStarter.onStartup(TomcatStarter.java:52) + at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4880) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) + at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:845) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) + at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:240) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) + at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) + at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:921) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) + at org.apache.catalina.startup.Tomcat.start(Tomcat.java:437) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:126) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.(TomcatWebServer.java:105) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:499) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:218) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:188) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:162) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:618) + 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:334) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) + at com.example.backend.BackendApplication.main(BackendApplication.java:32) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: D:/code/PIbd-21_Bakalskaya_E.D._INTERNET_PROGRAMMING_BACKEND/data.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: D:/code/PIbd-21_Bakalskaya_E.D._INTERNET_PROGRAMMING_BACKEND/data.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) + ... 103 more +Caused by: org.h2.mvstore.MVStoreException: The file is locked: D:/code/PIbd-21_Bakalskaya_E.D._INTERNET_PROGRAMMING_BACKEND/data.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) + ... 97 more +2024-05-12 10:12:27.410246+04:00 database: flush +org.h2.message.DbException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: D:/code/PIbd-21_Bakalskaya_E.D._INTERNET_PROGRAMMING_BACKEND/data.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: D:/code/PIbd-21_Bakalskaya_E.D._INTERNET_PROGRAMMING_BACKEND/data.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:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:428) + at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:61) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentUsingJdbcMetadata(JdbcEnvironmentInitiator.java:276) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:107) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:68) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:130) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:238) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215) + at org.hibernate.boot.model.relational.Database.(Database.java:45) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:223) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:191) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:170) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1432) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1503) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:390) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:366) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1833) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782) + 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:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1234) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:952) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624) + 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:334) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) + at com.example.backend.BackendApplication.main(BackendApplication.java:32) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: Внутренняя ошибка: "org.h2.mvstore.MVStoreException: The file is locked: D:/code/PIbd-21_Bakalskaya_E.D._INTERNET_PROGRAMMING_BACKEND/data.mv.db [2.2.224/7]" +General error: "org.h2.mvstore.MVStoreException: The file is locked: D:/code/PIbd-21_Bakalskaya_E.D._INTERNET_PROGRAMMING_BACKEND/data.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) + ... 66 more +Caused by: org.h2.mvstore.MVStoreException: The file is locked: D:/code/PIbd-21_Bakalskaya_E.D._INTERNET_PROGRAMMING_BACKEND/data.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) + ... 60 more +2024-05-12 21:34:34.174331+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLDataException: Значение слишком длинное для поля "PASSWORD CHARACTER VARYING(5)": "'$2a$10$Rf07keY4Z/WhQLBEqbMbyu56QuCA5xbmHeAVPNg/odAvY47yE8GjC' (60)" +Value too long for column "PASSWORD CHARACTER VARYING(5)": "'$2a$10$Rf07keY4Z/WhQLBEqbMbyu56QuCA5xbmHeAVPNg/odAvY47yE8GjC' (60)"; SQL statement: +insert into users (is_admin,login,password,role,id) values (?,?,?,?,?) [22001-224] +2024-05-12 21:38:56.147601+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLDataException: Значение слишком длинное для поля "PASSWORD CHARACTER VARYING(20)": "'$2a$10$7XkFYCPQBOF7yXXQ6kEkO.0QBBtiCOPDjxucmGsrxBXHXfoaAP8Tu' (60)" +Value too long for column "PASSWORD CHARACTER VARYING(20)": "'$2a$10$7XkFYCPQBOF7yXXQ6kEkO.0QBBtiCOPDjxucmGsrxBXHXfoaAP8Tu' (60)"; SQL statement: +insert into users (is_admin,login,password,role,id) values (?,?,?,?,?) [22001-224] +2024-05-12 21:39:04.953731+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLDataException: Значение слишком длинное для поля "PASSWORD CHARACTER VARYING(20)": "'$2a$10$ZAbf6WfHePM5ns4r4DZWmuj9yTPKjm.VfT4q95Tc3qiROTPzlb6Sq' (60)" +Value too long for column "PASSWORD CHARACTER VARYING(20)": "'$2a$10$ZAbf6WfHePM5ns4r4DZWmuj9yTPKjm.VfT4q95Tc3qiROTPzlb6Sq' (60)"; SQL statement: +insert into users (is_admin,login,password,role,id) values (?,?,?,?,?) [22001-224] +2024-05-12 21:39:08.584296+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLDataException: Значение слишком длинное для поля "PASSWORD CHARACTER VARYING(20)": "'$2a$10$abhWyp7BEpM/f5iR8lbXJ.1TtCLvd7ZR48Z.oJZFQfDeJqkCaEPQi' (60)" +Value too long for column "PASSWORD CHARACTER VARYING(20)": "'$2a$10$abhWyp7BEpM/f5iR8lbXJ.1TtCLvd7ZR48Z.oJZFQfDeJqkCaEPQi' (60)"; SQL statement: +insert into users (is_admin,login,password,role,id) values (?,?,?,?,?) [22001-224] +2024-05-12 21:39:30.388688+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLDataException: Значение слишком длинное для поля "PASSWORD CHARACTER VARYING(20)": "'$2a$10$wO/abVNIh838IC9VTQLrB.JfG7qsWsAxTebHZXXTVK8ln7jkMpxiK' (60)" +Value too long for column "PASSWORD CHARACTER VARYING(20)": "'$2a$10$wO/abVNIh838IC9VTQLrB.JfG7qsWsAxTebHZXXTVK8ln7jkMpxiK' (60)"; SQL statement: +insert into users (is_admin,login,password,role,id) values (?,?,?,?,?) [22001-224] +2024-05-12 21:43:25.051363+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLDataException: Значение слишком длинное для поля "PASSWORD CHARACTER VARYING(20)": "'$2a$10$gqXogx6wGIIbkYL9tAA83uSWNioogg6sxNo./nPbW5EAt/K2R2AFm' (60)" +Value too long for column "PASSWORD CHARACTER VARYING(20)": "'$2a$10$gqXogx6wGIIbkYL9tAA83uSWNioogg6sxNo./nPbW5EAt/K2R2AFm' (60)"; SQL statement: +insert into users (is_admin,login,password,role,id) values (?,?,?,?,?) [22001-224] +2024-05-12 21:45:41.743220+04:00 jdbc[3]: exception +org.h2.jdbc.JdbcSQLDataException: Значение слишком длинное для поля "PASSWORD CHARACTER VARYING(20)": "'$2a$10$KxYCFqPHmoXVKChGwJA5AOiZqYiIwLs9sVLimM8jR2mGIcSyuJmvO' (60)" +Value too long for column "PASSWORD CHARACTER VARYING(20)": "'$2a$10$KxYCFqPHmoXVKChGwJA5AOiZqYiIwLs9sVLimM8jR2mGIcSyuJmvO' (60)"; SQL statement: +insert into users (is_admin,login,password,role,id) values (?,?,?,?,?) [22001-224]