Files
triggerssmith/internal/worker/handle.go
2025-12-14 16:34:42 +02:00

102 lines
2.1 KiB
Go

package worker
import (
"encoding/json"
"fmt"
"os"
"path/filepath"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
type Logger interface {
Write(line string)
}
type RootConfig struct {
Data struct {
Driver string `json:"driver"`
Path string `json:"path"`
} `json:"data"`
Log struct {
Path string `json:"log_root_path"`
} `json:"log"`
}
type Function struct {
ID uint `gorm:"primaryKey"`
FunctionName string
Version string
Path string
DeletedAt gorm.DeletedAt `gorm:"index"`
}
type FuncConfig struct {
Name string `json:"name"`
Version string `json:"version"`
Entry string `json:"entry"`
Runtime string `json:"runtime"`
Log struct {
Output string `json:"output"`
} `json:"log"`
}
func LoadTreeConfig(root string) (*RootConfig, error) {
cfgPath := filepath.Join(root, "config.json")
b, err := os.ReadFile(cfgPath)
if err != nil {
return nil, err
}
var cfg RootConfig
if err := json.Unmarshal(b, &cfg); err != nil {
return nil, err
}
return &cfg, nil
}
func OpenDB(cfg *RootConfig, root string) (*gorm.DB, error) {
switch cfg.Data.Driver {
case "sqlite":
dbPath := filepath.Join(root, cfg.Data.Path)
db, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{})
if err != nil {
return nil, err
}
return db, nil
default:
return nil, fmt.Errorf("unsupported db driver: %s", cfg.Data.Driver)
}
}
func FindFunction(db *gorm.DB, name, version string) (*Function, error) {
var f Function
if version == "latest" {
err := db.Where("function_name = ? AND deleted_at IS NULL", name).
Order("created_at DESC").
First(&f).Error
if err != nil {
return nil, err
}
} else {
if err := db.Where("function_name = ? AND version = ? AND deleted_at IS NULL", name, version).
First(&f).Error; err != nil {
return nil, err
}
}
return &f, nil
}
func LoadFunctionConfig(root, funcName, funcPath string) (*FuncConfig, error) {
cfgFile := filepath.Join(root, funcName, funcPath, "config.json")
b, err := os.ReadFile(cfgFile)
if err != nil {
return nil, err
}
var cfg FuncConfig
if err := json.Unmarshal(b, &cfg); err != nil {
return nil, err
}
return &cfg, nil
}