요구사항
페이지는 하나 지만 탭 별로 저장해야 하는 정보가 달랐다
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;
}
느낀점
유지보수로 봤을때는 가독성을 살려 각각에 저장 로직을 만드는게 맞지만 대단한 비지니스 로직이 아니고는
파라미터 값을 넘겨 메서드를 만들어 저장로직을 가져 가는 것도 괜찮은 방법인 것 같다
'회고' 카테고리의 다른 글
[속눈썹 가맹점 플랫폼_php_동적인 날짜 기능 구현] 프로젝트 회고 (1) | 2024.01.24 |
---|---|
[차량 점검플렛폼 프로젝트 회고] 회원가입 기능 (1) | 2024.01.24 |
[차량 점검 플랫폼_대시보드] 프로젝트 회고(미완료) (0) | 2024.01.24 |