Spaces:
Sleeping
Sleeping
File size: 3,205 Bytes
fa5d0ef a7c1c74 fea9527 90ebf1e fa5d0ef a7c1c74 fa5d0ef 90ebf1e a7c1c74 90ebf1e a7c1c74 90ebf1e b1da44c 90ebf1e a7c1c74 90ebf1e b1da44c 90ebf1e fa5d0ef a7c1c74 b1da44c fa5d0ef a7c1c74 fa5d0ef a7c1c74 fa5d0ef fea9527 fa5d0ef a7c1c74 fa5d0ef a7c1c74 fa5d0ef fea9527 fa5d0ef |
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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
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
# -------------------------------
# -------------------------------
# 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)
# ---------------------------
# SEND TO MENTORS (Approval screen)
# ---------------------------
mentor_tokens = []
for mentor_id in mentor_ids:
mentor_tokens += await get_user_device_tokens(session, mentor_id)
mentor_tokens = list(set(mentor_tokens))
if mentor_tokens:
await send_fcm(
mentor_tokens,
"New Leave Request",
f"{user.user_name} requested leave",
{
"type": "leave_request",
"screen": "MentorApproval",
"leave_id": str(leave.id),
},
priority="high",
)
# ---------------------------
# SEND TO TEAM LEADS (Leave Details screen)
# ---------------------------
lead_tokens = []
for lead_id in lead_ids:
lead_tokens += await get_user_device_tokens(session, lead_id)
lead_tokens = list(set(lead_tokens))
if lead_tokens:
await send_fcm(
lead_tokens,
"New Leave Request",
f"{user.user_name} requested leave",
{
"type": "leave_request",
"screen": "LeaveDetails",
"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 = "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",
)
|