전자상거래 주문 처리 시스템
새 챌린지
🐘 PHP
초급
코드 스멜
76 · 1주 전
고객의 주문을 처리하고 재고를 확인한 후 배송 정보를 생성하는 PHP 코드입니다. 주문 상태를 업데이트하고 이메일 알림을 발송하는 기능을 포함합니다.
리뷰 대상 코드
이 코드의 문제점을 찾아 개선해보세요<?php
class OrderProcessor {
private $db;
public function __construct($db) {
$this->db = $db;
}
public function processOrder($orderId) {
// 주문 정보 가져오기
$order = $this->db->query("SELECT * FROM orders WHERE id = $orderId")->fetch();
if ($order) {
$items = $this->db->query("SELECT * FROM order_items WHERE order_id = $orderId")->fetchAll();
// 재고 확인
$flag = true;
foreach ($items as $item) {
$product = $this->db->query("SELECT * FROM products WHERE id = " . $item['product_id'])->fetch();
if ($product['stock'] < $item['quantity']) {
$flag = false;
break;
}
}
if ($flag) {
// 재고 차감
foreach ($items as $item) {
$product = $this->db->query("SELECT * FROM products WHERE id = " . $item['product_id'])->fetch();
$newStock = $product['stock'] - $item['quantity'];
$this->db->query("UPDATE products SET stock = $newStock WHERE id = " . $item['product_id']);
}
// 주문 상태 업데이트
$status = 'processing';
$this->db->query("UPDATE orders SET status = '$status' WHERE id = $orderId");
// 배송 정보 생성
$shippingFee = 0;
if ($order['total_amount'] < 50000) {
$shippingFee = 3000;
} else if ($order['total_amount'] < 100000) {
$shippingFee = 0;
} else {
$shippingFee = 0;
}
$this->db->query("INSERT INTO shipping (order_id, fee, address) VALUES ($orderId, $shippingFee, '{$order['shipping_address']}')" );
// 이메일 발송
$email = $order['customer_email'];
$subject = 'Order Confirmation';
$message = 'Your order has been confirmed.';
mail($email, $subject, $message);
return 1;
} else {
return 0;
}
} else {
return -1;
}
}
}
?>
코드 리뷰를 제출하려면 로그인이 필요합니다.
로그인하기AI가 리뷰를 채점하고 있습니다
발견한 이슈와 리팩토링 코드를 평가 중입니다...
약 10~20초 정도 소요됩니다