전자상거래 주문 처리 시스템

🐘 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;
        }
    }
}

?>

코드 리뷰를 제출하려면 로그인이 필요합니다.

로그인하기