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