회고

[속눈썹 가맹점 플랫폼_php] 프로젝트 회고

동구나라 2024. 1. 24. 21:39

 

요구사항

페이지는 하나 지만 탭 별로 저장해야 하는 정보가 달랐다

 

save 하는 php를 각각 만들어도 됐지만 상태 값을 넘겨 하나의 php 에서 처리를 해보았다

 

script

클릭 이벤트와  저장 함수에 id 값을 같이 넘겨 주었다

 

const btnReserveDetail = document.getElementById("btnReserveDetail");

if(btnReserveDetail){
    // 상세정보
    document.getElementById("btnReserveDetail").addEventListener("click", function (event) {
        updateReserve(event, 'frmReserveDetail');
    });
}

// 시술 정보
document.getElementById("btnReserveProcedure").addEventListener("click", function (event) {
    updateReserve(event, 'frmReserveProcedure');
});

// 고객 메모
document.getElementById("btnReserveMemo").addEventListener("click", function (event) {
    updateReserve(event, 'frmReserveMemo');
});

// 팁
document.getElementById("btnReserveTip").addEventListener("click", function (event) {
    updateReserve(event, 'frmReserveTip');
});

 

 

받아온 id로 forData를 생성 하였고

<input type="hidden" name="tap" id="tap" value="<?php echo $_GET["tab"] ?>">
function updateReserve(e, id) {

    e.preventDefault();

    let form = document.getElementById(id);

    let reserveId = document.getElementById("reserveId").value;
    let wbnonce = document.getElementById("wbnonce").value;
    let tap = document.getElementById("tap").value === "" ? "detail" : document.getElementById("tap").value

    let formData = new FormData(form);

    formData.append("reserveId", reserveId);
    formData.append("wbnonce", wbnonce);
    formData.append("tap", tap);
    if (surgicalList.length > 0) formData.append("surgical_names", JSON.stringify(surgicalJson));


    // document.getElementById(id).action = "./reserve_view.api.php";
    // document.getElementById(id).submit();
    // return false;

    if (!confirm("저장하시겠습니까?")) {
        return false;
    } else {
        fetch("./reserve_view.api.php", {
            method: "POST",
            body: formData
        }).then(function (response) {
            return response.json();
        }).then(function (result) {
            if (result.msg === "SUCCESS") {
                $popup.alert("저장하였습니다.");
                window.location.reload();
            } else {
                $popup.alert(result.msg);
            }
        }).catch(function (error) {
            console.log(error);
        });

    }
}

 

 

저장 로직

reserve_view.api.php

 

앞에서 설정한 $wbnonse 체크 

$wbnonce    = $_POST["wbnonce"];
$tap        = $_POST["tap"];
$mb_userid  = $_SESSION["mb_userid"];


$reserve_id = $_POST["reserveId"];

if(wb_verify_nonce($wbnonce, $reserve_id)){
    $result["msg"] = "잘못된 접근입니다.";
    echo json_encode($result, JSON_UNESCAPED_UNICODE);
    exit;
}

 

tap 별로 메서드를 만들어 저장로직 분기 처리를 했다.

 

switch ($tap) {
    case 'detail' :
       reserveDetail();
       break;
    case 'procedure' :
       reserveProcedure();
       break;
    case 'memo' :
       reserveMemo();
       break;
    case 'tip' :
       reserveTip();
       break;
}

 

 

function reserveDetail () {

    $db = get_connection();
//$db->debug = true;
    $db->BeginTrans();


    $reserve_id = $_POST["reserveId"];
    $directPaymentType = $_POST["directPaymentType"];

    if($directPaymentType == "") {
       $result["msg"] = "현장결제수단을 선택해주세요.";
       echo json_encode($result, JSON_UNESCAPED_UNICODE);
       exit;
    }

    $sql = "SELECT * FROM reservation_tb WHERE reserve_id='{$reserve_id}'";
    $getBalancePrice = $db->getRow($sql);

    $sql        = "
    
    UPDATE 
       reservation_tb
    SET
        direct_payment_type = '{$directPaymentType}',
        direct_payment_usd = '{$getBalancePrice["balance_usd"]}',
        direct_payment_krw = '{$getBalancePrice["balance_krw"]}'
    WHERE
       reserve_id = '{$reserve_id}'
    ";
    $rs         = $db->Execute( $sql );

    if ($rs === false || $db->HasFailedTrans()) {
       $db->RollbackTrans();
       $result["msg"] = "처리 도중 오류가 발생했습니다.";
    } else {
       $result["msg"] = "SUCCESS";
       $db->CommitTrans();
    }

    echo json_encode($result, JSON_UNESCAPED_UNICODE);
    exit;
}

function reserveProcedure () {

    $db = get_connection();
//$db->debug = true;
    $db->BeginTrans();

    $surgical_names                = $_POST["surgical_names"];
    $surgical_content               = $_POST["surgicalContent"];
    $reserve_id                     = $_POST["reserveId"];


    if($surgical_names == "") {
       $result["msg"] = "시술 정보 사진을 등록해주세요.";
       echo json_encode($result, JSON_UNESCAPED_UNICODE);
       exit;
    }

    if($result["msg"] == "" && $surgical_content == "") {
       $result["msg"] = "시술 정보 내용을 등록해주세요.";
       echo json_encode($result, JSON_UNESCAPED_UNICODE);
       exit;
    }

    $sql= "
       
    UPDATE 
       reservation_tb
    SET
        surgical_upload_name = '{$surgical_names}',
        surgical_content    = '{$surgical_content}'
    WHERE
       reserve_id = '{$reserve_id}'
    ";

    $rs2 = $db->Execute($sql);

    if ($rs2 === false || $db->HasFailedTrans()) {
       $db->RollbackTrans();
       $result["msg"] = "처리 도중 오류가 발생했습니다.";
    } else {
       $result["msg"] = "SUCCESS";
       $db->CommitTrans();
    }
    echo json_encode($result, JSON_UNESCAPED_UNICODE);
    exit;
}

function reserveMemo () {

    $db = get_connection();
//$db->debug = true;
    $db->BeginTrans();

    $memo                          = $_POST["memo"];
    $reserve_id                = $_POST["reserveId"];

    if($memo == "") {
       $result["msg"] = "고객 메모를 입력해주세요.";
       echo json_encode($result, JSON_UNESCAPED_UNICODE);
       exit;
    }

    $sql= "
       
    UPDATE 
       reservation_tb
    SET
        memo = '{$memo}'
    WHERE
       reserve_id = '{$reserve_id}'
    ";
    $rs3 = $db->Execute($sql);

    if ($rs3 === false || $db->HasFailedTrans()) {
       $db->RollbackTrans();
       $result["msg"] = "처리 도중 오류가 발생했습니다.";
    } else {
       $result["msg"] = "SUCCESS";
       $db->CommitTrans();
    }
    echo json_encode($result, JSON_UNESCAPED_UNICODE);
    exit;
}

function reserveTip () {

    $db = get_connection();
//$db->debug = true;
    $db->BeginTrans();

    // TODO:외부 API 로 데이터 가져와야 함.(현재는 임시로 처리)
    $data["exchange_rate"] = ($_POST["exchange_rate"] == "") ? "1370" : $_POST["exchange_rate"];

    $tipType                    = $_POST["tipType"];
    $tipPriceUsd                 = $_POST["tipPriceUsd"];
    $tipPriceKrw                 = ceil($tipPriceUsd * $data["exchange_rate"]);
    $reserve_id                  = $_POST["reserveId"];

    if($tipType == "") {
       $result["msg"] = "팁 종류를 선택해주세요.";
       echo json_encode($result, JSON_UNESCAPED_UNICODE);
       exit;
    }

    if($result["msg"] == "" && $tipPriceUsd == "") {
       $result["msg"] = "팁 금액을 입력해주세요.";
       echo json_encode($result, JSON_UNESCAPED_UNICODE);
       exit;
    }

    $sql = "
       UPDATE 
          reservation_tb
       SET
           tip_type = '{$tipType}',
           tip_price_usd = '{$tipPriceUsd}',
           tip_price_krw = '{$tipPriceKrw}'
       WHERE
          reserve_id = '{$reserve_id}'
    ";
    $rs4 = $db->Execute($sql);

    if ($rs4 === false || $db->HasFailedTrans()) {
       $db->RollbackTrans();
       $result["msg"] = "처리 도중 오류가 발생했습니다.";
    } else {
       $result["msg"] = "SUCCESS";
       $db->CommitTrans();
    }
    echo json_encode($result, JSON_UNESCAPED_UNICODE);
    exit;
}

 

느낀점

유지보수로 봤을때는 가독성을  살려 각각에 저장 로직을 만드는게 맞지만 대단한 비지니스 로직이 아니고는 
파라미터 값을 넘겨 메서드를 만들어 저장로직을 가져 가는 것도 괜찮은 방법인 것 같다