From c8d1c511b337042e6bfdc2338805203725166f6f Mon Sep 17 00:00:00 2001 From: Jakub Praszkowski Date: Tue, 7 Jul 2026 16:07:07 +0200 Subject: [PATCH] refactor: cleanup of the unnecessary code --- .../controller/UrlController.java | 2 +- .../controller/UserController.java | 2 +- .../com/kubuski/urlshortener/entity/User.java | 30 ++----------------- .../urlshortener/job/UrlCleanupJob.java | 2 ++ .../{EntityMapper.java => UserMapper.java} | 21 ++----------- .../service/AuthenticationService.java | 1 - .../urlshortener/service/UrlService.java | 10 +++---- .../urlshortener/service/UserService.java | 7 +++-- .../urlshortener/mapper/EntityMapperTest.java | 7 +++-- 9 files changed, 21 insertions(+), 61 deletions(-) rename src/main/java/com/kubuski/urlshortener/mapper/{EntityMapper.java => UserMapper.java} (62%) diff --git a/src/main/java/com/kubuski/urlshortener/controller/UrlController.java b/src/main/java/com/kubuski/urlshortener/controller/UrlController.java index f0deeae..f5add0e 100644 --- a/src/main/java/com/kubuski/urlshortener/controller/UrlController.java +++ b/src/main/java/com/kubuski/urlshortener/controller/UrlController.java @@ -13,7 +13,7 @@ @RequiredArgsConstructor @RequestMapping("/api/v1/shorten") @PreAuthorize("hasRole('USER')") -class UrlController { +final class UrlController { private final UrlService urlService; diff --git a/src/main/java/com/kubuski/urlshortener/controller/UserController.java b/src/main/java/com/kubuski/urlshortener/controller/UserController.java index e6487c3..5e38254 100644 --- a/src/main/java/com/kubuski/urlshortener/controller/UserController.java +++ b/src/main/java/com/kubuski/urlshortener/controller/UserController.java @@ -12,7 +12,7 @@ @RestController @RequiredArgsConstructor @RequestMapping("/api/v1/users") -class UserController { +final class UserController { private final UserService userService; diff --git a/src/main/java/com/kubuski/urlshortener/entity/User.java b/src/main/java/com/kubuski/urlshortener/entity/User.java index 78c11d8..5fb85e3 100644 --- a/src/main/java/com/kubuski/urlshortener/entity/User.java +++ b/src/main/java/com/kubuski/urlshortener/entity/User.java @@ -1,5 +1,6 @@ package com.kubuski.urlshortener.entity; +import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -7,14 +8,7 @@ import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.Table; + import java.util.Collection; import java.util.List; @@ -46,24 +40,4 @@ public class User implements UserDetails { public Collection getAuthorities() { return List.of(new SimpleGrantedAuthority(this.role.name())); } - - @Override - public boolean isAccountNonExpired() { - return true; - } - - @Override - public boolean isAccountNonLocked() { - return true; - } - - @Override - public boolean isCredentialsNonExpired() { - return true; - } - - @Override - public boolean isEnabled() { - return true; - } } diff --git a/src/main/java/com/kubuski/urlshortener/job/UrlCleanupJob.java b/src/main/java/com/kubuski/urlshortener/job/UrlCleanupJob.java index 64d4c66..e79779a 100644 --- a/src/main/java/com/kubuski/urlshortener/job/UrlCleanupJob.java +++ b/src/main/java/com/kubuski/urlshortener/job/UrlCleanupJob.java @@ -6,6 +6,7 @@ import org.quartz.JobExecutionContext; import org.springframework.scheduling.quartz.QuartzJobBean; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import java.time.Instant; import java.time.temporal.ChronoUnit; @@ -19,6 +20,7 @@ public class UrlCleanupJob extends QuartzJobBean { private final UrlRepository urlRepository; @Override + @Transactional protected void executeInternal(final JobExecutionContext context) { Instant cutoffDate = calculateCutoffDate(); List urlsToDelete = findUrlsToDelete(cutoffDate); diff --git a/src/main/java/com/kubuski/urlshortener/mapper/EntityMapper.java b/src/main/java/com/kubuski/urlshortener/mapper/UserMapper.java similarity index 62% rename from src/main/java/com/kubuski/urlshortener/mapper/EntityMapper.java rename to src/main/java/com/kubuski/urlshortener/mapper/UserMapper.java index b213710..13ad226 100644 --- a/src/main/java/com/kubuski/urlshortener/mapper/EntityMapper.java +++ b/src/main/java/com/kubuski/urlshortener/mapper/UserMapper.java @@ -5,22 +5,11 @@ import com.kubuski.urlshortener.entity.Url; import com.kubuski.urlshortener.entity.User; -/** - * Utility class for mapping between entities and DTOs. - * Centralizes conversion logic to reduce code duplication. - */ -public final class EntityMapper { +public final class UserMapper { - private EntityMapper() { - // Utility class, prevent instantiation + private UserMapper() { } - /** - * Converts a User entity to UserResponse DTO. - * - * @param user the User entity - * @return UserResponse DTO - */ public static UserResponse toUserResponse(User user) { return new UserResponse( user.getId(), @@ -30,12 +19,6 @@ public static UserResponse toUserResponse(User user) { ); } - /** - * Converts a Url entity to UrlResponse DTO. - * - * @param url the Url entity - * @return UrlResponse DTO - */ public static UrlResponse toUrlResponse(Url url) { return new UrlResponse( url.getId(), diff --git a/src/main/java/com/kubuski/urlshortener/service/AuthenticationService.java b/src/main/java/com/kubuski/urlshortener/service/AuthenticationService.java index fa99db8..3e504dd 100644 --- a/src/main/java/com/kubuski/urlshortener/service/AuthenticationService.java +++ b/src/main/java/com/kubuski/urlshortener/service/AuthenticationService.java @@ -34,7 +34,6 @@ public AuthenticationResponse register(RegisterRequest request) { return new AuthenticationResponse(jwtToken); } - @Transactional public AuthenticationResponse authenticate(AuthenticationRequest request) { authenticateUser(request); User user = findUserByLogin(request.login()); diff --git a/src/main/java/com/kubuski/urlshortener/service/UrlService.java b/src/main/java/com/kubuski/urlshortener/service/UrlService.java index 6720478..77f3bf8 100644 --- a/src/main/java/com/kubuski/urlshortener/service/UrlService.java +++ b/src/main/java/com/kubuski/urlshortener/service/UrlService.java @@ -4,7 +4,7 @@ import com.kubuski.urlshortener.dto.UrlResponse; import com.kubuski.urlshortener.entity.Url; import com.kubuski.urlshortener.exception.UrlNotFoundException; -import com.kubuski.urlshortener.mapper.EntityMapper; +import com.kubuski.urlshortener.mapper.UserMapper; import com.kubuski.urlshortener.repository.UrlRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -23,7 +23,7 @@ public UrlResponse createShortUrl(UrlRequest urlRequest) { Url url = buildUrl(urlRequest); Url savedUrl = urlRepository.save(url); - return EntityMapper.toUrlResponse(savedUrl); + return UserMapper.toUrlResponse(savedUrl); } @Transactional @@ -31,7 +31,7 @@ public UrlResponse getOriginalUrl(String shortUrl) { Url url = findUrlByShortUrl(shortUrl); incrementAccessCount(url); - return EntityMapper.toUrlResponse(url); + return UserMapper.toUrlResponse(url); } @Transactional @@ -39,7 +39,7 @@ public UrlResponse updateOriginalUrl(String shortUrl, UrlRequest urlRequest) { Url url = findUrlByShortUrl(shortUrl); updateUrl(url, urlRequest); - return EntityMapper.toUrlResponse(url); + return UserMapper.toUrlResponse(url); } @Transactional @@ -52,7 +52,7 @@ public void deleteUrl(String shortUrl) { public UrlResponse getUrlStats(String shortUrl) { Url url = findUrlByShortUrl(shortUrl); - return EntityMapper.toUrlResponse(url); + return UserMapper.toUrlResponse(url); } private Url buildUrl(UrlRequest urlRequest) { diff --git a/src/main/java/com/kubuski/urlshortener/service/UserService.java b/src/main/java/com/kubuski/urlshortener/service/UserService.java index 1012616..a26a852 100644 --- a/src/main/java/com/kubuski/urlshortener/service/UserService.java +++ b/src/main/java/com/kubuski/urlshortener/service/UserService.java @@ -4,7 +4,7 @@ import com.kubuski.urlshortener.dto.UserResponse; import com.kubuski.urlshortener.entity.User; import com.kubuski.urlshortener.exception.UserNotFoundException; -import com.kubuski.urlshortener.mapper.EntityMapper; +import com.kubuski.urlshortener.mapper.UserMapper; import com.kubuski.urlshortener.repository.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.security.crypto.password.PasswordEncoder; @@ -23,15 +23,16 @@ public UserResponse findByEmail(String email) { User user = userRepository.findByEmail(email).orElseThrow( () -> new UserNotFoundException("User " + email + " not found in Database")); - return EntityMapper.toUserResponse(user); + return UserMapper.toUserResponse(user); } + @Transactional public UserResponse registerUser(UserRequest userRequest) { User user = toUser(userRequest); user.setPassword(passwordEncoder.encode(user.getPassword())); userRepository.save(user); - return EntityMapper.toUserResponse(user); + return UserMapper.toUserResponse(user); } private User toUser(UserRequest userRequest) { diff --git a/src/test/java/com/kubuski/urlshortener/mapper/EntityMapperTest.java b/src/test/java/com/kubuski/urlshortener/mapper/EntityMapperTest.java index dbd598f..d4785fb 100644 --- a/src/test/java/com/kubuski/urlshortener/mapper/EntityMapperTest.java +++ b/src/test/java/com/kubuski/urlshortener/mapper/EntityMapperTest.java @@ -9,7 +9,8 @@ import java.time.Instant; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertAll; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * Test class for EntityMapper utility. @@ -26,7 +27,7 @@ public void testToUserResponse() { .password("hashedPassword") .build(); - UserResponse response = EntityMapper.toUserResponse(user); + UserResponse response = UserMapper.toUserResponse(user); assertAll( () -> assertEquals(user.getId(), response.id()), @@ -50,7 +51,7 @@ public void testToUrlResponse() { .deleted(false) .build(); - UrlResponse response = EntityMapper.toUrlResponse(url); + UrlResponse response = UserMapper.toUrlResponse(url); assertAll( () -> assertEquals(url.getId(), response.id()),