오늘은 각자 모여서 소프트웨어(모각소)하는 시간에 창업동아리에서 개발중인 가구 이커머스 플랫폼의 상품등록 기능에 대해서 개발해 보았다.
그럼 개발했던 과정중 구상한 기능과 요구사항들에 대해서 정리해보도록 하겠다.
앱 개발 관련해서 정의한 요구사항은 이미 노션에 적어 놨기에 이번 상품 등록, 조회 관련해서 요구사항만 분석했다.
각각의 회사에서 등록할 때 사진을 같이 첨부해야한다.
판매자는 자신이 등록한 상품을 확인하고, 수정할 수 있어야한다.
구매자는 판매자가 등록한 상품을 확인할 수 있다.(평범한 이커머스 플랫폼과 같이)
*Controller
@RestController
@RequiredArgsConstructor
public class ItemController {
private final ItemService itemService;
// item 관련해서 response 제약 가져갈지 말지 고민하기
@PostMapping(value = "/seller/item/new")
public ResponseEntity<ResponseItemFormDto> ItemRegistration(@RequestBody RequestItemFormDto itemFormDto) {
if (itemFormDto.getItemType() == ItemType.MIRROR) {
Mirror item = new Mirror();
item.setName(itemFormDto.getName());
item.setPrice(itemFormDto.getPrice());
item.setStockQuantity(itemFormDto.getStockQuantity());
item.setItemDetail(itemFormDto.getItemDetail());
Long saveitemId = itemService.saveitem(item);
ResponseItemFormDto responseItemFormDto = new ResponseItemFormDto();
responseItemFormDto.setId(saveitemId);
responseItemFormDto.setItemName(item.getName());
responseItemFormDto.setItemDetail(itemFormDto.getItemDetail());
responseItemFormDto.setStockQuantity(item.getStockQuantity());
responseItemFormDto.setPrice(itemFormDto.getPrice());
responseItemFormDto.setItemType(itemFormDto.getItemType());
responseItemFormDto.setItemSellStatus(ItemSellStatus.AVAILABLE);
return ResponseEntity.ok(responseItemFormDto);
}
return ResponseEntity.badRequest().build();
}
@GetMapping(value = "/seller/item/search/{id}")
public ResponseEntity<ResponseItemFormDto> ItemSelection(@PathVariable Long id) {
ResponseItemFormDto itemFormDto = new ResponseItemFormDto();
Item item = itemService.findById(id);
if(item == null){
return ResponseEntity.notFound().build();
}
itemFormDto.setItemName(item.getName());
itemFormDto.setItemDetail(item.getItemDetail());
itemFormDto.setStockQuantity(item.getStockQuantity());
itemFormDto.setId(item.getId());
itemFormDto.setPrice(item.getPrice());
if(item instanceof Mirror) {
itemFormDto.setItemType(ItemType.MIRROR);
}
return ResponseEntity.ok(itemFormDto);
}
@GetMapping(value = "/seller/item/search/all")
public List<ResponseItemFormDto> ItemSelection() {
List<Item> items = itemService.findAll();
List<ResponseItemFormDto> collect = items.stream()
.map(o -> new ResponseItemFormDto(o))
.collect(toList());
return collect;
}
}
RequestItemFormDto
@Getter
@Setter
@NoArgsConstructor
public class RequestItemFormDto {
private String name;
private int price;
private int stockQuantity;
private ItemType itemType;
private String ItemDetail;
}
ResponseItemFormDto
{
private Long id;
@NotBlank(message = "상품명은 필수 입력 값입니다.")
private String itemName;
@NotNull(message = "가격은 필수 입력 값입니다.")
private int price;
@NotNull(message = "재고는 필수 입력 값입니다.")
private int stockQuantity;
private ItemType itemType;
@NotBlank(message = "상품 상세는 필수 입력 값입니다.")
private String itemDetail;
private ItemSellStatus itemSellStatus;
private List<ItemImgDto> itemImgDtoList = new ArrayList<>();
private List<Long> itemImgIds = new ArrayList<>();
public ResponseItemFormDto(Item item) {
this.id = item.getId();
this.itemDetail = item.getItemDetail();
this.itemName = item.getName();
this.price = item.getPrice();
this.stockQuantity = item.getStockQuantity();
this.itemDetail =item.getItemDetail();
if(item instanceof Mirror){
this.setItemType(ItemType.MIRROR);
}
}
}
다음 개발 과정에는 상품 등록시 이미지 추가 , 주문 관련 기능, 장바구니 관련기능을 추가해보도록 하겠다.
이제 진짜 얼마남지 않은 모각소를 오늘 하루도 진행했다. 이번주 일요일까지 꽉꽉채워서 25일날 최고의 모각소 기록들을 제출할 예정이다. 또한 오늘 진행한 개발은 상품조회, 상품 등록에 관한 내용이였는데 크게 어렵지 않았지만, 프로그램이 점점 커지면서 관리해야할 부분이 늘어나므로 객체 지향적 개발에 관해서 더욱더 공부를 해야한다고 느꼈다. 방학이 끝나기 전까지 막판 스퍼트를 달려보자.