Skip to content

Commit 15ab79b

Browse files
committed
Merge branch 'main' into BENCH-195-update-request-models-name-ak-java
# Conflicts: # src/main/java/com/answerdigital/answerking/mapper/CategoryMapper.java # src/test/java/com/answerdigital/answerking/controller/CategoryControllerTest.java # src/test/java/com/answerdigital/answerking/service/CategoryServiceTest.java
2 parents e4bf7cd + 2ac99f2 commit 15ab79b

File tree

13 files changed

+328
-138
lines changed

13 files changed

+328
-138
lines changed

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@
158158
<version>3.2.0</version>
159159
<configuration>
160160
<configLocation>checkstyle.xml</configLocation>
161+
<includeTestSourceDirectory>true</includeTestSourceDirectory>
161162
</configuration>
162163

163164
<executions>

src/main/java/com/answerdigital/answerking/controller/CategoryController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
import java.util.Set;
3131

3232
@Validated
33-
@Tag(name = "Categories", description = "The Categories API")
33+
@Tag(name = "Inventory", description = "Manage the inventory.")
3434
@RestController
3535
@RequestMapping(path = "/categories")
3636
public class CategoryController {

src/main/java/com/answerdigital/answerking/controller/OrderController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import java.util.List;
2323

2424
@Validated
25-
@Tag(name = "Orders", description = "The Orders API")
25+
@Tag(name = "Orders", description = "Create and manage customer orders.")
2626
@RestController
2727
@RequestMapping(path = "/orders")
2828
public class OrderController {

src/main/java/com/answerdigital/answerking/controller/ProductController.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import java.util.List;
2929

3030
@Validated
31-
@Tag(name = "Products", description = "The Products API")
31+
@Tag(name = "Inventory", description = "Manage the inventory.")
3232
@RestController
3333
@RequestMapping(path = "/products")
3434
public class ProductController {
@@ -50,6 +50,7 @@ public ResponseEntity<List<Product>> getAllProducts() {
5050
return new ResponseEntity<>(products, products.isEmpty() ? HttpStatus.NO_CONTENT : HttpStatus.OK);
5151
}
5252

53+
@Operation(summary = "Get a single product.")
5354
@ApiResponses(value = {
5455
@ApiResponse(responseCode = "200", description = "When the product with the provided id has been found.",
5556
content = { @Content(mediaType = "application/json", schema = @Schema(implementation = Product.class)) }),

src/main/java/com/answerdigital/answerking/mapper/CategoryMapper.java

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,25 @@
33
import com.answerdigital.answerking.model.Category;
44
import com.answerdigital.answerking.request.CategoryRequest;
55
import com.answerdigital.answerking.response.CategoryResponse;
6+
import com.answerdigital.answerking.util.DateTimeUtility;
67
import org.mapstruct.Mapper;
78
import org.mapstruct.Mapping;
89
import org.mapstruct.MappingTarget;
9-
import java.time.ZonedDateTime;
10-
import java.time.format.DateTimeFormatter;
11-
import java.time.temporal.ChronoUnit;
12-
import java.time.ZoneOffset;
1310
import java.util.stream.Collectors;
1411

1512
@Mapper(componentModel = "spring",
16-
imports = {DateTimeFormatter.class, ZoneOffset.class, ZonedDateTime.class, ChronoUnit.class, Collectors.class})
13+
imports = {DateTimeUtility.class, Collectors.class})
1714
public interface CategoryMapper {
18-
@Mapping(target = "createdOn", expression = "java( ZonedDateTime.now(ZoneOffset.UTC)" +
19-
".truncatedTo( ChronoUnit.SECONDS )" +
20-
".format( DateTimeFormatter.ofPattern( \"yyyy-MM-dd HH:mm:ss\" ) ) )")
21-
@Mapping(target = "lastUpdated", expression = "java( ZonedDateTime.now(ZoneOffset.UTC)" +
22-
".truncatedTo( ChronoUnit.SECONDS )" +
23-
".format( DateTimeFormatter.ofPattern( \"yyyy-MM-dd HH:mm:ss\" ) ) )")
15+
16+
@Mapping(target = "createdOn", expression = "java(DateTimeUtility.getDateTimeAsString())")
17+
@Mapping(target = "lastUpdated", expression = "java(DateTimeUtility.getDateTimeAsString())")
2418
Category addRequestToCategory(CategoryRequest addCategoryRequest);
2519

26-
@Mapping(target = "lastUpdated", expression = "java( ZonedDateTime.now(ZoneOffset.UTC)" +
27-
".truncatedTo( ChronoUnit.SECONDS )" +
28-
".format( DateTimeFormatter.ofPattern( \"yyyy-MM-dd HH:mm:ss\" ) ) )")
20+
@Mapping(target = "lastUpdated", expression = "java(DateTimeUtility.getDateTimeAsString())")
2921
Category updateRequestToCategory(@MappingTarget Category category, CategoryRequest updateCategoryRequest);
3022

3123
@Mapping(target = "productIds",
3224
expression = "java(category.getProducts().stream().map(product -> product.getId()).collect(Collectors.toList()) )")
3325
CategoryResponse convertCategoryEntityToCategoryResponse(Category category);
26+
3427
}

src/main/java/com/answerdigital/answerking/model/Category.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,12 @@
1919
import javax.persistence.ManyToMany;
2020
import javax.validation.constraints.NotBlank;
2121
import javax.validation.constraints.Pattern;
22-
import java.time.ZoneOffset;
23-
import java.time.ZonedDateTime;
24-
import java.time.format.DateTimeFormatter;
25-
import java.time.temporal.ChronoUnit;
2622
import java.util.HashSet;
2723
import java.util.Objects;
2824
import java.util.Set;
2925

26+
import static com.answerdigital.answerking.util.DateTimeUtility.getDateTimeAsString;
27+
3028
@Entity
3129
@Getter
3230
@Setter
@@ -68,9 +66,7 @@ public Category(final String name, final String description) {
6866
this.name = name;
6967
this.description = description;
7068
this.retired = false;
71-
this.createdOn = ZonedDateTime.now(ZoneOffset.UTC)
72-
.truncatedTo( ChronoUnit.SECONDS )
73-
.format( DateTimeFormatter.ofPattern( "yyyy-MM-dd HH:mm::ss" ) );
69+
this.createdOn = getDateTimeAsString();
7470
this.lastUpdated = this.createdOn;
7571
}
7672

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.answerdigital.answerking.util;
2+
3+
import java.time.ZoneOffset;
4+
import java.time.ZonedDateTime;
5+
import java.time.format.DateTimeFormatter;
6+
import java.time.temporal.ChronoUnit;
7+
8+
public final class DateTimeUtility {
9+
10+
private DateTimeUtility() {}
11+
12+
public static String getDateTimeAsString() {
13+
return ZonedDateTime.now(ZoneOffset.UTC)
14+
.truncatedTo(ChronoUnit.SECONDS)
15+
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
16+
}
17+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.answerdigital.answerking.builder;
2+
3+
import com.answerdigital.answerking.request.AddCategoryRequest;
4+
5+
public class AddCategoryRequestTestBuilder {
6+
7+
private String name;
8+
private String description;
9+
10+
public AddCategoryRequestTestBuilder withDefaultValues() {
11+
this.name = "Burgers";
12+
this.description = "A selection of delicious burgers.";
13+
return this;
14+
}
15+
16+
public AddCategoryRequestTestBuilder withName(final String name) {
17+
this.name = name;
18+
return this;
19+
}
20+
21+
public AddCategoryRequestTestBuilder withDescription(final String description) {
22+
this.description = description;
23+
return this;
24+
}
25+
26+
public AddCategoryRequest build() {
27+
return new AddCategoryRequest(name, description);
28+
}
29+
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package com.answerdigital.answerking.builder;
2+
3+
import com.answerdigital.answerking.model.Category;
4+
import com.answerdigital.answerking.model.Product;
5+
6+
import java.util.HashSet;
7+
import java.util.Set;
8+
9+
import static com.answerdigital.answerking.util.DateTimeUtility.getDateTimeAsString;
10+
11+
public class CategoryTestBuilder {
12+
13+
private Long id = 1L;
14+
private String name;
15+
private String description;
16+
private String createdOn;
17+
private String lastUpdated;
18+
private boolean retired;
19+
private Set<Product> products;
20+
21+
public CategoryTestBuilder withDefaultValues() {
22+
this.id = 1L;
23+
this.name = "Burgers";
24+
this.description = "A selection of delicious burgers.";
25+
this.createdOn = getDateTimeAsString();
26+
this.lastUpdated = getDateTimeAsString();
27+
this.retired = false;
28+
this.products = new HashSet<>();
29+
return this;
30+
}
31+
32+
public CategoryTestBuilder withId(final Long id) {
33+
this.id = id;
34+
return this;
35+
}
36+
37+
public CategoryTestBuilder withName(final String name) {
38+
this.name = name;
39+
return this;
40+
}
41+
42+
public CategoryTestBuilder withDescription(final String description) {
43+
this.description = description;
44+
return this;
45+
}
46+
47+
public CategoryTestBuilder withCreatedOn(final String createdOn) {
48+
this.createdOn = createdOn;
49+
return this;
50+
}
51+
52+
public CategoryTestBuilder withLastUpdated(final String lastUpdated) {
53+
this.lastUpdated = lastUpdated;
54+
return this;
55+
}
56+
57+
public CategoryTestBuilder withRetired(final boolean retired) {
58+
this.retired = retired;
59+
return this;
60+
}
61+
62+
public CategoryTestBuilder withProducts(final Set<Product> products) {
63+
this.products = products;
64+
return this;
65+
}
66+
67+
public CategoryTestBuilder withProduct(final Product product) {
68+
products.add(product);
69+
return this;
70+
}
71+
72+
public Category build() {
73+
return new Category(id, name, description, createdOn, lastUpdated, retired, products);
74+
}
75+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package com.answerdigital.answerking.builder;
2+
3+
import com.answerdigital.answerking.model.Category;
4+
import com.answerdigital.answerking.model.LineItem;
5+
import com.answerdigital.answerking.model.Product;
6+
7+
import java.math.BigDecimal;
8+
import java.util.HashSet;
9+
import java.util.Set;
10+
11+
public class ProductTestBuilder {
12+
13+
private Long id;
14+
private String name;
15+
private String description;
16+
private BigDecimal price;
17+
private boolean retired;
18+
private Set<Category> categories;
19+
private Set<LineItem> lineItems;
20+
21+
public ProductTestBuilder withDefaultValues() {
22+
this.id = 1L;
23+
this.name = "Cheeseburger";
24+
this.description = "A beef patty with cheddar cheese.";
25+
this.price = BigDecimal.valueOf(5.00D);
26+
this.retired = false;
27+
this.categories = new HashSet<>();
28+
this.lineItems = new HashSet<>();
29+
return this;
30+
}
31+
32+
public ProductTestBuilder withId(final Long id) {
33+
this.id = id;
34+
return this;
35+
}
36+
37+
public ProductTestBuilder withName(final String name) {
38+
this.name = name;
39+
return this;
40+
}
41+
42+
public ProductTestBuilder withDescription(final String description) {
43+
this.description = description;
44+
return this;
45+
}
46+
47+
public ProductTestBuilder withPrice(final BigDecimal price) {
48+
this.price = price;
49+
return this;
50+
}
51+
52+
public ProductTestBuilder withRetired(final boolean retired) {
53+
this.retired = retired;
54+
return this;
55+
}
56+
57+
public ProductTestBuilder withCategories(final Set<Category> categories) {
58+
this.categories = categories;
59+
return this;
60+
}
61+
62+
public ProductTestBuilder withLineItems(final Set<LineItem> lineItems) {
63+
this.lineItems = lineItems;
64+
return this;
65+
}
66+
67+
public Product build() {
68+
return new Product(id, name, description, price, retired, categories, lineItems);
69+
}
70+
}

0 commit comments

Comments
 (0)