printer-api/Controllers/PrinterController.cs
2022-02-28 13:44:47 +01:00

75 lines
1.6 KiB
C#

using System.ComponentModel;
using System.Text.Json;
using ESCPOS_NET;
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("/api/printer")]
public class PrinterController : Controller
{
private readonly PrinterService _printer;
private readonly ILogger _logger;
public PrinterController(ILogger<PrinterController> logger, PrinterService printer)
{
_printer = printer;
_logger = logger;
}
[Route("name")]
[HttpGet]
public ActionResult<string> GetName()
{
return _printer.GetName();
}
[Route("status")]
[HttpGet]
public ActionResult<PrinterStatusEventArgs> GetStatus()
{
return _printer.GetStatus();
}
[Route("print")]
[HttpPost]
public ActionResult Print([FromBody] JsonElement[] body)
{
var instructions = new List<BaseInstruction>();
foreach (var instruction in body)
{
BaseInstruction? parsedInstruction = null;
switch (instruction.GetProperty("type").GetString())
{
case "text":
parsedInstruction = instruction.Deserialize<TextInstruction>();
break;
case "barcode":
parsedInstruction = instruction.Deserialize<BarcodeInstruction>();
break;
case "feed":
parsedInstruction = instruction.Deserialize<FeedInstruction>();
break;
case "barcode2d":
parsedInstruction = instruction.Deserialize<Barcode2D>();
break;
case "qrcode":
parsedInstruction = instruction.Deserialize<QRCode>();
break;
default:
return BadRequest();
}
if (parsedInstruction == null)
{
return BadRequest();
}
instructions.Add(parsedInstruction);
}
_printer.Print(instructions);
return Ok();
}
}