diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..6462785 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index eb814e6..dd58402 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,7 +1,7 @@ - + diff --git a/spring_online_calculator/.gitignore b/spring_online_calculator/.gitignore index c2065bc..6724fc2 100644 --- a/spring_online_calculator/.gitignore +++ b/spring_online_calculator/.gitignore @@ -35,3 +35,5 @@ out/ ### VS Code ### .vscode/ + +*.db \ No newline at end of file diff --git a/spring_online_calculator/Frontend/Main.html b/spring_online_calculator/Frontend/Main.html deleted file mode 100644 index 566549b..0000000 --- a/spring_online_calculator/Frontend/Main.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - Title - - - - - \ No newline at end of file diff --git a/spring_online_calculator/build.gradle b/spring_online_calculator/build.gradle index f87e110..8e502c9 100644 --- a/spring_online_calculator/build.gradle +++ b/spring_online_calculator/build.gradle @@ -1,10 +1,10 @@ plugins { - id 'java' - id 'org.springframework.boot' version '2.7.8' + id 'org.springframework.boot' version '2.6.3' id 'io.spring.dependency-management' version '1.0.15.RELEASE' + id 'java' } -group = 'labWork' +group = 'ru.ulstu.is' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' @@ -14,11 +14,13 @@ repositories { dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'com.h2database:h2:2.1.210' + implementation group: 'org.springdoc', name: 'springdoc-openapi-ui', version: '1.6.5' + testImplementation 'org.springframework.boot:spring-boot-starter-test' - implementation 'org.springframework.boot:spring-boot-starter-validation' } tasks.named('test') { diff --git a/spring_online_calculator/gradle/wrapper/gradle-wrapper.jar b/spring_online_calculator/gradle/wrapper/gradle-wrapper.jar index 249e583..7454180 100644 Binary files a/spring_online_calculator/gradle/wrapper/gradle-wrapper.jar and b/spring_online_calculator/gradle/wrapper/gradle-wrapper.jar differ diff --git a/spring_online_calculator/gradle/wrapper/gradle-wrapper.properties b/spring_online_calculator/gradle/wrapper/gradle-wrapper.properties index 070cb70..2e6e589 100644 --- a/spring_online_calculator/gradle/wrapper/gradle-wrapper.properties +++ b/spring_online_calculator/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/spring_online_calculator/gradlew b/spring_online_calculator/gradlew index a69d9cb..1b6c787 100644 --- a/spring_online_calculator/gradlew +++ b/spring_online_calculator/gradlew @@ -205,12 +205,6 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/spring_online_calculator/gradlew.bat b/spring_online_calculator/gradlew.bat index f127cfd..107acd3 100644 --- a/spring_online_calculator/gradlew.bat +++ b/spring_online_calculator/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%"=="" @echo off +@if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +25,7 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. +if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -75,15 +75,13 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd +if "%ERRORLEVEL%"=="0" goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/spring_online_calculator/settings.gradle b/spring_online_calculator/settings.gradle index 6e3bb1f..ef5a706 100644 --- a/spring_online_calculator/settings.gradle +++ b/spring_online_calculator/settings.gradle @@ -1 +1 @@ -rootProject.name = 'spring_online_calculator' +rootProject.name = 'premium_store' diff --git a/spring_online_calculator/src/main/java/com/example/spring_online_calculator/SpringOnlineCalculatorApplication.java b/spring_online_calculator/src/main/java/com/example/spring_online_calculator/SpringOnlineCalculatorApplication.java deleted file mode 100644 index 63bf0cb..0000000 --- a/spring_online_calculator/src/main/java/com/example/spring_online_calculator/SpringOnlineCalculatorApplication.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.example.spring_online_calculator; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class SpringOnlineCalculatorApplication { - - public static void main(String[] args) { - SpringApplication.run(SpringOnlineCalculatorApplication.class, args); - } - -} diff --git a/spring_online_calculator/src/main/java/premium_store/PremiumStoreApplication.java b/spring_online_calculator/src/main/java/premium_store/PremiumStoreApplication.java new file mode 100644 index 0000000..6c6ead0 --- /dev/null +++ b/spring_online_calculator/src/main/java/premium_store/PremiumStoreApplication.java @@ -0,0 +1,11 @@ +package premium_store; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class PremiumStoreApplication { + public static void main(String[] args) { + SpringApplication.run(PremiumStoreApplication.class, args); + } +} diff --git a/spring_online_calculator/src/main/java/labWork/premium_store/model/Client.java b/spring_online_calculator/src/main/java/premium_store/model/Client.java similarity index 91% rename from spring_online_calculator/src/main/java/labWork/premium_store/model/Client.java rename to spring_online_calculator/src/main/java/premium_store/model/Client.java index 1835b14..3621bc0 100644 --- a/spring_online_calculator/src/main/java/labWork/premium_store/model/Client.java +++ b/spring_online_calculator/src/main/java/premium_store/model/Client.java @@ -1,6 +1,7 @@ -package labWork.premium_store.model; +package premium_store.model; import javax.persistence.*; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -18,7 +19,7 @@ public class Client { private Integer balance; - @ManyToMany(mappedBy = "clients") + @ManyToMany(mappedBy = "clients", fetch= FetchType.EAGER) private List tanks; public Client(){ } @@ -27,6 +28,7 @@ public class Client { this.nickName = nickName; this.email = email; this.balance = balance; + tanks = new ArrayList<>(); } public Long getId(){ @@ -87,7 +89,7 @@ public class Client { //преобразование данных по объекту в строчку @Override public String toString() { - return "Student{" + + return "Client{" + "id=" + id + ", nickName='" + nickName + '\'' + ", email='" + email + '\'' + diff --git a/spring_online_calculator/src/main/java/labWork/premium_store/model/Level.java b/spring_online_calculator/src/main/java/premium_store/model/Level.java similarity index 94% rename from spring_online_calculator/src/main/java/labWork/premium_store/model/Level.java rename to spring_online_calculator/src/main/java/premium_store/model/Level.java index 1e8ba6f..e07e43c 100644 --- a/spring_online_calculator/src/main/java/labWork/premium_store/model/Level.java +++ b/spring_online_calculator/src/main/java/premium_store/model/Level.java @@ -1,4 +1,4 @@ -package labWork.premium_store.model; +package premium_store.model; import javax.persistence.*; import java.util.Objects; @@ -55,7 +55,7 @@ public class Level { //преобразование данных по объекту в строчку @Override public String toString() { - return "Nation{" + + return "Level{" + "id=" + id + ", level='" + level + '}'; } diff --git a/spring_online_calculator/src/main/java/labWork/premium_store/model/Nation.java b/spring_online_calculator/src/main/java/premium_store/model/Nation.java similarity index 85% rename from spring_online_calculator/src/main/java/labWork/premium_store/model/Nation.java rename to spring_online_calculator/src/main/java/premium_store/model/Nation.java index 3ba19eb..2bb3409 100644 --- a/spring_online_calculator/src/main/java/labWork/premium_store/model/Nation.java +++ b/spring_online_calculator/src/main/java/premium_store/model/Nation.java @@ -1,6 +1,10 @@ -package labWork.premium_store.model; +package premium_store.model; -import javax.persistence.*; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; import java.util.Objects; @Entity diff --git a/spring_online_calculator/src/main/java/labWork/premium_store/model/Tank.java b/spring_online_calculator/src/main/java/premium_store/model/Tank.java similarity index 87% rename from spring_online_calculator/src/main/java/labWork/premium_store/model/Tank.java rename to spring_online_calculator/src/main/java/premium_store/model/Tank.java index 4dd0e4d..1527916 100644 --- a/spring_online_calculator/src/main/java/labWork/premium_store/model/Tank.java +++ b/spring_online_calculator/src/main/java/premium_store/model/Tank.java @@ -1,9 +1,10 @@ -package labWork.premium_store.model; +package premium_store.model; import javax.persistence.*; +import java.util.Objects; import java.util.ArrayList; import java.util.List; -import java.util.Objects; +import java.util.stream.Collectors; @Entity public class Tank { @@ -26,10 +27,10 @@ public class Tank { private int cost; //реализация двунаправленной связи мнокие-ко-многим - @ManyToMany + @ManyToMany(fetch= FetchType.EAGER) @JoinTable(name = "tanks_of_clients", - joinColumns = @JoinColumn(name = "tank_fk"), - inverseJoinColumns = @JoinColumn(name = "client_fk")) + joinColumns = @JoinColumn(name = "tank_id"), + inverseJoinColumns = @JoinColumn(name = "client_id")) private List clients; public Tank() { @@ -40,6 +41,7 @@ public class Tank { this.nation = nation; this.level = level; this.cost = cost; + clients = new ArrayList<>(); } public Long getId(){ @@ -119,12 +121,13 @@ public class Tank { //преобразование данных по объекту в строчку @Override public String toString() { - return "Student{" + + return "Tank{" + "id=" + id + ", name='" + name + '\'' + ", nation='" + nation + '\'' + ", level='" + level + '\'' + ", cost='" + cost + '\'' + + ", clients='" + clients.stream().map(Object::toString).collect(Collectors.joining(", ")) + '\'' + '}'; } } diff --git a/spring_online_calculator/src/main/java/labWork/premium_store/service/ClientService.java b/spring_online_calculator/src/main/java/premium_store/service/ClientService.java similarity index 95% rename from spring_online_calculator/src/main/java/labWork/premium_store/service/ClientService.java rename to spring_online_calculator/src/main/java/premium_store/service/ClientService.java index 5f688ae..747228a 100644 --- a/spring_online_calculator/src/main/java/labWork/premium_store/service/ClientService.java +++ b/spring_online_calculator/src/main/java/premium_store/service/ClientService.java @@ -1,10 +1,10 @@ -package labWork.premium_store.service; +package premium_store.service; -import labWork.premium_store.model.Client; -import labWork.premium_store.model.Tank; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; +import premium_store.model.Client; +import premium_store.model.Tank; import javax.persistence.EntityManager; import javax.persistence.EntityNotFoundException; diff --git a/spring_online_calculator/src/main/java/labWork/premium_store/service/LevelService.java b/spring_online_calculator/src/main/java/premium_store/service/LevelService.java similarity index 95% rename from spring_online_calculator/src/main/java/labWork/premium_store/service/LevelService.java rename to spring_online_calculator/src/main/java/premium_store/service/LevelService.java index 78183c4..350e06c 100644 --- a/spring_online_calculator/src/main/java/labWork/premium_store/service/LevelService.java +++ b/spring_online_calculator/src/main/java/premium_store/service/LevelService.java @@ -1,8 +1,8 @@ -package labWork.premium_store.service; +package premium_store.service; -import labWork.premium_store.model.Level; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import premium_store.model.Level; import javax.persistence.EntityManager; import javax.persistence.EntityNotFoundException; @@ -19,17 +19,21 @@ public class LevelService { if (newLevel <= 0) { throw new IllegalArgumentException("Level name is zero or less"); } + final Level level = new Level(newLevel); em.persist(level); + return level; } @Transactional(readOnly = true) public Level findLevel(Long id) { final Level level = em.find(Level.class, id); + if (level == null) { throw new EntityNotFoundException(String.format("Level with id [%s] is not found", id)); } + return level; } diff --git a/spring_online_calculator/src/main/java/labWork/premium_store/service/NationService.java b/spring_online_calculator/src/main/java/premium_store/service/NationService.java similarity index 95% rename from spring_online_calculator/src/main/java/labWork/premium_store/service/NationService.java rename to spring_online_calculator/src/main/java/premium_store/service/NationService.java index 263e783..5e5f966 100644 --- a/spring_online_calculator/src/main/java/labWork/premium_store/service/NationService.java +++ b/spring_online_calculator/src/main/java/premium_store/service/NationService.java @@ -1,9 +1,9 @@ -package labWork.premium_store.service; +package premium_store.service; -import labWork.premium_store.model.Nation; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; +import premium_store.model.Nation; import javax.persistence.EntityManager; import javax.persistence.EntityNotFoundException; diff --git a/spring_online_calculator/src/main/java/labWork/premium_store/service/TankService.java b/spring_online_calculator/src/main/java/premium_store/service/TankService.java similarity index 92% rename from spring_online_calculator/src/main/java/labWork/premium_store/service/TankService.java rename to spring_online_calculator/src/main/java/premium_store/service/TankService.java index 02a959f..ab12d58 100644 --- a/spring_online_calculator/src/main/java/labWork/premium_store/service/TankService.java +++ b/spring_online_calculator/src/main/java/premium_store/service/TankService.java @@ -1,12 +1,12 @@ -package labWork.premium_store.service; +package premium_store.service; -import labWork.premium_store.model.Client; -import labWork.premium_store.model.Level; -import labWork.premium_store.model.Nation; -import labWork.premium_store.model.Tank; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; +import premium_store.model.Client; +import premium_store.model.Level; +import premium_store.model.Nation; +import premium_store.model.Tank; import javax.persistence.EntityManager; import javax.persistence.EntityNotFoundException; diff --git a/spring_online_calculator/src/main/resources/application.properties b/spring_online_calculator/src/main/resources/application.properties index f09bd03..ccc05e8 100644 --- a/spring_online_calculator/src/main/resources/application.properties +++ b/spring_online_calculator/src/main/resources/application.properties @@ -1,6 +1,11 @@ -spring.datasource.url=jdbc:h2:mem:testdb +spring.main.banner-mode=off +#server.port=8080 +spring.datasource.url=jdbc:h2:file:./data spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password spring.jpa.database-platform=org.hibernate.dialect.H2Dialect -spring.jpa.hibernate.ddl-auto=create-drop +spring.jpa.hibernate.ddl-auto=update +spring.h2.console.enabled=true +spring.h2.console.settings.trace=false +spring.h2.console.settings.web-allow-others=false \ No newline at end of file diff --git a/spring_online_calculator/src/test/java/com/example/spring_online_calculator/SpringOnlineCalculatorApplicationTests.java b/spring_online_calculator/src/test/java/com/example/spring_online_calculator/SpringOnlineCalculatorApplicationTests.java deleted file mode 100644 index 23300b5..0000000 --- a/spring_online_calculator/src/test/java/com/example/spring_online_calculator/SpringOnlineCalculatorApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.example.spring_online_calculator; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class SpringOnlineCalculatorApplicationTests { - - @Test - void contextLoads() { - } - -} diff --git a/spring_online_calculator/src/test/java/premium_store/PremiumStoreApplicationTests.java b/spring_online_calculator/src/test/java/premium_store/PremiumStoreApplicationTests.java new file mode 100644 index 0000000..9824861 --- /dev/null +++ b/spring_online_calculator/src/test/java/premium_store/PremiumStoreApplicationTests.java @@ -0,0 +1,153 @@ +package premium_store; + +import premium_store.model.Client; +import premium_store.model.Level; +import premium_store.model.Nation; +import premium_store.model.Tank; +import premium_store.service.ClientService; +import premium_store.service.LevelService; +import premium_store.service.NationService; +import premium_store.service.TankService; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import javax.persistence.EntityNotFoundException; +import java.util.*; + +@SpringBootTest +class PremiumStoreApplicationTests { + private static final Logger log = LoggerFactory.getLogger(PremiumStoreApplicationTests.class); + + @Autowired + TankService tankService; + + @Autowired + ClientService clientService; + + @Autowired + LevelService levelService; + + @Autowired + NationService nationService; + + @Test + void testClientRead() { + clientService.deleteAllClients(); + + Client client = clientService.addClient("3tankista73", "fff@mail.ru", 3400); + log.info(client.toString()); + + Client findClient = clientService.findClient(client.getId()); + log.info(findClient.toString()); + + Assertions.assertEquals(client, findClient); + } + + @Test + void testNationRead() { + nationService.deleteAllNations(); + + Nation nation = nationService.addNation("СССР"); + log.info(nation.toString()); + + Nation findNation = nationService.findNation(nation.getId()); + log.info(findNation.toString()); + + Assertions.assertEquals(nation, findNation); + } + + @Test + void testClientReadNotFound() { + clientService.deleteAllClients(); + Assertions.assertThrows(EntityNotFoundException.class, () -> clientService.findClient(-1L)); + } + + @Test + void testLevelRead() { + tankService.deleteAllTanks(); + levelService.deleteAllLevels(); + + Level level = levelService.addLevel(8); + log.info(level.toString()); + + Level secondLevel = levelService.addLevel(9); + log.info(secondLevel.toString()); + + Assertions.assertEquals(levelService.findAllLevels().size(), 2); + } + + @Test + void testLevelReadAllEmpty() { + tankService.deleteAllTanks(); + levelService.deleteAllLevels(); + + List levels = levelService.findAllLevels(); + log.info(levels.toString()); + + Assertions.assertEquals(levels.size(), 0); + } + + @Test + void testTankReadAll() { + tankService.deleteAllTanks(); + levelService.deleteAllLevels(); + + Level firstLevel = levelService.addLevel(8); + Level secondLevel = levelService.addLevel(9); + + tankService.addTank("ИС-3", nationService.addNation("СССР"), firstLevel, 3700000); + tankService.addTank("E-75", nationService.addNation("Германия"), secondLevel, 5600000); + + List tanks = tankService.findAllTanks(); + log.info(tanks.toString()); + + Assertions.assertEquals(tanks.size(), 2); + } + + @Test + void testClientCreate() { + clientService.deleteAllClients(); + + Client firstClient = clientService.addClient("Barbarian", "dsfg@gmail.com", 56000); + log.info(firstClient.toString()); + + Client secondClient = clientService.addClient("KorbenDallas", "tankoviyGeniy@mail.ru", 37000); + log.info(secondClient.toString()); + + Assertions.assertEquals(clientService.findAllClients().size(), 2); + } + + @Test + void testUpdateTank(){ + tankService.deleteAllTanks(); + levelService.deleteAllLevels(); + clientService.deleteAllClients(); + + Client firstClient = clientService.addClient("Barbarian", "dsfg@gmail.com", 56000); + Client secondClient = clientService.addClient("KorbenDallas", "tankoviyGeniy@mail.ru", 37000); + + Level firstLevel = levelService.addLevel(8); + Level secondLevel = levelService.addLevel(9); + + Tank firstTank = tankService.addTank("ИС-3", nationService.addNation("СССР"), firstLevel, 3700000); + Tank secondTank = tankService.addTank("E-75", nationService.addNation("Германия"), secondLevel, 5600000); + + Tank tank = tankService.findTank(firstTank.getId()); + log.info(tank.toString()); + + List newClient = new ArrayList<>(); + Collections.addAll(newClient, firstClient, secondClient); + + tank.setName("ИСУ-152"); + tank.setLevel(secondLevel); + tank.setCost(4100000); + tank.setClients(newClient); + + log.info(tank.toString()); + } +} diff --git a/spring_online_calculator/src/test/resources/application.properties b/spring_online_calculator/src/test/resources/application.properties new file mode 100644 index 0000000..81734b8 --- /dev/null +++ b/spring_online_calculator/src/test/resources/application.properties @@ -0,0 +1,6 @@ +spring.datasource.url=jdbc:h2:mem:testdb +spring.datasource.driverClassName=org.h2.Driver +spring.datasource.username=sa +spring.datasource.password=password +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect +spring.jpa.hibernate.ddl-auto=create-drop \ No newline at end of file