카테고리 없음
cart_show :: cart_id 받는 버전
joo_coding
2025. 6. 20. 10:21
json handle_cart_show(const json& data) {
json response;
MYSQL* conn = connect_db();
MYSQL_RES* res;
MYSQL_ROW row;
// 1. 요청/입력 로그
std::cout << "[handle_cart_show] 받은 데이터: " << data.dump() << std::endl;
// 2. cart_id 추출 및 체크
int cart_id = 0;
try {
// 데이터에서 cart_id를 추출 (대소문자 혼용 체크)
if (data.contains("cart_id")) cart_id = data["cart_id"];
else if (data.contains("CART_ID")) cart_id = data["CART_ID"];
else if (data["data"].contains("cart_id")) cart_id = data["data"]["cart_id"];
else if (data["data"].contains("CART_ID")) cart_id = data["data"]["CART_ID"];
else {
std::cout << "[handle_cart_show][ERROR] cart_id가 요청 데이터에 없음" << std::endl;
response["status"] = "fail";
response["message"] = "cart_id 없음";
return response;
}
} catch (const std::exception& e) {
std::cout << "[handle_cart_show][ERROR] cart_id 추출 중 예외: " << e.what() << std::endl;
response["status"] = "fail";
response["message"] = "cart_id 추출 에러";
return response;
}
std::cout << "[handle_cart_show] 추출된 cart_id: " << cart_id << std::endl;
// 3. DB 커넥션 체크
if (!conn) {
std::cout << "[handle_cart_show][ERROR] DB 커넥션이 NULL입니다!" << std::endl;
response["status"] = "fail";
response["message"] = "DB 커넥션 없음";
return response;
}
// 4. SQL 쿼리 작성 및 로그
std::string query =
"SELECT "
"ci.CART_ID, ci.TOTAL_PRICE, ci.QUANTITY, "
"ci.MENU_ID, mi.MENU_NAME, mi.ST_ID, si.ST_NAME, "
"cdi.SMALL_OPT_NAME, cdi.SMALL_OPT_PRICE "
"FROM CART_INFO ci "
"JOIN MENU_INFO mi ON ci.MENU_ID = mi.MENU_ID "
"JOIN ST_INFO si ON mi.ST_ID = si.ST_ID "
"LEFT JOIN CART_DETAIL_INFO cdi ON ci.CART_ID = cdi.CART_ID "
"WHERE ci.CART_ID = " + std::to_string(cart_id);
std::cout << "[handle_cart_show] SQL 실행: " << query << std::endl;
// 5. 쿼리 실행 및 에러 체크
if (mysql_query(conn, query.c_str()) != 0) {
std::cout << "[handle_cart_show][ERROR] DB 쿼리 실패: " << mysql_error(conn) << std::endl;
response["status"] = "fail";
response["message"] = "DB 쿼리 실패";
return response;
}
res = mysql_store_result(conn);
if (!res) {
std::cout << "[handle_cart_show][ERROR] 쿼리 결과 없음 또는 에러: " << mysql_error(conn) << std::endl;
response["status"] = "fail";
response["message"] = "쿼리 결과 없음";
return response;
}
// 6. 결과 파싱 및 row 로그
json items = json::array();
int row_count = 0;
while ((row = mysql_fetch_row(res))) {
json item;
try {
item["CART_ID"] = row[0] ? atoi(row[0]) : 0;
item["TOTAL_PRICE"] = row[1] ? atoi(row[1]) : 0;
item["QUANTITY"] = row[2] ? atoi(row[2]) : 0;
item["MENU_ID"] = row[3] ? atoi(row[3]) : 0;
item["MENU_NAME"] = row[4] ? row[4] : "";
item["ST_ID"] = row[5] ? atoi(row[5]) : 0;
item["ST_NAME"] = row[6] ? row[6] : "";
item["SMALL_OPT_NAME"] = row[7] ? row[7] : "";
item["SMALL_OPT_PRICE"] = row[8] ? atoi(row[8]) : 0;
std::cout << "[handle_cart_show] row 파싱: "
<< "CART_ID=" << item["CART_ID"] << ", "
<< "TOTAL_PRICE=" << item["TOTAL_PRICE"] << ", "
<< "QUANTITY=" << item["QUANTITY"] << ", "
<< "MENU_ID=" << item["MENU_ID"] << ", "
<< "MENU_NAME=" << item["MENU_NAME"] << ", "
<< "ST_ID=" << item["ST_ID"] << ", "
<< "ST_NAME=" << item["ST_NAME"] << ", "
<< "SMALL_OPT_NAME=" << item["SMALL_OPT_NAME"] << ", "
<< "SMALL_OPT_PRICE=" << item["SMALL_OPT_PRICE"]
<< std::endl;
items.push_back(item);
row_count++;
} catch (const std::exception& e) {
std::cout << "[handle_cart_show][ERROR] row 파싱 중 예외: " << e.what() << std::endl;
}
}
mysql_free_result(res);
// 7. 결과/응답 체크 및 로그
if (row_count > 0) {
response["status"] = "success";
response["items"] = items;
std::cout << "[handle_cart_show] 파싱된 row 개수: " << row_count << std::endl;
} else {
response["status"] = "fail";
response["message"] = "장바구니 내역이 없음";
std::cout << "[handle_cart_show][WARNING] 장바구니 내역이 없음" << std::endl;
}
// 8. 최종 응답 JSON 로그
std::cout << "[handle_cart_show] 최종 응답 JSON: " << response.dump() << std::endl;
return response;
}