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
+20 -12
View File
@@ -24,9 +24,15 @@ func init() {
func main() {
l := sl.New()
cfg := sl.InjectValue(l, config.Slot, config.TestingDevelopmentConfig)
//
// Setup the application
//
sl.InjectValue[database.Database](l, database.Slot, &database.Memory{
// Config
sl.ProvideFunc(l, config.Slot, config.Configure)
// Database
sl.Provide[database.Database](l, database.Slot, &database.Memory{
Users: []model.User{
{
Id: "e39ad8d5-a087-4cb2-8fd7-5a6ca3f6a534",
@@ -43,21 +49,23 @@ func main() {
},
})
sl.InjectLazy(l, server.Slot, server.Configure)
sl.InjectLazy(l, listautenti.Slot, listautenti.Configure)
// Server
sl.ProvideFunc(l, server.Slot, server.Configure)
sl.ProvideHook(l, server.ApiRoutesHook,
listautenti.MountApiRoutesHook,
)
srv, err := sl.Use(l, server.Slot)
if err != nil {
log.Fatal(err)
}
//
// Start the application
//
go func() {
log.Fatal(srv.Router.Listen(cfg.Host))
}()
sl.MustInvoke(l, server.Slot)
r, w := io.Pipe()
cmd := exec.Command("pnpm", "run", "dev")
cfg := sl.MustUse(l, config.Slot)
cmd := exec.Command(cfg.NpmCommand, "run", "dev")
cmd.Stdout = w
go func() {