using Microsoft.AspNetCore.Mvc;
using GreenHome.Application;
namespace GreenHome.Api.Controllers;
[ApiController]
[Route("api/[controller]")]
public class ChecklistsController : ControllerBase
{
private readonly IChecklistService _checklistService;
public ChecklistsController(IChecklistService checklistService)
{
_checklistService = checklistService;
}
///
/// دریافت چکلیست فعال یک دستگاه
///
[HttpGet("active/{deviceId}")]
public async Task> GetActiveChecklist(int deviceId, CancellationToken cancellationToken)
{
var result = await _checklistService.GetActiveChecklistByDeviceIdAsync(deviceId, cancellationToken);
if (result == null)
{
return NotFound(new { error = "چکلیست فعالی برای این دستگاه یافت نشد" });
}
return Ok(result);
}
///
/// دریافت تمام چکلیستهای یک دستگاه
///
[HttpGet("device/{deviceId}")]
public async Task>> GetChecklists(int deviceId, CancellationToken cancellationToken)
{
var result = await _checklistService.GetChecklistsByDeviceIdAsync(deviceId, cancellationToken);
return Ok(result);
}
///
/// دریافت جزئیات یک چکلیست
///
[HttpGet("{id}")]
public async Task> GetChecklistById(int id, CancellationToken cancellationToken)
{
var result = await _checklistService.GetChecklistByIdAsync(id, cancellationToken);
if (result == null)
{
return NotFound(new { error = $"چکلیست با شناسه {id} یافت نشد" });
}
return Ok(result);
}
///
/// ایجاد چکلیست جدید (چکلیست قبلی غیرفعال میشود)
///
[HttpPost]
public async Task> CreateChecklist(
CreateChecklistRequest request,
CancellationToken cancellationToken)
{
var id = await _checklistService.CreateChecklistAsync(request, cancellationToken);
return Ok(new { id, message = "چکلیست با موفقیت ایجاد شد و چکلیست قبلی غیرفعال شد" });
}
///
/// دریافت سابقه تکمیلهای یک چکلیست
///
[HttpGet("{checklistId}/completions")]
public async Task>> GetCompletions(
int checklistId,
CancellationToken cancellationToken)
{
var result = await _checklistService.GetCompletionsByChecklistIdAsync(checklistId, cancellationToken);
return Ok(result);
}
///
/// ثبت تکمیل چکلیست
///
[HttpPost("complete")]
public async Task> CompleteChecklist(
CompleteChecklistRequest request,
CancellationToken cancellationToken)
{
try
{
var id = await _checklistService.CompleteChecklistAsync(request, cancellationToken);
return Ok(new { id, message = "چکلیست با موفقیت تکمیل شد" });
}
catch (InvalidOperationException ex)
{
return NotFound(new { error = ex.Message });
}
}
}