diff --git a/backend/internal/factory/interactors.go b/backend/internal/factory/interactors.go index 24c3e47..ad9bf92 100644 --- a/backend/internal/factory/interactors.go +++ b/backend/internal/factory/interactors.go @@ -5,7 +5,9 @@ import ( "github.com/emochka2007/block-accounting/internal/pkg/config" "github.com/emochka2007/block-accounting/internal/usecase/interactors/jwt" + "github.com/emochka2007/block-accounting/internal/usecase/interactors/organizations" "github.com/emochka2007/block-accounting/internal/usecase/interactors/users" + orepo "github.com/emochka2007/block-accounting/internal/usecase/repository/organizations" urepo "github.com/emochka2007/block-accounting/internal/usecase/repository/users" ) @@ -19,3 +21,10 @@ func provideUsersInteractor( func provideJWTInteractor(c config.Config, usersInteractor users.UsersInteractor) jwt.JWTInteractor { return jwt.NewWardenJWT(c.Common.JWTSecret, usersInteractor) } + +func provideOrganizationsInteractor( + log *slog.Logger, + orgRepo orepo.Repository, +) organizations.OrganizationsInteractor { + return organizations.NewOrganizationsInteractor(log, orgRepo) +} diff --git a/backend/internal/factory/interface.go b/backend/internal/factory/interface.go index ca3a593..0039e31 100644 --- a/backend/internal/factory/interface.go +++ b/backend/internal/factory/interface.go @@ -12,11 +12,13 @@ import ( "github.com/emochka2007/block-accounting/internal/pkg/config" "github.com/emochka2007/block-accounting/internal/pkg/logger" "github.com/emochka2007/block-accounting/internal/usecase/interactors/jwt" + "github.com/emochka2007/block-accounting/internal/usecase/interactors/organizations" "github.com/emochka2007/block-accounting/internal/usecase/interactors/users" ) var interfaceSet wire.ProviderSet = wire.NewSet( provideAuthController, + provideOrganizationsCOntroller, provideControllers, provideAuthPresenter, @@ -65,13 +67,25 @@ func provideAuthController( ) } +func provideOrganizationsCOntroller( + log *slog.Logger, + organizationsInteractor organizations.OrganizationsInteractor, +) controllers.OrganizationsController { + return controllers.NewOrganizationsController( + log.WithGroup("organizations-controller"), + organizationsInteractor, + ) +} + func provideControllers( log *slog.Logger, authController controllers.AuthController, + orgController controllers.OrganizationsController, ) *controllers.RootController { return &controllers.RootController{ - Ping: controllers.NewPingController(log.WithGroup("ping-controller")), - Auth: authController, + Ping: controllers.NewPingController(log.WithGroup("ping-controller")), + Auth: authController, + Organizations: orgController, } } diff --git a/backend/internal/factory/repositories.go b/backend/internal/factory/repositories.go index 1ce9bc0..62f7a94 100644 --- a/backend/internal/factory/repositories.go +++ b/backend/internal/factory/repositories.go @@ -1,18 +1,16 @@ package factory import ( - "fmt" + "database/sql" - "github.com/emochka2007/block-accounting/internal/pkg/config" - "github.com/emochka2007/block-accounting/internal/usecase/repository" + "github.com/emochka2007/block-accounting/internal/usecase/repository/organizations" "github.com/emochka2007/block-accounting/internal/usecase/repository/users" ) -func provideUsersRepository(c config.Config) (users.Repository, func(), error) { - db, close, err := repository.ProvideDatabaseConnection(c) - if err != nil { - return nil, func() {}, fmt.Errorf("error connect to database. %w", err) - } - - return users.NewRepository(db), close, nil +func provideUsersRepository(db *sql.DB) users.Repository { + return users.NewRepository(db) +} + +func provideOrganizationsRepository(db *sql.DB) organizations.Repository { + return organizations.NewRepository(db) } diff --git a/backend/internal/factory/wire.go b/backend/internal/factory/wire.go index 623b0d9..890f4f3 100644 --- a/backend/internal/factory/wire.go +++ b/backend/internal/factory/wire.go @@ -6,14 +6,18 @@ package factory import ( "github.com/emochka2007/block-accounting/internal/pkg/config" "github.com/emochka2007/block-accounting/internal/service" + "github.com/emochka2007/block-accounting/internal/usecase/repository" "github.com/google/wire" ) func ProvideService(c config.Config) (service.Service, func(), error) { wire.Build( + repository.ProvideDatabaseConnection, provideLogger, provideUsersRepository, provideUsersInteractor, + provideOrganizationsRepository, + provideOrganizationsInteractor, provideJWTInteractor, interfaceSet, provideRestServer, diff --git a/backend/internal/factory/wire_gen.go b/backend/internal/factory/wire_gen.go index c4f64d6..e199e6a 100644 --- a/backend/internal/factory/wire_gen.go +++ b/backend/internal/factory/wire_gen.go @@ -9,21 +9,26 @@ package factory import ( "github.com/emochka2007/block-accounting/internal/pkg/config" "github.com/emochka2007/block-accounting/internal/service" + "github.com/emochka2007/block-accounting/internal/usecase/repository" ) // Injectors from wire.go: func ProvideService(c config.Config) (service.Service, func(), error) { logger := provideLogger(c) - repository, cleanup, err := provideUsersRepository(c) + db, cleanup, err := repository.ProvideDatabaseConnection(c) if err != nil { return nil, nil, err } - usersInteractor := provideUsersInteractor(logger, repository) + usersRepository := provideUsersRepository(db) + usersInteractor := provideUsersInteractor(logger, usersRepository) jwtInteractor := provideJWTInteractor(c, usersInteractor) authPresenter := provideAuthPresenter(jwtInteractor) authController := provideAuthController(logger, usersInteractor, authPresenter, jwtInteractor) - rootController := provideControllers(logger, authController) + organizationsRepository := provideOrganizationsRepository(db) + organizationsInteractor := provideOrganizationsInteractor(logger, organizationsRepository) + organizationsController := provideOrganizationsCOntroller(logger, organizationsInteractor) + rootController := provideControllers(logger, authController, organizationsController) server := provideRestServer(logger, rootController, c, jwtInteractor) serviceService := service.NewService(logger, server) return serviceService, func() { diff --git a/backend/internal/interface/rest/controllers/organization.go b/backend/internal/interface/rest/controllers/organization.go index a3c086f..b0994fa 100644 --- a/backend/internal/interface/rest/controllers/organization.go +++ b/backend/internal/interface/rest/controllers/organization.go @@ -19,11 +19,25 @@ type organizationsController struct { orgInteractor organizations.OrganizationsInteractor } +func NewOrganizationsController( + log *slog.Logger, + orgInteractor organizations.OrganizationsInteractor, +) OrganizationsController { + return &organizationsController{ + log: log, + orgInteractor: orgInteractor, + } +} + func (c *organizationsController) NewOrganization(w http.ResponseWriter, r *http.Request) ([]byte, error) { _, err := presenters.CreateRequest[domain.NewOrganizationRequest](r) if err != nil { return nil, fmt.Errorf("error build request. %w", err) } + // todo call int.Create + + // todo build response + return nil, nil } diff --git a/backend/internal/interface/rest/controllers/root.go b/backend/internal/interface/rest/controllers/root.go index daf43c0..4fcfb35 100644 --- a/backend/internal/interface/rest/controllers/root.go +++ b/backend/internal/interface/rest/controllers/root.go @@ -9,11 +9,11 @@ type RootController struct { func NewRootController( ping PingController, auth AuthController, - // organizations OrganizationsController, + organizations OrganizationsController, ) *RootController { return &RootController{ - Ping: ping, - Auth: auth, - // Organizations: organizations, + Ping: ping, + Auth: auth, + Organizations: organizations, } } diff --git a/backend/internal/interface/rest/server.go b/backend/internal/interface/rest/server.go index af93b41..0a53c9b 100644 --- a/backend/internal/interface/rest/server.go +++ b/backend/internal/interface/rest/server.go @@ -101,7 +101,7 @@ func (s *Server) buildRouter() { r = r.With(s.withAuthorization) // r.Get("/", s.handle(s.controllers.Auth.Invite, "list_organizations")) - // r.Post("/", s.handle(s.controllers.Organizations.NewOrganization, "new_organization")) + r.Post("/", s.handle(s.controllers.Organizations.NewOrganization, "new_organization")) r.Route("/{organization_id}", func(r chi.Router) { // r.Put("/", s.handle(s.controllers.Organizations.NewOrganization, "update_organization"))