package expense import ( "github.com/gin-gonic/gin" "gopkg.in/go-playground/validator.v9" "net/http" "nos-comptes/internal/account" "nos-comptes/internal/ginserver" "nos-comptes/internal/storage/dao/postgresql" "nos-comptes/internal/utils" validatorInternal "nos-comptes/internal/utils/validator" ) const ServiceInjectorKey = "EXPENSE_SERVICE" func Setup(injector *utils.Injector) { pg := utils.Get[*postgresql.DatabasePostgreSQL](injector, postgresql.DatabaseKey) validate := utils.Get[*validator.Validate](injector, validatorInternal.ValidatorInjectorKey) accountService := utils.Get[*account.Service](injector, account.ServiceInjectorKey) database := NewDatabase(pg) service := NewService(database) handler := NewHandler(validate, database, service, accountService) securedRoute := utils.Get[*gin.RouterGroup](injector, ginserver.SecuredRouterInjectorKey) securedUserRoute := securedRoute.Group("/:userId") securedValidAccount := securedUserRoute.Group("/accounts/:accountId") injector.Set(ServiceInjectorKey, service) securedValidAccount.Handle(http.MethodPost, "/expenses", handler.CreateAnExpense) securedValidAccount.Handle(http.MethodGet, "/expenses", handler.GetAllExpenses) securedExistingExpenses := securedValidAccount.Group("/expenses/:expenseId") securedExistingExpenses.Handle(http.MethodGet, "", handler.GetAnExpenses) securedExistingExpenses.Handle(http.MethodDelete, "", handler.DeleteExpense) }