diff --git a/pom.xml b/pom.xml
index ed1124d..9f113b0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -46,12 +46,6 @@
${moneta.version}
pom
-
- org.projectlombok
- lombok
- ${lombok.version}
- provided
-
com.h2database
h2
diff --git a/src/main/java/com/tecacet/money/controller/InvoiceController.java b/src/main/java/com/tecacet/money/controller/InvoiceController.java
index 9486716..393ec2f 100644
--- a/src/main/java/com/tecacet/money/controller/InvoiceController.java
+++ b/src/main/java/com/tecacet/money/controller/InvoiceController.java
@@ -3,7 +3,6 @@
import com.tecacet.money.domain.Invoice;
import com.tecacet.money.service.InvoiceService;
import com.tecacet.money.util.MoneyUtil;
-import lombok.RequiredArgsConstructor;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
@@ -14,11 +13,14 @@
import java.util.Optional;
@Controller
-@RequiredArgsConstructor
public class InvoiceController {
private final InvoiceService invoiceService;
+ public InvoiceController(InvoiceService invoiceService) {
+ this.invoiceService = invoiceService;
+ }
+
@PostMapping(value = "invoice/{clientId}", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity createInvoice(@PathVariable("clientId") String clientId) {
Optional optional =
@@ -29,12 +31,13 @@ public ResponseEntity createInvoice(@PathVariable("clientId") String
}
private InvoiceDto toDto(Invoice invoice) {
- return InvoiceDto.builder()
- .amount(MoneyUtil.extractAmount(invoice.getTotal()))
- .currency(MoneyUtil.extractCurrencyCode(invoice.getTotal()))
- .clientId(invoice.getClientId())
- .dueDate(invoice.getDueDate())
- .invoiceDate(invoice.getInvoiceDate())
- .build();
+ InvoiceDto invoiceDto = new InvoiceDto();
+ invoiceDto.setAmount(MoneyUtil.extractAmount(invoice.getTotal()));
+ invoiceDto.setCurrency(MoneyUtil.extractCurrencyCode(invoice.getTotal()));
+ invoiceDto.setClientId(invoice.getClientId());
+ invoiceDto.setDueDate(invoice.getDueDate());
+ invoiceDto.setInvoiceDate(invoice.getInvoiceDate());
+ return invoiceDto;
+
}
}
diff --git a/src/main/java/com/tecacet/money/controller/InvoiceDto.java b/src/main/java/com/tecacet/money/controller/InvoiceDto.java
index 82ec2ef..1f99b12 100644
--- a/src/main/java/com/tecacet/money/controller/InvoiceDto.java
+++ b/src/main/java/com/tecacet/money/controller/InvoiceDto.java
@@ -1,13 +1,8 @@
package com.tecacet.money.controller;
-import lombok.Builder;
-import lombok.Getter;
-
import java.math.BigDecimal;
import java.time.LocalDate;
-@Getter
-@Builder
public class InvoiceDto {
private String clientId;
@@ -16,4 +11,43 @@ public class InvoiceDto {
private LocalDate invoiceDate;
private LocalDate dueDate;
+ public String getClientId() {
+ return clientId;
+ }
+
+ public void setClientId(String clientId) {
+ this.clientId = clientId;
+ }
+
+ public String getCurrency() {
+ return currency;
+ }
+
+ public void setCurrency(String currency) {
+ this.currency = currency;
+ }
+
+ public BigDecimal getAmount() {
+ return amount;
+ }
+
+ public void setAmount(BigDecimal amount) {
+ this.amount = amount;
+ }
+
+ public LocalDate getInvoiceDate() {
+ return invoiceDate;
+ }
+
+ public void setInvoiceDate(LocalDate invoiceDate) {
+ this.invoiceDate = invoiceDate;
+ }
+
+ public LocalDate getDueDate() {
+ return dueDate;
+ }
+
+ public void setDueDate(LocalDate dueDate) {
+ this.dueDate = dueDate;
+ }
}
diff --git a/src/main/java/com/tecacet/money/domain/Contract.java b/src/main/java/com/tecacet/money/domain/Contract.java
index 3c341e9..83b763c 100644
--- a/src/main/java/com/tecacet/money/domain/Contract.java
+++ b/src/main/java/com/tecacet/money/domain/Contract.java
@@ -1,6 +1,5 @@
package com.tecacet.money.domain;
-import lombok.*;
import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*;
@@ -12,11 +11,6 @@
@Entity
@Table(name = "contract")
-@Getter
-@Builder
-//The following are required by the JPA contract
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class Contract {
public static final String DEFAULT_CURRENCY = "USD";
@@ -29,15 +23,52 @@ public class Contract {
private String clientId;
@NotNull(message = "Invoice Currency is required")
- @Builder.Default
private Currency invoiceCurrency = Currency.getInstance(DEFAULT_CURRENCY);
@NotNull(message = "Discount Percent is required")
- @Builder.Default
private BigDecimal discountPercent = BigDecimal.ZERO;
@Column(name = "created", nullable = false, updatable = false)
@CreationTimestamp
private LocalDateTime created;
+ public UUID getId() {
+ return id;
+ }
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public String getClientId() {
+ return clientId;
+ }
+
+ public void setClientId(String clientId) {
+ this.clientId = clientId;
+ }
+
+ public Currency getInvoiceCurrency() {
+ return invoiceCurrency;
+ }
+
+ public void setInvoiceCurrency(Currency invoiceCurrency) {
+ this.invoiceCurrency = invoiceCurrency;
+ }
+
+ public BigDecimal getDiscountPercent() {
+ return discountPercent;
+ }
+
+ public void setDiscountPercent(BigDecimal discountPercent) {
+ this.discountPercent = discountPercent;
+ }
+
+ public LocalDateTime getCreated() {
+ return created;
+ }
+
+ public void setCreated(LocalDateTime created) {
+ this.created = created;
+ }
}
diff --git a/src/main/java/com/tecacet/money/domain/Fee.java b/src/main/java/com/tecacet/money/domain/Fee.java
index be4e4fc..9b58914 100644
--- a/src/main/java/com/tecacet/money/domain/Fee.java
+++ b/src/main/java/com/tecacet/money/domain/Fee.java
@@ -1,28 +1,16 @@
package com.tecacet.money.domain;
-import lombok.*;
import org.hibernate.annotations.Columns;
import org.hibernate.annotations.CreationTimestamp;
-import java.time.LocalDateTime;
-import java.util.UUID;
-
import javax.money.MonetaryAmount;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+import java.util.UUID;
@Entity
@Table(name = "fee")
-@Getter
-@Builder
-//The following are required by the JPA contract
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class Fee {
@Id
@@ -42,4 +30,43 @@ public class Fee {
@CreationTimestamp
private LocalDateTime created;
+ public UUID getId() {
+ return id;
+ }
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public String getClientId() {
+ return clientId;
+ }
+
+ public void setClientId(String clientId) {
+ this.clientId = clientId;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public MonetaryAmount getAmount() {
+ return amount;
+ }
+
+ public void setAmount(MonetaryAmount amount) {
+ this.amount = amount;
+ }
+
+ public LocalDateTime getCreated() {
+ return created;
+ }
+
+ public void setCreated(LocalDateTime created) {
+ this.created = created;
+ }
}
diff --git a/src/main/java/com/tecacet/money/domain/Invoice.java b/src/main/java/com/tecacet/money/domain/Invoice.java
index c6ad097..101edac 100644
--- a/src/main/java/com/tecacet/money/domain/Invoice.java
+++ b/src/main/java/com/tecacet/money/domain/Invoice.java
@@ -1,32 +1,23 @@
package com.tecacet.money.domain;
-import lombok.*;
import org.hibernate.annotations.Columns;
import org.hibernate.annotations.CreationTimestamp;
+import javax.money.MonetaryAmount;
+import javax.persistence.*;
+import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.UUID;
-import javax.money.MonetaryAmount;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.validation.constraints.NotNull;
-
@Entity
@Table(name = "invoice")
-@Getter
-@Builder
-//The following are required by the JPA contract
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class Invoice {
+ private Invoice() {
+ }
+
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private UUID id;
@@ -39,8 +30,7 @@ public class Invoice {
private MonetaryAmount total;
@NotNull(message = "discountPercent is required")
- @Builder.Default
- private BigDecimal discountPercent = BigDecimal.ZERO;
+ private final BigDecimal discountPercent = BigDecimal.ZERO;
@NotNull(message = "Invoice date is required")
private LocalDate invoiceDate;
@@ -52,4 +42,70 @@ public class Invoice {
@CreationTimestamp
private LocalDateTime created;
+ public UUID getId() {
+ return id;
+ }
+
+ public String getClientId() {
+ return clientId;
+ }
+
+ public MonetaryAmount getTotal() {
+ return total;
+ }
+
+ public BigDecimal getDiscountPercent() {
+ return discountPercent;
+ }
+
+ public LocalDate getInvoiceDate() {
+ return invoiceDate;
+ }
+
+ public LocalDate getDueDate() {
+ return dueDate;
+ }
+
+ public LocalDateTime getCreated() {
+ return created;
+ }
+
+ private static class InvoiceBuilderPrv implements InvoiceBuilder {
+
+ private final Invoice invoice = new Invoice();
+
+ @Override
+ public InvoiceBuilder clientId(String clientId) {
+ invoice.clientId = clientId;
+ return this;
+ }
+
+ @Override
+ public InvoiceBuilder total(MonetaryAmount total) {
+ invoice.total = total;
+ return this;
+ }
+
+ @Override
+ public InvoiceBuilder invoiceDate(LocalDate date) {
+ invoice.invoiceDate = date;
+ return this;
+ }
+
+ @Override
+ public InvoiceBuilder dueDate(LocalDate dueDate) {
+ invoice.dueDate = dueDate;
+ return this;
+ }
+
+ @Override
+ public Invoice build() {
+ return invoice;
+ }
+ }
+
+ public static InvoiceBuilder builder() {
+ return new InvoiceBuilderPrv();
+ }
+
}
diff --git a/src/main/java/com/tecacet/money/domain/InvoiceBuilder.java b/src/main/java/com/tecacet/money/domain/InvoiceBuilder.java
new file mode 100644
index 0000000..c3d161d
--- /dev/null
+++ b/src/main/java/com/tecacet/money/domain/InvoiceBuilder.java
@@ -0,0 +1,17 @@
+package com.tecacet.money.domain;
+
+import javax.money.MonetaryAmount;
+import java.time.LocalDate;
+
+public interface InvoiceBuilder {
+
+ InvoiceBuilder clientId(String clientId);
+
+ InvoiceBuilder total(MonetaryAmount total);
+
+ InvoiceBuilder invoiceDate(LocalDate date);
+
+ InvoiceBuilder dueDate(LocalDate dueDate);
+
+ Invoice build();
+}
diff --git a/src/main/java/com/tecacet/money/service/InvoiceService.java b/src/main/java/com/tecacet/money/service/InvoiceService.java
index d65a954..cbbb631 100644
--- a/src/main/java/com/tecacet/money/service/InvoiceService.java
+++ b/src/main/java/com/tecacet/money/service/InvoiceService.java
@@ -6,8 +6,6 @@
import com.tecacet.money.repository.ContractRepository;
import com.tecacet.money.repository.FeeRepository;
import com.tecacet.money.repository.InvoiceRepository;
-import com.tecacet.money.util.MoneyUtil;
-import lombok.RequiredArgsConstructor;
import org.javamoney.moneta.Money;
import org.springframework.stereotype.Service;
@@ -21,7 +19,6 @@
import java.util.Optional;
@Service
-@RequiredArgsConstructor
public class InvoiceService {
private final FeeRepository feeRepository;
@@ -29,6 +26,13 @@ public class InvoiceService {
private final ContractRepository contractRepository;
private final ExchangeRateProvider exchangeRateProvider;
+ public InvoiceService(FeeRepository feeRepository, InvoiceRepository invoiceRepository, ContractRepository contractRepository, ExchangeRateProvider exchangeRateProvider) {
+ this.feeRepository = feeRepository;
+ this.invoiceRepository = invoiceRepository;
+ this.contractRepository = contractRepository;
+ this.exchangeRateProvider = exchangeRateProvider;
+ }
+
public Optional createClientInvoice(String clientId, LocalDate date) {
List fees = feeRepository.findByClientId(clientId);
if (fees.isEmpty()) {
diff --git a/src/test/java/com/tecacet/money/controller/InvoiceControllerTest.java b/src/test/java/com/tecacet/money/controller/InvoiceControllerTest.java
index bf5ccb8..8b17759 100644
--- a/src/test/java/com/tecacet/money/controller/InvoiceControllerTest.java
+++ b/src/test/java/com/tecacet/money/controller/InvoiceControllerTest.java
@@ -62,18 +62,17 @@ void createInvoice() {
}
private Fee createFee(String clientId, double amount, String currency) {
- return Fee.builder()
- .clientId(clientId)
- .amount(Money.of(amount, currency))
- .build();
+ Fee fee = new Fee();
+ fee.setClientId(clientId);
+ fee.setAmount(Money.of(amount, currency));
+ return fee;
}
private Contract createContract(String clientId) {
- Contract contract = Contract.builder()
- .clientId(clientId)
- .invoiceCurrency(Currency.getInstance("USD"))
- .discountPercent(BigDecimal.TEN)
- .build();
+ Contract contract = new Contract();
+ contract.setClientId(clientId);
+ contract.setInvoiceCurrency(Currency.getInstance("USD"));
+ contract.setDiscountPercent(BigDecimal.TEN);
return contractRepository.save(contract);
}
}
\ No newline at end of file
diff --git a/src/test/java/com/tecacet/money/repository/ContractRepositoryTest.java b/src/test/java/com/tecacet/money/repository/ContractRepositoryTest.java
index 2a9264e..5e697b5 100644
--- a/src/test/java/com/tecacet/money/repository/ContractRepositoryTest.java
+++ b/src/test/java/com/tecacet/money/repository/ContractRepositoryTest.java
@@ -35,10 +35,9 @@ void missingRequiredProperty() {
}
private Contract createContract(String clientId, Currency currency) {
- Contract contract = Contract.builder()
- .clientId(clientId)
- .invoiceCurrency(currency)
- .build();
+ Contract contract = new Contract();
+ contract.setClientId(clientId);
+ contract.setInvoiceCurrency(currency);
return contractRepository.save(contract);
}
}
diff --git a/src/test/java/com/tecacet/money/repository/FeeRepositoryTest.java b/src/test/java/com/tecacet/money/repository/FeeRepositoryTest.java
index d5f2fcc..edbb2a2 100644
--- a/src/test/java/com/tecacet/money/repository/FeeRepositoryTest.java
+++ b/src/test/java/com/tecacet/money/repository/FeeRepositoryTest.java
@@ -38,9 +38,9 @@ void findByClientId() {
}
private Fee createFee(String clientId, double amount, String currency) {
- return Fee.builder()
- .clientId(clientId)
- .amount(Money.of(amount, currency))
- .build();
+ Fee fee = new Fee();
+ fee.setClientId(clientId);
+ fee.setAmount(Money.of(amount, currency));
+ return fee;
}
}
\ No newline at end of file