diff --git a/services/payments/src/main/java/com/workup/payments/RabbitMQListener.java b/services/payments/src/main/java/com/workup/payments/RabbitMQListener.java index 3aec1870..ca42e5f8 100644 --- a/services/payments/src/main/java/com/workup/payments/RabbitMQListener.java +++ b/services/payments/src/main/java/com/workup/payments/RabbitMQListener.java @@ -2,8 +2,14 @@ import com.workup.payments.commands.PaymentCommandMap; import com.workup.payments.commands.paymentrequest.CreatePaymentRequestCommand; +import com.workup.payments.commands.wallet.CreateWalletCommand; +import com.workup.payments.commands.wallet.GetWalletCommand; import com.workup.shared.commands.payments.paymentrequest.requests.CreatePaymentRequestRequest; import com.workup.shared.commands.payments.paymentrequest.responses.CreatePaymentRequestResponse; +import com.workup.shared.commands.payments.wallet.requests.CreateWalletRequest; +import com.workup.shared.commands.payments.wallet.requests.GetWalletRequest; +import com.workup.shared.commands.payments.wallet.responses.CreateWalletResponse; +import com.workup.shared.commands.payments.wallet.responses.GetWalletResponse; import com.workup.shared.enums.ServiceQueueNames; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; @@ -14,10 +20,21 @@ @RabbitListener(queues = ServiceQueueNames.PAYMENTS) public class RabbitMQListener { - @Autowired public PaymentCommandMap commandMap; + @Autowired + public PaymentCommandMap commandMap; @RabbitHandler public CreatePaymentRequestResponse receive(CreatePaymentRequestRequest in) throws Exception { return ((CreatePaymentRequestCommand) commandMap.getCommand("CreatePaymentRequest")).Run(in); } + + @RabbitHandler + public CreateWalletResponse receive(CreateWalletRequest in) throws Exception { + return ((CreateWalletCommand) commandMap.getCommand("CreateWallet")).Run(in); + } + + @RabbitHandler + public GetWalletResponse receive(GetWalletRequest in) throws Exception { + return ((GetWalletCommand) commandMap.getCommand("GetWallet")).Run(in); + } } diff --git a/services/payments/src/test/java/com/workup/payments/PaymentsApplicationTests.java b/services/payments/src/test/java/com/workup/payments/PaymentsApplicationTests.java index 288094a5..4006baf0 100644 --- a/services/payments/src/test/java/com/workup/payments/PaymentsApplicationTests.java +++ b/services/payments/src/test/java/com/workup/payments/PaymentsApplicationTests.java @@ -24,6 +24,10 @@ import org.testcontainers.containers.RabbitMQContainer; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; +import com.workup.shared.commands.payments.wallet.requests.CreateWalletRequest; +import com.workup.shared.commands.payments.wallet.responses.CreateWalletResponse; +import com.workup.shared.commands.payments.wallet.requests.GetWalletRequest; +import com.workup.shared.commands.payments.wallet.responses.GetWalletResponse; @SpringBootTest @Testcontainers @@ -31,18 +35,21 @@ class PaymentsApplicationTests { @Container - static final PostgreSQLContainer postgreSQLContainer = - new PostgreSQLContainer<>("postgres:latest"); + static final PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer<>("postgres:latest"); @Container - static final RabbitMQContainer rabbitMQContainer = - new RabbitMQContainer("rabbitmq:3.13-management"); + static final RabbitMQContainer rabbitMQContainer = new RabbitMQContainer("rabbitmq:3.13-management"); - @Autowired private AmqpTemplate template; - @Autowired private PaymentRequestRepository paymentRequestRepository; - @Autowired private PaymentTransactionRepository paymentTransactionRepository; - @Autowired private WalletRepository walletRepository; - @Autowired private WalletTransactionRepository walletTransactionRepository; + @Autowired + private AmqpTemplate template; + @Autowired + private PaymentRequestRepository paymentRequestRepository; + @Autowired + private PaymentTransactionRepository paymentTransactionRepository; + @Autowired + private WalletRepository walletRepository; + @Autowired + private WalletTransactionRepository walletTransactionRepository; @BeforeEach void clearAll() { @@ -73,16 +80,14 @@ static void setDatasourceProperties(DynamicPropertyRegistry registry) { @Test void testCreatePaymentRequest() { - CreatePaymentRequestRequest createPaymentRequest = - CreatePaymentRequestRequest.builder() - .withAmount(1200) - .withDescription("Payment for services rendered") - .withClientId("3") - .withFreelancerId("4") - .build(); - CreatePaymentRequestResponse response = - (CreatePaymentRequestResponse) - template.convertSendAndReceive(ServiceQueueNames.PAYMENTS, createPaymentRequest); + CreatePaymentRequestRequest createPaymentRequest = CreatePaymentRequestRequest.builder() + .withAmount(1200) + .withDescription("Payment for services rendered") + .withClientId("3") + .withFreelancerId("4") + .build(); + CreatePaymentRequestResponse response = (CreatePaymentRequestResponse) template + .convertSendAndReceive(ServiceQueueNames.PAYMENTS, createPaymentRequest); assertNotNull(response); assertEquals(HttpStatusCode.CREATED, response.getStatusCode()); @@ -98,4 +103,65 @@ void testCreatePaymentRequest() { }, () -> fail("Payment request not found")); } + + @Test + void testCreateWalletCommand() { + + CreateWalletRequest createWalletRequest = CreateWalletRequest.builder() + .withFreelancerId("1") + .build(); + CreateWalletResponse response = (CreateWalletResponse) template.convertSendAndReceive(ServiceQueueNames.PAYMENTS, + createWalletRequest); + assertNotNull(response); + assertEquals(HttpStatusCode.CREATED, response.getStatusCode()); + + } + + @Test + void testCreateDuplicateWalletIsInvalid() { + CreateWalletRequest createWalletRequest = CreateWalletRequest.builder() + .withFreelancerId("1") + .build(); + CreateWalletResponse response = (CreateWalletResponse) template.convertSendAndReceive(ServiceQueueNames.PAYMENTS, + createWalletRequest); + assertNotNull(response); + assertEquals(HttpStatusCode.CREATED, response.getStatusCode()); + + CreateWalletResponse response2 = (CreateWalletResponse) template.convertSendAndReceive(ServiceQueueNames.PAYMENTS, + createWalletRequest); + assertNotNull(response2); + assertEquals(HttpStatusCode.BAD_REQUEST, response2.getStatusCode()); + } + + @Test + void testGetValidWallet() { + CreateWalletRequest createWalletRequest = CreateWalletRequest.builder() + .withFreelancerId("1") + .build(); + CreateWalletResponse response = (CreateWalletResponse) template.convertSendAndReceive(ServiceQueueNames.PAYMENTS, + createWalletRequest); + assertNotNull(response); + assertEquals(HttpStatusCode.CREATED, response.getStatusCode()); + + GetWalletRequest getWalletRequest = GetWalletRequest.builder() + .withFreelancerId("1") + .build(); + GetWalletResponse getWalletResponse = (GetWalletResponse) template.convertSendAndReceive(ServiceQueueNames.PAYMENTS, + getWalletRequest); + assertNotNull(getWalletResponse); + assertEquals(HttpStatusCode.OK, getWalletResponse.getStatusCode()); + assertEquals(0, getWalletResponse.getBalance()); + } + + @Test + void testGetInvalidWallet() { + GetWalletRequest getWalletRequest = GetWalletRequest.builder() + .withFreelancerId("1") + .build(); + GetWalletResponse getWalletResponse = (GetWalletResponse) template.convertSendAndReceive(ServiceQueueNames.PAYMENTS, + getWalletRequest); + assertNotNull(getWalletResponse); + assertEquals(HttpStatusCode.NOT_FOUND, getWalletResponse.getStatusCode()); + } + } diff --git a/shared/src/main/java/com/workup/shared/commands/payments/requests/CreatePaymentRequestRequest.java b/shared/src/main/java/com/workup/shared/commands/payments/requests/CreatePaymentRequestRequest.java deleted file mode 100644 index 8fdbe0b6..00000000 --- a/shared/src/main/java/com/workup/shared/commands/payments/requests/CreatePaymentRequestRequest.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.workup.shared.commands.payments.requests; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.workup.shared.commands.CommandRequest; -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder(setterPrefix = "with") -@JsonDeserialize(builder = CreatePaymentRequestRequest.CreatePaymentRequestRequestBuilder.class) -public class CreatePaymentRequestRequest extends CommandRequest { - private final String clientId; - private final String freelancerId; - private final double amount; - private final String description; -} diff --git a/shared/src/main/java/com/workup/shared/commands/payments/requests/GetWalletRequest.java b/shared/src/main/java/com/workup/shared/commands/payments/requests/GetWalletRequest.java deleted file mode 100644 index 9227a037..00000000 --- a/shared/src/main/java/com/workup/shared/commands/payments/requests/GetWalletRequest.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.workup.shared.commands.payments.requests; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.workup.shared.commands.CommandRequest; -import lombok.Builder; -import lombok.Getter; - - -@Getter -@Builder(setterPrefix = "with") -@JsonDeserialize(builder = GetWalletRequest.GetWalletRequestBuilder.class) -public class GetWalletRequest extends CommandRequest { - private final String freelancerId; -} diff --git a/shared/src/main/java/com/workup/shared/commands/payments/requests/WithdrawFromWalletRequest.java b/shared/src/main/java/com/workup/shared/commands/payments/requests/WithdrawFromWalletRequest.java deleted file mode 100644 index 8fa70336..00000000 --- a/shared/src/main/java/com/workup/shared/commands/payments/requests/WithdrawFromWalletRequest.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.workup.shared.commands.payments.requests; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.workup.shared.commands.CommandRequest; -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder(setterPrefix = "with") -@JsonDeserialize(builder = WithdrawFromWalletRequest.WithdrawFromWalletRequestBuilder.class) -public class WithdrawFromWalletRequest extends CommandRequest { - private final String freelancerId; - private final double amount; - private final String description; -} diff --git a/shared/src/main/java/com/workup/shared/commands/payments/responses/CreatePaymentRequestResponse.java b/shared/src/main/java/com/workup/shared/commands/payments/responses/CreatePaymentRequestResponse.java deleted file mode 100644 index aafe2ef5..00000000 --- a/shared/src/main/java/com/workup/shared/commands/payments/responses/CreatePaymentRequestResponse.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.workup.shared.commands.payments.responses; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.workup.shared.commands.CommandResponse; -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder(setterPrefix = "with") -@JsonDeserialize(builder = CreatePaymentRequestResponse.CreatePaymentRequestResponseBuilder.class) -public class CreatePaymentRequestResponse extends CommandResponse { - private final String paymentRequestId; -} diff --git a/shared/src/main/java/com/workup/shared/commands/payments/responses/GetWalletResponse.java b/shared/src/main/java/com/workup/shared/commands/payments/responses/GetWalletResponse.java deleted file mode 100644 index 35203036..00000000 --- a/shared/src/main/java/com/workup/shared/commands/payments/responses/GetWalletResponse.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.workup.shared.commands.payments.responses; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.workup.shared.commands.CommandResponse; -import lombok.Builder; -import lombok.Getter; - - -@Getter -@Builder(setterPrefix = "with") -@JsonDeserialize(builder = GetWalletResponse.GetWalletResponseBuilder.class) -public class GetWalletResponse extends CommandResponse { - private final double balance; -} diff --git a/shared/src/main/java/com/workup/shared/commands/payments/responses/WithdrawFromWalletResponse.java b/shared/src/main/java/com/workup/shared/commands/payments/responses/WithdrawFromWalletResponse.java deleted file mode 100644 index 0b59bb7a..00000000 --- a/shared/src/main/java/com/workup/shared/commands/payments/responses/WithdrawFromWalletResponse.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.workup.shared.commands.payments.responses; - -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.workup.shared.commands.CommandResponse; -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder(setterPrefix = "with") -@JsonDeserialize(builder = WithdrawFromWalletResponse.WithdrawFromWalletResponseBuilder.class) -public class WithdrawFromWalletResponse extends CommandResponse { - private final double balance; - private final String withdrawalStatus; -}