From dc051ebacdc76efd0d2b6da2d5d72522d1d96e03 Mon Sep 17 00:00:00 2001 From: HusseinYasser Date: Fri, 17 May 2024 03:08:46 +0300 Subject: [PATCH] Added printContractCommand Co-Authored-By: Adam Abouelmagd --- .../workup/contracts/RabbitMQListener.java | 8 ++ .../commands/ContractCommandMap.java | 1 + .../commands/PrintContractCommand.java | 80 +++++++++++++++++++ .../responses/PrintContractResponse.java | 2 +- 4 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 services/contracts/src/main/java/com/workup/contracts/commands/PrintContractCommand.java diff --git a/services/contracts/src/main/java/com/workup/contracts/RabbitMQListener.java b/services/contracts/src/main/java/com/workup/contracts/RabbitMQListener.java index 0c967bda..5aa9f437 100644 --- a/services/contracts/src/main/java/com/workup/contracts/RabbitMQListener.java +++ b/services/contracts/src/main/java/com/workup/contracts/RabbitMQListener.java @@ -97,6 +97,14 @@ public CompletableFuture receive(GetMilestoneRequest in) t return CompletableFuture.completedFuture( ((GetMilestoneCommand) commandMap.getCommand("GetMilestone")).Run(in)); } + + @RabbitHandler + @Async + public CompletableFuture receive(PrintContractRequest in) + throws Exception { + return CompletableFuture.completedFuture( + ((PrintContractCommand) commandMap.getCommand("PrintContract")).Run(in)); + } // NEW_COMMAND_BOILERPLATE } diff --git a/services/contracts/src/main/java/com/workup/contracts/commands/ContractCommandMap.java b/services/contracts/src/main/java/com/workup/contracts/commands/ContractCommandMap.java index 667ac672..8eb0f90d 100644 --- a/services/contracts/src/main/java/com/workup/contracts/commands/ContractCommandMap.java +++ b/services/contracts/src/main/java/com/workup/contracts/commands/ContractCommandMap.java @@ -36,6 +36,7 @@ public void registerCommands() { commands.put("ProgressMilestone", ProgressMilestoneCommand.class); commands.put("GetPendingTerminations", GetPendingTerminationsCommand.class); commands.put("GetMilestone", GetMilestoneCommand.class); + commands.put("PrintContract", PrintContractCommand.class); // NEW_COMMAND_BOILERPLATE } diff --git a/services/contracts/src/main/java/com/workup/contracts/commands/PrintContractCommand.java b/services/contracts/src/main/java/com/workup/contracts/commands/PrintContractCommand.java new file mode 100644 index 00000000..4c8f7c9e --- /dev/null +++ b/services/contracts/src/main/java/com/workup/contracts/commands/PrintContractCommand.java @@ -0,0 +1,80 @@ +package com.workup.contracts.commands; + +import com.workup.contracts.models.Contract; +import com.workup.contracts.models.ContractMilestone; +import com.workup.shared.commands.contracts.requests.PrintContractRequest; +import com.workup.shared.commands.contracts.responses.PrintContractResponse; +import com.workup.shared.enums.HttpStatusCode; +import java.util.Optional; +import java.util.UUID; + +public class PrintContractCommand + extends ContractCommand { + + @Override + public PrintContractResponse Run(PrintContractRequest request) { + // Get Contract by ID provided from the request + Optional contract = + contractRepository.findById(UUID.fromString(request.getContractId())); + + // If the contract is not found, we will return an error message + if (contract.isEmpty()) { + return PrintContractResponse.builder() + .withStatusCode(HttpStatusCode.BAD_REQUEST) + .withErrorMessage("No Contract With This ID Is Found!") + .build(); + } + + // If the contract is found, we will print it and return the contract string + String contractString = printContract(contract.get()); + return PrintContractResponse.builder() + .withStatusCode(HttpStatusCode.OK) + .withWithFormatedContractDetails(contractString) + .build(); + } + + public String printContract(Contract contract) { + + StringBuilder contractString = new StringBuilder(); + contractString.append("Contract ID: ").append(contract.getContractId()).append("\n"); + contractString.append("Contract Status: ").append(contract.getStatus()).append("\n"); + contractString + .append("Contract Freelancer ID: ") + .append(contract.getFreelancerId()) + .append("\n"); + contractString.append("Contract Client ID: ").append(contract.getClientId()).append("\n"); + contractString.append("Contract Job ID: ").append(contract.getJobId()).append("\n"); + contractString.append("Contract Proposal ID: ").append(contract.getProposalId()).append("\n"); + contractString.append("Contract Job Title: ").append(contract.getJobTitle()).append("\n"); + contractString.append("Contract Milestones: \n"); + + // Print all the milestones of the contract + + for (String milestoneId : contract.getMilestonesIds()) { + + Optional milestone = + contractMilestoneRepository.findById(UUID.fromString(milestoneId)); + + // If the milestone is not found, we will skip it. Should we or should we throw + // an Error? + if (milestone.isEmpty()) { + continue; + } + ContractMilestone milestoneData = milestone.get(); + + contractString.append("Milestone ID: ").append(milestoneData.getMilestoneId()).append("\n"); + contractString + .append("Milestone Contract ID: ") + .append(milestoneData.getContractId()) + .append("\n"); + contractString + .append("Milestone Description: ") + .append(milestoneData.getDescription()) + .append("\n"); + contractString.append("Milestone Due Date: ").append(milestoneData.getDueDate()).append("\n"); + contractString.append("Milestone Amount: ").append(milestoneData.getAmount()).append("\n"); + } + + return contractString.toString(); + } +} diff --git a/shared/src/main/java/com/workup/shared/commands/contracts/responses/PrintContractResponse.java b/shared/src/main/java/com/workup/shared/commands/contracts/responses/PrintContractResponse.java index 597c7ef8..fe9d5db8 100644 --- a/shared/src/main/java/com/workup/shared/commands/contracts/responses/PrintContractResponse.java +++ b/shared/src/main/java/com/workup/shared/commands/contracts/responses/PrintContractResponse.java @@ -10,5 +10,5 @@ @Jacksonized public class PrintContractResponse extends CommandResponse { - private final String contractFileLink; + private final String withFormatedContractDetails; }