Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 0 additions & 6 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,6 @@
<version>${moneta.version}</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
Expand Down
21 changes: 12 additions & 9 deletions src/main/java/com/tecacet/money/controller/InvoiceController.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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<InvoiceDto> createInvoice(@PathVariable("clientId") String clientId) {
Optional<Invoice> optional =
Expand All @@ -29,12 +31,13 @@ public ResponseEntity<InvoiceDto> 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;

}
}
44 changes: 39 additions & 5 deletions src/main/java/com/tecacet/money/controller/InvoiceDto.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
}
}
47 changes: 39 additions & 8 deletions src/main/java/com/tecacet/money/domain/Contract.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.tecacet.money.domain;

import lombok.*;
import org.hibernate.annotations.CreationTimestamp;

import javax.persistence.*;
Expand All @@ -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";
Expand All @@ -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;
}
}
57 changes: 42 additions & 15 deletions src/main/java/com/tecacet/money/domain/Fee.java
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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;
}
}
90 changes: 73 additions & 17 deletions src/main/java/com/tecacet/money/domain/Invoice.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;
Expand All @@ -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();
}

}
Loading