์ํ๋ ๋์์์ ์ฅ๋ฐ๊ตฌ๋๋ฅผ ๋๋ฅด๋ฉด
์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ฒ ์ต๋๊น? confirm ์ฐฝ ๋จ๊ณ , ํ์ธ์ ๋๋ฅด๋ฉด db์ ์ฅ๋ฐ๊ตฌ๋ ์ปฌ๋ ์
์ ๋ง๋ค์ด์ ์๋ก ์ถ๊ฐํ๊ณ ์ถ๋ค.
//์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐ
const AddCart = async () => {
if (confirm("์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐํ๊ฒ ์ต๋๊น?")) {
if (!user) {
//์ ์ ๊ฐ ์์ผ๋ฉด(๋ก๊ทธ์ธ ๋์ด์์ง ์์ ๊ฒฝ์ฐ)
alert("๋ก๊ทธ์ธ์ด ํ์ํ ์๋น์ค์
๋๋ค.");
navigate("/user/login"); //๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ด๋
} else {
//DB์ ์ ์ฅํ๋ค.
try {
await addDoc(collection(db, "cart"), {
//์ปฌ๋ ์
๋ช
-interestBooks
interestBook: book.isbn, //book id
bookTitle: book.title, //book title
bookCover: book.cover, //book cover
bookLink: book.link, //book link
bookAuthor: book.author, //book author
bookPublisher: book.publisher, //book publisher
salesPrice: book.priceSales, // book sales Price
priceStandard: book.priceStandard,
createdAt: Date.now(), // ์์ฑ์ผ์ ์ค๋
username: user.displayName, // ์ ์ ์ด๋ฆ
userId: user.uid, // ์ ์ ์์ด๋
});
} catch (error) {
console.log(error); //์๋ฌ๋ ์ฝ์์ ์ถ๋ ฅ
}
}
alert("์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐ๋์์ต๋๋ค!");
// 1-2) ์ทจ์ ํด๋ฆญ - ๋ฆฌํด
} else {
alert("์ทจ์");
return;
}
};
<button onClick={AddCart}>์ฅ๋ฐ๊ตฌ๋</button>
ํ
์คํธ
ํ์ด์ด ์คํ ์ด์๋ cart ์ปฌ๋ ์
์ด ์์ฑ๋๊ณ ์๋์ ๊ฐ์ด ๋ฐ์ดํฐ๊ฐ ์ ๋ค์ด๊ฐ๋ค.
.
์ด์ ๋ง์ดํ์ด์ง์์ ๊ฐ์ ธ์ค๋ฉด ๋ ๋ฏ?
๊ทผ๋ฐ ๋ง์ฝ์ ์ฌ๋ฌ๋ฒ ๋๋ฌ์ ๊ฐ์๊ฐ ์ฌ๋ผ๊ฐ๊ฒ๋๋ฉด
๊ทธ๊ฑฐ ํ์ด์ด ์คํ ์ด์์ ๊ฐ์ count ๊ฐ๋ฅํ๊ฐ...?
์ ์ฝ๋์์ ์์ ํ์.
1. ๊ฒ์ ๊ฒฐ๊ณผ์์ ์๋์ ์ถ๊ฐ ํ ๋๋ ๊ธฐ๋ณธ๊ฐ 1์ผ๋ก db์ ์ถ๊ฐํ๋ค.
-> DB ํ๋ amount ์์ฑ
2. ์ค์๊ฐ ์
๋ฐ์ดํธ๋ฅผ ํ์ฌ ์ด๋ฏธ ์ฅ๋ฐ๊ตฌ๋์ ์๋ ๋์๋ฅผ ๋ค์ ์ฅ๋ฐ๊ตฌ๋๋ฅผ ํด๋ฆญํ๋ฉด
์ด๋ฏธ ์ถ๊ฐ๋์ด์๋ค. ์ฅ๋ฐ๊ตฌ๋๋ก ์ด๋ํ๊ฒ ์ต๋๊น? ๋ผ๋ confirm ์ฐฝ ์ถ๋ ฅ
์ฌ๊ธฐ์ ํ์ธ์ ๋๋ฅด๋ฉด ์ฅ๋ฐ๊ตฌ๋๋ก ์ด๋ํ๊ณ ์ทจ์๋ฉด return
const [onCart, setOnCart] = useState(false); // ์ฅ๋ฐ๊ตฌ๋ ์ฌ๋ถ
๊ด์ฌ ๋์ ๋ถ๋ฌ์ค๋ useEffect์ ์ถ๊ฐํ๋ค.
//์ฅ๋ฐ๊ตฌ๋ ๋ชฉ๋ก ๊ฐ์ ธ์ค๊ธฐ
const fetchCart = async () => {
if (user) {
//์ ์ ๊ฐ ์์ ๊ฒฝ์ฐ
const q = query(
collection(db, "cart"),
where("userId", "==", user.uid)
);
onSnapshot(q, (snapshot) => {
const userCart = snapshot.docs.map((doc) => doc.data().interestBook);
//๊ฐ์ ธ์จ ์ฅ๋ฐ๊ตฌ๋์ ๋์์ ํด๋น๋๋ ๊ฒฝ์ฐ true๋ก ๋ฆฌํด
const isCartAdded = userCart.includes(book.isbn);
setOnCart(isCartAdded);
});
}
};
fetchInterestBooks();
fetchCart();
}, [book.isbn, user]); // ๋ก๊ทธ์ธ ์ ์ ์ book.isbn ๋ณ๊ฒฝ๋ ๋ ๋ง๋ค ์คํ
//์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐ
const AddCart = async () => {
if (!onCart) {
//์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐ๋์ด์์ง ์์ผ๋ฉด
if (confirm("์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐํ๊ฒ ์ต๋๊น?")) {
if (!user) {
//์ ์ ๊ฐ ์์ผ๋ฉด(๋ก๊ทธ์ธ ๋์ด์์ง ์์ ๊ฒฝ์ฐ)
alert("๋ก๊ทธ์ธ์ด ํ์ํ ์๋น์ค์
๋๋ค.");
navigate("/user/login"); //๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ด๋
} else {
//DB์ ์ ์ฅํ๋ค.
try {
await addDoc(collection(db, "cart"), {
//์ปฌ๋ ์
๋ช
-interestBooks
interestBook: book.isbn, //book id
bookTitle: book.title, //book title
bookCover: book.cover, //book cover
bookLink: book.link, //book link
bookAuthor: book.author, //book author
bookPublisher: book.publisher, //book publisher
salesPrice: book.priceSales, // book sales Price
amount: 1,
priceStandard: book.priceStandard,
createdAt: Date.now(), // ์์ฑ์ผ์ ์ค๋
username: user.displayName, // ์ ์ ์ด๋ฆ
userId: user.uid, // ์ ์ ์์ด๋
});
} catch (error) {
console.log(error); //์๋ฌ๋ ์ฝ์์ ์ถ๋ ฅ
}
}
alert("์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐ๋์์ต๋๋ค!");
// 1-2) ์ทจ์ ํด๋ฆญ - ๋ฆฌํด
} else {
alert("์ทจ์");
return;
}
} else if (onCart) {
//์ด๋ฏธ ์ถ๊ฐ๋์ด์์ผ๋ฉด
const ok = confirm(
"์ด๋ฏธ ์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐ๋์ด ์์ต๋๋ค. ์ฅ๋ฐ๊ตฌ๋๋ก ์ด๋ํ์๊ฒ ์ต๋๊น?"
);
if (ok) {
navigate("/user/cart");
}
}
};