지금까지 배운 내용을 토대로 간단하게 Spring MVC 패턴으로 쇼핑몰을 만들어보았다
데이터베이스도 따로 쓰지 않는 간단한 설계로 진행했다!!
@Data
public class Item {
private Long id;
private Integer price; //가격이 안정해 졌을때 null로 놔둘수 있게!
private Integer quantity;
}
public Item() {
}
public Item(String itemName, Integer price, Integer quantity) {
this.itemName = itemName;
this.price = price;
this.quantity = quantity;
}
@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 itemId) { return store.getId(itemId); }
public List<Item> findAll(){
return new ArrayList<>(store.values);
}
public void update(Long itemId, Item updateParam) {
Item findItem = store.get(itemId);
findItem.setItemName(updateParam.getItemName());
findItem.setPrice(updateParam.getPrice());
findItem.setQuantity(updateParam.getQuantity());
}
public void clearStore() {store.clear(); }
}
@Controller
@RequestMapping("/basic/items")
@RequiredArgsConstructor
public class BasicItemController {
private final ItemRepository itemRepository;
@GetMapping
public String items(Model model) {
List<Item> items = itemRepository.findAll();
model.addAttribute("items", items);
return "basic/items";
}
@GetMapping("/{itemId})
public String items(@PathVariable long itemId ,Model model) {
List<Item> items = itemRepository.findById(itemId);
model.addAttribute("item", item);
return "basic/item";
}
@GetMapping("/add")
public String addForm(){
return "basic/addForm";
}
@PostMapping("/add")
public String addItemV4(Item item, RediredctAttributes redirectAttributes) {
Item savedItem = itemRepository.save(item);
redirectAttributes.addAttribute("itemId", savedItem.getId());
redirectAttributes.addAttribute("status", true);
return "redirect:/basic/items/{itemId};
}
@GetMapping("/{itemId}/edit")
public String editForm(@PathVariable Long itemId, Model model) {
Item item= itemRepository.findById(itemId);
model.addAtribute("item", item);
return "basic/editForm";
}
@PostMapping("/{itemId}/edit")
public String edit(@PathVariable Long itemId, @ModelAttribute Item item ) {
itemRepository.update(itemId,item);
// view템플릿을 호출하는 대신에 리다이렉트를 호출!!
// controller에서 저 부분을 찾아서 가게 됨!
return "redirect:/basic/items/{itemId}";
}
}