[Flutter] - 교회 앱 - 02 전체 구조


이번에 교회에서 새로운 토이 프로젝트를 하게 되었다.

교회 중보기도를 나누고 간단히 공지 및 예배 시간을 알려주는 앱이다.

이번에 공부하기로 한 GetX와 Firebase를 사용해서 만들어보려고 한다.

먼저 요구사항과 Model을 정리해보자.

요구사항


  1. 공지 사항
    • 관리자만 작성 가능 (추후 Web으로)
    • 댓글, 좋아요 ⇒ 삭제만 가능 (수정없이 )
    • 이미지 여러개 (당근마켓 처럼 글과 이미지 따로 구분)
    • 텍스트
  2. 기도편지
    1. 공개 중보
      • 모두에게 보이는 중보 기도 작성
      • 텍스트만
    2. 목사님 중보 (비공개)
      • 추후 목사님 Web으로만 확인 가능
      • Web에서 목사님만 답장 가능
  3. 중보 기도 목록
    • 공개 중보기도 올라온 내용들 리스트로 표시
    • 댓글, 좋아요 ⇒ 삭제만 가능 (수정없이)
  4. 기도 일기 (모두에게 비공개)
    • 텍스트만
  5. 프로필
    • 로그아웃, 회원 탈퇴
    • 나의 프로필 이미지 변경 및 닉네임 변경
    • 나의 기도 목록
    • 답장 목록

DB


FirebaseFireStore(NoSQL)로 구현하고자 한다.

  1. core (모든 모델 공통 적용)

    • createdAt ⇒ 생성 시간
    • updatedAt ⇒ 수정 시간
  2. notice
    • id ⇒ Document ID
    • userId ⇒ 유저 식별
    • content
    • ImageList ⇒ FireStorage URL
    • commentCount ⇒ 내부 Collection 존재
    • favoriteUserList ⇒ userId 리스트로 표현
    • DocumentReference ⇒ FireStore documentReference
  3. Comment

    • id ⇒ Document ID
    • userId ⇒ 유저 식별
    • content
    • favoriteUserList ⇒ userId 리스트로 표현
    • replyIndex ⇒ 내부 배열 번호
    • replyList<List> ⇒ 자체 모델 리스트

    replyList는 내부 collection이 아닌 내부 배열로 처리 하였다. 댓글을 가져오면 어차피 답글도 모두 가져와야 하기에 하나의 document에 모두 처리 하기로 하였다

  4. Reply
    • id ⇒ replyIndex
    • userId ⇒ 유저 식별
    • content
    • favoriteUserList ⇒ userId 리스트로 표현
  5. Pray (공개 중보)

    • id ⇒ Document ID
    • userId
    • title
    • content
    • prayUserList ⇒ userId 리스트로 표현
    • commentCount ⇒ comment 내부 컬렉션
    • DocumentReference ⇒ FireStore documentReference

    Pray에 달리는 댓글과 답글은 notice 댓글과 답글 모델을 똑같이 활용한다.

다음에는 직접 GetX를 사용해 하나씩 구현해보자.