From 5e2eff2eea41646d11f51db936e93326b67e91f9 Mon Sep 17 00:00:00 2001 From: alexk11 Date: Sat, 20 Dec 2025 01:28:59 +0300 Subject: [PATCH 01/21] crud components added and updated --- payment-service-app/pom.xml | 28 ++- .../iprody/controller/PaymentController.java | 19 +- .../com/iprody/service/PaymentService.java | 8 +- ...ithMapper.java => PaymentServiceImpl.java} | 40 ++- .../PaymentServiceImpl_withConverter.java | 69 ------ .../iprody/service/PaymentControllerTest.java | 61 +++-- .../iprody/service/PaymentServiceTest.java | 227 ++++-------------- 7 files changed, 137 insertions(+), 315 deletions(-) rename payment-service-app/src/main/java/com/iprody/service/{PaymentServiceImpl_withMapper.java => PaymentServiceImpl.java} (59%) delete mode 100644 payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl_withConverter.java diff --git a/payment-service-app/pom.xml b/payment-service-app/pom.xml index 09edf3d..3d57ea1 100644 --- a/payment-service-app/pom.xml +++ b/payment-service-app/pom.xml @@ -17,6 +17,13 @@ 21 + 3.0.0 + 1.18.36 + 1.6.3 + 1.6.3 + 3.14.0 + 3.3.0 + 4.32.0 @@ -34,28 +41,27 @@ org.springdoc springdoc-openapi-starter-webmvc-ui - 3.0.0 + ${springdoc.version} org.postgresql postgresql - org.mapstruct mapstruct - 1.6.3 + ${mapstruct.version} org.mapstruct mapstruct-processor - 1.6.3 + ${mapstruct-processor.version} provided org.projectlombok lombok - 1.18.36 + ${lombok.version} com.h2database @@ -86,20 +92,18 @@ org.apache.maven.plugins maven-compiler-plugin - 3.14.0 + ${maven-compiler-plugin.version} - 21 - 21 org.projectlombok lombok - 1.18.36 + ${lombok.version} org.mapstruct mapstruct-processor - 1.6.3 + ${mapstruct-processor.version} @@ -107,7 +111,7 @@ org.apache.maven.plugins maven-checkstyle-plugin - 3.3.0 + ${maven-checkstyle-plugin.version} verify @@ -125,7 +129,7 @@ org.liquibase liquibase-maven-plugin - 4.32.0 + ${liquibase-maven-plugin.version} src/main/resources/liquibase.properties src/main/resources/liquibase-outputChangeLog.xml diff --git a/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java b/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java index b029e4b..2dc42fd 100644 --- a/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java +++ b/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java @@ -3,8 +3,7 @@ import com.iprody.model.PaymentDto; import com.iprody.service.PaymentService; import com.iprody.specification.PaymentFilter; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; +import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; @@ -17,20 +16,12 @@ @RestController +@RequiredArgsConstructor @RequestMapping("/payments") public class PaymentController { private final PaymentService paymentService; - /** - * Use either "withMapper" or "withConverter" - * @param paymentService - */ - @Autowired - public PaymentController(@Qualifier("withMapper") PaymentService paymentService) { - this.paymentService = paymentService; - } - @GetMapping("/search") public Page searchPayments( @ModelAttribute PaymentFilter filter, @@ -49,17 +40,17 @@ public Page searchPayments( @GetMapping public ResponseEntity> fetchAll() { - return ResponseEntity.ok().body(this.paymentService.fetchAllPayments()); + return ResponseEntity.ok().body(this.paymentService.getPayments()); } @GetMapping(path = "/{id}") public ResponseEntity fetchPayment(@PathVariable UUID id) { - return ResponseEntity.ok().body(this.paymentService.fetchSinglePayment(id)); + return ResponseEntity.ok().body(this.paymentService.get(id)); } @PostMapping(path = "/addPayment") public ResponseEntity addPayment(@RequestBody PaymentDto paymentDto) { - return ResponseEntity.ok().body(this.paymentService.processPayment(paymentDto)); + return ResponseEntity.ok().body(this.paymentService.create(paymentDto)); } } diff --git a/payment-service-app/src/main/java/com/iprody/service/PaymentService.java b/payment-service-app/src/main/java/com/iprody/service/PaymentService.java index bc52b6b..5857a56 100644 --- a/payment-service-app/src/main/java/com/iprody/service/PaymentService.java +++ b/payment-service-app/src/main/java/com/iprody/service/PaymentService.java @@ -9,9 +9,11 @@ import java.util.UUID; public interface PaymentService { - List fetchAllPayments(); - PaymentDto fetchSinglePayment(UUID id); - PaymentDto processPayment(PaymentDto paymentDto); + PaymentDto create(PaymentDto paymentDto); + PaymentDto get(UUID id); List search(PaymentFilter filter); Page searchPaged(PaymentFilter filter, Pageable pageable); + List getPayments(); + PaymentDto update(UUID id, PaymentDto dto); + UUID delete(UUID id); } diff --git a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl_withMapper.java b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java similarity index 59% rename from payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl_withMapper.java rename to payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java index cb557dc..d767ae2 100644 --- a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl_withMapper.java +++ b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java @@ -14,13 +14,14 @@ import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; +import java.time.OffsetDateTime; import java.util.List; import java.util.UUID; -@Service("withMapper") +@Service @RequiredArgsConstructor -public class PaymentServiceImpl_withMapper implements PaymentService { +public class PaymentServiceImpl implements PaymentService { private final PaymentMapper paymentMapper; private final PaymentRepository paymentRepository; @@ -43,14 +44,14 @@ public Page searchPaged(PaymentFilter filter, Pageable pageable) { } @Override - public List fetchAllPayments() { + public List getPayments() { return paymentRepository.findAll().stream() .map(paymentMapper::toPaymentDto) .toList(); } @Override - public PaymentDto fetchSinglePayment(UUID id) { + public PaymentDto get(UUID id) { return paymentRepository.findById(id) .map(paymentMapper::toPaymentDto) .orElseThrow(() -> new AppException( @@ -58,7 +59,7 @@ public PaymentDto fetchSinglePayment(UUID id) { } @Override - public PaymentDto processPayment(PaymentDto paymentDto) { + public PaymentDto create(PaymentDto paymentDto) { if (paymentDto.getAmount().doubleValue() <= 0) { throw new AppException(HttpStatus.BAD_REQUEST.value(), "Payment is not valid"); } @@ -66,4 +67,33 @@ public PaymentDto processPayment(PaymentDto paymentDto) { return paymentMapper.toPaymentDto(paymentRepository.save(paymentEntity)); } + @Override + public PaymentDto update(UUID id, PaymentDto dto) { + return paymentRepository.findById(id) + .map(p -> { + p.setInquiryRefId(dto.getInquiryRefId()); + p.setAmount(dto.getAmount()); + p.setCurrency(dto.getCurrency()); + p.setTransactionRefId(dto.getTransactionRefId()); + p.setStatus(dto.getStatus()); + p.setNote(dto.getNote()); + p.setCreatedAt(dto.getCreatedAt()); + p.setUpdatedAt(OffsetDateTime.now()); + return paymentMapper.toPaymentDto(paymentRepository.save(p)); + }) + .orElseThrow(() -> new AppException( + HttpStatus.NOT_FOUND.value(), "Update failed. Payment with id '" + id + "' does not exist.")); + } + + @Override + public UUID delete(UUID id) { + return paymentRepository.findById(id) + .map(p -> { + paymentRepository.delete(p); + return id; + }) + .orElseThrow(() -> new AppException( + HttpStatus.NOT_FOUND.value(), "Failed to delete the payment with id '" + id + "'")); + } + } diff --git a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl_withConverter.java b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl_withConverter.java deleted file mode 100644 index 2593af8..0000000 --- a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl_withConverter.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.iprody.service; - -import com.iprody.converter.PaymentConverter; -import com.iprody.exception.AppException; -import com.iprody.model.PaymentDto; -import com.iprody.persistence.PaymentEntity; -import com.iprody.persistence.PaymentRepository; -import com.iprody.specification.PaymentFilter; -import com.iprody.specification.PaymentFilterFactory; -import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.domain.Specification; -import org.springframework.http.HttpStatus; -import org.springframework.stereotype.Service; - -import java.util.List; -import java.util.UUID; - - -@Service("withConverter") -@RequiredArgsConstructor -public class PaymentServiceImpl_withConverter implements PaymentService { - - private final PaymentConverter paymentConverter; - private final PaymentRepository paymentRepository; - - @Override - public List search(PaymentFilter filter) { - final Specification spec = PaymentFilterFactory.fromFilter(filter); - return paymentRepository - .findAll(spec).stream() - .map(paymentConverter::toPaymentDto) - .toList(); - } - - @Override - public Page searchPaged(PaymentFilter filter, Pageable pageable) { - final Specification spec = PaymentFilterFactory.fromFilter(filter); - return paymentRepository - .findAll(spec, pageable) - .map(paymentConverter::toPaymentDto); - } - - @Override - public List fetchAllPayments() { - return paymentRepository.findAll().stream() - .map(paymentConverter::toPaymentDto) - .toList(); - } - - @Override - public PaymentDto fetchSinglePayment(UUID id) { - return paymentRepository.findById(id) - .map(paymentConverter::toPaymentDto) - .orElseThrow(() -> new AppException( - HttpStatus.NOT_FOUND.value(), "Payment with the id '" + id + "' was not found")); - } - - @Override - public PaymentDto processPayment(PaymentDto paymentDto) { - if (paymentDto.getAmount().doubleValue() <= 0) { - throw new AppException(HttpStatus.BAD_REQUEST.value(), "Payment is not valid"); - } - final var paymentEntity = paymentConverter.toPaymentEntity(paymentDto); - return paymentConverter.toPaymentDto(paymentRepository.save(paymentEntity)); - } - -} diff --git a/payment-service-app/src/test/java/com/iprody/service/PaymentControllerTest.java b/payment-service-app/src/test/java/com/iprody/service/PaymentControllerTest.java index 3654e08..7b8c323 100644 --- a/payment-service-app/src/test/java/com/iprody/service/PaymentControllerTest.java +++ b/payment-service-app/src/test/java/com/iprody/service/PaymentControllerTest.java @@ -45,11 +45,37 @@ void setUp() { initData(); } + private void initData() { + LocalDateTime now = LocalDateTime.now(); + dto_1 = new PaymentDto( + UUID.fromString("3fa85f64-5717-4562-b3fc-2c963f66afa6"), + UUID.fromString("3fa85f64-5717-4562-b3fc-2c963f66afa7"), + BigDecimal.valueOf(100.89), + "EUR", + UUID.fromString("3fa85f64-5717-4562-b3fc-2c963f66afa8"), + PaymentStatus.RECEIVED, + "Some info 1", + OffsetDateTime.of(now, ZoneOffset.UTC), + OffsetDateTime.of(now, ZoneOffset.UTC) + ); + dto_2 = new PaymentDto( + UUID.fromString("3fa85f64-5717-4562-b3fc-2c963f66afb6"), + UUID.fromString("3fa85f64-5717-4562-b3fc-2c963f66afb7"), + BigDecimal.valueOf(200.51), + "USD", + UUID.fromString("3fa85f64-5717-4562-b3fc-2c963f66afb8"), + PaymentStatus.APPROVED, + "Some info 2", + OffsetDateTime.of(now, ZoneOffset.UTC), + OffsetDateTime.of(now, ZoneOffset.UTC) + ); + } + @Test @DisplayName("GET /payments should return list of two PaymentDto") void findAll_ReturnsListOfTwoPayments() throws Exception { // when - when(paymentService.fetchAllPayments()).thenReturn(List.of(dto_1, dto_2)); + when(paymentService.getPayments()).thenReturn(List.of(dto_1, dto_2)); // then mockMvc.perform(get("/payments").accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) @@ -67,7 +93,7 @@ void findAll_ReturnsListOfTwoPayments() throws Exception { @DisplayName("GET /payments should return empty list when there is no payments") void findAll_ReturnsEmptyList() throws Exception { // when - when(paymentService.fetchAllPayments()).thenReturn(List.of()); + when(paymentService.getPayments()).thenReturn(List.of()); // then mockMvc.perform(get("/payments") .accept(MediaType.APPLICATION_JSON)) @@ -81,42 +107,15 @@ void findAll_ReturnsEmptyList() throws Exception { void getById_ReturnsPayment_WhenFound() throws Exception { // given UUID id = dto_1.getGuid(); - String expectedUuid = "3fa85f64-5717-4562-b3fc-2c963f66afa6"; // when - when(paymentService.fetchSinglePayment(id)).thenReturn(dto_1); + when(paymentService.get(id)).thenReturn(dto_1); // then mockMvc.perform(get("/payments/{id}", id).accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) - //.andExpect(jsonPath("$.guid").value(UUID.fromString(expectedUuid))) + .andExpect(jsonPath("$.guid").value("3fa85f64-5717-4562-b3fc-2c963f66afa6")) .andExpect(jsonPath("$.amount").value(100.89)) .andExpect(jsonPath("$.note").value("Some info 1")); } - private void initData() { - LocalDateTime now = LocalDateTime.now(); - dto_1 = new PaymentDto( - UUID.fromString("3fa85f64-5717-4562-b3fc-2c963f66afa6"), - UUID.fromString("3fa85f64-5717-4562-b3fc-2c963f66afa7"), - BigDecimal.valueOf(100.89), - "EUR", - UUID.fromString("3fa85f64-5717-4562-b3fc-2c963f66afa8"), - PaymentStatus.RECEIVED, - "Some info 1", - OffsetDateTime.of(now, ZoneOffset.UTC), - OffsetDateTime.of(now, ZoneOffset.UTC) - ); - dto_2 = new PaymentDto( - UUID.fromString("3fa85f64-5717-4562-b3fc-2c963f66afb6"), - UUID.fromString("3fa85f64-5717-4562-b3fc-2c963f66afb7"), - BigDecimal.valueOf(200.51), - "USD", - UUID.fromString("3fa85f64-5717-4562-b3fc-2c963f66afb8"), - PaymentStatus.APPROVED, - "Some info 2", - OffsetDateTime.of(now, ZoneOffset.UTC), - OffsetDateTime.of(now, ZoneOffset.UTC) - ); - } - } diff --git a/payment-service-app/src/test/java/com/iprody/service/PaymentServiceTest.java b/payment-service-app/src/test/java/com/iprody/service/PaymentServiceTest.java index 5eafac4..d3f63f3 100644 --- a/payment-service-app/src/test/java/com/iprody/service/PaymentServiceTest.java +++ b/payment-service-app/src/test/java/com/iprody/service/PaymentServiceTest.java @@ -1,7 +1,7 @@ package com.iprody.service; -import com.iprody.converter.PaymentConverter; import com.iprody.exception.AppException; +import com.iprody.mapper.PaymentMapper; import com.iprody.model.PaymentDto; import com.iprody.persistence.PaymentEntity; import com.iprody.persistence.PaymentRepository; @@ -34,13 +34,13 @@ class PaymentServiceTest { @InjectMocks - private PaymentServiceImpl_withConverter paymentService; + private PaymentServiceImpl paymentService; @Mock private PaymentRepository paymentRepository; @Mock - private PaymentConverter paymentConverter; + private PaymentMapper paymentMapper; private PaymentEntity paymentEntity1; private PaymentEntity paymentEntity2; @@ -106,15 +106,15 @@ void setUp() { } @Test - @DisplayName("fetchAllPayments should return list of payments when payments exist") - void fetchAllPayments_shouldReturnListOfPayments_whenPaymentsExist() { + @DisplayName("getPayments should return list of payments when payments exist") + void getPayments_shouldReturnListOfPayments_whenPaymentsExist() { // Given List entities = Arrays.asList(paymentEntity1, paymentEntity2); when(paymentRepository.findAll()).thenReturn(entities); - when(paymentConverter.toPaymentDto(paymentEntity1)).thenReturn(paymentDto1); - when(paymentConverter.toPaymentDto(paymentEntity2)).thenReturn(paymentDto2); + when(paymentMapper.toPaymentDto(paymentEntity1)).thenReturn(paymentDto1); + when(paymentMapper.toPaymentDto(paymentEntity2)).thenReturn(paymentDto2); // When - List result = paymentService.fetchAllPayments(); + List result = paymentService.getPayments(); // Then assertNotNull(result); assertEquals(2, result.size()); @@ -126,47 +126,47 @@ void fetchAllPayments_shouldReturnListOfPayments_whenPaymentsExist() { assertEquals("EUR", result.get(1).getCurrency()); verify(paymentRepository, times(1)).findAll(); - verify(paymentConverter, times(2)).toPaymentDto(any(PaymentEntity.class)); + verify(paymentMapper, times(2)).toPaymentDto(any(PaymentEntity.class)); } @Test - @DisplayName("fetchAllPayments should return empty list when no payments exist") - void fetchAllPayments_shouldReturnEmptyList_whenNoPaymentsExist() { + @DisplayName("getPayments should return empty list when no payments exist") + void getPayments_shouldReturnEmptyList_whenNoPaymentsExist() { // Given when(paymentRepository.findAll()).thenReturn(Collections.emptyList()); // When - List result = paymentService.fetchAllPayments(); + List result = paymentService.getPayments(); // Then assertNotNull(result); assertTrue(result.isEmpty()); verify(paymentRepository, times(1)).findAll(); - verify(paymentConverter, never()).toPaymentDto(any(PaymentEntity.class)); + verify(paymentMapper, never()).toPaymentDto(any(PaymentEntity.class)); } @Test - @DisplayName("fetchAllPayments should handle multiple payments correctly") - void fetchAllPayments_shouldHandleMultiplePayments() { + @DisplayName("getPayments should handle multiple payments correctly") + void getPayments_shouldHandleMultiplePayments() { // Given List entities = Arrays.asList(paymentEntity1, paymentEntity2); when(paymentRepository.findAll()).thenReturn(entities); - when(paymentConverter.toPaymentDto(any(PaymentEntity.class))) + when(paymentMapper.toPaymentDto(any(PaymentEntity.class))) .thenReturn(paymentDto1, paymentDto2); // When - List result = paymentService.fetchAllPayments(); + List result = paymentService.getPayments(); // Then assertEquals(2, result.size()); - verify(paymentConverter, times(2)).toPaymentDto(any(PaymentEntity.class)); + verify(paymentMapper, times(2)).toPaymentDto(any(PaymentEntity.class)); } @Test - @DisplayName("fetchSinglePayment should return payment when payment exists") - void fetchSinglePayment_shouldReturnPayment_whenPaymentExists() { + @DisplayName("getPayment should return payment when payment exists") + void getPayment_shouldReturnPayment_whenExists() { // Given when(paymentRepository.findById(testUuid1)).thenReturn(Optional.of(paymentEntity1)); - when(paymentConverter.toPaymentDto(paymentEntity1)).thenReturn(paymentDto1); + when(paymentMapper.toPaymentDto(paymentEntity1)).thenReturn(paymentDto1); // When - PaymentDto result = paymentService.fetchSinglePayment(testUuid1); + PaymentDto result = paymentService.get(testUuid1); // Then assertNotNull(result); assertEquals(testUuid1, result.getGuid()); @@ -176,49 +176,20 @@ void fetchSinglePayment_shouldReturnPayment_whenPaymentExists() { assertEquals("Test payment 1", result.getNote()); verify(paymentRepository, times(1)).findById(testUuid1); - verify(paymentConverter, times(1)).toPaymentDto(paymentEntity1); + verify(paymentMapper, times(1)).toPaymentDto(paymentEntity1); } @Test - @DisplayName("fetchSinglePayment should throw NoSuchPaymentException when payment does not exist") - void fetchSinglePayment_shouldThrowException_whenPaymentDoesNotExist() { + @DisplayName("getPayment should throw NoSuchPaymentException when payment does not exist") + void getPayment_shouldThrowException_whenDoesNotExist() { // Given UUID nonExistentId = UUID.randomUUID(); when(paymentRepository.findById(nonExistentId)).thenReturn(Optional.empty()); // When - assertThrows(AppException.class, () -> paymentService.fetchSinglePayment(nonExistentId)); + assertThrows(AppException.class, () -> paymentService.get(nonExistentId)); // Then verify(paymentRepository, times(1)).findById(nonExistentId); - verify(paymentConverter, never()).toPaymentDto(any(PaymentEntity.class)); - } - - @Test - @DisplayName("fetchSinglePayment should handle different payment statuses") - void fetchSinglePayment_shouldHandleDifferentStatuses() { - // Given - PaymentEntity pendingEntity = PaymentEntity.builder() - .guid(testUuid1) - .inquiryRefId(UUID.randomUUID()) - .amount(new BigDecimal("100.00")) - .currency("USD") - .status(PaymentStatus.PENDING) - .createdAt(OffsetDateTime.now()) - .updatedAt(OffsetDateTime.now()) - .build(); - - PaymentDto pendingDto = PaymentDto.builder() - .guid(testUuid1) - .status(PaymentStatus.PENDING) - .build(); - - when(paymentRepository.findById(testUuid1)).thenReturn(Optional.of(pendingEntity)); - when(paymentConverter.toPaymentDto(pendingEntity)).thenReturn(pendingDto); - - // When - PaymentDto result = paymentService.fetchSinglePayment(testUuid1); - - // Then - assertEquals(PaymentStatus.PENDING, result.getStatus()); + verify(paymentMapper, never()).toPaymentDto(any(PaymentEntity.class)); } @Test @@ -266,12 +237,12 @@ void processPayment_shouldSaveAndReturnPayment() { .updatedAt(savedEntity.getUpdatedAt()) .build(); - when(paymentConverter.toPaymentEntity(inputDto)).thenReturn(entityToSave); + when(paymentMapper.toPaymentEntity(inputDto)).thenReturn(entityToSave); when(paymentRepository.save(entityToSave)).thenReturn(savedEntity); - when(paymentConverter.toPaymentDto(savedEntity)).thenReturn(expectedDto); + when(paymentMapper.toPaymentDto(savedEntity)).thenReturn(expectedDto); // When - PaymentDto result = paymentService.processPayment(inputDto); + PaymentDto result = paymentService.create(inputDto); // Then assertNotNull(result); @@ -280,131 +251,15 @@ void processPayment_shouldSaveAndReturnPayment() { assertEquals("GBP", result.getCurrency()); assertEquals(PaymentStatus.RECEIVED, result.getStatus()); - verify(paymentConverter, times(1)).toPaymentEntity(inputDto); + verify(paymentMapper, times(1)).toPaymentEntity(inputDto); verify(paymentRepository, times(1)).save(entityToSave); - verify(paymentConverter, times(1)).toPaymentDto(savedEntity); - } - - @Test - @DisplayName("processPayment should handle payment with all fields populated") - void processPayment_shouldHandleCompletePayment() { - // Given - UUID guid = UUID.randomUUID(); - UUID inquiryRefId = UUID.randomUUID(); - UUID transactionRefId = UUID.randomUUID(); - OffsetDateTime now = OffsetDateTime.now(); - - PaymentDto inputDto = PaymentDto.builder() - .guid(guid) - .inquiryRefId(inquiryRefId) - .amount(new BigDecimal("500.50")) - .currency("USD") - .transactionRefId(transactionRefId) - .status(PaymentStatus.APPROVED) - .note("Complete payment with all fields") - .createdAt(now) - .updatedAt(now) - .build(); - - PaymentEntity entityToSave = PaymentEntity.builder() - .guid(guid) - .inquiryRefId(inquiryRefId) - .amount(new BigDecimal("500.50")) - .currency("USD") - .transactionRefId(transactionRefId) - .status(PaymentStatus.APPROVED) - .note("Complete payment with all fields") - .createdAt(now) - .updatedAt(now) - .build(); - - when(paymentConverter.toPaymentEntity(inputDto)).thenReturn(entityToSave); - when(paymentRepository.save(entityToSave)).thenReturn(entityToSave); - when(paymentConverter.toPaymentDto(entityToSave)).thenReturn(inputDto); - - // When - PaymentDto result = paymentService.processPayment(inputDto); - - // Then - assertNotNull(result); - assertEquals(guid, result.getGuid()); - assertEquals(inquiryRefId, result.getInquiryRefId()); - assertEquals(transactionRefId, result.getTransactionRefId()); - assertEquals(new BigDecimal("500.50"), result.getAmount()); - assertEquals("USD", result.getCurrency()); - assertEquals(PaymentStatus.APPROVED, result.getStatus()); - assertEquals("Complete payment with all fields", result.getNote()); - assertEquals(now, result.getCreatedAt()); - assertEquals(now, result.getUpdatedAt()); - } - - @Test - @DisplayName("processPayment should handle payment with minimal fields") - void processPayment_shouldHandleMinimalPayment() { - // Given - PaymentDto inputDto = PaymentDto.builder() - .inquiryRefId(UUID.randomUUID()) - .amount(new BigDecimal("10.00")) - .currency("USD") - .status(PaymentStatus.RECEIVED) - .build(); - - PaymentEntity entityToSave = PaymentEntity.builder() - .inquiryRefId(inputDto.getInquiryRefId()) - .amount(new BigDecimal("10.00")) - .currency("USD") - .status(PaymentStatus.RECEIVED) - .build(); - - PaymentEntity savedEntity = PaymentEntity.builder() - .guid(UUID.randomUUID()) - .inquiryRefId(inputDto.getInquiryRefId()) - .amount(new BigDecimal("10.00")) - .currency("USD") - .status(PaymentStatus.RECEIVED) - .createdAt(OffsetDateTime.now()) - .updatedAt(OffsetDateTime.now()) - .build(); - - PaymentDto savedDto = PaymentDto.builder() - .guid(savedEntity.getGuid()) - .inquiryRefId(inputDto.getInquiryRefId()) - .amount(new BigDecimal("10.00")) - .currency("USD") - .status(PaymentStatus.RECEIVED) - .createdAt(savedEntity.getCreatedAt()) - .updatedAt(savedEntity.getUpdatedAt()) - .build(); - - when(paymentConverter.toPaymentEntity(inputDto)).thenReturn(entityToSave); - when(paymentRepository.save(entityToSave)).thenReturn(savedEntity); - when(paymentConverter.toPaymentDto(savedEntity)).thenReturn(savedDto); - - // When - PaymentDto result = paymentService.processPayment(inputDto); - - // Then - assertNotNull(result); - assertNotNull(result.getGuid()); - assertEquals(new BigDecimal("10.00"), result.getAmount()); - assertEquals("USD", result.getCurrency()); - assertEquals(PaymentStatus.RECEIVED, result.getStatus()); - } - - static Stream statusProvider() { - return Stream.of( - PaymentStatus.RECEIVED, - PaymentStatus.PENDING, - PaymentStatus.APPROVED, - PaymentStatus.DECLINED, - PaymentStatus.NOT_SENT - ); + verify(paymentMapper, times(1)).toPaymentDto(savedEntity); } @ParameterizedTest @MethodSource("statusProvider") - @DisplayName("fetchSinglePayment should handle different payment statuses") - void fetchSinglePayment_shouldHandleDifferentStatuses_1(PaymentStatus status) { + @DisplayName("getPayment should handle different payment statuses") + void get_shouldHandleDifferentStatuses(PaymentStatus status) { // Given PaymentEntity pendingEntity = PaymentEntity.builder() .guid(testUuid1) @@ -422,13 +277,23 @@ void fetchSinglePayment_shouldHandleDifferentStatuses_1(PaymentStatus status) { .build(); when(paymentRepository.findById(testUuid1)).thenReturn(Optional.of(pendingEntity)); - when(paymentConverter.toPaymentDto(pendingEntity)).thenReturn(pendingDto); + when(paymentMapper.toPaymentDto(pendingEntity)).thenReturn(pendingDto); // When - PaymentDto result = paymentService.fetchSinglePayment(testUuid1); + PaymentDto result = paymentService.get(testUuid1); // Then assertEquals(status, result.getStatus()); } + private static Stream statusProvider() { + return Stream.of( + PaymentStatus.RECEIVED, + PaymentStatus.PENDING, + PaymentStatus.APPROVED, + PaymentStatus.DECLINED, + PaymentStatus.NOT_SENT + ); + } + } From cec53d65a018543bb64f5ec8b4b8d14f47492c49 Mon Sep 17 00:00:00 2001 From: alexk11 Date: Sat, 20 Dec 2025 01:39:59 +0300 Subject: [PATCH 02/21] updated controller to include all crud methods --- .../com/iprody/controller/PaymentController.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java b/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java index 2dc42fd..9fdcf0d 100644 --- a/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java +++ b/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java @@ -48,9 +48,19 @@ public ResponseEntity fetchPayment(@PathVariable UUID id) { return ResponseEntity.ok().body(this.paymentService.get(id)); } - @PostMapping(path = "/addPayment") + @PostMapping(path = "/add") public ResponseEntity addPayment(@RequestBody PaymentDto paymentDto) { return ResponseEntity.ok().body(this.paymentService.create(paymentDto)); } + @PutMapping(path = "/update/{id}") + public ResponseEntity updatePayment(@PathVariable UUID id, @RequestBody PaymentDto paymentDto) { + return ResponseEntity.ok().body(this.paymentService.update(id, paymentDto)); + } + + @DeleteMapping(path = "/delete/{id}") + public ResponseEntity deletePayment(@PathVariable UUID id) { + return ResponseEntity.ok().body(this.paymentService.delete(id)); + } + } From 05dce2959f4191d3765ee68c3a14eb2fadd09852 Mon Sep 17 00:00:00 2001 From: alexk11 Date: Sat, 20 Dec 2025 01:50:14 +0300 Subject: [PATCH 03/21] minor corrections --- .../iprody/controller/PaymentController.java | 10 +++---- .../iprody/service/PaymentServiceTest.java | 29 +++++-------------- 2 files changed, 12 insertions(+), 27 deletions(-) diff --git a/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java b/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java index 9fdcf0d..3a57fe6 100644 --- a/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java +++ b/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java @@ -43,16 +43,16 @@ public ResponseEntity> fetchAll() { return ResponseEntity.ok().body(this.paymentService.getPayments()); } - @GetMapping(path = "/{id}") - public ResponseEntity fetchPayment(@PathVariable UUID id) { - return ResponseEntity.ok().body(this.paymentService.get(id)); - } - @PostMapping(path = "/add") public ResponseEntity addPayment(@RequestBody PaymentDto paymentDto) { return ResponseEntity.ok().body(this.paymentService.create(paymentDto)); } + @GetMapping(path = "/{id}") + public ResponseEntity getPayment(@PathVariable UUID id) { + return ResponseEntity.ok().body(this.paymentService.get(id)); + } + @PutMapping(path = "/update/{id}") public ResponseEntity updatePayment(@PathVariable UUID id, @RequestBody PaymentDto paymentDto) { return ResponseEntity.ok().body(this.paymentService.update(id, paymentDto)); diff --git a/payment-service-app/src/test/java/com/iprody/service/PaymentServiceTest.java b/payment-service-app/src/test/java/com/iprody/service/PaymentServiceTest.java index d3f63f3..c18f9a9 100644 --- a/payment-service-app/src/test/java/com/iprody/service/PaymentServiceTest.java +++ b/payment-service-app/src/test/java/com/iprody/service/PaymentServiceTest.java @@ -144,21 +144,6 @@ void getPayments_shouldReturnEmptyList_whenNoPaymentsExist() { verify(paymentMapper, never()).toPaymentDto(any(PaymentEntity.class)); } - @Test - @DisplayName("getPayments should handle multiple payments correctly") - void getPayments_shouldHandleMultiplePayments() { - // Given - List entities = Arrays.asList(paymentEntity1, paymentEntity2); - when(paymentRepository.findAll()).thenReturn(entities); - when(paymentMapper.toPaymentDto(any(PaymentEntity.class))) - .thenReturn(paymentDto1, paymentDto2); - // When - List result = paymentService.getPayments(); - // Then - assertEquals(2, result.size()); - verify(paymentMapper, times(2)).toPaymentDto(any(PaymentEntity.class)); - } - @Test @DisplayName("getPayment should return payment when payment exists") void getPayment_shouldReturnPayment_whenExists() { @@ -193,8 +178,8 @@ void getPayment_shouldThrowException_whenDoesNotExist() { } @Test - @DisplayName("processPayment should save and return payment") - void processPayment_shouldSaveAndReturnPayment() { + @DisplayName("create should save and return payment") + void createPayment_shouldSaveAndReturnPayment() { // Given UUID newUuid = UUID.randomUUID(); PaymentDto inputDto = PaymentDto.builder() @@ -258,10 +243,10 @@ void processPayment_shouldSaveAndReturnPayment() { @ParameterizedTest @MethodSource("statusProvider") - @DisplayName("getPayment should handle different payment statuses") + @DisplayName("get should handle different payment statuses") void get_shouldHandleDifferentStatuses(PaymentStatus status) { // Given - PaymentEntity pendingEntity = PaymentEntity.builder() + PaymentEntity paymentEntity = PaymentEntity.builder() .guid(testUuid1) .inquiryRefId(UUID.randomUUID()) .amount(new BigDecimal("100.00")) @@ -271,13 +256,13 @@ void get_shouldHandleDifferentStatuses(PaymentStatus status) { .updatedAt(OffsetDateTime.now()) .build(); - PaymentDto pendingDto = PaymentDto.builder() + PaymentDto paymentDto = PaymentDto.builder() .guid(testUuid1) .status(status) .build(); - when(paymentRepository.findById(testUuid1)).thenReturn(Optional.of(pendingEntity)); - when(paymentMapper.toPaymentDto(pendingEntity)).thenReturn(pendingDto); + when(paymentRepository.findById(testUuid1)).thenReturn(Optional.of(paymentEntity)); + when(paymentMapper.toPaymentDto(paymentEntity)).thenReturn(paymentDto); // When PaymentDto result = paymentService.get(testUuid1); From 37803d8894e5a88d3f4ca0bb252f87c4598a9556 Mon Sep 17 00:00:00 2001 From: alexk11 Date: Sat, 20 Dec 2025 01:59:22 +0300 Subject: [PATCH 04/21] minor corrections --- .../src/main/java/com/iprody/service/PaymentServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java index d767ae2..de659da 100644 --- a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java +++ b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java @@ -93,7 +93,7 @@ public UUID delete(UUID id) { return id; }) .orElseThrow(() -> new AppException( - HttpStatus.NOT_FOUND.value(), "Failed to delete the payment with id '" + id + "'")); + HttpStatus.NOT_FOUND.value(), "Delete failed. Payment with id '" + id + "' does not exist.")); } } From 2ba0dac3cde00514ad542c6cf369ef5eeee7e5fc Mon Sep 17 00:00:00 2001 From: alexk11 Date: Sat, 20 Dec 2025 13:51:15 +0300 Subject: [PATCH 05/21] add curl --- .../src/main/resources/curl/add.json | 11 +++++++++++ .../src/main/resources/curl/endpoint_requests | 15 +++++++++++++++ .../src/main/resources/curl/put.json | 11 +++++++++++ 3 files changed, 37 insertions(+) create mode 100644 payment-service-app/src/main/resources/curl/add.json create mode 100644 payment-service-app/src/main/resources/curl/endpoint_requests create mode 100644 payment-service-app/src/main/resources/curl/put.json diff --git a/payment-service-app/src/main/resources/curl/add.json b/payment-service-app/src/main/resources/curl/add.json new file mode 100644 index 0000000..824a1b7 --- /dev/null +++ b/payment-service-app/src/main/resources/curl/add.json @@ -0,0 +1,11 @@ +{ + "guid": "01deac78-8673-4062-bc33-bdec273b553b", + "inquiryRefId": "01deac78-8673-4062-bc33-bdec273b553b", + "amount": "123", + "currency": "RUB", + "transactionRefId": "01deac78-8673-4062-bc33-bdec273b553b", + "status": "RECEIVED", + "note": "remark", + "createdAt": "2025-12-20T10:07:21.841Z", + "updatedAt": "2025-12-20T10:07:21.841Z" +} diff --git a/payment-service-app/src/main/resources/curl/endpoint_requests b/payment-service-app/src/main/resources/curl/endpoint_requests new file mode 100644 index 0000000..dbe0548 --- /dev/null +++ b/payment-service-app/src/main/resources/curl/endpoint_requests @@ -0,0 +1,15 @@ +/* Get all payments */ +curl http://localhost:8099/payments + +/* Get payment by id */ +curl -v http://localhost:8099/payments/ac328a1a-1e60-4dd3-bee5-ed573d74c841 + +/* Add new payment */ +curl -v -H "Content-Type: application/json" -X POST --data @add.json http://localhost:8099/payments/add + +/* Update payment */ +curl -v -H "Content-Type: application/json" -X PUT --data @put.json \ + http://localhost:8099/payments/update/ac328a1a-1e60-4dd3-bee5-ed573d74c841 + +/* Delete payment */ +curl -v http://localhost:8099/payments/delete/ac328a1a-1e60-4dd3-bee5-ed573d74c841 diff --git a/payment-service-app/src/main/resources/curl/put.json b/payment-service-app/src/main/resources/curl/put.json new file mode 100644 index 0000000..96e719b --- /dev/null +++ b/payment-service-app/src/main/resources/curl/put.json @@ -0,0 +1,11 @@ +{ + "guid": "01deac78-8673-4062-bc33-bdec273b553b", + "inquiryRefId": "01deac78-8673-4062-bc33-bdec273b553b", + "amount": "345", + "currency": "EUR", + "transactionRefId": "01deac78-8673-4062-bc33-bdec273b553b", + "status": "RECEIVED", + "note": "updated", + "createdAt": "2025-12-20T10:07:21.841Z", + "updatedAt": "2025-12-20T11:07:00.000Z" +} \ No newline at end of file From 68430636eae83a9970fac431df2723fe9223ce58 Mon Sep 17 00:00:00 2001 From: alexk11 Date: Sat, 20 Dec 2025 14:23:55 +0300 Subject: [PATCH 06/21] add curl --- .../java/com/iprody/controller/PaymentController.java | 9 ++++++++- .../src/main/resources/curl/endpoint_requests | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java b/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java index 3a57fe6..013f205 100644 --- a/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java +++ b/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java @@ -10,7 +10,9 @@ import org.springframework.data.domain.Sort; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.support.ServletUriComponentsBuilder; +import java.net.URI; import java.util.List; import java.util.UUID; @@ -45,7 +47,12 @@ public ResponseEntity> fetchAll() { @PostMapping(path = "/add") public ResponseEntity addPayment(@RequestBody PaymentDto paymentDto) { - return ResponseEntity.ok().body(this.paymentService.create(paymentDto)); + PaymentDto savedPayment = this.paymentService.create(paymentDto); + URI location = ServletUriComponentsBuilder.fromCurrentRequest() + .path("/{id}") + .buildAndExpand(savedPayment.getGuid()) + .toUri(); + return ResponseEntity.created(location).body(savedPayment); } @GetMapping(path = "/{id}") diff --git a/payment-service-app/src/main/resources/curl/endpoint_requests b/payment-service-app/src/main/resources/curl/endpoint_requests index dbe0548..b95e4d1 100644 --- a/payment-service-app/src/main/resources/curl/endpoint_requests +++ b/payment-service-app/src/main/resources/curl/endpoint_requests @@ -12,4 +12,4 @@ curl -v -H "Content-Type: application/json" -X PUT --data @put.json \ http://localhost:8099/payments/update/ac328a1a-1e60-4dd3-bee5-ed573d74c841 /* Delete payment */ -curl -v http://localhost:8099/payments/delete/ac328a1a-1e60-4dd3-bee5-ed573d74c841 +curl -v -X DELETE http://localhost:8099/payments/delete/ac328a1a-1e60-4dd3-bee5-ed573d74c841 From fa431ba690c053a8ec2db2bd5e3b4f3b64fe0c61 Mon Sep 17 00:00:00 2001 From: alexk11 Date: Sat, 20 Dec 2025 14:25:53 +0300 Subject: [PATCH 07/21] add curl --- .../src/main/java/com/iprody/controller/PaymentController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java b/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java index 013f205..88e862a 100644 --- a/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java +++ b/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java @@ -47,7 +47,7 @@ public ResponseEntity> fetchAll() { @PostMapping(path = "/add") public ResponseEntity addPayment(@RequestBody PaymentDto paymentDto) { - PaymentDto savedPayment = this.paymentService.create(paymentDto); + final PaymentDto savedPayment = this.paymentService.create(paymentDto); URI location = ServletUriComponentsBuilder.fromCurrentRequest() .path("/{id}") .buildAndExpand(savedPayment.getGuid()) From 72ddd9919d276e1350ef475cf45269491e8dc03f Mon Sep 17 00:00:00 2001 From: alexk11 Date: Sat, 20 Dec 2025 14:27:33 +0300 Subject: [PATCH 08/21] add curl --- .../src/main/java/com/iprody/controller/PaymentController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java b/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java index 88e862a..a9f8483 100644 --- a/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java +++ b/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java @@ -48,7 +48,7 @@ public ResponseEntity> fetchAll() { @PostMapping(path = "/add") public ResponseEntity addPayment(@RequestBody PaymentDto paymentDto) { final PaymentDto savedPayment = this.paymentService.create(paymentDto); - URI location = ServletUriComponentsBuilder.fromCurrentRequest() + final URI location = ServletUriComponentsBuilder.fromCurrentRequest() .path("/{id}") .buildAndExpand(savedPayment.getGuid()) .toUri(); From 2ce2a968e58e45721023567fdbd77fda6341864b Mon Sep 17 00:00:00 2001 From: alexk11 Date: Sat, 20 Dec 2025 14:31:09 +0300 Subject: [PATCH 09/21] add curl --- .../main/java/com/iprody/controller/PaymentController.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java b/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java index a9f8483..0c1cec2 100644 --- a/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java +++ b/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java @@ -49,9 +49,9 @@ public ResponseEntity> fetchAll() { public ResponseEntity addPayment(@RequestBody PaymentDto paymentDto) { final PaymentDto savedPayment = this.paymentService.create(paymentDto); final URI location = ServletUriComponentsBuilder.fromCurrentRequest() - .path("/{id}") - .buildAndExpand(savedPayment.getGuid()) - .toUri(); + .path("/{id}") + .buildAndExpand(savedPayment.getGuid()) + .toUri(); return ResponseEntity.created(location).body(savedPayment); } From c4311623e7264a4f5bb8b273c2365961e27c1611 Mon Sep 17 00:00:00 2001 From: alexk11 Date: Sat, 20 Dec 2025 14:50:19 +0300 Subject: [PATCH 10/21] add lightweight update note method --- .../com/iprody/controller/PaymentController.java | 11 +++++++++-- .../java/com/iprody/service/PaymentService.java | 3 ++- .../com/iprody/service/PaymentServiceImpl.java | 14 +++++++++++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java b/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java index 0c1cec2..6d673f1 100644 --- a/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java +++ b/payment-service-app/src/main/java/com/iprody/controller/PaymentController.java @@ -8,6 +8,7 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.support.ServletUriComponentsBuilder; @@ -65,9 +66,15 @@ public ResponseEntity updatePayment(@PathVariable UUID id, @RequestB return ResponseEntity.ok().body(this.paymentService.update(id, paymentDto)); } + @PutMapping(path = "/update/{id}/{note}") + public ResponseEntity updatePaymentNote(@PathVariable UUID id, @PathVariable String note) { + return ResponseEntity.ok().body(this.paymentService.updateNote(id, note)); + } + @DeleteMapping(path = "/delete/{id}") - public ResponseEntity deletePayment(@PathVariable UUID id) { - return ResponseEntity.ok().body(this.paymentService.delete(id)); + @ResponseStatus(HttpStatus.NO_CONTENT) + public void deletePayment(@PathVariable UUID id) { + this.paymentService.delete(id); } } diff --git a/payment-service-app/src/main/java/com/iprody/service/PaymentService.java b/payment-service-app/src/main/java/com/iprody/service/PaymentService.java index 5857a56..282000d 100644 --- a/payment-service-app/src/main/java/com/iprody/service/PaymentService.java +++ b/payment-service-app/src/main/java/com/iprody/service/PaymentService.java @@ -15,5 +15,6 @@ public interface PaymentService { Page searchPaged(PaymentFilter filter, Pageable pageable); List getPayments(); PaymentDto update(UUID id, PaymentDto dto); - UUID delete(UUID id); + PaymentDto updateNote(UUID id, String updatedNote); + void delete(UUID id); } diff --git a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java index de659da..f4ccaa2 100644 --- a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java +++ b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java @@ -86,8 +86,20 @@ public PaymentDto update(UUID id, PaymentDto dto) { } @Override - public UUID delete(UUID id) { + public PaymentDto updateNote(UUID id, String updatedNote) { return paymentRepository.findById(id) + .map(p -> { + p.setNote(updatedNote); + p.setUpdatedAt(OffsetDateTime.now()); + return paymentMapper.toPaymentDto(paymentRepository.save(p)); + }) + .orElseThrow(() -> new AppException( + HttpStatus.NOT_FOUND.value(), "Note update failed. Payment with id '" + id + "' does not exist.")); + } + + @Override + public void delete(UUID id) { + paymentRepository.findById(id) .map(p -> { paymentRepository.delete(p); return id; From d00c2594d1b782db6b8e4cad3fcda0905f0ae8cf Mon Sep 17 00:00:00 2001 From: alexk11 Date: Sat, 20 Dec 2025 14:56:48 +0300 Subject: [PATCH 11/21] add lightweight update note method --- .../iprody/service/PaymentServiceImpl.java | 65 ++++++++++--------- 1 file changed, 35 insertions(+), 30 deletions(-) diff --git a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java index f4ccaa2..0bb9919 100644 --- a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java +++ b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java @@ -45,7 +45,8 @@ public Page searchPaged(PaymentFilter filter, Pageable pageable) { @Override public List getPayments() { - return paymentRepository.findAll().stream() + return paymentRepository + .findAll().stream() .map(paymentMapper::toPaymentDto) .toList(); } @@ -53,9 +54,10 @@ public List getPayments() { @Override public PaymentDto get(UUID id) { return paymentRepository.findById(id) - .map(paymentMapper::toPaymentDto) - .orElseThrow(() -> new AppException( - HttpStatus.NOT_FOUND.value(), "Payment with the id '" + id + "' was not found")); + .map(paymentMapper::toPaymentDto) + .orElseThrow(() -> new AppException( + HttpStatus.NOT_FOUND.value(), + "Payment with the id '" + id + "' was not found")); } @Override @@ -70,42 +72,45 @@ public PaymentDto create(PaymentDto paymentDto) { @Override public PaymentDto update(UUID id, PaymentDto dto) { return paymentRepository.findById(id) - .map(p -> { - p.setInquiryRefId(dto.getInquiryRefId()); - p.setAmount(dto.getAmount()); - p.setCurrency(dto.getCurrency()); - p.setTransactionRefId(dto.getTransactionRefId()); - p.setStatus(dto.getStatus()); - p.setNote(dto.getNote()); - p.setCreatedAt(dto.getCreatedAt()); - p.setUpdatedAt(OffsetDateTime.now()); - return paymentMapper.toPaymentDto(paymentRepository.save(p)); - }) - .orElseThrow(() -> new AppException( - HttpStatus.NOT_FOUND.value(), "Update failed. Payment with id '" + id + "' does not exist.")); + .map(p -> { + p.setInquiryRefId(dto.getInquiryRefId()); + p.setAmount(dto.getAmount()); + p.setCurrency(dto.getCurrency()); + p.setTransactionRefId(dto.getTransactionRefId()); + p.setStatus(dto.getStatus()); + p.setNote(dto.getNote()); + p.setCreatedAt(dto.getCreatedAt()); + p.setUpdatedAt(OffsetDateTime.now()); + return paymentMapper.toPaymentDto(paymentRepository.save(p)); + }) + .orElseThrow(() -> new AppException( + HttpStatus.NOT_FOUND.value(), + "Update failed. Payment with id '" + id + "' does not exist.")); } @Override public PaymentDto updateNote(UUID id, String updatedNote) { return paymentRepository.findById(id) - .map(p -> { - p.setNote(updatedNote); - p.setUpdatedAt(OffsetDateTime.now()); - return paymentMapper.toPaymentDto(paymentRepository.save(p)); - }) - .orElseThrow(() -> new AppException( - HttpStatus.NOT_FOUND.value(), "Note update failed. Payment with id '" + id + "' does not exist.")); + .map(p -> { + p.setNote(updatedNote); + p.setUpdatedAt(OffsetDateTime.now()); + return paymentMapper.toPaymentDto(paymentRepository.save(p)); + }) + .orElseThrow(() -> new AppException( + HttpStatus.NOT_FOUND.value(), + "Note update failed. Payment with id '" + id + "' does not exist.")); } @Override public void delete(UUID id) { paymentRepository.findById(id) - .map(p -> { - paymentRepository.delete(p); - return id; - }) - .orElseThrow(() -> new AppException( - HttpStatus.NOT_FOUND.value(), "Delete failed. Payment with id '" + id + "' does not exist.")); + .map(p -> { + paymentRepository.delete(p); + return id; + }) + .orElseThrow(() -> new AppException( + HttpStatus.NOT_FOUND.value(), + "Delete failed. Payment with id '" + id + "' does not exist.")); } } From 5ffc3ce382875cc8e36b45ebd80f7a02c17c77fa Mon Sep 17 00:00:00 2001 From: alexk11 Date: Sat, 20 Dec 2025 15:07:53 +0300 Subject: [PATCH 12/21] add lightweight update note method --- .../iprody/service/PaymentServiceImpl.java | 68 +++++++++---------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java index 0bb9919..3982116 100644 --- a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java +++ b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java @@ -54,10 +54,10 @@ public List getPayments() { @Override public PaymentDto get(UUID id) { return paymentRepository.findById(id) - .map(paymentMapper::toPaymentDto) - .orElseThrow(() -> new AppException( - HttpStatus.NOT_FOUND.value(), - "Payment with the id '" + id + "' was not found")); + .map(paymentMapper::toPaymentDto) + .orElseThrow(() -> new AppException( + HttpStatus.NOT_FOUND.value(), + "Payment with the id '" + id + "' was not found")); } @Override @@ -72,45 +72,45 @@ public PaymentDto create(PaymentDto paymentDto) { @Override public PaymentDto update(UUID id, PaymentDto dto) { return paymentRepository.findById(id) - .map(p -> { - p.setInquiryRefId(dto.getInquiryRefId()); - p.setAmount(dto.getAmount()); - p.setCurrency(dto.getCurrency()); - p.setTransactionRefId(dto.getTransactionRefId()); - p.setStatus(dto.getStatus()); - p.setNote(dto.getNote()); - p.setCreatedAt(dto.getCreatedAt()); - p.setUpdatedAt(OffsetDateTime.now()); - return paymentMapper.toPaymentDto(paymentRepository.save(p)); - }) - .orElseThrow(() -> new AppException( - HttpStatus.NOT_FOUND.value(), - "Update failed. Payment with id '" + id + "' does not exist.")); + .map(p -> { + p.setInquiryRefId(dto.getInquiryRefId()); + p.setAmount(dto.getAmount()); + p.setCurrency(dto.getCurrency()); + p.setTransactionRefId(dto.getTransactionRefId()); + p.setStatus(dto.getStatus()); + p.setNote(dto.getNote()); + p.setCreatedAt(dto.getCreatedAt()); + p.setUpdatedAt(OffsetDateTime.now()); + return paymentMapper.toPaymentDto(paymentRepository.save(p)); + }) + .orElseThrow(() -> new AppException( + HttpStatus.NOT_FOUND.value(), + "Update failed. Payment with id '" + id + "' does not exist.")); } @Override public PaymentDto updateNote(UUID id, String updatedNote) { return paymentRepository.findById(id) - .map(p -> { - p.setNote(updatedNote); - p.setUpdatedAt(OffsetDateTime.now()); - return paymentMapper.toPaymentDto(paymentRepository.save(p)); - }) - .orElseThrow(() -> new AppException( - HttpStatus.NOT_FOUND.value(), - "Note update failed. Payment with id '" + id + "' does not exist.")); + .map(p -> { + p.setNote(updatedNote); + p.setUpdatedAt(OffsetDateTime.now()); + return paymentMapper.toPaymentDto(paymentRepository.save(p)); + }) + .orElseThrow(() -> new AppException( + HttpStatus.NOT_FOUND.value(), + "Note update failed. Payment with id '" + id + "' does not exist.")); } @Override public void delete(UUID id) { - paymentRepository.findById(id) - .map(p -> { - paymentRepository.delete(p); - return id; - }) - .orElseThrow(() -> new AppException( - HttpStatus.NOT_FOUND.value(), - "Delete failed. Payment with id '" + id + "' does not exist.")); + paymentRepository.findById(id) + .map(p -> { + paymentRepository.delete(p); + return id; + }) + .orElseThrow(() -> new AppException( + HttpStatus.NOT_FOUND.value(), + "Delete failed. Payment with id '" + id + "' does not exist.")); } } From 9c5b8477df97f9a1534c50909e8219f4f0dbd954 Mon Sep 17 00:00:00 2001 From: alexk11 Date: Sat, 20 Dec 2025 15:14:55 +0300 Subject: [PATCH 13/21] add lightweight update note method --- checkstyle.xml | 2 +- .../com/iprody/service/PaymentServiceImpl.java | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/checkstyle.xml b/checkstyle.xml index 9a6a928..71a760c 100644 --- a/checkstyle.xml +++ b/checkstyle.xml @@ -26,6 +26,6 @@ - + diff --git a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java index 3982116..f1eff06 100644 --- a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java +++ b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java @@ -104,13 +104,13 @@ public PaymentDto updateNote(UUID id, String updatedNote) { @Override public void delete(UUID id) { paymentRepository.findById(id) - .map(p -> { - paymentRepository.delete(p); - return id; - }) - .orElseThrow(() -> new AppException( - HttpStatus.NOT_FOUND.value(), - "Delete failed. Payment with id '" + id + "' does not exist.")); + .map(p -> { + paymentRepository.delete(p); + return id; + }) + .orElseThrow(() -> new AppException( + HttpStatus.NOT_FOUND.value(), + "Delete failed. Payment with id '" + id + "' does not exist.")); } } From 318b532365ae287a7cbc154433b1581356762263 Mon Sep 17 00:00:00 2001 From: alexk11 Date: Sat, 20 Dec 2025 15:18:17 +0300 Subject: [PATCH 14/21] add lightweight update note method --- .../iprody/service/PaymentServiceImpl.java | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java index f1eff06..c1ac7cb 100644 --- a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java +++ b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java @@ -72,33 +72,33 @@ public PaymentDto create(PaymentDto paymentDto) { @Override public PaymentDto update(UUID id, PaymentDto dto) { return paymentRepository.findById(id) - .map(p -> { - p.setInquiryRefId(dto.getInquiryRefId()); - p.setAmount(dto.getAmount()); - p.setCurrency(dto.getCurrency()); - p.setTransactionRefId(dto.getTransactionRefId()); - p.setStatus(dto.getStatus()); - p.setNote(dto.getNote()); - p.setCreatedAt(dto.getCreatedAt()); - p.setUpdatedAt(OffsetDateTime.now()); - return paymentMapper.toPaymentDto(paymentRepository.save(p)); - }) - .orElseThrow(() -> new AppException( - HttpStatus.NOT_FOUND.value(), - "Update failed. Payment with id '" + id + "' does not exist.")); + .map(p -> { + p.setInquiryRefId(dto.getInquiryRefId()); + p.setAmount(dto.getAmount()); + p.setCurrency(dto.getCurrency()); + p.setTransactionRefId(dto.getTransactionRefId()); + p.setStatus(dto.getStatus()); + p.setNote(dto.getNote()); + p.setCreatedAt(dto.getCreatedAt()); + p.setUpdatedAt(OffsetDateTime.now()); + return paymentMapper.toPaymentDto(paymentRepository.save(p)); + }) + .orElseThrow(() -> new AppException( + HttpStatus.NOT_FOUND.value(), + "Update failed. Payment with id '" + id + "' does not exist.")); } @Override public PaymentDto updateNote(UUID id, String updatedNote) { return paymentRepository.findById(id) - .map(p -> { - p.setNote(updatedNote); - p.setUpdatedAt(OffsetDateTime.now()); - return paymentMapper.toPaymentDto(paymentRepository.save(p)); - }) - .orElseThrow(() -> new AppException( - HttpStatus.NOT_FOUND.value(), - "Note update failed. Payment with id '" + id + "' does not exist.")); + .map(p -> { + p.setNote(updatedNote); + p.setUpdatedAt(OffsetDateTime.now()); + return paymentMapper.toPaymentDto(paymentRepository.save(p)); + }) + .orElseThrow(() -> new AppException( + HttpStatus.NOT_FOUND.value(), + "Note update failed. Payment with id '" + id + "' does not exist.")); } @Override @@ -109,8 +109,8 @@ public void delete(UUID id) { return id; }) .orElseThrow(() -> new AppException( - HttpStatus.NOT_FOUND.value(), - "Delete failed. Payment with id '" + id + "' does not exist.")); + HttpStatus.NOT_FOUND.value(), + "Delete failed. Payment with id '" + id + "' does not exist.")); } } From f6f5618c7a676b6f35a9d30ece601fb5dc36e53c Mon Sep 17 00:00:00 2001 From: alexk11 Date: Sat, 20 Dec 2025 15:21:43 +0300 Subject: [PATCH 15/21] add lightweight update note method --- .../com/iprody/service/PaymentServiceImpl.java | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java index c1ac7cb..924dc96 100644 --- a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java +++ b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java @@ -55,9 +55,7 @@ public List getPayments() { public PaymentDto get(UUID id) { return paymentRepository.findById(id) .map(paymentMapper::toPaymentDto) - .orElseThrow(() -> new AppException( - HttpStatus.NOT_FOUND.value(), - "Payment with the id '" + id + "' was not found")); + .orElseThrow(() -> new AppException(HttpStatus.NOT_FOUND.value(), "Payment with the id '" + id + "' was not found")); } @Override @@ -83,9 +81,7 @@ public PaymentDto update(UUID id, PaymentDto dto) { p.setUpdatedAt(OffsetDateTime.now()); return paymentMapper.toPaymentDto(paymentRepository.save(p)); }) - .orElseThrow(() -> new AppException( - HttpStatus.NOT_FOUND.value(), - "Update failed. Payment with id '" + id + "' does not exist.")); + .orElseThrow(() -> new AppException(HttpStatus.NOT_FOUND.value(), "Update failed. Payment with id '" + id + "' does not exist.")); } @Override @@ -96,9 +92,7 @@ public PaymentDto updateNote(UUID id, String updatedNote) { p.setUpdatedAt(OffsetDateTime.now()); return paymentMapper.toPaymentDto(paymentRepository.save(p)); }) - .orElseThrow(() -> new AppException( - HttpStatus.NOT_FOUND.value(), - "Note update failed. Payment with id '" + id + "' does not exist.")); + .orElseThrow(() -> new AppException(HttpStatus.NOT_FOUND.value(), "Note update failed. Payment with id '" + id + "' does not exist.")); } @Override @@ -108,9 +102,7 @@ public void delete(UUID id) { paymentRepository.delete(p); return id; }) - .orElseThrow(() -> new AppException( - HttpStatus.NOT_FOUND.value(), - "Delete failed. Payment with id '" + id + "' does not exist.")); + .orElseThrow(() -> new AppException(HttpStatus.NOT_FOUND.value(), "Delete failed. Payment with id '" + id + "' does not exist.")); } } From 0a972906b87df38bbdcc4c61543afa9979533ad0 Mon Sep 17 00:00:00 2001 From: alexk11 Date: Sat, 20 Dec 2025 15:23:15 +0300 Subject: [PATCH 16/21] add lightweight update note method --- checkstyle.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/checkstyle.xml b/checkstyle.xml index 71a760c..416ea7e 100644 --- a/checkstyle.xml +++ b/checkstyle.xml @@ -26,6 +26,6 @@ - + From 11e88fabf252a248edd9e0ce0434bf58f4e95ddc Mon Sep 17 00:00:00 2001 From: alexk11 Date: Tue, 23 Dec 2025 23:12:10 +0300 Subject: [PATCH 17/21] updated exception handling --- .../exception/EntityNotFoundException.java | 22 ++++++++++ .../com/iprody/exception/ErrorResponse.java | 23 +++++++++++ .../exception/GlobalExceptionHandler.java | 19 ++++++++- .../iprody/service/PaymentServiceImpl.java | 41 +++++++++++-------- 4 files changed, 87 insertions(+), 18 deletions(-) create mode 100644 payment-service-app/src/main/java/com/iprody/exception/EntityNotFoundException.java create mode 100644 payment-service-app/src/main/java/com/iprody/exception/ErrorResponse.java diff --git a/payment-service-app/src/main/java/com/iprody/exception/EntityNotFoundException.java b/payment-service-app/src/main/java/com/iprody/exception/EntityNotFoundException.java new file mode 100644 index 0000000..a2f1ce1 --- /dev/null +++ b/payment-service-app/src/main/java/com/iprody/exception/EntityNotFoundException.java @@ -0,0 +1,22 @@ +package com.iprody.exception; + +import lombok.Getter; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +import java.util.UUID; + +@Getter +@ResponseStatus(HttpStatus.NOT_FOUND) +public class EntityNotFoundException extends RuntimeException { + + private final String operation; + private final UUID entityId; + + public EntityNotFoundException(String message, String operation, UUID entityId) { + super(message); + this.operation = operation; + this.entityId = entityId; + } + +} diff --git a/payment-service-app/src/main/java/com/iprody/exception/ErrorResponse.java b/payment-service-app/src/main/java/com/iprody/exception/ErrorResponse.java new file mode 100644 index 0000000..c6b7323 --- /dev/null +++ b/payment-service-app/src/main/java/com/iprody/exception/ErrorResponse.java @@ -0,0 +1,23 @@ +package com.iprody.exception; + +import lombok.Getter; + +import java.time.Instant; +import java.util.UUID; + +@Getter +public class ErrorResponse { + + private final String error; + private final Instant timestamp; + private final String operation; + private final UUID entityId; + + public ErrorResponse(String error, String operation, UUID entityId) { + this.error = error; + this.timestamp = Instant.now(); + this.operation = operation; + this.entityId = entityId; + } + +} \ No newline at end of file diff --git a/payment-service-app/src/main/java/com/iprody/exception/GlobalExceptionHandler.java b/payment-service-app/src/main/java/com/iprody/exception/GlobalExceptionHandler.java index 177c167..3b56215 100644 --- a/payment-service-app/src/main/java/com/iprody/exception/GlobalExceptionHandler.java +++ b/payment-service-app/src/main/java/com/iprody/exception/GlobalExceptionHandler.java @@ -1,10 +1,13 @@ package com.iprody.exception; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestControllerAdvice; -@ControllerAdvice + +@RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(AppException.class) @@ -14,4 +17,16 @@ public ResponseEntity handleAppException(AppException ex) { .body(ex.getMessage()); } + @ExceptionHandler(EntityNotFoundException.class) + @ResponseStatus(HttpStatus.NOT_FOUND) + public ErrorResponse handleNotFound(EntityNotFoundException ex) { + return new ErrorResponse(ex.getMessage(), ex.getOperation(), ex.getEntityId()); + } + + @ExceptionHandler(Exception.class) + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) + public ErrorResponse handleOther(Exception ex) { + return new ErrorResponse(ex.getMessage(), null, null); + } + } diff --git a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java index 924dc96..d44fa68 100644 --- a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java +++ b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java @@ -1,6 +1,7 @@ package com.iprody.service; import com.iprody.exception.AppException; +import com.iprody.exception.EntityNotFoundException; import com.iprody.mapper.PaymentMapper; import com.iprody.model.PaymentDto; import com.iprody.persistence.PaymentEntity; @@ -55,7 +56,11 @@ public List getPayments() { public PaymentDto get(UUID id) { return paymentRepository.findById(id) .map(paymentMapper::toPaymentDto) - .orElseThrow(() -> new AppException(HttpStatus.NOT_FOUND.value(), "Payment with the id '" + id + "' was not found")); + .orElseThrow(() -> new EntityNotFoundException( + "Платеж не найден", + "get", + id + )); } @Override @@ -69,19 +74,15 @@ public PaymentDto create(PaymentDto paymentDto) { @Override public PaymentDto update(UUID id, PaymentDto dto) { - return paymentRepository.findById(id) - .map(p -> { - p.setInquiryRefId(dto.getInquiryRefId()); - p.setAmount(dto.getAmount()); - p.setCurrency(dto.getCurrency()); - p.setTransactionRefId(dto.getTransactionRefId()); - p.setStatus(dto.getStatus()); - p.setNote(dto.getNote()); - p.setCreatedAt(dto.getCreatedAt()); - p.setUpdatedAt(OffsetDateTime.now()); - return paymentMapper.toPaymentDto(paymentRepository.save(p)); - }) - .orElseThrow(() -> new AppException(HttpStatus.NOT_FOUND.value(), "Update failed. Payment with id '" + id + "' does not exist.")); + paymentRepository.findById(id) + .orElseThrow(() -> new EntityNotFoundException( + "Платеж не найден", + "update", + id + )); + PaymentEntity updated = paymentMapper.toPaymentEntity(dto); + updated.setGuid(id); + return paymentMapper.toPaymentDto(paymentRepository.save(updated)); } @Override @@ -92,7 +93,11 @@ public PaymentDto updateNote(UUID id, String updatedNote) { p.setUpdatedAt(OffsetDateTime.now()); return paymentMapper.toPaymentDto(paymentRepository.save(p)); }) - .orElseThrow(() -> new AppException(HttpStatus.NOT_FOUND.value(), "Note update failed. Payment with id '" + id + "' does not exist.")); + .orElseThrow(() -> new EntityNotFoundException( + "Платеж не найден", + "updateNote", + id + )); } @Override @@ -102,7 +107,11 @@ public void delete(UUID id) { paymentRepository.delete(p); return id; }) - .orElseThrow(() -> new AppException(HttpStatus.NOT_FOUND.value(), "Delete failed. Payment with id '" + id + "' does not exist.")); + .orElseThrow(() -> new EntityNotFoundException( + "Платеж не найден", + "delete", + id + )); } } From 85bdec5fc8f666adf271e1bc74effb233173fe45 Mon Sep 17 00:00:00 2001 From: alexk11 Date: Tue, 23 Dec 2025 23:20:53 +0300 Subject: [PATCH 18/21] fixed junit test --- .../src/test/java/com/iprody/service/PaymentServiceTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/payment-service-app/src/test/java/com/iprody/service/PaymentServiceTest.java b/payment-service-app/src/test/java/com/iprody/service/PaymentServiceTest.java index c18f9a9..894b430 100644 --- a/payment-service-app/src/test/java/com/iprody/service/PaymentServiceTest.java +++ b/payment-service-app/src/test/java/com/iprody/service/PaymentServiceTest.java @@ -1,6 +1,6 @@ package com.iprody.service; -import com.iprody.exception.AppException; +import com.iprody.exception.EntityNotFoundException; import com.iprody.mapper.PaymentMapper; import com.iprody.model.PaymentDto; import com.iprody.persistence.PaymentEntity; @@ -171,7 +171,7 @@ void getPayment_shouldThrowException_whenDoesNotExist() { UUID nonExistentId = UUID.randomUUID(); when(paymentRepository.findById(nonExistentId)).thenReturn(Optional.empty()); // When - assertThrows(AppException.class, () -> paymentService.get(nonExistentId)); + assertThrows(EntityNotFoundException.class, () -> paymentService.get(nonExistentId)); // Then verify(paymentRepository, times(1)).findById(nonExistentId); verify(paymentMapper, never()).toPaymentDto(any(PaymentEntity.class)); From c1912ddfb1b71b4827b8290e2051c2fc53af3272 Mon Sep 17 00:00:00 2001 From: alexk11 Date: Tue, 23 Dec 2025 23:24:31 +0300 Subject: [PATCH 19/21] fixed checkstyle warnings --- .../com/iprody/service/PaymentServiceImpl.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java index d44fa68..ae14d9f 100644 --- a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java +++ b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java @@ -76,9 +76,9 @@ public PaymentDto create(PaymentDto paymentDto) { public PaymentDto update(UUID id, PaymentDto dto) { paymentRepository.findById(id) .orElseThrow(() -> new EntityNotFoundException( - "Платеж не найден", - "update", - id + "Платеж не найден", + "update", + id )); PaymentEntity updated = paymentMapper.toPaymentEntity(dto); updated.setGuid(id); @@ -94,9 +94,9 @@ public PaymentDto updateNote(UUID id, String updatedNote) { return paymentMapper.toPaymentDto(paymentRepository.save(p)); }) .orElseThrow(() -> new EntityNotFoundException( - "Платеж не найден", - "updateNote", - id + "Платеж не найден", + "updateNote", + id )); } @@ -108,9 +108,9 @@ public void delete(UUID id) { return id; }) .orElseThrow(() -> new EntityNotFoundException( - "Платеж не найден", - "delete", - id + "Платеж не найден", + "delete", + id )); } From 0754f6547a2b06f768238c0954628d0200ecdd29 Mon Sep 17 00:00:00 2001 From: alexk11 Date: Tue, 23 Dec 2025 23:28:16 +0300 Subject: [PATCH 20/21] fixed checkstyle warnings --- .../iprody/service/PaymentServiceImpl.java | 24 ++++--------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java index ae14d9f..50634c5 100644 --- a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java +++ b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java @@ -56,11 +56,7 @@ public List getPayments() { public PaymentDto get(UUID id) { return paymentRepository.findById(id) .map(paymentMapper::toPaymentDto) - .orElseThrow(() -> new EntityNotFoundException( - "Платеж не найден", - "get", - id - )); + .orElseThrow(() -> new EntityNotFoundException("Платеж не найден", "get", id)); } @Override @@ -75,11 +71,7 @@ public PaymentDto create(PaymentDto paymentDto) { @Override public PaymentDto update(UUID id, PaymentDto dto) { paymentRepository.findById(id) - .orElseThrow(() -> new EntityNotFoundException( - "Платеж не найден", - "update", - id - )); + .orElseThrow(() -> new EntityNotFoundException("Платеж не найден", "update", id)); PaymentEntity updated = paymentMapper.toPaymentEntity(dto); updated.setGuid(id); return paymentMapper.toPaymentDto(paymentRepository.save(updated)); @@ -93,11 +85,7 @@ public PaymentDto updateNote(UUID id, String updatedNote) { p.setUpdatedAt(OffsetDateTime.now()); return paymentMapper.toPaymentDto(paymentRepository.save(p)); }) - .orElseThrow(() -> new EntityNotFoundException( - "Платеж не найден", - "updateNote", - id - )); + .orElseThrow(() -> new EntityNotFoundException("Платеж не найден", "updateNote", id)); } @Override @@ -107,11 +95,7 @@ public void delete(UUID id) { paymentRepository.delete(p); return id; }) - .orElseThrow(() -> new EntityNotFoundException( - "Платеж не найден", - "delete", - id - )); + .orElseThrow(() -> new EntityNotFoundException("Платеж не найден", "delete", id)); } } From be1792def25ceb68f93a98ce6c78a726776c366a Mon Sep 17 00:00:00 2001 From: alexk11 Date: Tue, 23 Dec 2025 23:31:17 +0300 Subject: [PATCH 21/21] fix checkstyle warnings --- .../src/main/java/com/iprody/service/PaymentServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java index 50634c5..10c27e3 100644 --- a/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java +++ b/payment-service-app/src/main/java/com/iprody/service/PaymentServiceImpl.java @@ -72,7 +72,7 @@ public PaymentDto create(PaymentDto paymentDto) { public PaymentDto update(UUID id, PaymentDto dto) { paymentRepository.findById(id) .orElseThrow(() -> new EntityNotFoundException("Платеж не найден", "update", id)); - PaymentEntity updated = paymentMapper.toPaymentEntity(dto); + final PaymentEntity updated = paymentMapper.toPaymentEntity(dto); updated.setGuid(id); return paymentMapper.toPaymentDto(paymentRepository.save(updated)); }