feat(certificates): Endpoint with handler
This commit is contained in:
parent
561e7151c6
commit
79a0062f60
73
handlers/certificate.go
Normal file
73
handlers/certificate.go
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
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"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GenerateCertificate godoc
|
||||||
|
// @Summary Generate runner certificates
|
||||||
|
// @Description Generate certificates based on the provided data
|
||||||
|
// @Tags certificates
|
||||||
|
// @Accept json
|
||||||
|
// @Param data body models.CertificateRequest true "Certificate data"
|
||||||
|
// @Produce application/pdf
|
||||||
|
// @Router /certificates [post]
|
||||||
|
func GenerateCertificate(c *fiber.Ctx) error {
|
||||||
|
certificateRequest := new(models.CertificateRequest)
|
||||||
|
if err := c.BodyParser(certificateRequest); err != nil {
|
||||||
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
||||||
|
"error": err.Error(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if !slices.Contains([]string{"en", "de"}, certificateRequest.Locale) {
|
||||||
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
|
||||||
|
"error": "Invalid locale",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
generator := services.DefaultTemplater{}
|
||||||
|
templateString, err := templates.GetTemplate(certificateRequest.Locale, "certificate")
|
||||||
|
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.CertificateTemplateOptions{
|
||||||
|
Runners: certificateRequest.Runners,
|
||||||
|
EventName: "Event name",
|
||||||
|
Footer: "Footer",
|
||||||
|
CurrencySymbol: "€",
|
||||||
|
}
|
||||||
|
|
||||||
|
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")
|
||||||
|
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)
|
||||||
|
}
|
1
main.go
1
main.go
@ -36,6 +36,7 @@ func main() {
|
|||||||
})
|
})
|
||||||
v1.Post("/contracts", handlers.GenerateContract)
|
v1.Post("/contracts", handlers.GenerateContract)
|
||||||
v1.Post("/cards", handlers.GenerateCard)
|
v1.Post("/cards", handlers.GenerateCard)
|
||||||
|
v1.Post("/certificates", handlers.GenerateCertificate)
|
||||||
|
|
||||||
app.Use(handlers.NotFoundHandler)
|
app.Use(handlers.NotFoundHandler)
|
||||||
docs.SwaggerInfo.BasePath = "/"
|
docs.SwaggerInfo.BasePath = "/"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user