상품 저장소 만들기

shinyeongwoon·2022년 12월 29일
0

Spring MVC 예제 실습

목록 보기
4/12

ItemRepository 만들기

경로 : hello.itemservice.domain.item

package hello.itemservice.domain.item;

import org.springframework.stereotype.Repository;

import javax.sound.midi.Sequence;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

// Commponente등록(scan 대상)
@Repository
public class ItemRepository {
	
    // Memory 기반 저장소 만들기 
    // 멀티 쓰레드 환경인 경우 동시성을 고려해 ConcurrentHashMap을 사용하자
    private static final Map<Long,Item> store = new HashMap<>();
    
    // id를 1씩 증가하며 등록할 예정 (Server단에서 자동으로)
    private static long sequence = 0L;
	
    // saveMethod 만들기
    public Item save(Item item){
        // id를 자동으로 +1 한 후 등록
        item.setId(++sequence);
        store.put(item.getId(),item);
        return item;
    }
	
    // id 로 찾기
    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());
    }
	
    // 저정소 clear 하기 Test 활용 목적
    public void clearStore(){
       store.clear();
    }

}

🤞 ConcurrentHashMap 참고 : https://applepick.tistory.com/124

ItemRepositoryTest - 상품 저장소 테스트

package hello.itemservice.domain.item;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.util.List;

import static org.assertj.core.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.*;

//given 
//when
//then

class ItemRepositoryTest {

    private ItemRepository itemRepository = new ItemRepository();

    @AfterEach
    void afterEach(){
        itemRepository.clearStore();
    }

    @Test
    void save() {
        //given
        Item item = new Item("itemA", 10000, 10);
        //when
        Item savedItem = itemRepository.save(item);
        //then
        Item findItem = itemRepository.findById(item.getId());
        assertThat(findItem).isEqualTo(savedItem);
    }

    @Test
    void findById() {
    }

    @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 update() {
        //given
        Item item = new Item("item1", 10000, 10);

        Item savedItem = itemRepository.save(item);
        Long itemId = savedItem.getId();

        //when
        Item updateParam = new Item("item2", 20000, 30);
        itemRepository.update(itemId,updateParam);

        Item findItem = itemRepository.findById(itemId);
        //then
        assertThat(findItem.getItemName()).isEqualTo(updateParam.getItemName());
        assertThat(findItem.getPrice()).isEqualTo(updateParam.getPrice());
        assertThat(findItem.getQuantity()).isEqualTo(updateParam.getQuantity());
    }

    @Test
    void clearStore() {
    }
}

0개의 댓글