add device token

This commit is contained in:
2025-12-19 11:07:31 +03:30
parent 74e8480a68
commit 10178de7c1
10 changed files with 2078 additions and 0 deletions

View File

@@ -0,0 +1,128 @@
using GreenHome.Application;
using Microsoft.AspNetCore.Mvc;
namespace GreenHome.Api.Controllers;
/// <summary>
/// کنترلر مدیریت توکن و تنظیمات دستگاه
/// </summary>
[ApiController]
[Route("api/[controller]")]
public class DeviceTokenController : ControllerBase
{
private readonly IDeviceTokenService deviceTokenService;
private readonly ILogger<DeviceTokenController> logger;
public DeviceTokenController(
IDeviceTokenService deviceTokenService,
ILogger<DeviceTokenController> logger)
{
this.deviceTokenService = deviceTokenService;
this.logger = logger;
}
/// <summary>
/// دریافت فاصله زمانی آپلود دستگاه
/// </summary>
/// <param name="deviceId">شناسه دستگاه (اختیاری)</param>
/// <param name="devicePhoneNumber">شماره تلفن دستگاه (اختیاری)</param>
/// <returns>فاصله زمانی آپلود به دقیقه</returns>
[HttpGet("upload-interval")]
public async Task<ActionResult<GetUploadIntervalResponse>> GetUploadInterval(
[FromQuery] int? deviceId,
[FromQuery] string? devicePhoneNumber,
CancellationToken cancellationToken)
{
if (!deviceId.HasValue && string.IsNullOrWhiteSpace(devicePhoneNumber))
{
return BadRequest(new GetUploadIntervalResponse
{
Success = false,
Message = "حداقل یکی از پارامترهای deviceId یا devicePhoneNumber باید ارسال شود"
});
}
var request = new GetUploadIntervalRequest
{
DeviceId = deviceId,
DevicePhoneNumber = devicePhoneNumber
};
var result = await deviceTokenService.GetUploadIntervalAsync(request, cancellationToken);
if (!result.Success)
{
return NotFound(result);
}
return Ok(result);
}
/// <summary>
/// درخواست توکن دستگاه (تولید و ارسال کد از طریق پیامک)
/// </summary>
/// <param name="request">درخواست شامل شماره تلفن دستگاه</param>
/// <returns>نتیجه درخواست</returns>
[HttpPost("request-token")]
public async Task<ActionResult<RequestDeviceTokenResponse>> RequestToken(
[FromBody] RequestDeviceTokenRequest request,
CancellationToken cancellationToken)
{
if (string.IsNullOrWhiteSpace(request.DevicePhoneNumber))
{
return BadRequest(new RequestDeviceTokenResponse
{
Success = false,
Message = "شماره تلفن دستگاه الزامی است"
});
}
var result = await deviceTokenService.RequestDeviceTokenAsync(request, cancellationToken);
if (!result.Success)
{
return BadRequest(result);
}
return Ok(result);
}
/// <summary>
/// تایید توکن دستگاه (ارسال تنظیمات کدشده از طریق پیامک)
/// </summary>
/// <param name="request">درخواست شامل شماره تلفن و کد تایید</param>
/// <returns>نتیجه تایید و تنظیمات کدشده</returns>
[HttpPost("verify-token")]
public async Task<ActionResult<VerifyDeviceTokenResponse>> VerifyToken(
[FromBody] VerifyDeviceTokenRequest request,
CancellationToken cancellationToken)
{
if (string.IsNullOrWhiteSpace(request.DevicePhoneNumber))
{
return BadRequest(new VerifyDeviceTokenResponse
{
Success = false,
Message = "شماره تلفن دستگاه الزامی است"
});
}
if (string.IsNullOrWhiteSpace(request.VerificationCode))
{
return BadRequest(new VerifyDeviceTokenResponse
{
Success = false,
Message = "کد تایید الزامی است"
});
}
var result = await deviceTokenService.VerifyDeviceTokenAsync(request, cancellationToken);
if (!result.Success)
{
return BadRequest(result);
}
return Ok(result);
}
}

View File

@@ -66,6 +66,7 @@ builder.Services.AddScoped<GreenHome.Application.IUserDailyReportService, GreenH
builder.Services.AddScoped<GreenHome.Application.IChecklistService, GreenHome.Infrastructure.ChecklistService>();
builder.Services.AddScoped<GreenHome.Application.IMonthlyReportService, GreenHome.Infrastructure.MonthlyReportService>();
builder.Services.AddScoped<GreenHome.Application.IDevicePostService, GreenHome.Infrastructure.DevicePostService>();
builder.Services.AddScoped<GreenHome.Application.IDeviceTokenService, GreenHome.Infrastructure.DeviceTokenService>();
// SMS Service Configuration
builder.Services.AddIppanelSms(builder.Configuration);