BMC: Individual SendNotification Functionality
This commit is contained in:
parent
a8dea50c2c
commit
a8a988f7cf
@ -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; }
|
||||
|
@ -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; }
|
||||
}
|
||||
}
|
||||
|
@ -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; }
|
||||
}
|
||||
}
|
||||
|
@ -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; }
|
||||
}
|
||||
|
@ -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; }
|
||||
//}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
var sendNotificationInfoList = new List<FireBaseResponseModel>();
|
||||
var cloudMessageDetailsEntityList = new List<FirebaseCloudMessageDetails>();
|
||||
foreach (var notification in notifications)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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…
x
Reference in New Issue
Block a user