refactor(services): Extract barcode generation

This commit is contained in:
2024-12-12 16:43:14 +01:00
parent c5da33f10f
commit b6cc98a165
2 changed files with 74 additions and 40 deletions

69
services/barcode.go Normal file
View File

@@ -0,0 +1,69 @@
package services
import (
"bytes"
"fmt"
"image/png"
"slices"
"github.com/boombuler/barcode"
"github.com/boombuler/barcode/code128"
"github.com/boombuler/barcode/ean"
"github.com/boombuler/barcode/qr"
)
type BarcodeGenerator interface {
GenerateBarcode(format string, content string) (bytes.Buffer, error)
IsTypeSupported(format string) bool
}
type DefaultBarcodeGenerator struct {
}
func (b *DefaultBarcodeGenerator) GenerateBarcode(format string, content string, width int, height int) (bytes.Buffer, error) {
if !b.IsTypeSupported(format) {
return bytes.Buffer{}, fmt.Errorf("unsupported barcode type: %s", format)
}
var generatedCode barcode.Barcode
var err error
switch format {
case "ean13":
generatedCode, err = ean.Encode(content)
if err != nil {
return bytes.Buffer{}, err
}
break
case "code128":
generatedCode, err = code128.Encode(content)
if err != nil {
return bytes.Buffer{}, err
}
break
case "qr":
generatedCode, err = qr.Encode(content, qr.M, qr.AlphaNumeric)
if err != nil {
return bytes.Buffer{}, err
}
break
}
scaledCode, err := barcode.Scale(generatedCode, width, height)
if err != nil {
return bytes.Buffer{}, err
}
var buf bytes.Buffer
err = png.Encode(&buf, scaledCode)
if err != nil {
return bytes.Buffer{}, err
}
return buf, nil
}
func (b *DefaultBarcodeGenerator) IsTypeSupported(format string) bool {
supportedTypes := []string{"ean13", "code128", "qr"}
return slices.Contains(supportedTypes, format)
}