85 lines
2.3 KiB
Go

package handlers
import (
"log"
"slices"
"git.odit.services/lfk/document-server/models"
"git.odit.services/lfk/document-server/services"
"git.odit.services/lfk/document-server/templates"
"github.com/gofiber/fiber/v2"
)
// GenerateCard godoc
// @Summary Generate runner cards
// @Description Generate cards based on the provided data
// @Tags cards
// @Accept json
// @Param data body models.CardRequest true "Card data"
// @Produce application/pdf
// @Router /cards [post]
func GenerateCard(c *fiber.Ctx) error {
cardRequest := new(models.CardRequest)
if err := c.BodyParser(cardRequest); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"error": err.Error(),
})
}
if !slices.Contains([]string{"en", "de"}, cardRequest.Locale) {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"error": "Invalid locale",
})
}
generator := services.DefaultTemplater{}
templateString, err := templates.GetTemplate(cardRequest.Locale, "card")
if err != nil {
log.Println(err)
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
"error": "Template not found",
})
}
template, err := generator.StringToTemplate(templateString)
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"error": err.Error(),
})
}
genConfig := &models.CardTemplateOptions{
Cards: cardRequest.Cards,
CardsSwapped: invertCardArrayItems(cardRequest.Cards),
EventName: "Event name",
CardSubtitle: "Card subtitle",
BarcodeFormat: "ean13",
BarcodePrefix: "",
}
result, err := generator.Execute(template, genConfig)
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
"error": err.Error(),
})
}
c.Set(fiber.HeaderContentType, "text/html")
return c.SendString(result)
// converter := services.GotenbergConverter{BaseUrl: "http://localhost:3001"}
// pdf, err := converter.ToPdf(result, "a4", false)
// if err != nil {
// return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
// "error": err.Error(),
// })
// }
// c.Set(fiber.HeaderContentType, "application/pdf")
// return c.Send(pdf)
}
func invertCardArrayItems(cards []models.Card) []models.Card {
inverted := make([]models.Card, 0)
for i := len(cards) - 1; i >= 0; i-- {
inverted = append(inverted, cards[i])
}
return inverted
}