Skip to content

Commit d5c8077

Browse files
committed
feat(): build & deploy #1
1 parent 0740dd6 commit d5c8077

File tree

11 files changed

+95
-38
lines changed

11 files changed

+95
-38
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,4 @@ out/
3737
.vscode/
3838
/old.martinmeer/
3939
/src/main/resources/misc/testSQLQueries
40+
/src/main/java/org/martinmeer/otkassistant/.env

build.gradle.kts

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ plugins {
66
id("org.asciidoctor.jvm.convert") version "3.3.2"
77
//checkstyle
88
id("com.github.ben-manes.versions") version "0.51.0"
9+
//id("nu.studer.dotenv") version "3.0.0"
910
}
1011

1112
group = "org.martinmeer"
@@ -17,16 +18,13 @@ java {
1718
}
1819
}
1920

20-
tasks.war {
21-
archiveFileName.set("otkassist.war") // Название WAR-файла
22-
}
23-
2421
configurations {
2522
compileOnly {
2623
extendsFrom(configurations.annotationProcessor.get())
2724
}
2825
}
2926

27+
3028
repositories {
3129
mavenCentral()
3230
}
@@ -43,7 +41,7 @@ dependencies {
4341
implementation("org.springframework.boot:spring-boot-starter-actuator")
4442
implementation("org.springframework.boot:spring-boot-starter-data-rest")
4543
implementation("org.springframework.boot:spring-boot-starter-freemarker")
46-
implementation("org.springframework.boot:spring-boot-starter-security")
44+
//implementation("org.springframework.boot:spring-boot-starter-security")
4745
implementation("org.springframework.boot:spring-boot-starter-web")
4846
implementation("org.springframework.boot:spring-boot-starter-web-services")
4947
implementation("org.springframework.boot:spring-boot-starter-jdbc")
@@ -53,21 +51,21 @@ dependencies {
5351
//developmentOnly("org.springframework.boot:spring-boot-docker-compose")
5452
runtimeOnly("org.postgresql:postgresql")
5553

56-
//providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
57-
5854
// Thymeleaf
5955
implementation("org.thymeleaf.extras:thymeleaf-extras-springsecurity6")
6056

6157
//Spring-core
6258
//Spring-web
6359
//Jackson
6460
//JDBC
65-
providedRuntime("org.apache.tomcat.embed:tomcat-embed-core") // Удаляем встроенный Tomcat
61+
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat") // Удаляем встроенный Tomcat
6662
providedCompile("javax.servlet:javax.servlet-api:4.0.1") // Добавляем сервлет API
6763
//JPA
6864

6965
//Test
70-
testImplementation("org.springframework.boot:spring-boot-starter-test")
66+
testImplementation("org.springframework.boot:spring-boot-starter-test") {
67+
exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
68+
}
7169
//testImplementation("org.springframework.boot:spring-boot-testcontainers")
7270
testImplementation("org.springframework.restdocs:spring-restdocs-mockmvc")
7371
testImplementation("org.springframework.security:spring-security-test")
@@ -86,14 +84,28 @@ dependencies {
8684
exclude(group = "org.springframework.boot", module = "spring-boot-starter-logging")
8785
}
8886
}
87+
implementation("io.github.cdimascio:dotenv-java:3.1.0")
8988

9089
}
9190

92-
tasks.withType<Test> {
93-
useJUnitPlatform()
91+
//tasks
92+
93+
tasks.war {
94+
archiveFileName.set("otkassist.war") // Название WAR-файла
9495
}
9596

97+
98+
//tasks.withType<Test> {}
99+
96100
tasks.test {
101+
useJUnitPlatform{
102+
excludeTags("excludeFromBuild") // Exclude tests with this tag
103+
}
104+
systemProperty("spring.profiles.active", "test")
105+
106+
107+
//environment("DB_USERNAME", ("DB_USERNAME"))
108+
//environment("DB_PASSWORD", System.getenv("DB_PASSWORD"))
97109
outputs.dir(project.extra["snippetsDir"]!!)
98110

99111
jvmArgs("-javaagent:${mockitoAgent.asPath}")
@@ -104,3 +116,4 @@ tasks.asciidoctor {
104116
inputs.dir(project.extra["snippetsDir"]!!)
105117
dependsOn(tasks.test)
106118
}
119+

src/main/java/org/martinmeer/otkassistant/core/service/SchemaAwareNamedParameterJdbcTemplate.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,13 @@
33
import lombok.Setter;
44
import org.springframework.dao.DataAccessException;
55
import org.springframework.jdbc.core.JdbcTemplate;
6-
import org.springframework.jdbc.core.RowMapper;
76
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
87
import org.springframework.stereotype.Component;
9-
import org.springframework.stereotype.Service;
8+
import org.springframework.transaction.annotation.Transactional;
109

11-
import javax.sql.DataSource;
1210
import java.util.Map;
1311

14-
@Service
12+
@Component
1513
public class SchemaAwareNamedParameterJdbcTemplate {
1614

1715
@Setter
@@ -26,16 +24,21 @@ public SchemaAwareNamedParameterJdbcTemplate(
2624
this.namedParameterJdbcTemplate = namedParameterJdbcTemplate;
2725
}
2826

27+
@Transactional
2928
public <T> T queryWithSchema(String sql, Map<String, Object> params, Class<T> clazz) {
29+
String sanitaizedSchemaName = sanitizeSchemaName(schemaName);
3030
try {
31-
jdbcTemplate.execute("SET LOCAL search_path TO " + sanitizeSchemaName(schemaName));
31+
jdbcTemplate.execute("SET LOCAL search_path TO " + sanitaizedSchemaName);
3232
return namedParameterJdbcTemplate.queryForObject(sql, params, clazz);
3333
} catch (DataAccessException e) {
3434
throw new RuntimeException("Error setting schema or executing query", e);
35+
} finally {
36+
// Reset schema to default or previous state if needed
37+
jdbcTemplate.execute("RESET search_path");
3538
}
3639
}
3740

38-
public String sanitizeSchemaName(String schemaName) {
41+
private String sanitizeSchemaName(String schemaName) {
3942
if (!schemaName.matches("^[a-zA-Z0-9_]+$")) {
4043
throw new IllegalArgumentException("Invalid schema name: " + schemaName);
4144
}

src/main/java/org/martinmeer/otkassistant/core/web/WebConfig.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,10 @@ public class WebConfig implements WebMvcConfigurer {
99
@Override
1010
public void addCorsMappings(CorsRegistry registry) {
1111
registry.addMapping("/api/**")
12-
.allowedOrigins("http://localhost:40155/")
13-
.allowedOrigins("http://localhost:8080")
14-
.allowedOrigins("http://otk-help.martinmeer.com")
15-
.allowedMethods("POST", "GET")
12+
.allowedOrigins("https://otk-help.martinmeer.com")
13+
.allowedMethods("POST", "GET", "OPTIONS")
1614
.allowedHeaders("*")
15+
.maxAge(3600)
1716
.allowCredentials(true);
1817
}
1918
}

src/main/java/org/martinmeer/otkassistant/ost22/service/OstMainService.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -152,12 +152,11 @@ BigDecimal calculateMeasuringValues(BigDecimal dimension, BigDecimal deviance) {
152152

153153
Map<String, String> outputMapper() {
154154
Map<String, String> output = new HashMap<>();
155-
maxMeasuringValue = calculateMeasuringValues(nominalDimension, maxMeasuringValue);
156-
minMeasuringValue = calculateMeasuringValues(nominalDimension, minMeasuringValue);
157-
String devianceValues = lowerDeviance.toString()
158-
+ ", "
159-
+ upperDeviance.toString();
160-
output.put("deviance_values", devianceValues);
155+
maxMeasuringValue = calculateMeasuringValues(nominalDimension, upperDeviance);
156+
minMeasuringValue = calculateMeasuringValues(nominalDimension, lowerDeviance);
157+
158+
output.put("upper_deviance", upperDeviance.toString());
159+
output.put("lower_deviance", lowerDeviance.toString());
161160
output.put("max_mes_value", maxMeasuringValue.toString());
162161
output.put("min_mes_value", minMeasuringValue.toString());
163162
return output;

src/main/resources/misc/front_names.txt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
/*
2+
3+
const response = await postData('/api/process', requestData);
4+
5+
26
padeId=ost22
37
const page = 'ost22';
48
const inputString = `${type}:${size}`;
@@ -7,9 +11,10 @@ const page = 'ost22';
711
const type = document.getElementById('detail_type').value.trim(); // Значение из выпадающего списка
812
const size = document.getElementById('nominal_dimension').value.trim();
913

10-
document.getElementById('deviance_values').value = response.deviation_values || '';
11-
document.getElementById('min_mes_value').value = response.min_mes_value || '';
12-
document.getElementById('max_mes_value').value = response.max_mes_value || '';
14+
document.getElementById('upper_deviance').value = response.deviation_values || '';
15+
document.getElementById('lower_deviance').value = response.deviation_values || '';
16+
document.getElementById('min_mes_value').value = response.min_mes_value || '';
17+
document.getElementById('max_mes_value').value = response.max_mes_value || '';
1318

1419

1520

src/main/resources/misc/note.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
BasicDimension
22
BasicUpperDeviance
33
BasicLowerDeviance
4+
5+
scp otkassist.war [email protected]:/opt/tomcat11/webapps
6+

src/test/java/org/martinmeer/otkassistant/core/service/SchemaAwareNamedParameterJdbcTemplateRealDbTest.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package org.martinmeer.otkassistant.core.service;
22

33

4+
import org.junit.jupiter.api.Tag;
45
import org.junit.jupiter.api.Test;
6+
import org.martinmeer.otkassistant.MainApp;
57
import org.springframework.beans.factory.annotation.Autowired;
68
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
79
import org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration;
810
import org.springframework.boot.test.context.SpringBootTest;
9-
import org.springframework.test.annotation.DirtiesContext;
1011
import org.springframework.test.context.ActiveProfiles;
1112
import org.springframework.transaction.annotation.Transactional;
1213

@@ -15,11 +16,10 @@
1516

1617
import static org.junit.jupiter.api.Assertions.*;
1718

18-
@SpringBootTest//(webEnvironment = SpringBootTest.WebEnvironment.NONE)
19+
@SpringBootTest(classes = {MainApp.class, SchemaAwareNamedParameterJdbcTemplateRealDbTest.class})
1920
@ActiveProfiles("test")
2021
@EnableAutoConfiguration(exclude = JndiDataSourceAutoConfiguration.class)
21-
//@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
22-
//@RequiredArgsConstructor(onConstructor = @__(@Autowired))
22+
@Tag("excludeFromBuild")
2323
public class SchemaAwareNamedParameterJdbcTemplateRealDbTest {
2424

2525
@Autowired
@@ -43,6 +43,21 @@ void testReadDataFromRealDb() {
4343
assertNotNull(result);
4444
BigDecimal expected = new BigDecimal("0.20");
4545
assertEquals(0, result.compareTo(expected));
46+
}
47+
@Test
48+
@Transactional
49+
void testInvalidSchemaName() {
50+
// Arrange
51+
schemaAwareJdbc.setSchemaName("invalid@schema!");;
52+
String sql = "SELECT deviance FROM undef_deviances WHERE dim_range @> :id";
53+
54+
// Act & Assert
55+
IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> {
56+
schemaAwareJdbc.queryWithSchema(sql,
57+
Map.of("id", new BigDecimal("20.0")),
58+
BigDecimal.class);
59+
}, "Invalid schema name should throw IllegalArgumentException");
4660

61+
assertTrue(exception.getMessage().contains("Invalid schema name"), "Exception message should indicate invalid schema name");
4762
}
4863
}

src/test/java/org/martinmeer/otkassistant/core/web/ApiControllerTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ void setUp() {
3838
mockMvc = MockMvcBuilders.standaloneSetup(apiController)
3939
.setControllerAdvice(new GlobalExceptionHandler())
4040
.build();
41-
4241
}
4342

4443
@Test

src/test/java/org/martinmeer/otkassistant/ost22/service/OstMainServiceTest.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
import java.lang.reflect.Field;
1414
import java.lang.reflect.Method;
1515
import java.math.BigDecimal;
16+
import java.util.Map;
1617

1718
import static org.junit.jupiter.api.Assertions.*;
1819
import static org.mockito.ArgumentMatchers.*;
19-
import static org.mockito.Mockito.verify;
20-
import static org.mockito.Mockito.when;
20+
import static org.mockito.Mockito.*;
2121

2222
@ExtendWith(MockitoExtension.class)
2323
class OstMainServiceTest {
@@ -52,7 +52,8 @@ void setUp() throws NoSuchMethodException, NoSuchFieldException {
5252
upperDevianceField = getField(OstMainService.class, "upperDeviance");
5353
lowerDevianceField = getField(OstMainService.class, "lowerDeviance");
5454
String inputDimension = "20.0";
55-
when(inputData.getInputDimension()).thenReturn(inputDimension);
55+
lenient().when(inputData.getInputDimension()).thenReturn(inputDimension);
56+
5657
}
5758

5859
@Test
@@ -133,5 +134,22 @@ private static Field getField(Class<?> clazz, String fieldName) throws NoSuchFie
133134
return field;
134135
}
135136

137+
@Test
138+
void outputMapper_ReturnsCorrectValues() throws IllegalAccessException {
139+
// Arrange: Set required fields using reflection
140+
nominalDimensionField.set(ostMainService, new BigDecimal("20.0"));
141+
upperDevianceField.set(ostMainService, new BigDecimal("0.05"));
142+
lowerDevianceField.set(ostMainService, new BigDecimal("-0.05"));
143+
144+
// Act
145+
Map<String, String> result = ostMainService.outputMapper();
136146

147+
// Assert
148+
assertAll(
149+
() -> assertEquals("0.05", result.get("upper_deviance")),
150+
() -> assertEquals("-0.05", result.get("lower_deviance")),
151+
() -> assertEquals("20.05", result.get("max_mes_value")),
152+
() -> assertEquals("19.95", result.get("min_mes_value"))
153+
);
154+
}
137155
}

0 commit comments

Comments
 (0)