-
상품 웹 사이트 - 도메인 개발스프링/스프링 MVC 패턴 2023. 2. 16. 14:27
상품 목록을 보여주고 새로운 상품을 만들고 수정할 수 있는 웹 사이트를 만들어보았다.
Item Class
@Data // 실무에서는 @Getter @Setter 쓰고 Data는 잘 안씀 public class Item { private Long id; private String itemName; private Integer price; private Integer quantity; public Item() { } public Item(String itemName, Integer price, Integer quantity) { this.itemName = itemName; this.price = price; this.quantity = quantity; } }
Item 클래스를 만들었는데, id는 상품을 생성할 때마다 1부터 하나씩 증가하도록 설정할 것이다. 나머지 값들은 생성자를 이용해서 생성을 할 때 사용자가 입력할 수 있도록 할 것이다.
Item Repository
@Repository public class ItemRepository { private static final Map<Long, Item> store = new HashMap<>(); private static long sequence = 0L; public Item save(Item item) { item.setId(++sequence); store.put(item.getId(), item); return item; } public Item findById(Long id) { return store.get(id); } public List<Item> findAll() { return new ArrayList<>(store.values()); } public void update(Long itemId, Item updateParam) { Item findItem = findById(itemId); findItem.setItemName(updateParam.getItemName()); findItem.setPrice(updateParam.getPrice()); findItem.setQuantity(updateParam.getQuantity()); } public void clearStore() { store.clear(); } }
item 저장소이다. 웹 사이트에서 아이템이름, 가격, 수량을 입력하고 저장버튼을 누르면 저장되는 기능을 만들고, 아이템을 수정하기 위한 findById와 아이템 목록 전체를 보여주는 findAll 메서드, 수정을 할 수 있는 update 메서드이다.
public class ItemRepositoryTest { ItemRepository itemRepository = new ItemRepository(); @AfterEach void afterEach() { itemRepository.clearStore(); } @Test void save() { // given Item item = new Item("itemA", 10000, 10); // when Item saveItem = itemRepository.save(item); // then Item findItem = itemRepository.findById(item.getId()); assertThat(findItem).isEqualTo(saveItem); } @Test void findAll() { // given Item item1 = new Item("item1", 10000, 10); Item item2 = new Item("item2", 20000, 20); itemRepository.save(item1); itemRepository.save(item2); // when List<Item> result = itemRepository.findAll(); // then assertThat(result.size()).isEqualTo(2); assertThat(result).contains(item1, item2); } @Test void updateItem() { // given Item item = new Item("item1", 10000, 10); Item savedItem = itemRepository.save(item); Long itemId = savedItem.getId(); // when Item updateParam = new Item("item2", 2000, 30); itemRepository.update(itemId, updateParam); // then Item findItem = itemRepository.findById(itemId); assertThat(findItem.getItemName()).isEqualTo(updateParam.getItemName()); assertThat(findItem.getPrice()).isEqualTo(updateParam.getPrice()); assertThat(findItem.getQuantity()).isEqualTo(updateParam.getQuantity()); } }
위의 도메인 코드들이 잘 실행되는지 확인해주는 테스트코드이다.
이전 게시글에서 정리한 내용도 있고, 그렇게 어렵지 않은 코드들이기에 이해하는데 크게 어렵지 않았다.
우선 도메인은 이렇게 만들게 되었고, 이제 사용자가 직접 입력되면 서버에 자동으로 저장되고, 웹 사이트 이동을 자유자제로 할 수 있도록 설계해야한다.
'스프링 > 스프링 MVC 패턴' 카테고리의 다른 글
상품 웹 사이트 - 상품 상세 페이지 (0) 2023.02.16 상품 웹 사이트 - 타임리프 (아이템 목록) (0) 2023.02.16 HTTP 요청 메서드 - JSON (0) 2023.02.14 HTTP 요청 메시지 - 텍스트 (0) 2023.02.14 요청 파라미터 - @RequestParam, @ModelAttribute (0) 2023.02.14