Skip to content

Commit aa3d93f

Browse files
committed
new version, transaction cleanups
1 parent f2fd824 commit aa3d93f

14 files changed

+22
-52
lines changed

docker-compose.yml

+3-6
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ services:
1818
- "MYSQL_DATABASE=noteappdb"
1919
ports:
2020
- 3306:3306
21-
command: mysqld --lower_case_table_names=1 --skip-ssl --character_set_server=utf8mb4 --explicit_defaults_for_timestamp
2221
networks:
2322
- note-app-network
2423
labels:
@@ -28,14 +27,12 @@ services:
2827
profiles:
2928
- all
3029

31-
volumes:
32-
esdata1:
33-
driver: local
3430
networks:
3531
note-app-network:
3632
driver: bridge
3733

3834

3935
#run using
40-
#docker-compose -f docker-compose.yml up
41-
# or just docker-compose up
36+
#docker-compose --profile all up OR
37+
#docker-compose --profile mailHog up
38+

pom.xml

+12-12
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>org.springframework.boot</groupId>
88
<artifactId>spring-boot-starter-parent</artifactId>
9-
<version>3.4.0-M3</version>
9+
<version>3.4.3</version>
1010
<relativePath/> <!-- lookup parent from repository -->
1111
</parent>
1212

@@ -16,25 +16,25 @@
1616
<properties>
1717
<java.version>21</java.version>
1818

19-
<springdoc-openapi-ui.version>2.6.0</springdoc-openapi-ui.version>
20-
<mapstruct.version>1.6.2</mapstruct.version>
19+
<springdoc-openapi-ui.version>2.8.5</springdoc-openapi-ui.version>
20+
<mapstruct.version>1.6.3</mapstruct.version>
2121

22-
<selenide.version>7.5.1</selenide.version>
22+
<selenide.version>7.7.3</selenide.version>
2323

2424
<wro4j.version>1.9.0</wro4j.version>
25-
<spock.version>2.4-M4-groovy-4.0</spock.version>
25+
<spock.version>2.4-M5-groovy-4.0</spock.version>
2626
<!-- client deps -->
2727
<webjar-jquery.version>3.5.1</webjar-jquery.version>
2828
<webjar-bootstrap.version>4.5.0</webjar-bootstrap.version>
2929
<webjar-popperjs.version>2.0.2</webjar-popperjs.version>
3030

3131

3232
<!-- code quality -->
33-
<archunit-junit5.version>1.3.0</archunit-junit5.version>
33+
<archunit-junit5.version>1.4.0</archunit-junit5.version>
3434
<sonar-maven-plugin.version>3.10.0.2594</sonar-maven-plugin.version>
3535
<jacoco-maven-plugin.version>0.8.10</jacoco-maven-plugin.version>
36-
<maven.checkstyle.plugin.version>3.3.0</maven.checkstyle.plugin.version>
37-
<puppycrawl.checkstyle.version>10.18.1</puppycrawl.checkstyle.version>
36+
<maven.checkstyle.plugin.version>3.6.0</maven.checkstyle.plugin.version>
37+
<puppycrawl.checkstyle.version>10.21.4</puppycrawl.checkstyle.version>
3838
<puppycrawl.checkstyle.config.file>src/main/resources/checkstyle.xml</puppycrawl.checkstyle.config.file>
3939

4040

@@ -55,12 +55,12 @@
5555
<maven-surefire-plugin.version>3.1.2</maven-surefire-plugin.version>
5656
<maven-failsafe-plugin.version>3.1.2</maven-failsafe-plugin.version>
5757
<google.error-prone.compiler.version>2.19.1</google.error-prone.compiler.version>
58-
<groovy.maven.plugin.version>3.0.2</groovy.maven.plugin.version>
59-
<modernizer-maven-plugin.version>2.7.0</modernizer-maven-plugin.version>
60-
<spotbugs.plugin.version>4.7.3.6</spotbugs.plugin.version>
58+
<groovy.maven.plugin.version>4.1.1</groovy.maven.plugin.version>
59+
<modernizer-maven-plugin.version>3.1.0</modernizer-maven-plugin.version>
60+
<spotbugs.plugin.version>4.9.2.0</spotbugs.plugin.version>
6161
<findsecbugs-plugin.version>1.12.0</findsecbugs-plugin.version>
6262
<sb-contrib-plugin.version>7.6.0</sb-contrib-plugin.version>
63-
<owasp-dependency-check-plugin.version>8.4.0</owasp-dependency-check-plugin.version>
63+
<owasp-dependency-check-plugin.version>12.1.0</owasp-dependency-check-plugin.version>
6464
</properties>
6565

6666

src/main/java/gt/app/DataCreator.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.springframework.stereotype.Component;
1616

1717
import java.io.File;
18+
import java.nio.file.Path;
1819
import java.util.stream.Stream;
1920

2021
@Component
@@ -39,9 +40,9 @@ public void ctxRefreshed(ContextRefreshedEvent evt) {
3940
public void initData() {
4041
log.info("Context Refreshed !!, Initializing Data... ");
4142

42-
File uploadFolder = new File(appProperties.fileStorage().uploadFolder());
43+
File uploadFolder = Path.of(appProperties.fileStorage().uploadFolder()).toFile();
4344
if (!uploadFolder.exists()) {
44-
if (uploadFolder.mkdirs() && Stream.of(ReceivedFile.FileGroup.values()).allMatch(f -> new File(uploadFolder.getAbsolutePath()).mkdir())) {
45+
if (uploadFolder.mkdirs() && Stream.of(ReceivedFile.FileGroup.values()).allMatch(f -> Path.of(uploadFolder.getAbsolutePath()).toFile().mkdir())) {
4546
log.info("Upload folder created successfully");
4647
} else {
4748
log.info("Failure to create upload folder");

src/main/java/gt/app/modules/file/FileService.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import jakarta.validation.constraints.NotNull;
1111
import java.io.IOException;
1212
import java.nio.file.Path;
13-
import java.nio.file.Paths;
1413
import java.util.UUID;
1514

1615
@Service
@@ -19,7 +18,7 @@ public class FileService {
1918
private final Path rootLocation;
2019

2120
public FileService(AppProperties appProperties) {
22-
this.rootLocation = Paths.get(appProperties.fileStorage().uploadFolder());
21+
this.rootLocation = Path.of(appProperties.fileStorage().uploadFolder());
2322
}
2423

2524
public String store(ReceivedFile.FileGroup fileGroup, @NotNull MultipartFile file) {

src/main/java/gt/app/modules/file/ReceivedFileService.java

-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import gt.app.domain.ReceivedFile;
44
import lombok.RequiredArgsConstructor;
55
import org.springframework.stereotype.Service;
6-
import org.springframework.transaction.annotation.Transactional;
76

87
import java.util.Optional;
98
import java.util.UUID;
@@ -14,7 +13,6 @@ public class ReceivedFileService {
1413

1514
final ReceivedFileRepository receivedFileRepository;
1615

17-
@Transactional
1816
public Optional<ReceivedFile> findById(UUID id) {
1917
return receivedFileRepository.findById(id);
2018
}

src/main/java/gt/app/modules/note/NoteRepository.java

+3-8
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,20 @@
77
import org.springframework.data.jpa.repository.JpaRepository;
88
import org.springframework.data.jpa.repository.Query;
99
import org.springframework.data.repository.query.Param;
10-
import org.springframework.transaction.annotation.Transactional;
1110

1211
import java.util.Optional;
1312

1413
interface NoteRepository extends JpaRepository<Note, Long> {
1514

16-
@EntityGraph(attributePaths = {"createdByUser"})
17-
@Transactional(readOnly = true)
15+
@EntityGraph(attributePaths = {"createdByUser", "attachedFiles"})
1816
Optional<Note> findById(Long id);
1917

20-
@EntityGraph(attributePaths = {"createdByUser"})
21-
@Transactional(readOnly = true)
18+
@EntityGraph(attributePaths = {"createdByUser", "attachedFiles"})
2219
Page<Note> findAll(Pageable pageable);
2320

24-
@EntityGraph(attributePaths = {"createdByUser"})
25-
@Transactional(readOnly = true)
21+
@EntityGraph(attributePaths = {"createdByUser", "attachedFiles"})
2622
Page<Note> findByCreatedByUserIdOrderByCreatedDateDesc(Pageable pageable, Long userId);
2723

2824
@Query("select n.createdByUser.id from Note n where n.id=:id ")
29-
@Transactional(readOnly = true)
3025
Long findCreatedByUserIdById(@Param("id") Long id);
3126
}

src/main/java/gt/app/modules/note/NoteService.java

-5
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import org.springframework.data.domain.Page;
1212
import org.springframework.data.domain.Pageable;
1313
import org.springframework.stereotype.Service;
14-
import org.springframework.transaction.annotation.Transactional;
1514
import org.springframework.web.multipart.MultipartFile;
1615

1716
import java.util.ArrayList;
@@ -47,7 +46,6 @@ public Note createNote(NoteCreateDto dto) {
4746
return save(note);
4847
}
4948

50-
@Transactional
5149
public Note update(NoteEditDto dto) {
5250

5351
Optional<Note> noteOpt = noteRepository.findById(dto.id());
@@ -57,7 +55,6 @@ public Note update(NoteEditDto dto) {
5755
}).orElseThrow();
5856
}
5957

60-
@Transactional
6158
public NoteReadDto read(Long id) {
6259
return noteRepository.findById(id)
6360
.map(noteMapper::mapForRead).orElseThrow();
@@ -67,13 +64,11 @@ public Note save(Note note) {
6764
return noteRepository.save(note);
6865
}
6966

70-
@Transactional
7167
public Page<NoteReadDto> readAll(Pageable pageable) {
7268
return noteRepository.findAll(pageable)
7369
.map(noteMapper::mapForRead);
7470
}
7571

76-
@Transactional
7772
public Page<NoteReadDto> readAllByUser(Pageable pageable, Long userId) {
7873
return noteRepository.findByCreatedByUserIdOrderByCreatedDateDesc(pageable, userId)
7974
.map(noteMapper::mapForRead);

src/main/java/gt/app/modules/user/AppUserDetailsService.java

-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import lombok.AllArgsConstructor;
66
import org.springframework.security.core.userdetails.UsernameNotFoundException;
77
import org.springframework.stereotype.Service;
8-
import org.springframework.transaction.annotation.Transactional;
98

109
import java.util.Optional;
1110

@@ -24,7 +23,6 @@ public AppUserDetails loadUserByUsername(String email) {
2423
.orElseThrow(() -> new UsernameNotFoundException(" User with login:" + email + " was not found in the " + " database "));
2524
}
2625

27-
@Transactional(readOnly = true)
2826
public AppUserDetails getCustomUserDetails(AppUser user) {
2927

3028
return new AppUserDetails(user.getId(), user.getUsername(), user.getEmail(), user.getPassword(), user.getFirstName(), user.getLastName(), user.getAuthorities(),

src/main/java/gt/app/modules/user/AuthorityRepository.java

-2
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@
22

33
import gt.app.domain.Authority;
44
import org.springframework.data.jpa.repository.JpaRepository;
5-
import org.springframework.transaction.annotation.Transactional;
65

76
import java.util.Collection;
87
import java.util.Set;
98

109
interface AuthorityRepository extends JpaRepository<Authority, String> {
11-
@Transactional(readOnly = true)
1210
Set<Authority> findByNameIn(Collection<String> name);
1311
}

src/main/java/gt/app/modules/user/LiteUserRepository.java

-3
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,11 @@
22

33
import gt.app.domain.LiteUser;
44
import org.springframework.data.jpa.repository.JpaRepository;
5-
import org.springframework.transaction.annotation.Transactional;
65

76
import java.util.Optional;
87

98
interface LiteUserRepository extends JpaRepository<LiteUser, Long> {
10-
@Transactional(readOnly = true)
119
Optional<LiteUser> findOneByUniqueId(String uniqueId);
1210

13-
@Transactional(readOnly = true)
1411
Optional<LiteUser> findByIdAndActiveIsTrue(Long id);
1512
}

src/main/java/gt/app/modules/user/UserAuthorityService.java

-2
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,9 @@
66
import gt.app.modules.note.NoteService;
77
import lombok.RequiredArgsConstructor;
88
import org.springframework.stereotype.Service;
9-
import org.springframework.transaction.annotation.Transactional;
109

1110
@Service("appSecurity")
1211
@RequiredArgsConstructor
13-
@Transactional(readOnly = true)
1412
public class UserAuthorityService {
1513

1614
private final NoteService noteService;

src/main/java/gt/app/modules/user/UserRepository.java

-3
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,14 @@
33
import gt.app.domain.AppUser;
44
import org.springframework.data.jpa.repository.EntityGraph;
55
import org.springframework.data.jpa.repository.JpaRepository;
6-
import org.springframework.transaction.annotation.Transactional;
76

87
import java.util.Optional;
98

109
interface UserRepository extends JpaRepository<AppUser, Long> {
1110

1211
@EntityGraph(attributePaths = {"authorities"})
13-
@Transactional(readOnly = true)
1412
Optional<AppUser> findOneWithAuthoritiesByUniqueId(String uniqueId);
1513

16-
@Transactional(readOnly = true)
1714
boolean existsByUniqueId(String uniqueId);
1815

1916
Optional<AppUser> findByIdAndActiveIsTrue(Long id);

src/main/java/gt/app/modules/user/UserService.java

-2
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,10 @@
1313
import lombok.RequiredArgsConstructor;
1414
import org.springframework.security.crypto.password.PasswordEncoder;
1515
import org.springframework.stereotype.Service;
16-
import org.springframework.transaction.annotation.Transactional;
1716

1817
import java.util.Set;
1918

2019
@Service
21-
@Transactional
2220
@RequiredArgsConstructor
2321
public class UserService {
2422

src/main/resources/application.yml

-1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,5 @@ app-properties:
4848

4949

5050
spring-doc:
51-
enable-native-support: true
5251
show-actuator: true
5352

0 commit comments

Comments
 (0)