segfault fix

This commit is contained in:
r8zavetr8v 2024-05-11 13:53:05 +03:00
parent 1f680142f0
commit d4430445a7
8 changed files with 64 additions and 20 deletions

View File

@ -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)
}

View File

@ -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,
}
}

View File

@ -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)
}

View File

@ -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,

View File

@ -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() {

View File

@ -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
}

View File

@ -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,
}
}

View File

@ -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"))