59 lines
1.3 KiB
C#
59 lines
1.3 KiB
C#
using Cloud.Models;
|
|
using Cloud.Requests;
|
|
using Cloud.Services.Broker;
|
|
using Cloud.Services.Broker.Implement.Kafka;
|
|
using Cloud.Services.Broker.Support;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using System;
|
|
|
|
namespace Cloud.Controllers
|
|
{
|
|
[ApiController]
|
|
[Route("api/[controller]")]
|
|
public class WebhookController : ControllerBase
|
|
{
|
|
private readonly IBrokerService _kafkaService;
|
|
|
|
public WebhookController (KafkaService kafkaService)
|
|
{
|
|
_kafkaService = kafkaService;
|
|
}
|
|
|
|
[HttpPost]
|
|
public async Task<IActionResult> ReceiveWebhook([FromBody] WebhookData payload)
|
|
{
|
|
if (payload == null)
|
|
{
|
|
return BadRequest("Invalid data.");
|
|
}
|
|
|
|
if (payload.moisture >= payload.target_moisture && payload.valveStatus == "open")
|
|
{
|
|
var command = new Command
|
|
{
|
|
request_id = Guid.NewGuid(),
|
|
greenhouse_id = payload.greenhouse_id,
|
|
command = "valve",
|
|
};
|
|
|
|
await _kafkaService.ProduceAsync("commands", command);
|
|
}
|
|
|
|
if (payload.temp >= payload.target_temp && payload.heaterStatus == "on")
|
|
{
|
|
var command = new Command
|
|
{
|
|
request_id = Guid.NewGuid(),
|
|
greenhouse_id = payload.greenhouse_id,
|
|
command = "heater",
|
|
};
|
|
|
|
await _kafkaService.ProduceAsync("commands", command);
|
|
}
|
|
|
|
// Respond with a success status
|
|
return Ok(new { message = "Webhook received successfully", data = payload });
|
|
}
|
|
}
|
|
}
|