40 lines
1.1 KiB
C#
40 lines
1.1 KiB
C#
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();
|
|
}
|
|
}
|