refactor: split main.go into packages (internal/api, internal/fission, internal/runtime, cmd/server)

This commit is contained in:
Naeel
2026-04-25 23:53:20 +03:00
parent 1f4de2ec15
commit 60646af0c8
20 changed files with 2799 additions and 1 deletions
+46
View File
@@ -0,0 +1,46 @@
// Package model содержит общие типы данных (request/response структуры,
// конфигурации языков), которые используются в нескольких пакетах.
// Вынесено отдельно чтобы избежать циклических зависимостей между пакетами.
package model
// CreateFunctionRequest — тело POST /console/api/functions.
// TTL пустой → функция живёт вечно; "1d", "24h" — протухнет через указанное время.
type CreateFunctionRequest struct {
Name string `json:"name"`
Language string `json:"language"`
Environment string `json:"environment"`
Code string `json:"code"`
Entrypoint string `json:"entrypoint"`
Route string `json:"route"`
Methods []string `json:"methods"`
TTL string `json:"ttl"` // e.g. "24h", "7d" — пустое = функция не протухает
}
// UpdateCodeRequest — тело PUT /console/api/functions/:name/code.
type UpdateCodeRequest struct {
Code string `json:"code"`
}
// LangEnvDef описывает Docker-образы для конкретного языка.
// BuilderImage заполнен только для языков которым нужна компиляция (Go).
// Version: версия среды Fission (по умолчанию 3; perl использует 1 — нет поддержки async entrypoint).
type LangEnvDef struct {
Image string
BuilderImage string
Version int // 0 → по умолчанию 3
}
// LangEnvMap сопоставляет идентификатор языка (string) с описанием среды выполнения.
// Ключ используется в createFunctionRequest.Language и как суффикс имени Environment.
//
// Почему perl Version=1:
// Fission Environment v3 требует поддержки async entrypoint (V2 protocol).
// ghcr.io/fission/perl-env поддерживает только V1 protocol → version=1.
var LangEnvMap = map[string]LangEnvDef{
"python": {Image: "ghcr.io/fission/python-env"},
"nodejs": {Image: "ghcr.io/fission/node-env"},
"go": {Image: "ghcr.io/fission/go-env", BuilderImage: "naeel/go-builder-fast:v1"},
"php": {Image: "ghcr.io/fission/php-env"},
"ruby": {Image: "ghcr.io/fission/ruby-env"},
"perl": {Image: "ghcr.io/fission/perl-env", Version: 1},
}