๊ด์ฌ์๋ ์ํ๋ฅผ ๋ชจ์๋ ์ ์๋ค.
ํธ์์ ์ฌ๊ธฐ์ '์ฐ' ๊ธฐ๋ฅ์ด๋ผ๊ณ ๋ถ๋ฅด๊ฒ ๋ค.
์ฒ์์ ๋ง์ฐํ๊ฒ movie์ ์ฐ ์ฌ๋ถ๊ฐ์ ์ถ๊ฐํ๋ฉด ๋ ๊น ์ถ์๋๋ฐ ๋ง๋ ์๋๋ ์๊ฐ์ด์๋ค. ์ฐ ๋ฐ์ดํฐ๋ ์ ์ ๋ง๋ค ๋ฌ๋ผ์ง๋๋ฐ movie๋ฐ์ดํฐ๋ ๋ชจ๋ ์ ์ ์๊ฒ ๋์ผํ๊ฒ ๋ณด์ฌ์ผ ํ๋ ๋ฐ์ดํฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๋ง์ฝ ์ฒ์ ์๊ฐ์ฒ๋ผ movie๋ฐ์ดํฐ๊ฐ ์ฐ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ค๋ฉด A์ ์ ๊ฐ ์ฐ ํ ์ํ์ธ๋ฐ B์ ์ ์๊ฒ๋ ์ฐ์ด ๋๋ค๊ณ ๋์ค๋ ๋ถ์์ฌ๊ฐ ์๊ธด๋ค.
๊ทธ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ๋ก ์ ์ฅํ๊ธฐ๋ก ํ๋ค.
/picks/์ ์ ID/์ํID
๊ฒฝ๋ก๋ ์ด๋ฐ์์ผ๋ก ์ค์ ํด์ ์ ์ ๋ณ๋ก ์ฐ ๋ฐ์ดํฐ๊ฐ ๋๋์ด์ง๋๋ก ํ๋ค.
์ผํ๋ชฐ์์์ '์ฐ' ๊ธฐ๋ฅ ์ฒ๋ผ ์ํ ๋ชฉ๋ก์ด ์กฐํ๋ ๋ ์ฐ ์์ด์ฝ์ด ํ์๋๊ณ , ์์ด์ฝ์ด ํด๋ฆญํ ๋๋ง๋ค ์ฐ ์ฌ๋ถ๊ฐ ํ ๊ธ ๋๋๋ก ๋ง๋ค๊ณ ์ถ์๋ค.
๊ทธ๋ฌ๋ ค๋ฉด ์ํ ์ ๋ณด๊ฐ ๋ํ๋ ๋ ์ฐ ์ ๋ณด๋ ํจ๊ป ์ถ๋ ฅ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํฉํ๋ ๋ก์ง์ ์ด๋ป๊ฒ ์ง์ผํ ์ง๊ฐ ๊ณ ๋ฏผ์ด์๋ค.
์๊ฐํ ๋ฐฉ๋ฒ์ ์ด๋ ๋ค.
์ด๋ ๊ฒํ๋ฉด ์ํ์ ์ฐ ์ฌ๋ถ์ ๋ฐ๋ผ ์ํ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ ui๋ฅผ ๋ค๋ฅด๊ฒ ๋ณด์ฌ์ค ์ ์๊ณ , ์ฐ ํ์ด์ง์์ ์กฐํ๋ ๋ชจ๋ ์ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ ๊น์ง ํ๋ฒ์ ํด๊ฒฐ ๊ฐ๋ฅํ๋ค.
// ์ ์ฒด ์ฐ ์ํ ๊ฐ์ ธ์ค๊ธฐ
export const getPickFetch = (userUid) => {
return (dispatch) => {
getPick(userUid, (movies) => dispatch(pickAction.get(movies)));
};
};
// ์ฐ ์ถ๊ฐ
export const addPickFetch = (userUid, movie) => {
return () => {
addPick(userUid, { ...movie, pickDate: new Date().getTime() });
};
};
// ์ฐ ์ ๊ฑฐ
export const removePickFetch = (userUid, movieId) => {
return () => {
removePick(userUid, movieId);
};
};
firebase์ onvalue
API๋ฅผ ์ฌ์ฉํ๊ธฐ๋๋ฌธ์ ๋ฆฌ๋์ค ๋ฆฌ๋์์์๋ add, remove๊ธฐ๋ฅ์ด ํ์์๋ค.
import { createSlice } from "@reduxjs/toolkit";
export const pickSlice = createSlice({
name: "pick",
initialState: { pick: [] },
reducers: {
get: (state, action) => {
if (action.payload) {
state.pick = Object.values(action.payload);
} else {
state.pick = [];
}
},
},
});
export const pickAction = pickSlice.actions;
// ๋ฐ์ดํฐ๋ฒ ์ด์ค์ pick ์ ์ฅ
export const addPick = (userId, movie) => {
set(ref(db, `/picks/${userId}/${movie.id}`), movie);
};
// ๋ฐ์ดํฐ๋ฒ ์ด์ค์์pick ๋ฐ์ดํฐ ๋ค๊ณ ์ค๊ธฐ
export const getPick = (userUid, callback) => {
const pickRef = ref(db, `/picks/${userUid}`);
onValue(pickRef, (snapshot) => {
callback(snapshot.val());
});
};
// pick ๋ฐ์ดํฐ ์ญ์
export const removePick = (userUid, movieId) => {
remove(ref(db, `/picks/${userUid}/${movieId}`));