Ashok Kumar Bhati commited on
Commit
dcca8b8
·
1 Parent(s): 10dc1d7

fix message is not being parsed

Browse files
src/controllers/_bot_controller.py CHANGED
@@ -1,4 +1,5 @@
1
  import os
 
2
 
3
  from fastapi import APIRouter, BackgroundTasks, HTTPException, Request
4
  from fastapi.responses import JSONResponse, RedirectResponse
@@ -28,7 +29,7 @@ class BotController:
28
  event["team_id"]
29
  )
30
  if not team:
31
- return {"message": "team not found"}
32
 
33
  async with UserService() as user_service:
34
  # Get slack_user_id with fallback
@@ -59,13 +60,16 @@ class BotController:
59
  )
60
  await user_service.send_message(
61
  updated_user.id,
62
- "Welcome to MandalaBot",
63
  team.token,
64
  )
65
 
66
  if not user:
67
  logger.error("User not found or created")
68
- return {"message": "User not found"}
 
 
 
69
 
70
  async with FileService() as file_service:
71
  if "files" in actual_event:
@@ -119,7 +123,7 @@ class BotController:
119
  return {"challenge": event["challenge"]}
120
  logger.info(f"Received event: {event}")
121
  background_tasks.add_task(self.process_event_background, event)
122
- return {"message": "Processing started"}
123
 
124
  async def authenticate(self, code: str, state: str):
125
  try:
@@ -164,11 +168,11 @@ class BotController:
164
  )
165
  await user_service.send_message(
166
  updated_user.id,
167
- "Welcome to MandalaBot",
168
  team.token,
169
  )
170
 
171
- return {"message": "installed successfully"}
172
  except HTTPException as e:
173
  logger.warning(e)
174
  raise e
@@ -179,8 +183,13 @@ class BotController:
179
  async def updateFrequency(
180
  self, request: Request, background_tasks: BackgroundTasks
181
  ):
182
- background_tasks.add_task(self.updateUserFrequency, request)
183
- return JSONResponse(content={})
 
 
 
 
 
184
 
185
  async def install(self):
186
  try:
@@ -194,10 +203,8 @@ class BotController:
194
  logger.error(e)
195
  raise HTTPException(status_code=500, detail=str(e))
196
 
197
- async def updateUserFrequency(self, request: Request):
198
  try:
199
- form_data = await request.form()
200
- payload = dict(form_data)
201
  logger.info(f"Received command: {payload}")
202
 
203
  if payload.get("command") != "/frequency":
@@ -234,16 +241,13 @@ class BotController:
234
  "text": "Failed to update frequency. Please try again.",
235
  }
236
  next_delivery = updated_user.next_content_delivery_date.strftime(
237
- "%Y-%m-%d %H:%M:%S"
 
 
 
 
238
  )
239
- return {
240
- "response_type": "in_channel",
241
- "text": (
242
- f"Your content delivery frequency has been updated to {frequency}. "
243
- f"Next delivery scheduled for {next_delivery}"
244
- ),
245
- }
246
 
247
  except Exception as e:
248
- logger.error(f"Error updating frequency: {str(e)}")
249
- raise HTTPException(status_code=500, detail=str(e))
 
1
  import os
2
+ import traceback
3
 
4
  from fastapi import APIRouter, BackgroundTasks, HTTPException, Request
5
  from fastapi.responses import JSONResponse, RedirectResponse
 
29
  event["team_id"]
30
  )
31
  if not team:
32
+ return {"response_type": "ephemeral", "text": "Team not found"}
33
 
34
  async with UserService() as user_service:
35
  # Get slack_user_id with fallback
 
60
  )
61
  await user_service.send_message(
62
  updated_user.id,
63
+ "Welcome to MandalaForUs",
64
  team.token,
65
  )
66
 
67
  if not user:
68
  logger.error("User not found or created")
69
+ return {
70
+ "response_type": "ephemeral",
71
+ "text": "User not found",
72
+ }
73
 
74
  async with FileService() as file_service:
75
  if "files" in actual_event:
 
123
  return {"challenge": event["challenge"]}
124
  logger.info(f"Received event: {event}")
125
  background_tasks.add_task(self.process_event_background, event)
126
+ return {"response_type": "ephemeral", "text": "Processing started"}
127
 
128
  async def authenticate(self, code: str, state: str):
129
  try:
 
168
  )
169
  await user_service.send_message(
170
  updated_user.id,
171
+ "Welcome to MandalaForUs",
172
  team.token,
173
  )
174
 
175
+ return JSONResponse(content="Installed successfully")
176
  except HTTPException as e:
177
  logger.warning(e)
178
  raise e
 
183
  async def updateFrequency(
184
  self, request: Request, background_tasks: BackgroundTasks
185
  ):
186
+ form_data = await request.form()
187
+ payload = dict(form_data)
188
+ background_tasks.add_task(self.updateUserFrequency, payload)
189
+ return {
190
+ "response_type": "ephemeral",
191
+ "text": "Your content delivery frequency is being updated",
192
+ }
193
 
194
  async def install(self):
195
  try:
 
203
  logger.error(e)
204
  raise HTTPException(status_code=500, detail=str(e))
205
 
206
+ async def updateUserFrequency(self, payload: dict):
207
  try:
 
 
208
  logger.info(f"Received command: {payload}")
209
 
210
  if payload.get("command") != "/frequency":
 
241
  "text": "Failed to update frequency. Please try again.",
242
  }
243
  next_delivery = updated_user.next_content_delivery_date.strftime(
244
+ "%Y-%m-%d"
245
+ )
246
+ await user_service.send_message(
247
+ user_id=user.id,
248
+ message=f"Your content delivery frequency has been updated to {frequency}. Next delivery scheduled for {next_delivery}",
249
  )
 
 
 
 
 
 
 
250
 
251
  except Exception as e:
252
+ logger.error(f"Error updating frequency: {e}")
253
+ traceback.print_exc()
src/services/_content_delivery_service.py CHANGED
@@ -133,6 +133,7 @@ You’re here to create personalized quotes for participants in the Resilient Le
133
  "next_content_delivery_date": (start_of_day, end_of_day),
134
  },
135
  populate=["slack_team"],
 
136
  )
137
 
138
  if not users:
 
133
  "next_content_delivery_date": (start_of_day, end_of_day),
134
  },
135
  populate=["slack_team"],
136
+ page_size=100,
137
  )
138
 
139
  if not users:
src/services/_file_service.py CHANGED
@@ -137,7 +137,7 @@ class FileService:
137
  logger.error(f"Error in process_file: {str(e)}")
138
  async with UserService() as user_service:
139
  await user_service.send_message(
140
- user.slack_id, "Error processing your document. Please try again."
141
  )
142
 
143
  async def get_file_info(self, token, file_id):
 
137
  logger.error(f"Error in process_file: {str(e)}")
138
  async with UserService() as user_service:
139
  await user_service.send_message(
140
+ user.id, "Error processing your document. Please try again."
141
  )
142
 
143
  async def get_file_info(self, token, file_id):
src/services/_user_service.py CHANGED
@@ -1,11 +1,13 @@
 
1
  from src.repositories import UserRepository
2
 
3
  from src.models import ContentDeliveryFrequency, User
4
  import datetime
5
  from typing import Optional
6
- from datetime import datetime, timedelta
7
  from src.services._slack_bot_service import SlackBotService
8
  from src.utils import logger, Helper
 
9
 
10
 
11
  class UserService:
@@ -25,12 +27,8 @@ class UserService:
25
  return await self.user_repository.get_user_by_email(email=email)
26
 
27
  async def update_user_info(self, user_id, info):
28
- async with Helper() as helper:
29
- next_delivery_date = helper.calculate_next_delivery_date(
30
- datetime.now(), ContentDeliveryFrequency.DAILY
31
- )
32
 
33
- info["next_content_delivery_date"] = next_delivery_date
34
  return await self.user_repository.patch(user_id, info)
35
 
36
  async def get_users_list(self):
@@ -78,13 +76,20 @@ class UserService:
78
 
79
  return await self.user_repository.patch(user_id, update_data)
80
 
81
- async def send_message(self, user_id: int, message: str, token: str):
82
  """Send message to user"""
83
- user = await self.user_repository.get(user_id)
 
 
 
 
 
84
 
85
- if user and user.slack_id:
86
  async with SlackBotService() as slack_bot_service:
87
- await slack_bot_service.send_im_message(user.slack_id, message, token)
 
 
88
  else:
89
  logger.error(f"User not found for user_id: {user_id}")
90
  return {"message": "User not found"}
 
1
+ from sqlalchemy import select
2
  from src.repositories import UserRepository
3
 
4
  from src.models import ContentDeliveryFrequency, User
5
  import datetime
6
  from typing import Optional
7
+ from datetime import datetime
8
  from src.services._slack_bot_service import SlackBotService
9
  from src.utils import logger, Helper
10
+ from sqlalchemy.orm import joinedload
11
 
12
 
13
  class UserService:
 
27
  return await self.user_repository.get_user_by_email(email=email)
28
 
29
  async def update_user_info(self, user_id, info):
 
 
 
 
30
 
31
+ info["next_content_delivery_date"] = datetime.now()
32
  return await self.user_repository.patch(user_id, info)
33
 
34
  async def get_users_list(self):
 
76
 
77
  return await self.user_repository.patch(user_id, update_data)
78
 
79
+ async def send_message(self, user_id: int, message: str):
80
  """Send message to user"""
81
+ query = (
82
+ select(User).options(joinedload(User.slack_team)).filter(User.id == user_id)
83
+ )
84
+ user = await self.user_repository.execute(query=query)
85
+ user = user.scalar()
86
+ logger.info(f"User: {user}")
87
 
88
+ if user and hasattr(user, "slack_id"):
89
  async with SlackBotService() as slack_bot_service:
90
+ await slack_bot_service.send_im_message(
91
+ user.slack_id, message, user.slack_team.token
92
+ )
93
  else:
94
  logger.error(f"User not found for user_id: {user_id}")
95
  return {"message": "User not found"}