Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 29 additions & 33 deletions tour/consumers.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,79 +14,76 @@ async def connect(self):
- user_id: string (required)
- areaCode: string (required)
- sigunguName: string (required)
- contentTypeId: string (required)
- categoryName: string (required)
"""
query_string = self.scope['query_string'].decode() # 쿼리 μŠ€νŠΈλ§μ„ λΆˆλŸ¬λ“€μž…λ‹ˆλ‹€.
params = urllib.parse.parse_qs(query_string) # 쿼리 μŠ€νŠΈλ§μ„ νŒŒλΌλ―Έν„°λ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.
self.user_id = params.pop('user_id', [None])[0] # user 고유 subλ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.
self.unique_code = params.pop('unique_code', [""])[0] # μ›Ήμ†ŒμΌ“ 톡신을 μœ„ν•œ 고유 번호λ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.
days = params.pop('days', [None])[0] # μ—¬ν–‰ 기간을 μ˜λ―Έν•©λ‹ˆλ‹€.
query_string = self.scope['query_string'].decode()
params = urllib.parse.parse_qs(query_string)
self.user_id = params.pop('user_id', [None])[0]
self.unique_code = params.pop('unique_code', [""])[0]
self.user_id = self.user_id + '_' + self.unique_code if self.unique_code != "" else self.user_id

if self.user_id is None:
await self.close()
return

# μ›Ήμ†ŒμΌ“ 그룹에 κ°€μž…
logger.info(f'channel_id: {self.user_id} μ›Ήμ†ŒμΌ“ κ°€μž…')
await self.channel_layer.group_add(self.user_id, self.channel_name) # user_idλ₯Ό κ·Έλ£Ή μ΄λ¦„μœΌλ‘œ ν•˜κ³  μ›Ήμ†ŒμΌ“μ— κ°€μž…ν•©λ‹ˆλ‹€.
await self.accept() # μ›Ήμ†ŒμΌ“ μ—°κ²°
await self.channel_layer.group_add(self.user_id, self.channel_name)
await self.accept()

# μš”μ²­μ„ celery task둜 λ³΄λƒ…λ‹ˆλ‹€.
areaCode = params.pop('areaCode', [None])[0] # area_code κ°€μ Έμ˜΄
sigunguName = params.pop('sigunguName', [None])[0] # μ‹œκ΅°κ΅¬ 이름 κ°€μ Έμ˜΄
if areaCode is None or days is None: # areaCodeκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄
areaCode = params.pop('areaCode', [None])[0]
sigunguName = params.pop('sigunguName', [None])[0]
categoryName = params.pop('categoryName', [None])[0]

if areaCode is None or categoryName is None:
await self.send(text_data=json.dumps({
'state': 'ERROR',
'Message': 'ν•„μˆ˜ νŒŒλΌλ―Έν„° 쀑 일뢀가 μ—†μŠ΅λ‹ˆλ‹€.'
}, ensure_ascii=False))
return

tour = TourApi(MobileOS=MobileOS.ANDROID, MobileApp='AlphaProject2025', service_key=PUBLIC_DATA_PORTAL_API_KEY)
sigunguCode = None
sigunguCodes = None
if sigunguName is not None:
sigunguNames = sigunguName.split(',')
sigunguCodes = []
for each in sigunguNames:
sigunguCode = tour.get_sigungu_code(areaCode, each) # μ‹œκ΅°κ΅¬ 이름에 λŒ€μ‘λ˜λŠ” μ½”λ“œλ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.
if sigunguCode is None: # μ‹œκ΅°κ΅¬ μ½”λ“œκ°€ μ—†λ‹€λ©΄
sigunguCode = tour.get_sigungu_code(areaCode, each)
if sigunguCode is None:
await self.send(text_data=json.dumps({
'state': 'ERROR',
'Message': 'ν•΄λ‹Ή μ‹œκ΅°κ΅¬ 이름에 λŒ€μ‘λ˜λŠ” μ½”λ“œλ₯Ό κ°€μ Έμ˜¬ 수 μ—†μŠ΅λ‹ˆλ‹€. μ‹œκ΅°κ΅¬ 이름을 λ‹€μ‹œ ν•œλ²ˆ 확인 λ°”λžλ‹ˆλ‹€.'
}, ensure_ascii=False))
return
sigunguCodes.append(sigunguCode)

task_result = app.send_task('tour.tasks.get_recommended_tour_based_area', args=[self.user_id, # 채널 λ ˆμ΄μ–΄ κ·Έλ£Ή νŠΉμ •μ„ μœ„ν•΄ λ³΄λƒ…λ‹ˆλ‹€.
areaCode, days, Arrange.TITLE_IMAGE.value, sigunguCodes])
task_result = app.send_task(
'tour.tasks.get_recommended_place_by_category_task',
args=[self.user_id, areaCode, categoryName, sigunguCodes, Arrange.TITLE_IMAGE.value]
)

await self.send(text_data=json.dumps({
'state': 'OK',
'Message': {
'task_id': task_result.task_id,
}
}))


async def disconnect(self, close_code):
await self.channel_layer.group_discard(self.user_id, self.channel_name)

async def task_update(self, event):
# celery μ»¨ν…Œμ΄λ„ˆμ—μ„œ 보낸 λ©”μ‹œμ§€λ₯Ό ν΄λΌμ΄μ–ΈνŠΈλ‘œ 전솑
await self.send(text_data=json.dumps(event["message"], ensure_ascii=False))

async def receive(self, text_data=None, bytes_data=None):
"""
μž¬μ‹œλ„λ₯Ό μœ„ν•œ λ©”μ‹œμ§€ μž…λ‹ˆλ‹€.
"""
data = json.loads(text_data)
user_id = data.get("user_id", None)
areaCode = data.get("areaCode", None)
sigunguName = data.get("sigunguName", None)
unique_code = data.get('unique_code', "") # μ›Ήμ†ŒμΌ“ 톡신을 μœ„ν•œ 고유 번호λ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.
categoryName = data.get("categoryName", None)
unique_code = data.get('unique_code', "")
user_id = user_id + '_' + unique_code
days = data.get("days", None)
if user_id is None or areaCode is None or days is None:
# 데이터가 μ—†λ‹€λ©΄ μ˜ˆμ™Έ 처리

if user_id is None or areaCode is None or categoryName is None:
await self.send(text_data=json.dumps({
'state': 'ERROR',
'Message': 'ν•„μˆ˜ νŒŒλΌλ―Έν„° 쀑 일뢀가 μ—†κ±°λ‚˜ 잘λͺ»λ˜μ—ˆμŠ΅λ‹ˆλ‹€.'
Expand All @@ -99,21 +96,20 @@ async def receive(self, text_data=None, bytes_data=None):
sigunguCodes = []
sigunguNames = sigunguName.split(',')
for each in sigunguNames:
sigunguCode = tour.get_sigungu_code(areaCode, each) # μ‹œκ΅°κ΅¬ 이름에 λŒ€μ‘λ˜λŠ” μ½”λ“œλ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.
if sigunguCode is None: # μ‹œκ΅°κ΅¬ μ½”λ“œκ°€ μ—†λ‹€λ©΄
sigunguCode = tour.get_sigungu_code(areaCode, each)
if sigunguCode is None:
await self.send(text_data=json.dumps({
'state': 'ERROR',
'Message': 'ν•΄λ‹Ή μ‹œκ΅°κ΅¬ 이름에 λŒ€μ‘λ˜λŠ” μ½”λ“œλ₯Ό κ°€μ Έμ˜¬ 수 μ—†μŠ΅λ‹ˆλ‹€. μ‹œκ΅°κ΅¬ 이름을 λ‹€μ‹œ ν•œλ²ˆ 확인 λ°”λžλ‹ˆλ‹€.'
}, ensure_ascii=False))
return
sigunguCodes.append(sigunguCode)

task_result = app.send_task('tour.tasks.get_recommended_tour_based_area',
args=[self.user_id, # 채널 λ ˆμ΄μ–΄ κ·Έλ£Ή νŠΉμ •μ„ μœ„ν•΄ λ³΄λƒ…λ‹ˆλ‹€.
areaCode, Arrange.TITLE_IMAGE.value, sigunguCodes])
task_result = app.send_task('tour.tasks.get_recommended_place_by_category_task',
args=[user_id, areaCode, categoryName, sigunguCodes, Arrange.TITLE_IMAGE.value])
await self.send(text_data=json.dumps({
'state': 'OK',
'Message': {
'task_id': task_result.task_id,
}
}))
}))
Loading