public HttpResponseMessage SendMessage([FromBody] NewMessageInput newMessageInput) { if (newMessageInput.Rcps == null || newMessageInput.Rcps.Count <= 0) { throw HttpStatusCode.BadRequest.AsException(); } try { var message = new Message(); message.Subject = newMessageInput.Ttl; message.Body = System.Net.WebUtility.HtmlDecode(newMessageInput.Bdy); message.IsBroadcast = true; message.SendingUserId = UserId; message.Type = newMessageInput.Typ; message.SentOn = DateTime.UtcNow; var usersToSendTo = new List <string>(); if (newMessageInput.Rcps.Any(x => x.Nme == "Everyone")) { var departmentUsers = _departmentsService.GetAllMembersForDepartment(DepartmentId); foreach (var departmentMember in departmentUsers) { message.AddRecipient(departmentMember.UserId); } } else { // Add all the explict people foreach (var person in newMessageInput.Rcps.Where(x => x.Typ == 1)) { if (usersToSendTo.All(x => x != person.Id) && person.Id != UserId) { usersToSendTo.Add(person.Id); message.AddRecipient(person.Id); } } // Add all memebers of the group foreach (var group in newMessageInput.Rcps.Where(x => x.Typ == 2)) { if (!String.IsNullOrWhiteSpace(group.Id)) { int groupId = 0; if (int.TryParse(group.Id.Trim(), out groupId)) { var members = _departmentGroupsService.GetAllMembersForGroup(groupId); foreach (var member in members) { if (usersToSendTo.All(x => x != member.UserId) && member.UserId != UserId) { usersToSendTo.Add(member.UserId); message.AddRecipient(member.UserId); } } } } } // Add all the users of a specific role foreach (var role in newMessageInput.Rcps.Where(x => x.Typ == 3)) { var roleMembers = _personnelRolesService.GetAllMembersOfRole(int.Parse(role.Id)); foreach (var member in roleMembers) { if (usersToSendTo.All(x => x != member.UserId) && member.UserId != UserId) { usersToSendTo.Add(member.UserId); message.AddRecipient(member.UserId); } } } } var savedMessage = _messageService.SaveMessage(message); _messageService.SendMessage(savedMessage, "", DepartmentId, false); } catch (Exception ex) { Logging.LogException(ex); throw HttpStatusCode.InternalServerError.AsException(); } return(Request.CreateResponse(HttpStatusCode.Created)); }
public async Task <ActionResult> SendMessage([FromBody] NewMessageInput newMessageInput, CancellationToken cancellationToken) { if (newMessageInput.Rcps == null || newMessageInput.Rcps.Count <= 0) { return(BadRequest()); } Message savedMessage = null; try { var message = new Message(); message.Subject = newMessageInput.Ttl; message.Body = System.Net.WebUtility.HtmlDecode(newMessageInput.Bdy); message.IsBroadcast = true; message.SendingUserId = UserId; message.Type = newMessageInput.Typ; message.SentOn = DateTime.UtcNow; var usersToSendTo = new List <string>(); if (newMessageInput.Rcps.Any(x => x.Nme == "Everyone")) { var departmentUsers = await _departmentsService.GetAllMembersForDepartmentAsync(DepartmentId); foreach (var departmentMember in departmentUsers) { message.AddRecipient(departmentMember.UserId); } } else { // Add all the explict people foreach (var person in newMessageInput.Rcps.Where(x => x.Typ == 1)) { if (usersToSendTo.All(x => x != person.Id) && person.Id != UserId) { usersToSendTo.Add(person.Id); message.AddRecipient(person.Id); } } // Add all memebers of the group foreach (var group in newMessageInput.Rcps.Where(x => x.Typ == 2)) { if (!String.IsNullOrWhiteSpace(group.Id)) { int groupId = 0; if (int.TryParse(group.Id.Trim(), out groupId)) { var members = await _departmentGroupsService.GetAllMembersForGroupAsync(groupId); foreach (var member in members) { if (usersToSendTo.All(x => x != member.UserId) && member.UserId != UserId) { usersToSendTo.Add(member.UserId); message.AddRecipient(member.UserId); } } } } } // Add all the users of a specific role foreach (var role in newMessageInput.Rcps.Where(x => x.Typ == 3)) { var roleMembers = await _personnelRolesService.GetAllMembersOfRoleAsync(int.Parse(role.Id)); foreach (var member in roleMembers) { if (usersToSendTo.All(x => x != member.UserId) && member.UserId != UserId) { usersToSendTo.Add(member.UserId); message.AddRecipient(member.UserId); } } } } savedMessage = await _messageService.SaveMessageAsync(message, cancellationToken); await _messageService.SendMessageAsync(savedMessage, "", DepartmentId, false, cancellationToken); } catch (Exception ex) { Logging.LogException(ex); return(BadRequest()); } return(CreatedAtAction(nameof(SendMessage), new { id = savedMessage.MessageId }, savedMessage)); }