Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
4001578
equals on Object
Arnauld Mar 28, 2019
debce82
private fields
Arnauld Mar 28, 2019
496136f
remove empty line
Arnauld Mar 28, 2019
a60774b
Use Date instead of Calendar - not better but less mutable tentation
Arnauld Mar 28, 2019
26f7232
private fields
Arnauld Mar 28, 2019
e19c6c7
move ctor at head of class
Arnauld Mar 28, 2019
5ef7568
reorder field then ctor then methods
Arnauld Mar 28, 2019
b4aff73
no getter ?
Arnauld Mar 28, 2019
99da19f
reorder ctor
Arnauld Mar 28, 2019
a00da2c
lightweight toString
Arnauld Mar 28, 2019
1ecd9c2
should rely on java's Clock directly
Arnauld Mar 28, 2019
e9060af
should rely on java's Clock directly and Instant
Arnauld Mar 28, 2019
f48c5ce
should rely on java's Clock directly and Instant - remove unused import
Arnauld Mar 28, 2019
9d7eb3e
should rely on java's Clock directly and Instant
Arnauld Mar 28, 2019
9aa5d0d
move feature to src/test/resources
Arnauld Mar 28, 2019
f2acec7
assert something
Arnauld Mar 28, 2019
32bca3e
move controller in dedicated package
Arnauld Mar 28, 2019
cb474dd
move controller in dedicated package
Arnauld Mar 28, 2019
fca6b8f
get without check
Arnauld Mar 28, 2019
9752b96
get without check
Arnauld Mar 28, 2019
6887220
findOrFail
Arnauld Mar 28, 2019
44d7b8f
extract constants : fix incoherence
Arnauld Mar 28, 2019
a64a9da
Parameter Object
Arnauld Mar 28, 2019
1b3d8bf
exception in dedicated package, erf...
Arnauld Mar 28, 2019
27982f9
move transactional to service, in absence of usecase/controller servi…
Arnauld Mar 28, 2019
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
3 changes: 1 addition & 2 deletions src/main/java/fr/arolla/modec/entity/CartId.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,11 @@ public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof CartId)) return false;
CartId cartId = (CartId) o;
return id == cartId.id;
return Objects.equals(id, cartId.id);
}

@Override
public int hashCode() {

return Objects.hash(id);
}
}
6 changes: 3 additions & 3 deletions src/main/java/fr/arolla/modec/entity/CartLine.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@ public class CartLine {

@Embedded
@Column(name = "productSku")
Sku productSku;
private Sku productSku;

String productName;
private String productName;

@Embedded
Quantity quantity;
private Quantity quantity;

public CartLine() { //for JPA
}
Expand Down
3 changes: 0 additions & 3 deletions src/main/java/fr/arolla/modec/entity/DeliveryId.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,10 @@ public DeliveryId() { //for JPA
}

public DeliveryId(Long id) {

this.id = id;
}

public Long getId() {

return id;
}

Expand All @@ -30,7 +28,6 @@ public boolean equals(Object o) {

@Override
public int hashCode() {

return Objects.hash(id);
}
}
10 changes: 5 additions & 5 deletions src/main/java/fr/arolla/modec/entity/Order.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package fr.arolla.modec.entity;

import javax.persistence.*;
import java.util.Calendar;
import java.time.Instant;
import java.util.List;

@Entity
Expand All @@ -18,7 +18,7 @@ public class Order {

private Status status;

private Calendar creationDate;
private Instant creationDate;

@Embedded
private ShippingAddress shippingAddress;
Expand All @@ -29,7 +29,7 @@ public class Order {
public Order() { // for JPA
}

public Order(List<OrderLine> lines, Calendar creationDate, Recipient recipient, ShippingAddress shippingAddress) {
public Order(List<OrderLine> lines, Instant creationDate, Recipient recipient, ShippingAddress shippingAddress) {
this.lines = lines;
this.creationDate = creationDate;
this.recipient = recipient;
Expand All @@ -56,15 +56,15 @@ public void setStatus(Status status) {
this.status = status;
}

public Calendar getCreationDate() {
public Instant getCreationDate() {
return creationDate;
}

public enum Status {
CREATED, IN_PREPARATION;

public String toString() {
return super.toString().toLowerCase().replaceAll("_", " ");
return name().toLowerCase().replaceAll("_", " ");
}
}
}
3 changes: 1 addition & 2 deletions src/main/java/fr/arolla/modec/entity/OrderId.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,11 @@ public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof OrderId)) return false;
OrderId orderId = (OrderId) o;
return id == orderId.id;
return Objects.equals(id, orderId.id);
}

@Override
public int hashCode() {

return Objects.hash(id);
}

Expand Down
6 changes: 3 additions & 3 deletions src/main/java/fr/arolla/modec/entity/OrderLine.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ public class OrderLine {
private Long id;

@Embedded
Sku productSku;
String productName;
private Sku productSku;
private String productName;

@Embedded
Quantity quantity;
private Quantity quantity;

public OrderLine() { //for JPA
}
Expand Down
19 changes: 10 additions & 9 deletions src/main/java/fr/arolla/modec/entity/Product.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,16 @@ public class Product {
@Embedded
private Weight weight;

public Product() { //for JPA
}

public Product(Sku sku, String name, String description, Weight weight) {
this.sku = sku;
this.name = name;
this.description = description;
this.weight = weight;
}

public Sku getSku() {
return sku;
}
Expand All @@ -35,13 +45,4 @@ public Weight getWeight() {
return weight;
}

public Product() { //for JPA
}

public Product(Sku sku, String name, String description, Weight weight) {
this.sku = sku;
this.name = name;
this.description = description;
this.weight = weight;
}
}
10 changes: 5 additions & 5 deletions src/main/java/fr/arolla/modec/entity/Quantity.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,7 @@

@Embeddable
public class Quantity {
long quantity;

public long getQuantity() {
return quantity;
}
private long quantity;

public Quantity() { //for JPA
}
Expand All @@ -18,6 +14,10 @@ public Quantity(long quantity) {
this.quantity = quantity;
}

public long getQuantity() {
return quantity;
}

@Override
public String toString() {
return Long.toString(quantity);
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/fr/arolla/modec/entity/Recipient.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,12 @@ public Recipient(String recipientFullName, String email) {
this.recipientFullName = recipientFullName;
this.email = email;
}

public String getRecipientFullName() {
return recipientFullName;
}

public String getEmail() {
return email;
}
}
7 changes: 3 additions & 4 deletions src/main/java/fr/arolla/modec/entity/ShippingAddress.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ public class ShippingAddress implements Serializable {
private String zipCode;
private String isoCountryCode;

public ShippingAddress() {//for JPA
}

public ShippingAddress(String fullName, String line1, String city, String zipCode, String isoCountryCode) {
this.fullName = fullName;
this.line1 = line1;
Expand All @@ -21,9 +24,6 @@ public ShippingAddress(String fullName, String line1, String city, String zipCod
this.isoCountryCode = isoCountryCode;
}

public ShippingAddress() {//for JPA
}

public String getFullName() {
return fullName;
}
Expand Down Expand Up @@ -58,7 +58,6 @@ public boolean equals(Object o) {

@Override
public int hashCode() {

return Objects.hash(fullName, line1, city, zipCode, isoCountryCode);
}
}
8 changes: 3 additions & 5 deletions src/main/java/fr/arolla/modec/entity/Sku.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,15 @@ public String getSku() {

@Override
public String toString() {
return "Sku{" +
"sku='" + sku + '\'' +
'}';
return "Sku{'" + sku + '\'' + '}';
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Sku)) return false;
Sku sku1 = (Sku) o;
return Objects.equals(sku, sku1.sku);
Sku oSku = (Sku) o;
return Objects.equals(this.sku, oSku.sku);
}

@Override
Expand Down
4 changes: 1 addition & 3 deletions src/main/java/fr/arolla/modec/entity/Weight.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@ public double getWeight() {

@Override
public String toString() {
return "Weight{" +
"weight=" + weight +
'}';
return "Weight{" + weight + '}';
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package fr.arolla.modec;
package fr.arolla.modec.exception;

public class BusinessException extends Exception {
public BusinessException() {
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/fr/arolla/modec/exception/CartNotFoundException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package fr.arolla.modec.exception;

import fr.arolla.modec.entity.CartId;

/**
*/
public class CartNotFoundException extends RuntimeException {
public CartNotFoundException(CartId cartId) {
super("cartId: " + cartId.getId());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package fr.arolla.modec.exception;

import fr.arolla.modec.entity.OrderId;

/**
*/
public class OrderNotFoundException extends RuntimeException {
public OrderNotFoundException(OrderId orderId) {
super("orderId: " + orderId.getId());
}
}
31 changes: 22 additions & 9 deletions src/main/java/fr/arolla/modec/service/CartService.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
package fr.arolla.modec.service;

import fr.arolla.modec.entity.*;
import fr.arolla.modec.exception.CartNotFoundException;
import fr.arolla.modec.repository.CartLineRepository;
import fr.arolla.modec.repository.CartRepository;
import fr.arolla.modec.repository.ProductRepository;
import fr.arolla.modec.repository.ShippingServiceRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

@Service
public class CartService {

private final CartRepository cartRepository;
Expand All @@ -23,29 +27,34 @@ public CartService(CartRepository cartRepository, ProductRepository productRepos
this.shippingServiceRepository = shippingServiceRepository;
}

@Transactional
public CartId createCart() {
return cartRepository.save(new Cart()).getId();
}

@Transactional
public void addToCart(CartId cartId, Sku sku, Quantity quantity) {
Product product = productRepository.findOneBySku(sku);
CartLine line = new CartLine(sku, product.getName(), quantity);
cartLineRepository.save(line);
cartRepository.findById(cartId).get().getLines().add(line);
findOrFail(cartId).getLines().add(line);
}

@Transactional
public List<CartLine> getLines(CartId cartId) {
return cartRepository.findById(cartId).get().getLines();
// return a copy to load content
return new ArrayList<>(findOrFail(cartId).getLines());
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is ugly... thanks to hibernate and lazy load

}

public void setShippingAddress(CartId cartId, String fullName, String line1, String city, String zipCode, String isoCountryCode) {
ShippingAddress address = new ShippingAddress(fullName, line1, city, zipCode, isoCountryCode);
cartRepository.findById(cartId).get().setShippingAddress(address);
@Transactional
public void setShippingAddress(CartId cartId, ShippingAddress shippingAddress) {
findOrFail(cartId).setShippingAddress(shippingAddress);
}

@Transactional
public List<ShippingService> getShippingServices(CartId cartId) {
List<ShippingService> servicesFound = new ArrayList<>();
Cart cart = cartRepository.findById(cartId).get();
Cart cart = findOrFail(cartId);
if (cart.getShippingAddress() != null && !cart.getLines().isEmpty()) {
Sku firstProductSku = cart.getLines().get(0).getProductSku();
Product firstProduct = productRepository.findOneBySku(firstProductSku);
Expand All @@ -59,8 +68,12 @@ public List<ShippingService> getShippingServices(CartId cartId) {
return servicesFound;
}

public void setRecipient(CartId cartId, String fullName, String eMail) {
Recipient recipient = new Recipient(fullName, eMail);
cartRepository.findById(cartId).get().setRecipient(recipient);
@Transactional
public void setRecipient(CartId cartId, Recipient recipient) {
findOrFail(cartId).setRecipient(recipient);
}

private Cart findOrFail(CartId cartId) {
return cartRepository.findById(cartId).orElseThrow(() -> new CartNotFoundException(cartId));
}
}
7 changes: 6 additions & 1 deletion src/main/java/fr/arolla/modec/service/DeliveryService.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,12 @@
import fr.arolla.modec.entity.DeliveryId;
import fr.arolla.modec.entity.Order;
import fr.arolla.modec.entity.OrderId;
import fr.arolla.modec.exception.OrderNotFoundException;
import fr.arolla.modec.repository.OrderRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class DeliveryService {

private final OrderRepository orderRepository;
Expand All @@ -13,8 +17,9 @@ public DeliveryService(OrderRepository orderRepository) {
this.orderRepository = orderRepository;
}

@Transactional
public DeliveryId createDeliveryFromOrder(OrderId orderId) {
orderRepository.findById(orderId).get().setStatus(Order.Status.IN_PREPARATION);
orderRepository.findById(orderId).orElseThrow(() -> new OrderNotFoundException(orderId)).setStatus(Order.Status.IN_PREPARATION);
return new DeliveryId(orderId.getId());
}
}
Loading