Spaces:
Sleeping
Sleeping
| from src.notifications.service import get_user_device_tokens | |
| from src.notifications.fcm import send_fcm | |
| def ensure_list(value): | |
| """ | |
| Makes sure the value is always a list. | |
| - If it's already a list/tuple/set -> convert to list and return | |
| - If it's None -> return empty list | |
| - Otherwise -> wrap single value in a list | |
| """ | |
| if value is None: | |
| return [] | |
| if isinstance(value, (list, tuple, set)): | |
| return list(value) | |
| return [value] | |
| # ------------------------------- | |
| # SEND TO MENTOR + LEAD | |
| # ------------------------------- | |
| async def send_leave_request_notification(session, user, leave, mentor_ids, lead_ids): | |
| mentor_ids = ensure_list(mentor_ids) | |
| lead_ids = ensure_list(lead_ids) | |
| tokens = [] | |
| for mentor_id in mentor_ids: | |
| tokens += await get_user_device_tokens(session, mentor_id) | |
| for lead_id in lead_ids: | |
| tokens += await get_user_device_tokens(session, lead_id) | |
| tokens = list(set(tokens)) | |
| await send_fcm( | |
| tokens, | |
| "New Leave Request", | |
| f"{user.user_name} requested leave", | |
| { | |
| "type": "leave_request", | |
| "screen": "MentorApproval", | |
| "leave_id": str(leave.id), | |
| }, | |
| priority="high", | |
| ) | |
| # ------------------------------- | |
| # SEND TO USER + TEAM LEAD | |
| # ------------------------------- | |
| async def send_leave_status_notification(session, leave, mentor_name, lead_ids): | |
| title = f"Leave {leave.status}" | |
| body = f"Your leave was {leave.status.lower()} by {mentor_name}" | |
| # Send to USER | |
| user_tokens = await get_user_device_tokens(session, leave.user_id) | |
| # Send to TEAM LEADS | |
| lead_tokens = [] | |
| for lead_id in lead_ids: | |
| lead_tokens += await get_user_device_tokens(session, lead_id) | |
| lead_tokens = list(set(lead_tokens)) | |
| # 1) Notify user | |
| await send_fcm( | |
| user_tokens, | |
| title, | |
| body, | |
| { | |
| "type": "leave_status", | |
| "screen": "LeaveDetails", | |
| "leave_id": str(leave.id), | |
| }, | |
| priority="high", | |
| ) | |
| # 2) Notify all leads | |
| await send_fcm( | |
| lead_tokens, | |
| title, | |
| f"Leave {leave.status} for user {leave.user_id}", | |
| { | |
| "type": "lead_update", | |
| "screen": "LeaveDetails", | |
| "leave_id": str(leave.id), | |
| }, | |
| priority="high", | |
| ) | |