优化结构
This commit is contained in:
@@ -1,30 +1,13 @@
|
||||
// Package app is the composition root for the running administration service.
|
||||
// It knows which business modules are enabled and wires their contributions
|
||||
// into the shared platform. Individual modules do not import this package.
|
||||
// It wires runtime objects that need constructed dependencies. Static module
|
||||
// declarations live in the sibling internal/modules package.
|
||||
package app
|
||||
|
||||
import (
|
||||
integrationmodule "kra/internal/modules/integration"
|
||||
paymentmodule "kra/internal/modules/payment"
|
||||
systemmodule "kra/internal/modules/system"
|
||||
taskmodule "kra/internal/modules/task"
|
||||
"kra/pkg/module"
|
||||
platformtask "kra/pkg/task"
|
||||
)
|
||||
|
||||
// Catalog lists the business modules enabled in this binary. Static module
|
||||
// contributions (migrations, admin metadata, default tasks) enter through a
|
||||
// Definition; runtime routes and dependency-bearing task contributors still
|
||||
// need explicit wiring below.
|
||||
func Catalog() module.Catalog {
|
||||
return module.Catalog{Definitions: []module.Definition{
|
||||
systemmodule.Definition(),
|
||||
integrationmodule.Definition(),
|
||||
taskmodule.Definition(),
|
||||
paymentmodule.Definition(),
|
||||
}}
|
||||
}
|
||||
|
||||
// TaskRegistry builds the process-wide registry from dependency-free module
|
||||
// contributions. Dependency-bearing methods are added by their module runtime
|
||||
// constructors after the usecases have been created.
|
||||
@@ -10,37 +10,6 @@ import (
|
||||
platformtask "kra/pkg/task"
|
||||
)
|
||||
|
||||
func TestCatalogMigrationIDsAreUnique(t *testing.T) {
|
||||
seen := map[string]string{}
|
||||
for _, definition := range Catalog().Definitions {
|
||||
for _, step := range definition.Migrations {
|
||||
if previous, exists := seen[step.ID]; exists {
|
||||
t.Fatalf("migration %q is declared by both %s and %s", step.ID, previous, definition.Name)
|
||||
}
|
||||
seen[step.ID] = definition.Name
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestCatalogIncludesSystemDefinition(t *testing.T) {
|
||||
catalog := Catalog()
|
||||
if len(catalog.Definitions) != 4 {
|
||||
t.Fatalf("definitions = %d, want 4", len(catalog.Definitions))
|
||||
}
|
||||
if catalog.Definitions[0].Name != "system" || catalog.Definitions[1].Name != "integration" || catalog.Definitions[2].Name != "task" || catalog.Definitions[3].Name != "payment" {
|
||||
t.Fatalf("definition order = [%q, %q, %q, %q], want [system, integration, task, payment]", catalog.Definitions[0].Name, catalog.Definitions[1].Name, catalog.Definitions[2].Name, catalog.Definitions[3].Name)
|
||||
}
|
||||
if got := catalog.MigrationSteps(); len(got) != 8 {
|
||||
t.Fatalf("module migrations = %d, want 8", len(got))
|
||||
}
|
||||
if surface := catalog.Surface(); len(surface.Menus) != 3 || len(surface.APIs) != 15 {
|
||||
t.Fatalf("admin surface = %d menus/%d APIs, want 3/15", len(surface.Menus), len(surface.APIs))
|
||||
}
|
||||
if got := catalog.DefaultTimedTasks(); len(got) != 2 {
|
||||
t.Fatalf("default timed tasks = %d, want 2", len(got))
|
||||
}
|
||||
}
|
||||
|
||||
func TestTaskRegistryRegistersStaticModuleMethods(t *testing.T) {
|
||||
method := platformtask.Method{
|
||||
Name: "test.static",
|
||||
Reference in New Issue
Block a user