작성중 입니다!
export const getTodoListWithDays = async(uid ?:string | null, day?: string) => {
try {
if(uid && day) {
const useDatabaseRef = firebaseDatabase.ref(uid);
const list : {
title ?: string;
description ?: string;
userInfo ?: userType
rank ?: number;
}[] = [];
await useDatabaseRef.child(day).once('value', (snapshot) => {
const val = snapshot.val();
for(let key in val) {
list.push({...val[key], day : key })
}
},(err) => {
const error = new Error();
error.message = '에러 발생'
if(err) throw error
})
return {
status : true,
message : '리스트 받아오기 성공',
lists : list
}
}
const error = new Error();
error.message = 'uid 또는 잘못된 날짜 입니다.'
throw error
} catch(err) {
return {
status : false,
message : err.message
}
}
}
export const getTodoList = async (uid ?: string | null, day ?: string) => {
try {
if(uid) {
const userDatabaseRef = firebaseDatabase.ref(uid);
const list : {
day ?: any;
title ?: string;
description ?: string;
userInfo ?: userType
rank ?: number;
}[] = [];
await userDatabaseRef.once('value', (snapshot) => {
const val = snapshot.val();
for (let day in val) {
for(let keys in val[day]) {
const valDay = val[day];
list.push({...valDay[keys], day : day, key : keys})
}
}
},(err) => {
const error = new Error();
error.message = '에러 발생'
if(err) throw error
})
return {
status : true,
message : '리스트 받아오기 성공',
lists : list
}
}
const error = new Error();
error.message = 'uid가 업습니다.'
throw error
} catch(err) {
return {
status : false,
message : err.message
}
}
}
export const createTodoList = async (todo : todoListType) => {
try {
const user = auth?.currentUser;
if(user) {
const userDatabaseRef = firebaseDatabase.ref(`${todo?.user?.uid}`);
await userDatabaseRef.child(`${todo.day}`).push({
title : todo.title,
description : todo.description,
userInfo : {
photoURL : user?.photoURL,
email : user?.email,
nickname : user?.displayName,
uid : user?.uid
}
}, (error) => {
const err = new Error(error?.message);
err.message = error?.message || '오류발생';
if(error) throw err
});
return {
status : true,
message : '게시 완료!'
}
}
const err = new Error();
err.message = '유저 정보 불러오기 실패.';
throw err
} catch (err) {
return {
status : false,
message : err.message
}
}
}
title : todo.title,
description : todo.description,
userInfo : {
photoURL : user?.photoURL,
email : user?.email,
nickname : user?.displayName,
uid : user?.uid
}
이제 직접 넣어줄 데이터에로 넣어주는데, 날짜 child
밑 으로 고유 key 값이 생긴다.
그 key 값을 직접 넣어주지 않아도 파이어베이스에서 데이터베이스에 넣어줄 때 자동 생성 되기 때문에 편하다.
for (let day in val) {
for(let keys in val[day]) {
const valDay = val[day];
list.push({...valDay[keys], day : day, key : keys})
}
}
파이어베이스에서 정보를 받아 올 때, once 함수로 value들을 받아오고 (object 형식),
for - in 반복문을 돌면서 return 에 넣어줄 수 있도록 object에서 값을 찾아서 배열에 넣어준다.
우리가 한 순서는 유저uid -> 날짜 -> 데이터 이다. 그리고 이 각각 이 위의 val
object의 key
값이다. 다시 말하자면,
1. val
은 유저uid
의 object 즉, key 값은 유저uid
value 값은 날짜
를 뜻한다..
2. val
에 있는 key 값은 날짜
를 뜻하고. value 값은 데이터
를 뜻한다.
3. val[day]
의 key 값은 '데이터' 를 뜻하고 value 값은 데이터의 object들을 뜻한다.