elsa-core/samples/aspnet/Elsa.Samples.AspNet.Onboarding.Web/Controllers/HomeController.cs
2024-02-02 20:01:14 +02:00

48 lines
1.5 KiB
C#

using Elsa.Samples.AspNet.Onboarding.Web.Data;
using Elsa.Samples.AspNet.Onboarding.Web.Services;
using Elsa.Samples.AspNet.Onboarding.Web.Views.Home;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
namespace Elsa.Samples.AspNet.Onboarding.Web.Controllers;
public class HomeController : Controller
{
private readonly OnboardingDbContext _dbContext;
private readonly ElsaClient _elsaClient;
public HomeController(OnboardingDbContext dbContext, ElsaClient elsaClient)
{
_dbContext = dbContext;
_elsaClient = elsaClient;
}
public async Task<IActionResult> Index(CancellationToken cancellationToken)
{
var tasks = await _dbContext.Tasks.Where(x => !x.IsCompleted).ToListAsync(cancellationToken: cancellationToken);
var model = new IndexViewModel(tasks);
return View(model);
}
public async Task<IActionResult> CompleteTask(int taskId, CancellationToken cancellationToken)
{
var task = _dbContext.Tasks.FirstOrDefault(x => x.Id == taskId);
if (task == null)
return NotFound();
var result = new
{
Magic = Random.Shared.NextDouble()
};
await _elsaClient.ReportTaskCompletedAsync(task.ExternalId, result, cancellationToken);
task.IsCompleted = true;
task.CompletedAt = DateTimeOffset.Now;
_dbContext.Tasks.Update(task);
await _dbContext.SaveChangesAsync(cancellationToken);
return RedirectToAction("Index");
}
}