본문 바로가기
Programming/Python

카카오톡 플러스친구 스마트채팅 만들기 3 - 데이터 베이스(firestore)

by NAMP 2018. 5. 5.

카카오톡 플러스친구 스마트채팅 만들기 3 - 데이터 베이스(firestore)

데이터 베이스로 firestore를 사용하였습니다.

크게 3개의 collection으로 구성합니다.

firestore collection

  • group : 그룹을 관리합니다.
  • select : 사용자가 선택한 데이터를 관리합니다.
  • user : 사용자를 관리합니다.

group

group collection

현재 그룹에는 연구소 그룹만 있습니다. 상황에 따라 추가하거나 삭제할 수 있습니다. 그룹 document는 식당정보를 object로 가지고 있습니다. 이 object를 수정하여 식당정보를 추가하거나 삭제할 수 있습니다.

select

select collection

선택한 데이터 역시 그룹을 기반으로 관리됩니다. 그룹안에 history, today 컬렉션을 생성하여 사용자가 선택한 데이터를 날짜별로 관리합니다.

user_key 부분은 모자이크 처리하였습니다.

today collection

history 부분은 사용하지 않으므로 넘어가겠습니다.

user

user collection

user_key 부분은 모자이크 처리하였습니다.

user_key를 기반으로 document 를 생성합니다. 각 사용자의 그룹 정보와 상태정보를 관리합니다.

점심 선택

사용자가 #점심 선택 버튼을 누른 경우를 처리합니다.

# resources/message.py

class Message(Resource):
  def __init(self):
      ...
  def post(self):
      select = Select(self.args)
     
      # 버튼 입력을 처리합니다.
      if self.content == Const.BTN_SELECT_LUNCH:
          return select.show_restaurant_list()

      # 사용자 입력을 처리합니다. 

      # default
      return Util.show_start_menu()

데이터베이스에 접근할 수 있도록 초기화를 합니다.

Cloud Platform 콘솔에서 IAM 및 관리자 > 서비스 계정 | Google Cloud Platform으로 이동합니다. 새 비공개 키를 생성하고 JSON 파일을 저장합니다. 그런 다음 이 파일을 사용하여 SDK를 초기화합니다.

다운받은 serviceAccount.json 파일을 같은 경로에 넣어준 상태입니다.

# conf/firebaseInit.py

import os
import firebase_admin
from firebase_admin import credentials
from firebase_admin import firestore

FILE_DIR = os.path.dirname(os.path.abspath(__file__))
CONFIG_PATH = os.path.join(FILE_DIR, 'serviceAccount.json')

# Use a service account
cred = credentials.Certificate(CONFIG_PATH)
firebase_admin.initialize_app(cred)

fs = firestore.client()

추가적으로 필요한 상수들을 정의합니다.

class Const:
  COL_GROUP = 'group'
  COL_USER = 'user'
  COL_SELECT = 'select'
  COL_TODAY = 'today'

  FIELD_TITLE = 'title'
  FIELD_GROUP = 'group'
  FIELD_STATE = 'state'
  FIELD_RESTAURANT = 'restaurant'
  FIELD_ADD_RESTAURANT_TITLE = 'add_restaurant_title'
  FIELD_ADD_RESTAURANT_DESC = 'add_restaurant_desc'
  FIELD_DELETE_RESTAURANT_TITLE = 'delete_restaurant_title'
  FIELD_MAX_HISTORY_LIST = 'daily_max_list'
  FIELD_IMG_SRC = 'img_src'

  STATE_SELECT_RESTAURANT = 'select_restaurant'
  STATE_SELECT_GROUP = 'select_group'
  STATE_ADD_RESTAURANT = 'add_restaurant'
  STATE_ADD_RESTAURANT_DESC = 'add_restaurant_desc'
  STATE_ADD_RESTAURANT_CONFIRM = 'add_restaurant_confirm'
  STATE_DELETE_RESTAURANT = 'delete_restaurant'
  STATE_DELETE_RESTAURANT_CONFIRM = 'delete_restaurant_confirm'

  ARG_USER_KEY = "user_key"
  ARG_TYPE = 'type'
  ARG_CONTENT = 'content'

  ## buttons
  BTN_SELECT_LUNCH = "#점심 선택"
  BTN_SEE_RESULT = "#결과 보기"
  BTN_SETTING = '#설정'

  DEFAULT_KEYBOARD = [BTN_SELECT_LUNCH, BTN_SEE_RESULT, BTN_SETTING]

  BTN_GOTO_START = "#처음으로"
  BTN_SETTING_GROUP = '#그룹 설정'
  BTN_ADD_RESTAURANT = "#식당 등록"
  BTN_ADD_RESTAURANT_CONFIRM = "#식당 등록 확인"
  BTN_DELETE_RESTAURANT = '#식당 삭제'
  BTN_DELETE_RESTAURANT_CONFIRM = '#식당 삭제 확인'
  BTN_DOANTE = '#후원 하기'
  
  SHOW_COUNT = 7

 

댓글