feat: implement private messaging and user notification system
							parent
							
								
									2c8ae1f687
								
							
						
					
					
						commit
						5a44e73106
					
				| @ -0,0 +1,54 @@ | |||||||
|  | import { sendMessage } from '../utils/messaging'; | ||||||
|  | import { formatUserMention } from '../utils/userUtils'; | ||||||
|  | import { Task } from '../models/task'; | ||||||
|  | 
 | ||||||
|  | export function notifyTaskCreation(task: Task) { | ||||||
|  |   const creatorMention = formatUserMention(task.createdBy); | ||||||
|  |   const assigneeMention = task.assignedTo ? formatUserMention(task.assignedTo) : 'ninguno'; | ||||||
|  |    | ||||||
|  |   // Notify creator
 | ||||||
|  |   let message = `✅ Tarea creada:\nID: ${task.id}\nDescripción: ${task.description}`; | ||||||
|  |   if (task.assignedTo) { | ||||||
|  |     message += `\nAsignada a: ${assigneeMention}`; | ||||||
|  |   } | ||||||
|  |   if (task.dueDate) { | ||||||
|  |     message += `\nFecha límite: ${task.dueDate}`; | ||||||
|  |   } | ||||||
|  |   sendMessage(task.createdBy, message); | ||||||
|  | 
 | ||||||
|  |   // Notify assignee if different from creator
 | ||||||
|  |   if (task.assignedTo && task.assignedTo !== task.createdBy) { | ||||||
|  |     const assigneeMessage = `📝 ${creatorMention} te ha asignado una nueva tarea:\n` + | ||||||
|  |       `ID: ${task.id}\nDescripción: ${task.description}` + | ||||||
|  |       (task.dueDate ? `\nFecha límite: ${task.dueDate}` : ''); | ||||||
|  |     sendMessage(task.assignedTo, assigneeMessage); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export function notifyTaskAssignment(task: Task, assignedBy: string) { | ||||||
|  |   const assignerMention = formatUserMention(assignedBy); | ||||||
|  |   const assigneeMention = formatUserMention(task.assignedTo); | ||||||
|  | 
 | ||||||
|  |   // Notify assigner
 | ||||||
|  |   sendMessage(assignedBy, `✅ Tarea ${task.id} asignada a ${assigneeMention}`); | ||||||
|  | 
 | ||||||
|  |   // Notify assignee
 | ||||||
|  |   const assigneeMessage = `📝 ${assignerMention} te ha asignado la tarea:\n` + | ||||||
|  |     `ID: ${task.id}\nDescripción: ${task.description}` + | ||||||
|  |     (task.dueDate ? `\nFecha límite: ${task.dueDate}` : ''); | ||||||
|  |   sendMessage(task.assignedTo, assigneeMessage); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export function notifyTaskCompletion(task: Task, completedBy: string) { | ||||||
|  |   const completerMention = formatUserMention(completedBy); | ||||||
|  | 
 | ||||||
|  |   // Notify completer
 | ||||||
|  |   sendMessage(completedBy, `✅ Tarea completada:\nID: ${task.id}\nDescripción: ${task.description}`); | ||||||
|  | 
 | ||||||
|  |   // Notify creator if different from completer
 | ||||||
|  |   if (task.createdBy && task.createdBy !== completedBy) { | ||||||
|  |     const creatorMessage = `✅ ${completerMention} ha completado la tarea:\n` + | ||||||
|  |       `ID: ${task.id}\nDescripción: ${task.description}`; | ||||||
|  |     sendMessage(task.createdBy, creatorMessage); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @ -0,0 +1,24 @@ | |||||||
|  | export function normalizeUserIdentifier(input: string): string { | ||||||
|  |   // Remove @ prefix if present
 | ||||||
|  |   const cleanInput = input.startsWith('@') ? input.slice(1) : input; | ||||||
|  |    | ||||||
|  |   // Remove any non-numeric characters
 | ||||||
|  |   const phoneNumber = cleanInput.replace(/\D/g, ''); | ||||||
|  |    | ||||||
|  |   // Validate phone number length
 | ||||||
|  |   if (phoneNumber.length < 8 || phoneNumber.length > 15) { | ||||||
|  |     throw new Error('Número de teléfono inválido'); | ||||||
|  |   } | ||||||
|  |    | ||||||
|  |   return `@${phoneNumber}`; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export function extractUserFromJid(jid: string): string { | ||||||
|  |   // Extract phone number from JID (format: 12345678@s.whatsapp.net)
 | ||||||
|  |   const phoneNumber = jid.split('@')[0]; | ||||||
|  |   return normalizeUserIdentifier(phoneNumber); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export function formatUserMention(phoneNumber: string): string { | ||||||
|  |   return `@${phoneNumber.replace('@', '')}`; | ||||||
|  | } | ||||||
					Loading…
					
					
				
		Reference in New Issue