diff --git a/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/BmcMessageStatusInput.cs b/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/BmcMessageStatusInput.cs index d397183..b8aceea 100644 --- a/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/BmcMessageStatusInput.cs +++ b/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/BmcMessageStatusInput.cs @@ -8,9 +8,9 @@ namespace BCS.BMC.FirebaseCloudMessaging.Dto { public class BmcMessageStatusInput { - public List UserId { get; set; } + public string UserId { get; set; } public long? ScheduleGenerationId { get; set; } - public List BmcIDs { get; set; } + public long? BmcID { get; set; } public string Status { get; set; } public string CompanyUrl { get; set; } public bool IsSuccess { get; set; } diff --git a/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/FireStoreNotificationModel.cs b/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/FireStoreNotificationModel.cs index a4efb25..5850d5b 100644 --- a/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/FireStoreNotificationModel.cs +++ b/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/FireStoreNotificationModel.cs @@ -30,6 +30,6 @@ namespace BCS.BMC.FirebaseCloudMessaging.Dto [FirestoreProperty] public int CompanyId { get; set; } [FirestoreProperty] - public string ScheduleGenerationId { get; set; } + public long? ScheduleGenerationId { get; set; } } } diff --git a/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/FireStoreNotificationModelDto.cs b/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/FireStoreNotificationModelDto.cs new file mode 100644 index 0000000..fc7ccd0 --- /dev/null +++ b/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/FireStoreNotificationModelDto.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BCS.BMC.FirebaseCloudMessaging.Dto +{ + public class FireStoreNotificationModelDto + { + public string FcmToken { get; set; } + public string Message { get; set; } + public DateTime? MessageSentDateTime { get; set; } + + public string SenderImageurl { get; set; } + public string SenderName { get; set; } + public bool Status { get; set; } + public string UserId { get; set; } + + public int CompanyId { get; set; } + + public long? ScheduleGenerationId { get; set; } + } +} + diff --git a/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/FirebaseResponseModel.cs b/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/FirebaseResponseModel.cs index 014e9a4..b790d2e 100755 --- a/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/FirebaseResponseModel.cs +++ b/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/FirebaseResponseModel.cs @@ -11,7 +11,7 @@ namespace BCS.BMC.FirebaseCloudMessaging.Dto public class FireBaseResponseModel { public Notification notification { get; set; } - public List FcmToken { get; set; } + public string FcmToken { get; set; } public BmcMessageStatusInput getResponseData { get; set; } } diff --git a/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/NotificationModel.cs b/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/NotificationModel.cs index ec01064..9a04705 100644 --- a/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/NotificationModel.cs +++ b/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/NotificationModel.cs @@ -22,15 +22,9 @@ namespace BCS.BMC.FirebaseCloudMessaging.Dto public string SenderName { get; set; } public bool Status { get; set; } - public List UserId { get; set; } - public List BmcIDs { get; set; } + public string UserId { get; set; } + public long? BmcID { get; set; } public string CompanyUrl { get; set; } public long? ScheduleGenerationId { get; set; } } - - //[AutoMapFrom(typeof(NotificationModel))] - //public class FirebaseNotification : NotificationModel - //{ - // public List Id { get; set; } - //} } diff --git a/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/FirebaseNotificationAppService.cs b/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/FirebaseNotificationAppService.cs index 71c65dc..20a6b56 100644 --- a/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/FirebaseNotificationAppService.cs +++ b/BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/FirebaseNotificationAppService.cs @@ -29,10 +29,12 @@ namespace BCS.BMC.FirebaseCloudMessaging { try { + List token = new List(); + token.Add(notification.FcmToken); var message = new MulticastMessage() { Notification = notification.notification, - Tokens = notification.FcmToken, + Tokens = token, }; var response = await FirebaseMessaging.DefaultInstance.SendMulticastAsync(message); diff --git a/BCS.BMC/src/BCS.BMC.Web.Mvc/Controllers/NotificationController.cs b/BCS.BMC/src/BCS.BMC.Web.Mvc/Controllers/NotificationController.cs index 4b9b454..3f6b1d4 100644 --- a/BCS.BMC/src/BCS.BMC.Web.Mvc/Controllers/NotificationController.cs +++ b/BCS.BMC/src/BCS.BMC.Web.Mvc/Controllers/NotificationController.cs @@ -20,6 +20,10 @@ using System.Linq; using System.Net.Http.Headers; using System.Net.Http; using System.Threading.Tasks; +using Abp.EntityFrameworkCore.Repositories; +using System.Security.Cryptography; +using Abp.Domain.Uow; +using Google.Type; namespace BCS.BMC.Web.Controllers { @@ -32,6 +36,7 @@ namespace BCS.BMC.Web.Controllers private readonly IRepository _firebaseCloudMessageDetails; private readonly IRepository _firebaseToken; private readonly IRepository _companyMasterService; + private readonly IUnitOfWorkManager _unitOfWorkManager; //IFirebaseConfig config = new FirebaseConfig //{ // AuthSecret = "n6DTPQEbpnLahrrk2EYu4bJ2Wd3jCk2N8kocazdI", @@ -41,114 +46,150 @@ namespace BCS.BMC.Web.Controllers public NotificationController(IFirebaseNotificationAppService notificationService, IRepository firebaseCloudMessageDetails, IRepository firebaseToken, - IRepository companyMasterService) + IRepository companyMasterService, + IUnitOfWorkManager unitOfWorkManager) { _notificationService = notificationService; _firebaseCloudMessageDetails = firebaseCloudMessageDetails; _firebaseToken = firebaseToken; _companyMasterService = companyMasterService; + _unitOfWorkManager = unitOfWorkManager; } [HttpPost] - public async Task SendNotification([FromBody] FireBaseResponseModel notification) + public async Task SendNotification([FromBody] List notifications) { - var result = await _notificationService.SendNotification(notification); - - - if (result.SuccessCount > 0) + List bmcMessageStatusInputs = new List(); + foreach (var notification in notifications) { - if (notification.getResponseData != null) + var result = await _notificationService.SendNotification(notification); + + if (result.SuccessCount > 0) { - notification.getResponseData.IsSuccess = true; - notification.getResponseData.Status = "Delivered"; + if (notification.getResponseData != null) + { + notification.getResponseData.IsSuccess = true; + notification.getResponseData.Status = "Delivered"; + } + + // return Ok(result); } - await UpdateBmcMessageStatus(notification.getResponseData); - return Ok(result); - } - if (result.FailureCount > 0) - { - if (notification.getResponseData != null) + if (result.FailureCount > 0) { - notification.getResponseData.IsSuccess = false; - notification.getResponseData.Status = result.Responses[0].Exception.Message; + if (notification.getResponseData != null) + { + notification.getResponseData.IsSuccess = false; + notification.getResponseData.Status = result.Responses[0].Exception.Message; + } + //await UpdateBmcMessageStatus(notification.getResponseData); + return BadRequest(result.Responses); } - await UpdateBmcMessageStatus(notification.getResponseData); - return BadRequest(result.Responses); + bmcMessageStatusInputs.Add(notification.getResponseData); } - return Ok(result.Responses); + await UpdateBmcMessageStatus(bmcMessageStatusInputs); + return Ok(); } [HttpPost] - public async Task GetNotifications([FromBody] NotificationModel notification) + public async Task GetNotifications([FromBody] List notifications) { string path = AppDomain.CurrentDomain.BaseDirectory + @"firechat-57601-firebase-adminsdk-anscp-e04366c4d4.json"; Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", path); - var companyDetails = _companyMasterService.GetAllList().Where(x => x.Url.Trim() == notification.CompanyUrl.Trim()).FirstOrDefault(); + var companyDetails = _companyMasterService.GetAllList().Where(x => x.Url.Trim() == notifications.FirstOrDefault().CompanyUrl.Trim()).FirstOrDefault(); + var getTokenDetails = _firebaseToken.GetAllList(); + try { + List notificationModelsList = new List(); FirestoreDb db = FirestoreDb.Create("firechat-57601"); - FireStoreNotificationModel data = new FireStoreNotificationModel(); - - data.FcmToken = notification.FcmToken; - // data.Id = notification.Id; - data.Message = notification.Message; - data.MessageSentDateTime = notification.MessageSentDateTime; - //data.MessageSentDateTime = DateTime.UtcNow; - data.SenderImageurl = notification.SenderImageurl; - data.SenderName = notification.SenderName; - data.Status = notification.Status; - data.UserId = notification.UserId; - data.CompanyId = companyDetails.Id; - data.ScheduleGenerationId = notification.ScheduleGenerationId.ToString(); - await db.Collection("BMC_Notification").Document().SetAsync(data); - - var responseData = new BmcMessageStatusInput(); - { - responseData.UserId = notification.UserId; - responseData.ScheduleGenerationId = notification.ScheduleGenerationId; - responseData.CompanyUrl = notification.CompanyUrl; - responseData.BmcIDs = notification.BmcIDs; - } - - int userId = 0; - List tokenList = new List(); - foreach (var item in notification.UserId) + var sendNotificationInfoList = new List(); + var cloudMessageDetailsEntityList = new List(); + foreach (var notification in notifications) { - userId = Convert.ToInt32(item); - var getTokenDetails = _firebaseToken.GetAllList().Where(x => x.UserId == userId).FirstOrDefault(); - tokenList.Add(getTokenDetails.FcmToken.ToString()); + FireStoreNotificationModelDto data = new FireStoreNotificationModelDto(); + var sendNotificationInfo = new FireBaseResponseModel(); + data.FcmToken = notification.FcmToken; + // data.Id = notification.Id; + data.Message = notification.Message; + data.MessageSentDateTime = notification.MessageSentDateTime; + //data.MessageSentDateTime = DateTime.UtcNow; + data.SenderImageurl = notification.SenderImageurl; + data.SenderName = notification.SenderName; + data.Status = notification.Status; + data.UserId = notification.UserId; + data.CompanyId = companyDetails.Id; + data.ScheduleGenerationId = Int64.Parse(notification.ScheduleGenerationId.ToString()); + //await db.Collection("BMC_Notification").Document().SetAsync(data); + notificationModelsList.Add(data); var entity = new FirebaseCloudMessageDetails(); - entity.UserId = userId; + entity.UserId = Int32.Parse(notification.UserId); entity.SenderImageurl = notification.SenderImageurl; entity.SenderName = notification.SenderName; entity.MessageSentDateTime = notification.MessageSentDateTime; entity.Status = notification.Status; entity.Message = notification.Message; + cloudMessageDetailsEntityList.Add(entity); + - if (entity != null) + Notification noti = new Notification { - await _firebaseCloudMessageDetails.InsertAndGetIdAsync(entity); + Title = notification.SenderName.ToJsonString(), + Body = notification.Message.ToJsonString(), + //ImageUrl = null + }; + var responseData = new BmcMessageStatusInput(); + { + responseData.UserId = notification.UserId; + responseData.ScheduleGenerationId = notification.ScheduleGenerationId; + responseData.CompanyUrl = notification.CompanyUrl; + responseData.BmcID = notification.BmcID; } + var uID = Convert.ToInt32(notification.UserId); + var tokenDetails = getTokenDetails.FirstOrDefault(x => x.UserId == uID); + + sendNotificationInfo.notification = noti; + sendNotificationInfo.getResponseData = responseData; + sendNotificationInfo.FcmToken = tokenDetails.FcmToken; + + sendNotificationInfoList.Add(sendNotificationInfo); } - var title = notification.SenderName.ToJsonString(); - var body = notification.Message.ToJsonString(); - var sendNotificationInfo = new FireBaseResponseModel(); + var getAllFireStoreData = from table in notificationModelsList + group table by table.Message + into grp + select new FireStoreNotificationModel + { + FcmToken = grp.FirstOrDefault().FcmToken, + Message = grp.FirstOrDefault().Message, + MessageSentDateTime = grp.FirstOrDefault().MessageSentDateTime, + //data.MessageSentDateTime = DateTime.UtcNow; + SenderImageurl = grp.FirstOrDefault().SenderImageurl, + SenderName = grp.FirstOrDefault().SenderName, + Status = grp.FirstOrDefault().Status, + UserId = grp.Select(i => i.UserId).ToList(), + CompanyId = grp.FirstOrDefault().CompanyId, + ScheduleGenerationId = grp.FirstOrDefault().ScheduleGenerationId, + }; + using (var uow = _unitOfWorkManager.Begin()) { - sendNotificationInfo.FcmToken = tokenList; + foreach (var fireStoreData in getAllFireStoreData) + { + await db.Collection("BMC_Notification").Document().SetAsync(fireStoreData); + } + await uow.CompleteAsync(); } - Notification notifications = new Notification + using (var uow = _unitOfWorkManager.Begin()) { - Title = title, - Body = body, - //ImageUrl = null - }; - sendNotificationInfo.notification = notifications; - sendNotificationInfo.getResponseData = responseData; - await SendNotification(sendNotificationInfo); + foreach (var entity in cloudMessageDetailsEntityList) + { + await _firebaseCloudMessageDetails.InsertAsync(entity); + } + await uow.CompleteAsync(); + } + await SendNotification(sendNotificationInfoList); } catch (Exception ex) { @@ -156,12 +197,17 @@ namespace BCS.BMC.Web.Controllers } return Ok(); } + [HttpPost] - public async Task UpdateBmcMessageStatus([FromBody] BmcMessageStatusInput bmcMessageStatusInput) + public async Task UpdateBmcMessageStatus([FromBody] List bmcMessageStatusInput) { - var companyDetails = _companyMasterService.GetAllList().Where(x => x.Url.Trim() == bmcMessageStatusInput.CompanyUrl.Trim()).FirstOrDefault(); - var baseUrl = companyDetails.Url + "api/services/bwac/updateBmcMessageStatus/UpdateMessageStatus"; - + string baseUrl = ""; + foreach (var outputMessage in bmcMessageStatusInput) + { + var companyDetails = _companyMasterService.GetAllList().Where(x => x.Url.Trim() == outputMessage.CompanyUrl.Trim()).FirstOrDefault(); + baseUrl = companyDetails.Url + "api/services/bwac/updateBmcMessageStatus/UpdateMessageStatus"; + + } using (HttpClient client = new HttpClient()) { var requestJson = JsonConvert.SerializeObject(bmcMessageStatusInput);