Post

Refactoring_UUID to make unique order number

✅ Mid Feedback

Instead of using Random to make unique order number, why not use UUID?

✅ UUID

Universally Unique Identifier
128-bit long number in hex characters separated by “-“


example: e58ed763-928c-4155-bee9-fdbaaadc15f3

✔️ Before

Cart to Order service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Transactional
public ResponseDto cartToOrder(CustomUserDetails customUserDetails) {
            //...make order code

            //before implementing UUID
            LocalDate orderAt = LocalDate.now();
            Random random = new Random();
            Integer randomNumber = random.nextInt(10000);

            String ordersNumber = user.getUserId().toString() + orderAt.getYear() + ":" + randomNumber.toString();

            OrderResponseDto orderResponseDto = OrderResponseDto.builder()
                    .userName(user.getName())
                    .phoneNumber(user.getPhoneNumber())
                    .address(user.getAddress())
                    .ordersNumber(ordersNumber) //save here
                    .ordersAt(orderAt)
                    .orderCouponList(makeOrderCouponsList(user))
                    .orderProductList(makeOrderProductsList(cartList))
                    .build();

            return new ResponseDto(HttpStatus.OK.value(), "order page show success", orderResponseDto);

🔴 UUID was too long for my datatype

After changing the code as such, I got an 🔴Error🔴 saying
Data too long for column 'orders_number' at row 1

1
2
3
            //UUID사용해서 고유한 주문번호 만들기
            String ordersNumber = UUID.randomUUID().toString();

👍🏻 After implementing shortened UUID

🔵 Used substring to make the UUID shorter
👍🏻 No worries that the order numbers will not be unique

1
2
3
         //UUID사용해서 고유한 주문번호 만들기
            String ordersNumber = UUID.randomUUID().toString().replace("-", "").substring(0, 16);

image

This post is licensed under CC BY 4.0 by the author.