package account import ( "github.com/gin-gonic/gin" "net/http" "nos-comptes/internal/ginserver" "nos-comptes/internal/storage/dao/postgresql" "nos-comptes/internal/user" "nos-comptes/internal/utils" ) const ServiceInjectorKey = "ACCOUNT_SERVICE" func Setup(injector *utils.Injector) { pg := utils.Get[*postgresql.DatabasePostgreSQL](injector, postgresql.DatabaseKey) userService := utils.Get[*user.Service](injector, user.ServiceInjectorKey) database := NewDatabase(pg) service := NewService(database) validator := NewValidator(service) handler := NewHandler(validator, database, service, userService) securedRoute := utils.Get[*gin.RouterGroup](injector, ginserver.SecuredRouterInjectorKey) securedUserRoute := securedRoute.Group("/:userId") //account route securedUserRoute.Handle(http.MethodGet, "/accounts", handler.GetAllAccountOfUser) securedUserRoute.Handle(http.MethodPost, "/accounts", handler.CreateAccountOfUser) securedValidAccount := securedUserRoute.Group("/accounts/:accountId") securedValidAccount.Use(validator.HasValidAccountId) securedValidAccount.Use(validator.AccountExists) securedValidAccount.Handle(http.MethodDelete, "", handler.DeleteAccountOfUser) securedValidAccount.Handle(http.MethodGet, "", handler.GetSpecificAccountOfUser) injector.Set(ServiceInjectorKey, service) }