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 }); } } }