add function handling (basic)

This commit is contained in:
2025-11-30 15:28:30 +02:00
parent c1e5fc90ee
commit 6aae5f9fb0
10 changed files with 215 additions and 2 deletions

82
internal/worker/handle.go Normal file
View File

@@ -0,0 +1,82 @@
package worker
import (
"encoding/json"
"fmt"
"os"
"path/filepath"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
type RootConfig struct {
Data struct {
Driver string `json:"driver"`
Path string `json:"path"`
} `json:"data"`
}
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"`
}
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 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
}