작성
·
38
·
수정됨
0
Future<void> patchBasket() async {
await repository.patchBasket(
body: PatchBasketBody(
basket: state
.map((e) => PatchBasketBodyBasket(
productId: e.product.id,
count: e.count,
))
.toList(),
),
);
}
Future<void> removeFromBasket({
// true면 count에 관계없이 삭제
bool isDelete = false,
required ProductModel product,
}) async {
// 1) 장바구니에 상품이 존재할때
// 1-1) 상품의 카운트가 1보다 크면 -1
// 1-2) 상품의 카운트가 1이면 상품 제거
// 2) 장바구니에 상품이 존재하지 않을때
// 2-1) 즉시 함수 반환하고 아무것도 하지 않음
final exists =
state.firstWhereOrNull((e) => e.product.id == product.id) != null;
print('exists: $exists');
if (!exists) {
return;
}
final existingProduct = state.firstWhere((e) => e.product.id == product.id);
if (existingProduct.count == 1 || isDelete) {
state = state.where((e) => e.product.id != product.id).toList();
} else {
state = state
.map(
(e) => e.product.id == product.id
? e.copyWith(
count: e.count - 1,
)
: e,
)
.toList();
}
await patchBasket();
}
장바구니에서 삭제할 때 상품이 1개 있고 1개의 상품 주문갯수가 1일 때 삭제를 하게되면 해당id를 뺀 값들이 리스트에 담기게 되는데 그럼 장바구니는 전부 비어지게 됩니다. 그래서 스크린에서는 "장바구니 비어있습니다"가 나오는 것 까진 됩니다.
이후 어쨋든 patchBasket은 실행되는데 이때 리스트가 비어 있으니 서버호출할 때 400 에러가 발생합니다.. 서버단에서 비어있는 장바구니를 보내면 정상응답으로 비어 있는 get요청을 받는 과정이 필요한게 아닌가 해서 여쭤봅니다!
포스트맨에서도 빈 리스트를 보내면 400이 옵니다.
좋은 주말 되세요!
답변 2
0
0
안녕하세요, 인프런 AI 인턴입니다. anwjr41님.
장바구니에서 상품을 삭제할 때, 리스트가 비어서 서버에 빈 “basket”을 전송하는 경우 서버에서 400 에러가 발생하는 문제를 겪고 계신 것 같습니다. 이는 서버가 비어 있는 basket을 허용하지 않기 때문입니다.
이 문제를 해결하기 위해 몇 가지 접근 방법을 고려해 볼 수 있습니다:
빈 리스트 체크: patchBasket
메서드를 호출하기 전에 장바구니 리스트가 비었는지 확인해서 비어있다면 서버에 요청을 보내지 않도록 할 수 있습니다. 예를 들어, removeFromBasket
메소드 내에서 await patchBasket();
전에 리스트가 비어 있는지 확인하는 코드를 추가하는 방법이 있습니다:
if (state.isEmpty) {
print('장바구니가 비어 있습니다. patchBasket을 요청하지 않습니다.');
return;
}
await patchBasket();
서버에서 빈 리스트 처리: 만약 서버 코드를 수정할 수 있는 권한이 있다면 서버 로직에서 빈 리스트를 특별히 처리하여 에러를 발생시키지 않게 변경하는 방법도 있습니다.
질문해 주신 내용과 관련된 유사한 사례로는 ‘장바구니에 상품 추가하는 로직에서 궁금한 점이 있습니다‘라는 질문이 있습니다. 이 질문에서는 통신 효율성을 고려하여 patchBasket 호출 시점을 고민하고 논의한 바 있습니다. 참고하시면 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.