version 2

This commit is contained in:
2025-12-16 16:52:40 +03:30
parent 61e86b1e96
commit 139924db94
52 changed files with 7350 additions and 321 deletions

View File

@@ -0,0 +1,77 @@
using Microsoft.AspNetCore.Mvc;
using GreenHome.Application;
namespace GreenHome.Api.Controllers;
[ApiController]
[Route("api/[controller]")]
public class DailyReportController : ControllerBase
{
private readonly IDailyReportService _dailyReportService;
private readonly ILogger<DailyReportController> _logger;
public DailyReportController(
IDailyReportService dailyReportService,
ILogger<DailyReportController> logger)
{
_dailyReportService = dailyReportService;
_logger = logger;
}
/// <summary>
/// دریافت یا ایجاد گزارش تحلیل روزانه گلخانه
/// </summary>
/// <param name="deviceId">شناسه دستگاه</param>
/// <param name="persianDate">تاریخ شمسی به فرمت yyyy/MM/dd</param>
/// <param name="cancellationToken">Cancellation token</param>
/// <returns>گزارش تحلیل روزانه</returns>
[HttpGet]
public async Task<ActionResult<DailyReportResponse>> GetDailyReport(
[FromQuery] int deviceId,
[FromQuery] string persianDate,
CancellationToken cancellationToken)
{
try
{
if (deviceId <= 0)
{
return BadRequest(new { error = "شناسه دستگاه نامعتبر است" });
}
if (string.IsNullOrWhiteSpace(persianDate))
{
return BadRequest(new { error = "تاریخ نباید خالی باشد" });
}
var request = new DailyReportRequest
{
DeviceId = deviceId,
PersianDate = persianDate.Trim()
};
var result = await _dailyReportService.GetOrCreateDailyReportAsync(request, cancellationToken);
_logger.LogInformation(
"گزارش روزانه برای دستگاه {DeviceId} و تاریخ {Date} با موفقیت برگشت داده شد (FromCache: {FromCache})",
deviceId, persianDate, result.FromCache);
return Ok(result);
}
catch (ArgumentException ex)
{
_logger.LogWarning(ex, "درخواست نامعتبر برای دستگاه {DeviceId} و تاریخ {Date}", deviceId, persianDate);
return BadRequest(new { error = ex.Message });
}
catch (InvalidOperationException ex)
{
_logger.LogWarning(ex, "خطا در پردازش گزارش روزانه برای دستگاه {DeviceId} و تاریخ {Date}", deviceId, persianDate);
return NotFound(new { error = ex.Message });
}
catch (Exception ex)
{
_logger.LogError(ex, "خطای سرور در دریافت گزارش روزانه برای دستگاه {DeviceId} و تاریخ {Date}", deviceId, persianDate);
return StatusCode(500, new { error = "خطای سرور در پردازش درخواست" });
}
}
}