feat: add SMS notification for Daya loan approval - Implemented SMS sending functionality and created SmsTemplates for message formatting
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 4m11s
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 4m11s
This commit is contained in:
+39
-1
@@ -1,15 +1,25 @@
|
|||||||
using CMSMicroservice.Domain.Events;
|
using CMSMicroservice.Domain.Events;
|
||||||
using CMSMicroservice.Domain.Enums;
|
using CMSMicroservice.Domain.Enums;
|
||||||
|
using CMSMicroservice.Domain.Common;
|
||||||
|
using CMSMicroservice.Application.Common.Interfaces;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace CMSMicroservice.Application.DayaLoanCQ.Commands.ProcessDayaLoanApproval;
|
namespace CMSMicroservice.Application.DayaLoanCQ.Commands.ProcessDayaLoanApproval;
|
||||||
|
|
||||||
public class ProcessDayaLoanApprovalCommandHandler : IRequestHandler<ProcessDayaLoanApprovalCommand, ProcessDayaLoanApprovalResponseDto>
|
public class ProcessDayaLoanApprovalCommandHandler : IRequestHandler<ProcessDayaLoanApprovalCommand, ProcessDayaLoanApprovalResponseDto>
|
||||||
{
|
{
|
||||||
private readonly IApplicationDbContext _context;
|
private readonly IApplicationDbContext _context;
|
||||||
|
private readonly IKavenegarService _smsService;
|
||||||
|
private readonly ILogger<ProcessDayaLoanApprovalCommandHandler> _logger;
|
||||||
|
|
||||||
public ProcessDayaLoanApprovalCommandHandler(IApplicationDbContext context)
|
public ProcessDayaLoanApprovalCommandHandler(
|
||||||
|
IApplicationDbContext context,
|
||||||
|
IKavenegarService smsService,
|
||||||
|
ILogger<ProcessDayaLoanApprovalCommandHandler> logger)
|
||||||
{
|
{
|
||||||
_context = context;
|
_context = context;
|
||||||
|
_smsService = smsService;
|
||||||
|
_logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ProcessDayaLoanApprovalResponseDto> Handle(ProcessDayaLoanApprovalCommand request, CancellationToken cancellationToken)
|
public async Task<ProcessDayaLoanApprovalResponseDto> Handle(ProcessDayaLoanApprovalCommand request, CancellationToken cancellationToken)
|
||||||
@@ -140,6 +150,9 @@ public class ProcessDayaLoanApprovalCommandHandler : IRequestHandler<ProcessDaya
|
|||||||
|
|
||||||
await _context.SaveChangesAsync(cancellationToken);
|
await _context.SaveChangesAsync(cancellationToken);
|
||||||
|
|
||||||
|
// ارسال SMS به کاربر
|
||||||
|
await SendDayaLoanSmsAsync(user);
|
||||||
|
|
||||||
return new ProcessDayaLoanApprovalResponseDto
|
return new ProcessDayaLoanApprovalResponseDto
|
||||||
{
|
{
|
||||||
UserId = user.Id,
|
UserId = user.Id,
|
||||||
@@ -151,4 +164,29 @@ public class ProcessDayaLoanApprovalCommandHandler : IRequestHandler<ProcessDaya
|
|||||||
Message = "اعتبار دایا با موفقیت دریافت شد"
|
Message = "اعتبار دایا با موفقیت دریافت شد"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ارسال SMS اطلاعرسانی دریافت اعتبار دایا
|
||||||
|
/// </summary>
|
||||||
|
private async Task SendDayaLoanSmsAsync(User user)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var userName = SmsTemplates.GetUserName(user.FirstName);
|
||||||
|
var message = SmsTemplates.DayaLoanReceived(userName);
|
||||||
|
|
||||||
|
await _smsService.SendAsync(user.Mobile, message);
|
||||||
|
|
||||||
|
_logger.LogInformation(
|
||||||
|
"Daya loan SMS sent to User {UserId}, Mobile: {Mobile}",
|
||||||
|
user.Id, user.Mobile);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
// خطای SMS نباید فرایند اصلی رو متوقف کنه
|
||||||
|
_logger.LogError(ex,
|
||||||
|
"Failed to send Daya loan SMS to User {UserId}, Mobile: {Mobile}",
|
||||||
|
user.Id, user.Mobile);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,71 @@
|
|||||||
|
namespace CMSMicroservice.Domain.Common;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// قالبهای پیامک - همه پیامهای SMS در یک جا
|
||||||
|
/// </summary>
|
||||||
|
public static class SmsTemplates
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// پیام دریافت اعتبار دایا
|
||||||
|
/// </summary>
|
||||||
|
public static string DayaLoanReceived(string userName) =>
|
||||||
|
$"{userName} گرامی، اعتبار شما واریز گردید. شما میتوانید با مراجعه به سامانه کارابازار فرایند فعالسازی خود را ادامه دهید. با تشکر از حسن انتخاب شما";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پیام فعالسازی باشگاه مشتریان
|
||||||
|
/// </summary>
|
||||||
|
public static string ClubActivated(string userName) =>
|
||||||
|
$"{userName} گرامی، عضویت شما در باشگاه مشتریان کارابازار با موفقیت فعال شد. با تشکر از حسن انتخاب شما";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پیام خرید پکیج
|
||||||
|
/// </summary>
|
||||||
|
public static string PackagePurchased(string userName, string packageName) =>
|
||||||
|
$"{userName} گرامی، خرید {packageName} با موفقیت انجام شد. با تشکر از حسن انتخاب شما";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پیام واریز کمیسیون
|
||||||
|
/// </summary>
|
||||||
|
public static string CommissionDeposited(string userName, long amount) =>
|
||||||
|
$"{userName} گرامی، مبلغ {amount:N0} ریال بابت کمیسیون به کیف پول شما واریز شد.";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پیام برداشت موفق
|
||||||
|
/// </summary>
|
||||||
|
public static string WithdrawalSuccess(string userName, long amount) =>
|
||||||
|
$"{userName} گرامی، درخواست برداشت شما به مبلغ {amount:N0} ریال با موفقیت ثبت شد.";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پیام ورود به شبکه
|
||||||
|
/// </summary>
|
||||||
|
public static string NetworkJoined(string userName, string referrerName) =>
|
||||||
|
$"{userName} گرامی، شما با موفقیت در شبکه {referrerName} ثبت شدید. با تشکر از حسن انتخاب شما";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پیام زیرمجموعه جدید
|
||||||
|
/// </summary>
|
||||||
|
public static string NewDownline(string userName, string downlineName) =>
|
||||||
|
$"{userName} گرامی، {downlineName} به عنوان زیرمجموعه شما ثبت شد.";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پیام OTP
|
||||||
|
/// </summary>
|
||||||
|
public static string OtpCode(string code) =>
|
||||||
|
$"کد تایید شما: {code}\nکارابازار";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پیام خوشآمدگویی
|
||||||
|
/// </summary>
|
||||||
|
public static string Welcome(string userName) =>
|
||||||
|
$"{userName} گرامی، به کارابازار خوش آمدید.";
|
||||||
|
|
||||||
|
#region Helper
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت نام کاربر یا مقدار پیشفرض
|
||||||
|
/// </summary>
|
||||||
|
public static string GetUserName(string? firstName) =>
|
||||||
|
!string.IsNullOrWhiteSpace(firstName) ? firstName : "کاربر";
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user