Skip to content

Commit 746ade2

Browse files
feat: item aggregate factory 구현
- item aggregate 등록을 위한 factory 구현 - 패키지 이동 등의 리펙토링
1 parent ab033f2 commit 746ade2

16 files changed

+198
-35
lines changed

src/main/java/dev/practice/order/domain/order/Item.java

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import dev.practice.order.common.exception.InvalidParamException;
55
import dev.practice.order.common.util.TokenGenerator;
66
import dev.practice.order.domain.AbstractEntity;
7+
import dev.practice.order.domain.order.optiongroup.ItemOptionGroup;
78
import lombok.Builder;
89
import lombok.Getter;
910
import lombok.NoArgsConstructor;

src/main/java/dev/practice/order/domain/order/ItemCommand.java

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package dev.practice.order.domain.order;
22

3+
import dev.practice.order.domain.order.option.ItemOption;
4+
import dev.practice.order.domain.order.optiongroup.ItemOptionGroup;
35
import lombok.Builder;
46
import lombok.Getter;
57
import lombok.ToString;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package dev.practice.order.domain.order;
2+
3+
4+
import dev.practice.order.domain.order.optiongroup.ItemOptionGroup;
5+
6+
import java.util.List;
7+
8+
public interface ItemOptionSeriesFactory {
9+
List<ItemOptionGroup> store(ItemCommand.RegisterItemRequest request, Item item);
10+
}

src/main/java/dev/practice/order/domain/order/ItemServiceImpl.java

+3-31
Original file line numberDiff line numberDiff line change
@@ -12,42 +12,14 @@ public class ItemServiceImpl implements ItemService {
1212
private final PartnerReader partnerReader;
1313
private final ItemStore itemStore;
1414
private final ItemReader itemReader;
15-
private final ItemOptionGroupStore itemOptionGroupStore;
16-
private final ItemOptionStore itemOptionStore;
15+
private final ItemOptionSeriesFactory itemOptionSeriesFactory;
1716

1817
@Override
1918
public String registerItem(ItemCommand.RegisterItemRequest command, String partnerToken) {
20-
// 1. get partnerId
2119
var partner = partnerReader.getPartner(partnerToken);
22-
var partnerId = partner.getId();
23-
24-
// 2. item store
25-
var initItem = command.toEntity(partnerId);
20+
var initItem = command.toEntity(partner.getId());
2621
var item = itemStore.store(initItem);
27-
28-
// 3. itemOptionGroup + itemOption store
29-
command.getItemOptionGroupRequestList().forEach(requestItemOptionGroup -> {
30-
// itemOptionGroup store
31-
var initItemOptionGroup = ItemOptionGroup.builder()
32-
.item(item)
33-
.ordering(requestItemOptionGroup.getOrdering())
34-
.itemOptionGroupName(requestItemOptionGroup.getItemOptionGroupName())
35-
.build();
36-
var itemOptionGroup = itemOptionGroupStore.store(initItemOptionGroup);
37-
38-
// itemOption store
39-
requestItemOptionGroup.getItemOptionRequestList().forEach(requestItemOption -> {
40-
var initItemOption = ItemOption.builder()
41-
.itemOptionGroup(itemOptionGroup)
42-
.ordering(requestItemOption.getOrdering())
43-
.itemOptionName(requestItemOption.getItemOptionName())
44-
.itemOptionPrice(requestItemOption.getItemOptionPrice())
45-
.build();
46-
itemOptionStore.store(initItemOption);
47-
});
48-
});
49-
50-
// 4. return itemToken
22+
itemOptionSeriesFactory.store(command, item);
5123
return item.getItemToken();
5224
}
5325

src/main/java/dev/practice/order/domain/order/ItemOption.java src/main/java/dev/practice/order/domain/order/option/ItemOption.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
package dev.practice.order.domain.order;
1+
package dev.practice.order.domain.order.option;
22

33

44
import dev.practice.order.common.exception.InvalidParamException;
55
import dev.practice.order.domain.AbstractEntity;
6+
import dev.practice.order.domain.order.optiongroup.ItemOptionGroup;
67
import lombok.Builder;
78
import lombok.Getter;
89
import lombok.NoArgsConstructor;

src/main/java/dev/practice/order/domain/order/ItemOptionStore.java src/main/java/dev/practice/order/domain/order/option/ItemOptionStore.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package dev.practice.order.domain.order;
1+
package dev.practice.order.domain.order.option;
22

33
public interface ItemOptionStore {
44
void store(ItemOption itemOption);

src/main/java/dev/practice/order/domain/order/ItemOptionGroup.java src/main/java/dev/practice/order/domain/order/optiongroup/ItemOptionGroup.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
package dev.practice.order.domain.order;
1+
package dev.practice.order.domain.order.optiongroup;
22

33
import com.google.common.collect.Lists;
44
import dev.practice.order.common.exception.InvalidParamException;
55
import dev.practice.order.domain.AbstractEntity;
6+
import dev.practice.order.domain.order.Item;
7+
import dev.practice.order.domain.order.option.ItemOption;
68
import lombok.Builder;
79
import lombok.Getter;
810
import lombok.NoArgsConstructor;

src/main/java/dev/practice/order/domain/order/ItemOptionGroupStore.java src/main/java/dev/practice/order/domain/order/optiongroup/ItemOptionGroupStore.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package dev.practice.order.domain.order;
1+
package dev.practice.order.domain.order.optiongroup;
22

33
public interface ItemOptionGroupStore {
44
ItemOptionGroup store(ItemOptionGroup itemOptionGroup);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package dev.practice.order.infrastructure.item;
2+
3+
import dev.practice.order.domain.order.Item;
4+
import dev.practice.order.domain.order.ItemCommand;
5+
import dev.practice.order.domain.order.ItemOptionSeriesFactory;
6+
import dev.practice.order.domain.order.option.ItemOptionStore;
7+
import dev.practice.order.domain.order.optiongroup.ItemOptionGroup;
8+
import dev.practice.order.domain.order.optiongroup.ItemOptionGroupStore;
9+
import lombok.RequiredArgsConstructor;
10+
import lombok.extern.slf4j.Slf4j;
11+
import org.springframework.stereotype.Component;
12+
import org.springframework.util.CollectionUtils;
13+
14+
import java.util.Collections;
15+
import java.util.List;
16+
import java.util.stream.Collectors;
17+
18+
@Slf4j
19+
@Component
20+
@RequiredArgsConstructor
21+
public class ItemOptionSeriesFactoryImpl implements ItemOptionSeriesFactory {
22+
private final ItemOptionGroupStore itemOptionGroupStore;
23+
private final ItemOptionStore itemOptionStore;
24+
25+
@Override
26+
public List<ItemOptionGroup> store(ItemCommand.RegisterItemRequest command, Item item) {
27+
var itemOptionGroupRequestList = command.getItemOptionGroupRequestList();
28+
if (CollectionUtils.isEmpty(itemOptionGroupRequestList)) return Collections.emptyList();
29+
30+
return itemOptionGroupRequestList.stream()
31+
.map(requestItemOptionGroup -> {
32+
// itemOptionGroup store
33+
var initItemOptionGroup = requestItemOptionGroup.toEntity(item);
34+
var itemOptionGroup = itemOptionGroupStore.store(initItemOptionGroup);
35+
36+
// itemOption store
37+
requestItemOptionGroup.getItemOptionRequestList().forEach(requestItemOption -> {
38+
var initItemOption = requestItemOption.toEntity(itemOptionGroup);
39+
itemOptionStore.store(initItemOption);
40+
});
41+
42+
return itemOptionGroup;
43+
}).collect(Collectors.toList());
44+
}
45+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package dev.practice.order.infrastructure.item;
2+
3+
import dev.practice.order.common.exception.EntityNotFoundException;
4+
import dev.practice.order.domain.order.Item;
5+
import dev.practice.order.domain.order.ItemInfo;
6+
import dev.practice.order.domain.order.ItemReader;
7+
import lombok.RequiredArgsConstructor;
8+
import lombok.extern.slf4j.Slf4j;
9+
import org.springframework.stereotype.Component;
10+
11+
import java.util.List;
12+
13+
@Slf4j
14+
@Component
15+
@RequiredArgsConstructor
16+
public class ItemReaderImpl implements ItemReader {
17+
private final ItemRepository itemRepository;
18+
19+
@Override
20+
public Item getItemBy(String itemToken) {
21+
return itemRepository.findByItemToken(itemToken)
22+
.orElseThrow(EntityNotFoundException::new);
23+
}
24+
25+
@Override
26+
public List<Item> findItemAllBy(List<String> itemTokenList) {
27+
return null;
28+
}
29+
30+
@Override
31+
public List<ItemInfo.ItemOptionGroup> getItemOptionSeries(Item item) {
32+
return null;
33+
}
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package dev.practice.order.infrastructure.item;
2+
3+
4+
import dev.practice.order.domain.order.Item;
5+
import org.springframework.data.jpa.repository.JpaRepository;
6+
7+
import java.util.Optional;
8+
9+
public interface ItemRepository extends JpaRepository<Item, Long> {
10+
Optional<Item> findByItemToken(String itemToken);
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package dev.practice.order.infrastructure.item;
2+
3+
import dev.practice.order.common.exception.InvalidParamException;
4+
import dev.practice.order.domain.order.Item;
5+
import dev.practice.order.domain.order.ItemStore;
6+
import lombok.RequiredArgsConstructor;
7+
import lombok.extern.slf4j.Slf4j;
8+
import org.apache.commons.lang3.StringUtils;
9+
import org.springframework.stereotype.Component;
10+
11+
@Slf4j
12+
@Component
13+
@RequiredArgsConstructor
14+
public class ItemStoreImpl implements ItemStore {
15+
private final ItemRepository itemRepository;
16+
17+
@Override
18+
public Item store(Item item) {
19+
validCheck(item);
20+
return itemRepository.save(item);
21+
}
22+
23+
private void validCheck(Item item) {
24+
if (StringUtils.isEmpty(item.getItemToken())) throw new InvalidParamException("Item.itemToken");
25+
if (StringUtils.isEmpty(item.getItemName())) throw new InvalidParamException("Item.itemName");
26+
if (item.getPartnerId() == null) throw new InvalidParamException("Item.partnerId");
27+
if (item.getItemPrice() == null) throw new InvalidParamException("Item.itemPrice");
28+
if (item.getStatus() == null) throw new InvalidParamException("Item.status");
29+
}
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package dev.practice.order.infrastructure.item.option;
2+
3+
4+
import dev.practice.order.domain.order.option.ItemOption;
5+
import org.springframework.data.jpa.repository.JpaRepository;
6+
7+
public interface ItemOptionRepository extends JpaRepository<ItemOption, Long> {
8+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package dev.practice.order.infrastructure.item.option;
2+
3+
import dev.practice.order.domain.order.option.ItemOption;
4+
import dev.practice.order.domain.order.option.ItemOptionStore;
5+
import lombok.RequiredArgsConstructor;
6+
import lombok.extern.slf4j.Slf4j;
7+
import org.springframework.stereotype.Component;
8+
9+
@Slf4j
10+
@Component
11+
@RequiredArgsConstructor
12+
public class ItemOptionStoreImpl implements ItemOptionStore {
13+
14+
private final ItemOptionRepository itemOptionRepository;
15+
16+
@Override
17+
public void store(ItemOption itemOption) {
18+
itemOptionRepository.save(itemOption);
19+
}
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package dev.practice.order.infrastructure.item.optiongroup;
2+
3+
import dev.practice.order.domain.order.optiongroup.ItemOptionGroup;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
public interface ItemOptionGroupRepository extends JpaRepository<ItemOptionGroup, Long> {
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package dev.practice.order.infrastructure.item.optiongroup;
2+
3+
import dev.practice.order.domain.order.optiongroup.ItemOptionGroup;
4+
import dev.practice.order.domain.order.optiongroup.ItemOptionGroupStore;
5+
import lombok.RequiredArgsConstructor;
6+
import lombok.extern.slf4j.Slf4j;
7+
import org.springframework.stereotype.Component;
8+
9+
@Slf4j
10+
@Component
11+
@RequiredArgsConstructor
12+
public class ItemOptionGroupStoreImpl implements ItemOptionGroupStore {
13+
14+
private final ItemOptionGroupRepository itemOptionGroupRepository;
15+
16+
@Override
17+
public ItemOptionGroup store(ItemOptionGroup itemOptionGroup) {
18+
return itemOptionGroupRepository.save(itemOptionGroup);
19+
}
20+
}

0 commit comments

Comments
 (0)