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.Enums;
|
||||
using CMSMicroservice.Domain.Common;
|
||||
using CMSMicroservice.Application.Common.Interfaces;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace CMSMicroservice.Application.DayaLoanCQ.Commands.ProcessDayaLoanApproval;
|
||||
|
||||
public class ProcessDayaLoanApprovalCommandHandler : IRequestHandler<ProcessDayaLoanApprovalCommand, ProcessDayaLoanApprovalResponseDto>
|
||||
{
|
||||
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;
|
||||
_smsService = smsService;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public async Task<ProcessDayaLoanApprovalResponseDto> Handle(ProcessDayaLoanApprovalCommand request, CancellationToken cancellationToken)
|
||||
@@ -140,6 +150,9 @@ public class ProcessDayaLoanApprovalCommandHandler : IRequestHandler<ProcessDaya
|
||||
|
||||
await _context.SaveChangesAsync(cancellationToken);
|
||||
|
||||
// ارسال SMS به کاربر
|
||||
await SendDayaLoanSmsAsync(user);
|
||||
|
||||
return new ProcessDayaLoanApprovalResponseDto
|
||||
{
|
||||
UserId = user.Id,
|
||||
@@ -151,4 +164,29 @@ public class ProcessDayaLoanApprovalCommandHandler : IRequestHandler<ProcessDaya
|
||||
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