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