99 lines
3.4 KiB
C#
99 lines
3.4 KiB
C#
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// دریافت چکلیست فعال یک دستگاه
|
|
/// </summary>
|
|
[HttpGet("active/{deviceId}")]
|
|
public async Task<ActionResult<ChecklistDto>> GetActiveChecklist(int deviceId, CancellationToken cancellationToken)
|
|
{
|
|
var result = await _checklistService.GetActiveChecklistByDeviceIdAsync(deviceId, cancellationToken);
|
|
if (result == null)
|
|
{
|
|
return NotFound(new { error = "چکلیست فعالی برای این دستگاه یافت نشد" });
|
|
}
|
|
return Ok(result);
|
|
}
|
|
|
|
/// <summary>
|
|
/// دریافت تمام چکلیستهای یک دستگاه
|
|
/// </summary>
|
|
[HttpGet("device/{deviceId}")]
|
|
public async Task<ActionResult<List<ChecklistDto>>> GetChecklists(int deviceId, CancellationToken cancellationToken)
|
|
{
|
|
var result = await _checklistService.GetChecklistsByDeviceIdAsync(deviceId, cancellationToken);
|
|
return Ok(result);
|
|
}
|
|
|
|
/// <summary>
|
|
/// دریافت جزئیات یک چکلیست
|
|
/// </summary>
|
|
[HttpGet("{id}")]
|
|
public async Task<ActionResult<ChecklistDto>> GetChecklistById(int id, CancellationToken cancellationToken)
|
|
{
|
|
var result = await _checklistService.GetChecklistByIdAsync(id, cancellationToken);
|
|
if (result == null)
|
|
{
|
|
return NotFound(new { error = $"چکلیست با شناسه {id} یافت نشد" });
|
|
}
|
|
return Ok(result);
|
|
}
|
|
|
|
/// <summary>
|
|
/// ایجاد چکلیست جدید (چکلیست قبلی غیرفعال میشود)
|
|
/// </summary>
|
|
[HttpPost]
|
|
public async Task<ActionResult<int>> CreateChecklist(
|
|
CreateChecklistRequest request,
|
|
CancellationToken cancellationToken)
|
|
{
|
|
var id = await _checklistService.CreateChecklistAsync(request, cancellationToken);
|
|
return Ok(new { id, message = "چکلیست با موفقیت ایجاد شد و چکلیست قبلی غیرفعال شد" });
|
|
}
|
|
|
|
/// <summary>
|
|
/// دریافت سابقه تکمیلهای یک چکلیست
|
|
/// </summary>
|
|
[HttpGet("{checklistId}/completions")]
|
|
public async Task<ActionResult<List<ChecklistCompletionDto>>> GetCompletions(
|
|
int checklistId,
|
|
CancellationToken cancellationToken)
|
|
{
|
|
var result = await _checklistService.GetCompletionsByChecklistIdAsync(checklistId, cancellationToken);
|
|
return Ok(result);
|
|
}
|
|
|
|
/// <summary>
|
|
/// ثبت تکمیل چکلیست
|
|
/// </summary>
|
|
[HttpPost("complete")]
|
|
public async Task<ActionResult<int>> 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 });
|
|
}
|
|
}
|
|
}
|
|
|