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 }