카카오톡 플러스친구 스마트채팅 만들기 6 - 식당 추가 & 식당 삭제
식당 추가
식당 추가의 경우 세 단계로 진행됩니다.
- 이름 입력
- 사진 입력
- 최종 확인
이름 정보와 사진 정보를 데이터베이스에 입력하고, 최종 확인시에 해당 데이터를 저장합니다.
class Message(Resource):
def post(self):
select = Select(self.args)
setting = Setting(self.args)
result = Result(self.args)
if self.content == Const.BTN_SELECT_LUNCH:
return select.show_restaurant_list()
elif self.content == Const.BTN_ADD_RESTAURANT:
return setting.show_add_restaurant()
elif self.content == Const.BTN_ADD_RESTAURANT_CONFIRM:
return setting.add_restaurant()
# 사용자 입력처리
user = fs.collection(Const.COL_USER).document(self.user_key).get()
user_state = user.get(Const.FIELD_STATE)
if user_state == Const.STATE_SELECT_GROUP:
return select.group_selected()
elif user_state == Const.STATE_ADD_RESTAURANT_TITLE:
return setting.show_add_restaurant_desc()
elif user_state == Const.STATE_ADD_RESTAURANT_DESC:
return setting.show_add_restaurant_confirm()
버튼은 두번 처리가 되며
- BTN_ADD_RESTAURANT
- BTN_ADD_RESTAURANT_CONFIRM
상태 역시 두번 처리 됩니다.
- STATE_ADD_RESTAURANT_TITLE
- STATE_ADD_RESTAURANT_DESC
class Setting(Args):
def show_add_restaurant(self):
# state : add_restaurant
# 1. 이름을 입력해 주세요
# 2. 설명을 작성해 주세요.
# 상태 설정
fs.collection(Const.COL_USER).document(self.user_key).update({
Const.FIELD_STATE: Const.STATE_ADD_RESTAURANT
}, firestore.CreateIfMissingOption(True))
rst = {
"message": {
"text": '음식점 이름을 입력해 주세요'
}
}
return Util.send_response(rst)
def show_add_restaurant_desc(self):
# content = 음식점 이름
# 상태 설정
fs.collection(Const.COL_USER).document(self.user_key).update({
Const.FIELD_STATE: Const.STATE_ADD_RESTAURANT_DESC
}, firestore.CreateIfMissingOption(True))
fs.collection(Const.COL_USER).document(self.user_key).update({
Const.FIELD_ADD_RESTAURANT_TITLE: self.content
})
rst = {
"message": {
"text": '음식점 사진을 추가해 주세요'
}
}
return Util.send_response(rst)
def show_add_restaurant_confirm(self):
fs.collection(Const.COL_USER).document(self.user_key).update({
Const.FIELD_STATE: Const.STATE_ADD_RESTAURANT_CONFIRM
}, firestore.CreateIfMissingOption(True))
fs.collection(Const.COL_USER).document(self.user_key).update({
Const.FIELD_ADD_RESTAURANT_DESC: self.content
}, firestore.CreateIfMissingOption(True))
user = fs.collection(Const.COL_USER).document(self.user_key).get()
title = user.get(Const.FIELD_ADD_RESTAURANT_TITLE)
desc = self.content
if Util.is_img(desc):
rst = {
"message": {
"text": '입력하신 음식점은 다음과 같습니다.\n\n이름:{}\n\n등록하시겠습니까?'.format(title),
"photo": {
"url": desc,
"width": 640,
"height": 480
}
},
"keyboard": {
"type": "buttons",
"buttons": [
Const.BTN_ADD_RESTAURANT_CONFIRM,
Const.BTN_GOTO_START
]
}
}
else:
rst = {
"message": {
"text": '입력하신 음식점은 다음과 같습니다.\n\n이름:{}\n설명:{}\n\n등록하시겠습니까?'.format(title, desc)
},
"keyboard": {
"type": "buttons",
"buttons": [
Const.BTN_ADD_RESTAURANT_CONFIRM,
Const.BTN_GOTO_START
]
}
}
return Util.send_response(rst)
def add_restaurant(self):
user = fs.collection(Const.COL_USER).document(self.user_key).get()
group = user.get(Const.FIELD_GROUP)
title = user.get(Const.FIELD_ADD_RESTAURANT_TITLE)
desc = user.get(Const.FIELD_ADD_RESTAURANT_DESC)
try:
ref = fs.collection(Const.COL_GROUP).document(group).get()
restaurant = ref._data.get(Const.FIELD_RESTAURANT)
except:
restaurant = {}
if restaurant is None:
restaurant = {}
restaurant[title] = {
'desc': desc,
'user': self.user_key,
'added': Util.get_day_str()
}
if Util.is_img(desc):
restaurant[title][Const.FIELD_IMG_SRC] = desc
fs.collection(Const.COL_GROUP).document(group).update({Const.FIELD_RESTAURANT: restaurant}, firestore.CreateIfMissingOption(True))
if Util.is_img(desc):
msg = '[{}] 이(가) 등록되었습니다'.format(title)
return Util.show_start_menu(msg, desc)
msg = '이름:{}\n설명:{}\n등록되었습니다'.format(title, desc)
return Util.show_start_menu(msg)
식당 삭제
해당 그룹의 식당 목록을 보여주고, 사용자가 선택하면 해당 식당 정보를 제거합니다.
/message로 부터 시작합니다.
class Message(Resource):
def post(self):
select = Select(self.args)
setting = Setting(self.args)
result = Result(self.args)
if self.content == Const.BTN_SELECT_LUNCH:
elif self.content == Const.BTN_DELETE_RESTAURANT:
return setting.show_delete_restaurant()
elif self.content == Const.BTN_DELETE_RESTAURANT_CONFIRM:
return setting.delete_restaurant()
# 사용자 입력처리
user = fs.collection(Const.COL_USER).document(self.user_key).get()
user_state = user.get(Const.FIELD_STATE)
if user_state == Const.STATE_SELECT_GROUP:
return select.group_selected()
elif user_state == Const.STATE_DELETE_RESTAURANT:
return setting.show_delete_restaurant_confirm()
식당을 선택하는 버튼과 확인하는 버튼을 처리합니다.
- BTN_DELETE_RESTAURANT
- BTN_DELETE_RESTAURANT_CONFIRM
식당 삭제 상태를 처리합니다.
- STATE_DELETE_RESTAURANT
class Setting(Args):
def show_delete_restaurant(self):
fs.collection(Const.COL_USER).document(self.user_key).update({
Const.FIELD_STATE: Const.STATE_DELETE_RESTAURANT
}, firestore.CreateIfMissingOption(True))
user = fs.collection(Const.COL_USER).document(self.user_key).get()
group = user.get(Const.FIELD_GROUP)
ref = fs.collection(Const.COL_GROUP).document(group).get()
restaurants = ref._data.get(Const.FIELD_RESTAURANT)
restaurant_list = []
for key, val in restaurants.items():
restaurant_list.append(key)
restaurant_list.append(Const.BTN_GOTO_START)
rst = {
"message": {
"text": '삭제할 대상을 선택해 주세요'
},
"keyboard": {
"type": "buttons",
"buttons": restaurant_list
}
}
return Util.send_response(rst)
def show_delete_restaurant_confirm(self):
fs.collection(Const.COL_USER).document(self.user_key).update({
Const.FIELD_STATE: Const.STATE_DELETE_RESTAURANT
}, firestore.CreateIfMissingOption(True))
fs.collection(Const.COL_USER).document(self.user_key).update({
Const.FIELD_DELETE_RESTAURANT_TITLE: self.content
}, firestore.CreateIfMissingOption(True))
title = self.content
rst = {
"message": {
"text": '[{}] 을(를) 삭제하겠습니까?'.format(title)
},
"keyboard": {
"type": "buttons",
"buttons": [
Const.BTN_DELETE_RESTAURANT_CONFIRM,
Const.BTN_GOTO_START
]
}
}
return Util.send_response(rst)
def delete_restaurant(self):
user = fs.collection(Const.COL_USER).document(self.user_key).get()
group = user.get(Const.FIELD_GROUP)
title = user.get(Const.FIELD_DELETE_RESTAURANT_TITLE)
try:
ref = fs.collection(Const.COL_GROUP).document(group).get()
restaurant = ref._data.get(Const.FIELD_RESTAURANT)
del restaurant[title]
except:
restaurant = {}
fs.collection(Const.COL_GROUP).document(group).update({Const.FIELD_RESTAURANT: restaurant}, firestore.CreateIfMissingOption(True))
msg = '[{}] 을(를) 삭제하였습니다.'.format(title)
return Util.show_start_menu(msg)
'Programming > Python' 카테고리의 다른 글
카카오톡 플러스친구 스마트채팅 만들기 8 - heroku 배포 (0) | 2018.05.10 |
---|---|
카카오톡 플러스친구 스마트채팅 만들기 7 - 설정 & 그룹 설정 (0) | 2018.05.09 |
카카오톡 플러스친구 스마트채팅 만들기 5 - 식당 선택 & 결과 보기 (0) | 2018.05.07 |
카카오톡 플러스친구 스마트채팅 만들기 4 - 식당 목록 전달 (0) | 2018.05.06 |
카카오톡 플러스친구 스마트채팅 만들기 3 - 데이터 베이스(firestore) (0) | 2018.05.05 |
댓글