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

카카오톡 플러스친구 스마트채팅 만들기 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 를 생성합니다. 각 사용자의 그룹 정보와 상태정보를 관리합니다.

점심 선택

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 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 파일을 같은 경로에 넣어준 상태입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 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()

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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
공유하기