chore: refactored sl and added an hooks system

modified: cmd/dev-server/main.go, cmd/server/main.go

    Aggiornati per utilizzare il nuovo sistema degli hooks, ora nei "main" vanno
    solo chiamate "ProvideValue", "Provide" e "ProvideHook" ed una finale
    di "Invoke" o "Use". Mentre nei vari servizi vanno solo chiamate "Use"
    o "UseHook"

modified: libs/sl/sl.go

    Rinominati "InjectValue" e "InjectLazy" a "Provide" e "ProvideFunc", altro
    refactor di varie cose ed aggiunto il concetto degli hook per poter
    iniettare anche più di un servizio dentro un altro in un preciso ordine.

modified: server/config/config.go

    Lieve refactor ed aggiunta la variabile "NPM_COMMAND" configurabile per la
    fase di development.

modified: server/listautenti/listautenti.go

    Ora questo è un vero e proprio servizio "state-less", fornisce solo una
    funzione che monta tutte le route necessarie a questo servizio. Più avanti
    dipenderà da LDAP quindi forse sarà leggermente più complicato.

modified: server/listautenti/listautenti_test.go

    Aggiornato questo test, ora usa il nuovo sistema e funge di nuovo.

deleted: server/routes/routes.go

    Il sistema degli hook è stato introdotto anche per semplificare questa cosa
    che ora infatti non serve più.

modified: server/server.go

    Ora il server non chiama più "InjectValue" con i sotto-router ma espone solo
    un hook che passa i sotto router come parametri, in questo modo è più
    facile aggiungere e togliere servizi direttamente alla radice quando viene
    configurata tutta l'applicazione.
This commit is contained in:
2023-06-14 12:41:34 +02:00
parent be8c35229b
commit 01982942a8
8 changed files with 246 additions and 124 deletions
+21 -12
View File
@@ -9,37 +9,46 @@ import (
type Config struct {
Mode string
Host string
NpmCommand string
}
var Slot = sl.NewSlot[Config]()
func setFromEnvOrDefault(target *string, m map[string]string, key string, defaultValue string) {
v, ok := m[key]
if ok {
*target = v
} else {
*target = defaultValue
}
}
func Configure(l *sl.ServiceLocator) (Config, error) {
m, err := godotenv.Read(".env")
env, err := godotenv.Read(".env")
if err != nil {
return Config{}, err
}
var cfg Config
cfg.Mode = "production"
if v, ok := m["MODE"]; ok {
cfg.Mode = v
}
cfg.Host = ":4000"
if v, ok := m["HOST"]; ok {
cfg.Host = v
}
setFromEnvOrDefault(&cfg.Mode, env, "MODE", "production")
setFromEnvOrDefault(&cfg.Host, env, "HOST", ":4000")
setFromEnvOrDefault(&cfg.NpmCommand, env, "NPM_COMMAND", "npm")
return cfg, nil
}
var TestingProductionConfig = Config{
var ExampleProductionConfig = Config{
Mode: "production",
Host: ":4000",
NpmCommand: "npm",
}
var TestingDevelopmentConfig = Config{
var ExampleDevelopmentConfig = Config{
Mode: "development",
Host: ":4000",
NpmCommand: "npm",
}