using Microsoft.AspNetCore.Mvc; using MQTTnet; using backend.Application; using backend.Models; using backend.Middleware; namespace backend.Controllers; [ApiController] public class DispenserController : ControllerBase { [HttpPost("Dispense")] [MiddlewareFilter(typeof(AuthenticationMiddlewareBuilder))] public IActionResult Dispense() { var user = ApplicationState.DbContext!.Users.FirstOrDefault(user => user.SessionToken == Request.Cookies["session"]!.ToString()); if (user == null) { return BadRequest("Invalid session token"); } if (user.Dispenses == 0 && !user.IsParent) { Console.WriteLine("Poorfag"); return BadRequest("Not enough dispenses on account"); } user.Dispenses--; Console.WriteLine("Dispensing.."); var message = new MqttApplicationMessageBuilder() .WithTopic("dispense") .WithPayload("dispense") .Build(); ApplicationState.DbContext!.Add(new DispenserLog { Timestamp = DateTime.Now }); ApplicationState.DbContext!.SaveChanges(); ApplicationState.MqttClient!.PublishAsync(message, CancellationToken.None); return Ok(); } }