TasksTracker.Processor.Backend.Svc/Controllers/ExternalTasksProcessorController.cs (44 lines of code) (raw):
using Dapr.Client;
using Microsoft.AspNetCore.Mvc;
using TasksTracker.Processor.Backend.Svc.Models;
namespace TasksTracker.Processor.Backend.Svc.Controllers
{
[Route("ExternalTasksProcessor")]
[ApiController]
public class ExternalTasksProcessorController : ControllerBase
{
private readonly ILogger<ExternalTasksProcessorController> _logger;
private readonly DaprClient _daprClient;
private const string OUTPUT_BINDING_NAME = "externaltasksblobstore";
private const string OUTPUT_BINDING_OPERATION = "create";
public ExternalTasksProcessorController(ILogger<ExternalTasksProcessorController> logger,
DaprClient daprClient)
{
_logger = logger;
_daprClient = daprClient;
}
[HttpPost("process")]
public async Task<IActionResult> ProcessTaskAndStore([FromBody] TaskModel taskModel)
{
try
{
_logger.LogInformation("Started processing external task message from storage queue. Task Name: '{0}'", taskModel.TaskName);
taskModel.TaskId = Guid.NewGuid();
taskModel.TaskCreatedOn = DateTime.UtcNow;
//Dapr SideCar Invocation (save task to a state store)
await _daprClient.InvokeMethodAsync(HttpMethod.Post, "tasksmanager-backend-api", $"api/tasks", taskModel);
_logger.LogInformation("Saved external task to the state store successfully. Task name: '{0}', Task Id: '{1}'", taskModel.TaskName, taskModel.TaskId);
IReadOnlyDictionary<string,string> metaData = new Dictionary<string, string>()
{
{ "blobName", $"{taskModel.TaskId}.json" },
};
await _daprClient.InvokeBindingAsync(OUTPUT_BINDING_NAME, OUTPUT_BINDING_OPERATION, taskModel, metaData);
_logger.LogInformation("Invoked output binding '{0}' for external task. Task name: '{1}', Task Id: '{2}'", OUTPUT_BINDING_NAME, taskModel.TaskName, taskModel.TaskId);
return Ok();
}
catch (Exception)
{
throw;
}
}
}
}