Firebase_Repository_명세서 - boostcampwm-2024/and04-Nature-Album GitHub Wiki
이 문서는 FireBaseRepository
및 구현체 FireBaseRepositoryImpl
에서 제공하는 기능과 설계된 구조를 상세히 설명하고, 테스트용으로 남겨둔 코드 및 최적화가 필요한 부분에 대한 내용을 포함한다. 주요 기능은 사용자, 친구 요청, 친구 관계, 라벨, 사진 정보를 Firestore 및 Firebase Storage를 통해 관리하는 것이다.
메서드 | 설명 |
---|---|
createUserIfNotExists | 주어진 사용자 ID(uid)로 사용자가 존재하지 않으면 Firestore에 사용자 정보를 생성한다. |
-
설명: 주어진 사용자 ID(
uid
)로 Firestore에서 사용자를 조회하여, 존재하지 않으면 새로 생성한다. -
구현 상세:
- Firestore의
USER
컬렉션에서 사용자 문서를 조회한다. - 문서가 존재하지 않으면 기본 사용자 정보를 생성하고 저장한다.
- Firestore의
-
에러 처리: 예외 발생 시
false
반환.
- 설명: 특정 사용자 ID와 라벨 이름을 기반으로 라벨 데이터를 Firestore에서 가져온다.
- 설명: 특정 사용자 ID에 속한 모든 라벨 데이터를 Firestore에서 가져온다.
-
설명: 새로운 라벨 데이터를 Firestore의
USER
→LABEL
컬렉션에 저장한다.
- 설명: Firebase Storage에 이미지를 저장하고 다운로드 URL을 반환한다.
-
구현 상세:
-
uid
,label
,fileName
,uri
를 기반으로 저장 경로를 결정한다. - Firebase Storage에 이미지를 업로드한 후 다운로드 URL을 반환한다.
-
- 설명: Firestore에 사진 정보를 저장한다.
- 설명: 특정 사용자에게 친구 요청을 보낸다.
-
구현 상세:
- 요청자와 대상자의 정보를 Firestore에서 가져온다.
- 요청 데이터와 대상자 데이터로 각각 친구 요청 데이터를 생성한다.
- Firestore 트랜잭션을 통해 요청 데이터를 저장한다.
-
예외 처리: 데이터가 없거나 저장 중 에러 발생 시
false
반환.
- 설명: 받은 친구 요청을 수락하여 친구 관계를 형성한다.
-
구현 상세:
- 요청자와 대상자의 사용자 정보를 Firestore에서 가져온다.
- 서로의 친구 리스트에 데이터를 추가한다.
- 요청 상태를 Firestore에서 제거한다.
- 설명: 받은 친구 요청을 거절하고 요청 상태를 제거한다.
-
구현 상세:
- 요청자와 대상자의 요청 상태를 Firestore에서 삭제한다.
- 설명: Firestore에 저장된 모든 사용자 데이터를 가져온다.
-
테스트 로그:
- 모든 사용자 데이터를
FirestoreUser
로 변환. - 필요 시 데이터 수량 및 가져온 데이터를 로그로 출력.
- 모든 사용자 데이터를
- 설명: 모든 사용자 데이터를 가져오며 친구 상태를 함께 반환한다.
-
친구 상태 판별 로직:
- 친구 요청 데이터(
FRIEND_REQUESTS
)에서SENT
또는RECEIVED
상태 확인. - 친구 리스트 데이터(
FRIENDS
)에서 친구 관계 여부 확인.
- 친구 요청 데이터(
-
테스트 로그:
-
에러 발생 시 로그 출력:
Log.e("FireBaseRepository", "getAllUsersInfo Error: ${e.message}")
-
-
설명: 받은 친구 요청 중
RECEIVED
상태만 필터링하여 반환한다. -
테스트 로그:
-
요청 상태와 데이터를 디버깅하기 위해 로그 출력:
Log.d("getReceivedFriendRequests", friendRequest.toString())
-
- 로그 메시지 확인 및 필요 시 제거:
-
getReceivedFriendRequests
와getFriendRequests
의 디버깅 로그. -
getAllUsersInfo
에러 로그.
-
- 현재 서버의 전체 데이터를 가져오는 구조는 비효율적일 수 있음.
- 최적화 방안:
- 필터링 조건 추가:
- 예:
getAllUsers
에서whereEqualTo
조건 추가.
- 예:
- 페이징 처리:
- 대규모 데이터 로드 시 페이징 구현.
- 서버 쿼리 최적화:
- Firestore에서 상태 필터링 처리 (
whereEqualTo
).
- Firestore에서 상태 필터링 처리 (
- 필터링 조건 추가:
-
최적화 필요:
- 모든 데이터를 가져오는 메서드(
getAllUsers
,getAllUsersInfo
)는 조건 필터링 또는 페이징을 통해 최적화 필요. - 디버깅용 로그는 최종 배포 전에 제거.
- 모든 데이터를 가져오는 메서드(
-
테스트 후 코드 정리:
-
Log.d
,Log.e
와 같은 디버깅 로그를 완성 후 제거. - 상태 필터링 로직을 Firestore 쿼리로 이전하여 성능 개선.
-
-
개선된 데이터 구조 고려:
- 친구 요청과 관계를 효율적으로 관리할 수 있도록 데이터 구조 조정 검토.