Skip to content
This repository was archived by the owner on Jul 6, 2025. It is now read-only.

Commit 5497993

Browse files
authored
Merge pull request #62 from Zenfulcode/order-shippinginfo-relation
Order address relation rework
2 parents 9311627 + b8c179c commit 5497993

21 files changed

Lines changed: 235 additions & 243 deletions

src/main/java/com/zenfulcode/commercify/commercify/api/requests/RegisterUserRequest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ public record RegisterUserRequest(
1010
String firstName,
1111
String lastName,
1212
Boolean isGuest,
13-
AddressDTO shippingAddress,
14-
AddressDTO billingAddress) {
13+
AddressDTO defaultAddress) {
1514
// Set a secure default password
1615
public RegisterUserRequest {
1716
if (password == null || password.isBlank()) {
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package com.zenfulcode.commercify.commercify.api.requests.orders;
22

3+
import com.zenfulcode.commercify.commercify.dto.AddressDTO;
4+
35
import java.util.List;
46

57
public record CreateOrderRequest(
68
String currency,
7-
List<CreateOrderLineRequest> orderLines
9+
List<CreateOrderLineRequest> orderLines,
10+
AddressDTO shippingAddress,
11+
AddressDTO billingAddress
812
) {
913
}

src/main/java/com/zenfulcode/commercify/commercify/component/AdminDataLoader.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.zenfulcode.commercify.commercify.component;
22

3+
import com.zenfulcode.commercify.commercify.entity.AddressEntity;
34
import com.zenfulcode.commercify.commercify.entity.UserEntity;
45
import com.zenfulcode.commercify.commercify.repository.UserRepository;
56
import lombok.RequiredArgsConstructor;
@@ -27,14 +28,21 @@ public class AdminDataLoader {
2728
public CommandLineRunner loadData() {
2829
return args -> {
2930
if (userRepository.findByEmail(email).isEmpty()) {
31+
AddressEntity defaultAddress = AddressEntity.builder()
32+
.street("123 Main St")
33+
.city("Springfield")
34+
.state("IL")
35+
.zipCode("62701")
36+
.country("US")
37+
.build();
38+
3039
UserEntity adminUser = UserEntity.builder()
3140
.email(email)
3241
.password(passwordEncoder.encode(password))
3342
.firstName("Admin")
3443
.lastName("User")
3544
.roles(List.of("ADMIN", "USER"))
36-
.shippingAddress(null)
37-
.billingAddress(null)
45+
.defaultAddress(defaultAddress)
3846
.emailConfirmed(true)
3947
.build();
4048

src/main/java/com/zenfulcode/commercify/commercify/controller/OrderController.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import com.zenfulcode.commercify.commercify.dto.OrderDetailsDTO;
1111
import com.zenfulcode.commercify.commercify.exception.*;
1212
import com.zenfulcode.commercify.commercify.service.order.OrderService;
13-
import com.zenfulcode.commercify.commercify.service.order.OrderValidationService;
1413
import com.zenfulcode.commercify.commercify.viewmodel.OrderViewModel;
1514
import lombok.AllArgsConstructor;
1615
import lombok.extern.slf4j.Slf4j;
@@ -32,7 +31,6 @@
3231
public class OrderController {
3332

3433
private final OrderService orderService;
35-
private final OrderValidationService orderValidationService;
3634
private final PagedResourcesAssembler<OrderViewModel> pagedResourcesAssembler;
3735

3836
private static final Set<String> VALID_SORT_FIELDS = Set.of(
@@ -43,7 +41,6 @@ public class OrderController {
4341
@PostMapping("/{userId}")
4442
public ResponseEntity<?> createOrder(@PathVariable Long userId, @Validated @RequestBody CreateOrderRequest orderRequest) {
4543
try {
46-
orderValidationService.validateCreateOrderRequest(orderRequest);
4744
OrderDTO orderDTO = orderService.createOrder(userId, orderRequest);
4845
return ResponseEntity.ok(CreateOrderResponse.from(OrderViewModel.fromDTO(orderDTO)));
4946
} catch (IllegalArgumentException e) {

src/main/java/com/zenfulcode/commercify/commercify/controller/UserManagementController.java

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -57,28 +57,16 @@ public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
5757
return ResponseEntity.ok().build();
5858
}
5959

60-
@PostMapping("/{id}/shipping-address")
60+
@PostMapping("/{id}/address")
6161
@PreAuthorize("hasRole('ADMIN') or #id == authentication.principal.id")
62-
public ResponseEntity<AddressDTO> setShippingAddress(@PathVariable Long id, @RequestBody AddressDTO request) {
63-
return ResponseEntity.ok(userManagementService.setShippingAddress(id, request));
62+
public ResponseEntity<AddressDTO> setAddress(@PathVariable Long id, @RequestBody AddressDTO request) {
63+
return ResponseEntity.ok(userManagementService.setDefaultAddress(id, request));
6464
}
6565

66-
@PostMapping("/{id}/billing-address")
66+
@DeleteMapping("/{id}/address")
6767
@PreAuthorize("hasRole('ADMIN') or #id == authentication.principal.id")
68-
public ResponseEntity<AddressDTO> setBillingAddress(@PathVariable Long id, @RequestBody AddressDTO request) {
69-
return ResponseEntity.ok(userManagementService.setBillingAddress(id, request));
70-
}
71-
72-
@DeleteMapping("/{id}/shipping-address")
73-
@PreAuthorize("hasRole('ADMIN') or #id == authentication.principal.id")
74-
public ResponseEntity<UserDTO> removeShippingAddress(@PathVariable Long id) {
75-
return ResponseEntity.ok(userManagementService.removeShippingAddress(id));
76-
}
77-
78-
@DeleteMapping("/{id}/billing-address")
79-
@PreAuthorize("hasRole('ADMIN') or #id == authentication.principal.id")
80-
public ResponseEntity<UserDTO> removeBillingAddress(@PathVariable Long id) {
81-
return ResponseEntity.ok(userManagementService.removeBillingAddress(id));
68+
public ResponseEntity<UserDTO> removeAddress(@PathVariable Long id) {
69+
return ResponseEntity.ok(userManagementService.removeDefaultAddress(id));
8270
}
8371

8472
@PostMapping("/{id}/roles")

src/main/java/com/zenfulcode/commercify/commercify/dto/UserDTO.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ public class UserDTO {
1616
private String firstName;
1717
private String lastName;
1818
private Date createdAt;
19-
private AddressDTO shippingAddress;
20-
private AddressDTO billingAddress;
19+
private AddressDTO defaultAddress;
2120
private List<String> roles;
2221
}

src/main/java/com/zenfulcode/commercify/commercify/dto/mapper/UserMapper.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,8 @@ public UserDTO apply(UserEntity user) {
2424
.roles(user.getAuthorities().stream().map(GrantedAuthority::getAuthority).toList())
2525
.createdAt(Date.from(user.getCreatedAt()));
2626

27-
if (user.getShippingAddress() != null) {
28-
userBuilder.shippingAddress(addressDTOMapper.apply(user.getShippingAddress()));
29-
}
30-
31-
if (user.getBillingAddress() != null) {
32-
userBuilder.billingAddress(addressDTOMapper.apply(user.getBillingAddress()));
27+
if (user.getDefaultAddress() != null) {
28+
userBuilder.defaultAddress(addressDTOMapper.apply(user.getDefaultAddress()));
3329
}
3430

3531
return userBuilder.build();

src/main/java/com/zenfulcode/commercify/commercify/entity/AddressEntity.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,6 @@ public class AddressEntity {
3333
@Column(nullable = false)
3434
private String country;
3535

36-
@OneToOne(mappedBy = "shippingAddress")
37-
private UserEntity shippingUser;
38-
39-
@OneToOne(mappedBy = "billingAddress")
40-
private UserEntity billingUser;
41-
4236
@Column(name = "created_at", nullable = false)
4337
@CreationTimestamp
4438
private Instant createdAt;

src/main/java/com/zenfulcode/commercify/commercify/entity/OrderEntity.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ public class OrderEntity {
4646
@Column(name = "total_amount")
4747
private Double totalAmount;
4848

49+
@ToString.Exclude
50+
@ManyToOne(cascade = CascadeType.ALL)
51+
@JoinColumn(name = "order_shipping_info_id")
52+
private OrderShippingInfo orderShippingInfo;
53+
4954
@Column(name = "created_at", nullable = false)
5055
@CreationTimestamp
5156
private Instant createdAt;
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.zenfulcode.commercify.commercify.entity;
2+
3+
import jakarta.persistence.*;
4+
import lombok.*;
5+
6+
@Table(name = "order_shipping_info")
7+
@Entity
8+
@Getter
9+
@Setter
10+
@ToString
11+
@Builder
12+
@NoArgsConstructor
13+
@AllArgsConstructor
14+
public class OrderShippingInfo {
15+
@Id
16+
@GeneratedValue(strategy = GenerationType.IDENTITY)
17+
@Column(name = "id", nullable = false)
18+
private Long id;
19+
20+
@Column(name = "shipping_street", nullable = false)
21+
private String shippingStreet;
22+
@Column(name = "shipping_city", nullable = false)
23+
private String shippingCity;
24+
@Column(name = "shipping_state")
25+
private String shippingState;
26+
@Column(name = "shipping_zip", nullable = false)
27+
private String shippingZip;
28+
@Column(name = "shipping_country", nullable = false)
29+
private String shippingCountry;
30+
31+
@Column(name = "billing_street")
32+
private String billingStreet;
33+
@Column(name = "billing_city")
34+
private String billingCity;
35+
@Column(name = "billing_state")
36+
private String billingState;
37+
@Column(name = "billing_zip")
38+
private String billingZip;
39+
@Column(name = "billing_country")
40+
private String billingCountry;
41+
}

0 commit comments

Comments
 (0)