diff --git a/src/BackOffice.BFF.Application/BackOffice.BFF.Application.csproj b/src/BackOffice.BFF.Application/BackOffice.BFF.Application.csproj
index 44fbade..45732a3 100644
--- a/src/BackOffice.BFF.Application/BackOffice.BFF.Application.csproj
+++ b/src/BackOffice.BFF.Application/BackOffice.BFF.Application.csproj
@@ -1,19 +1,21 @@
-
- net7.0
- enable
-
+
+ net7.0
+ enable
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/BackOffice.BFF.Application/Common/Interfaces/IAfrinoIdpService.cs b/src/BackOffice.BFF.Application/Common/Interfaces/IAfrinoIdpService.cs
new file mode 100644
index 0000000..882561a
--- /dev/null
+++ b/src/BackOffice.BFF.Application/Common/Interfaces/IAfrinoIdpService.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BackOffice.BFF.Application.Common.Interfaces;
+public interface IAfrinoIdpService
+{
+ Task SendOtp(string mobile);
+ Task VerifyOtp(string mobile, string otpCode);
+ Task CreateUser(string mobile);
+ Task AddRole(string mobile, string role);
+}
diff --git a/src/BackOffice.BFF.Application/Common/Mappings/OtpProfile.cs b/src/BackOffice.BFF.Application/Common/Mappings/OtpProfile.cs
new file mode 100644
index 0000000..e8a4efa
--- /dev/null
+++ b/src/BackOffice.BFF.Application/Common/Mappings/OtpProfile.cs
@@ -0,0 +1,10 @@
+namespace BackOffice.BFF.Application.Common.Mappings;
+
+public class OtpProfile : IRegister
+{
+ void IRegister.Register(TypeAdapterConfig config)
+ {
+ //config.NewConfig()
+ // .Map(dest => dest.FullName, src => $"{src.Firstname} {src.Lastname}");
+ }
+}
diff --git a/src/BackOffice.BFF.Application/OtpCQ/Commands/SendOtp/SendOtpCommand.cs b/src/BackOffice.BFF.Application/OtpCQ/Commands/SendOtp/SendOtpCommand.cs
new file mode 100644
index 0000000..194d92a
--- /dev/null
+++ b/src/BackOffice.BFF.Application/OtpCQ/Commands/SendOtp/SendOtpCommand.cs
@@ -0,0 +1,7 @@
+namespace BackOffice.BFF.Application.OtpCQ.Commands.SendOtp;
+public record SendOtpCommand : IRequest
+{
+ //شماره موبایل
+ public string Mobile { get; init; }
+
+}
\ No newline at end of file
diff --git a/src/BackOffice.BFF.Application/OtpCQ/Commands/SendOtp/SendOtpCommandHandler.cs b/src/BackOffice.BFF.Application/OtpCQ/Commands/SendOtp/SendOtpCommandHandler.cs
new file mode 100644
index 0000000..b23b3ef
--- /dev/null
+++ b/src/BackOffice.BFF.Application/OtpCQ/Commands/SendOtp/SendOtpCommandHandler.cs
@@ -0,0 +1,22 @@
+using BackOffice.BFF.Application.Common.Interfaces;
+
+namespace BackOffice.BFF.Application.OtpCQ.Commands.SendOtp;
+public class SendOtpCommandHandler : IRequestHandler
+{
+ private readonly IApplicationContractContext _context;
+ private readonly IAfrinoIdpService _afrinoIdpService;
+
+ public SendOtpCommandHandler(IApplicationContractContext context, IAfrinoIdpService afrinoIdpService)
+ {
+ _context = context;
+ _afrinoIdpService = afrinoIdpService;
+ }
+
+ public async Task Handle(SendOtpCommand request, CancellationToken cancellationToken)
+ {
+ if (!await _afrinoIdpService.SendOtp(request.Mobile))
+ throw new Exception(message: "خطا در ارسال OTP");
+
+ return Unit.Value;
+ }
+}
diff --git a/src/BackOffice.BFF.Application/OtpCQ/Commands/SendOtp/SendOtpCommandValidator.cs b/src/BackOffice.BFF.Application/OtpCQ/Commands/SendOtp/SendOtpCommandValidator.cs
new file mode 100644
index 0000000..3b38552
--- /dev/null
+++ b/src/BackOffice.BFF.Application/OtpCQ/Commands/SendOtp/SendOtpCommandValidator.cs
@@ -0,0 +1,16 @@
+namespace BackOffice.BFF.Application.OtpCQ.Commands.SendOtp;
+public class SendOtpCommandValidator : AbstractValidator
+{
+ public SendOtpCommandValidator()
+ {
+ RuleFor(model => model.Mobile)
+ .NotEmpty();
+ }
+ public Func