Browse Source

BMC: Individual SendNotification Functionality

feature/IndividualSendNotificationFunctionality
Palash Biswas 2 years ago
parent
commit
a8a988f7cf
7 changed files with 150 additions and 83 deletions
  1. +2
    -2
      BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/BmcMessageStatusInput.cs
  2. +1
    -1
      BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/FireStoreNotificationModel.cs
  3. +25
    -0
      BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/FireStoreNotificationModelDto.cs
  4. +1
    -1
      BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/FirebaseResponseModel.cs
  5. +2
    -8
      BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/NotificationModel.cs
  6. +3
    -1
      BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/FirebaseNotificationAppService.cs
  7. +116
    -70
      BCS.BMC/src/BCS.BMC.Web.Mvc/Controllers/NotificationController.cs

+ 2
- 2
BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/BmcMessageStatusInput.cs View File

@ -8,9 +8,9 @@ namespace BCS.BMC.FirebaseCloudMessaging.Dto
{
public class BmcMessageStatusInput
{
public List<string> UserId { get; set; }
public string UserId { get; set; }
public long? ScheduleGenerationId { get; set; }
public List<long> BmcIDs { get; set; }
public long? BmcID { get; set; }
public string Status { get; set; }
public string CompanyUrl { get; set; }
public bool IsSuccess { get; set; }


+ 1
- 1
BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/FireStoreNotificationModel.cs View File

@ -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; }
}
}

+ 25
- 0
BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/FireStoreNotificationModelDto.cs View File

@ -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; }
}
}

+ 1
- 1
BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/FirebaseResponseModel.cs View File

@ -11,7 +11,7 @@ namespace BCS.BMC.FirebaseCloudMessaging.Dto
public class FireBaseResponseModel
{
public Notification notification { get; set; }
public List<string> FcmToken { get; set; }
public string FcmToken { get; set; }
public BmcMessageStatusInput getResponseData { get; set; }
}


+ 2
- 8
BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/Dto/NotificationModel.cs View File

@ -22,15 +22,9 @@ namespace BCS.BMC.FirebaseCloudMessaging.Dto
public string SenderName { get; set; }
public bool Status { get; set; }
public List<string> UserId { get; set; }
public List<long> 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<string> Id { get; set; }
//}
}

+ 3
- 1
BCS.BMC/src/BCS.BMC.Application/FirebaseCloudMessaging/FirebaseNotificationAppService.cs View File

@ -29,10 +29,12 @@ namespace BCS.BMC.FirebaseCloudMessaging
{
try
{
List<string> token = new List<string>();
token.Add(notification.FcmToken);
var message = new MulticastMessage()
{
Notification = notification.notification,
Tokens = notification.FcmToken,
Tokens = token,
};
var response = await FirebaseMessaging.DefaultInstance.SendMulticastAsync(message);


+ 116
- 70
BCS.BMC/src/BCS.BMC.Web.Mvc/Controllers/NotificationController.cs View File

@ -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> _firebaseCloudMessageDetails;
private readonly IRepository<FirebaseToken, int> _firebaseToken;
private readonly IRepository<CompanyMaster, int> _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> firebaseCloudMessageDetails,
IRepository<FirebaseToken, int> firebaseToken,
IRepository<CompanyMaster, int> companyMasterService)
IRepository<CompanyMaster, int> companyMasterService,
IUnitOfWorkManager unitOfWorkManager)
{
_notificationService = notificationService;
_firebaseCloudMessageDetails = firebaseCloudMessageDetails;
_firebaseToken = firebaseToken;
_companyMasterService = companyMasterService;
_unitOfWorkManager = unitOfWorkManager;
}
[HttpPost]
public async Task<IActionResult> SendNotification([FromBody] FireBaseResponseModel notification)
public async Task<IActionResult> SendNotification([FromBody] List<FireBaseResponseModel> notifications)
{
var result = await _notificationService.SendNotification(notification);
if (result.SuccessCount > 0)
List<BmcMessageStatusInput> bmcMessageStatusInputs = new List<BmcMessageStatusInput>();
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<IActionResult> GetNotifications([FromBody] NotificationModel notification)
public async Task<IActionResult> GetNotifications([FromBody] List<NotificationModel> 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<FireStoreNotificationModelDto> notificationModelsList = new List<FireStoreNotificationModelDto>();
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<string> tokenList = new List<string>();
foreach (var item in notification.UserId)
var sendNotificationInfoList = new List<FireBaseResponseModel>();
var cloudMessageDetailsEntityList = new List<FirebaseCloudMessageDetails>();
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<IActionResult> UpdateBmcMessageStatus([FromBody] BmcMessageStatusInput bmcMessageStatusInput)
public async Task<IActionResult> UpdateBmcMessageStatus([FromBody] List<BmcMessageStatusInput> 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);


Loading…
Cancel
Save