주녘공부일지

[페인트 맨] 파이어베이스 DB 관리 본문

GameDevelopment/[Unity] Project

[페인트 맨] 파이어베이스 DB 관리

주녘 2024. 3. 29. 18:07

파이어베이스 DB 구조

파이어베이스에 저장할 데이터 타입을 분류해 타입에 따라서 유저 고유 키로 접근하도록 설계

- 데이터 카테고리별로 데이터 그룹을 분리해서 그룹 내에 데이터 Write 시 그룹 단위로 콜백 가능

 

그룹 내 데이터 Write 시에 콜백

- 자신의 고유 유저 키로 저장된 데이터의 Write 시 콜백을 받을 수 있도록 함

- 각 데이터그룹별로 콜백 대상 리스트를 참조함 ( 인터페이스 ) 

private List<IFBUserInfoPostProcess> userInfoProcessList = new List<IFBUserInfoPostProcess>();
private List<IFBUserItemPostProcess> userItemProcessList = new List<IFBUserItemPostProcess>();

private void SetUpdateCallBack()
{
    DBReferenceDict[FirebaseDataCategory.UserInfo].Reference.ValueChanged -= OnUserInfoPropertiesUpdate;
    DBReferenceDict[FirebaseDataCategory.UserInfo].Reference.ValueChanged += OnUserInfoPropertiesUpdate;

    DBReferenceDict[FirebaseDataCategory.UserItem].Reference.ValueChanged -= OnUserItemPropertiesUpdate;
    DBReferenceDict[FirebaseDataCategory.UserItem].Reference.ValueChanged += OnUserItemPropertiesUpdate;
}

private void OnUserInfoPropertiesUpdate(object sender, ValueChangedEventArgs e)
{
    // userInfoData에 Write시 콜백
    
    FBUserInfo userInfo = new FBUserInfo();
    
    FBDataUpdateCheck(userInfo, e.Snapshot); // snapshot -> userInfo

    foreach (var process in userInfoProcessList)
    {
        process?.OnUpdateFBUserInfoProperty(userInfo);
    }
}

private void OnUserItemPropertiesUpdate(object sender, ValueChangedEventArgs e)
{
    // userItemData에 Write시 콜백

    FBUserItem userItem = new FBUserItem();
    
    FBDataUpdateCheck(userItem, e.Snapshot); // snapshot -> userItem

    foreach (var process in userItemProcessList)
    {
        process?.OnUpdateFBUserItemProperty(userItem);
    }
}

테스트 영상