Skip to content

Commit a70ec90

Browse files
committed
fix: 243 tx to InTx for account,tab,user
1 parent 37df787 commit a70ec90

File tree

5 files changed

+45
-45
lines changed

5 files changed

+45
-45
lines changed

Diff for: modules/core/handlers/tab_handler.go

+15-16
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ package handlers
22

33
import (
44
"context"
5-
65
"github.com/iota-uz/iota-sdk/modules/core/domain/aggregates/user"
76
"github.com/iota-uz/iota-sdk/modules/core/domain/entities/tab"
7+
"github.com/iota-uz/iota-sdk/modules/core/services"
88
"github.com/iota-uz/iota-sdk/pkg/application"
9+
"github.com/iota-uz/iota-sdk/pkg/composables"
910
"github.com/iota-uz/iota-sdk/pkg/constants"
1011
"github.com/iota-uz/iota-sdk/pkg/eventbus"
1112
"github.com/iota-uz/iota-sdk/pkg/types"
@@ -14,20 +15,19 @@ import (
1415
)
1516

1617
type TabHandler struct {
17-
app application.Application
18-
tabService tab.Repository
19-
logger *logrus.Logger
18+
app application.Application
19+
service *services.TabService
20+
logger *logrus.Logger
2021
}
2122

2223
func NewTabHandler(
2324
app application.Application,
24-
tabService tab.Repository,
2525
logger *logrus.Logger,
2626
) *TabHandler {
2727
return &TabHandler{
28-
app: app,
29-
tabService: tabService,
30-
logger: logger,
28+
app: app,
29+
service: app.Service(services.TabService{}).(*services.TabService),
30+
logger: logger,
3131
}
3232
}
3333

@@ -36,7 +36,8 @@ func (h *TabHandler) Register(publisher eventbus.EventBus) {
3636
}
3737

3838
func (h *TabHandler) HandleUserCreated(event *user.CreatedEvent) {
39-
h.createUserTabs(context.Background(), event.Result)
39+
ctx := composables.WithPool(context.Background(), h.app.DB())
40+
h.createUserTabs(ctx, event.Result)
4041
}
4142

4243
func (h *TabHandler) createUserTabs(ctx context.Context, user user.User) {
@@ -48,9 +49,9 @@ func (h *TabHandler) createUserTabs(ctx context.Context, user user.User) {
4849
items := h.app.NavItems(i18n.NewLocalizer(h.app.Bundle(), string(user.UILanguage())))
4950
hrefs := h.getAccessibleNavItems(items, user)
5051

51-
tabs := make([]*tab.Tab, 0, len(hrefs))
52+
tabs := make([]*tab.CreateDTO, 0, len(hrefs))
5253
for i, href := range hrefs {
53-
tabs = append(tabs, &tab.Tab{
54+
tabs = append(tabs, &tab.CreateDTO{
5455
UserID: user.ID(),
5556
Href: href,
5657
Position: uint(i),
@@ -59,13 +60,11 @@ func (h *TabHandler) createUserTabs(ctx context.Context, user user.User) {
5960

6061
if len(tabs) > 0 {
6162
ctxWithUser := context.WithValue(ctx, constants.UserKey, user)
62-
if err := h.tabService.DeleteUserTabs(ctxWithUser, user.ID()); err != nil {
63-
h.logger.Errorf("Failed to delete existing tabs for user %d: %v", user.ID(), err)
63+
_, err := h.service.CreateManyUserTabs(ctxWithUser, user.ID(), tabs)
64+
if err != nil {
65+
h.logger.Errorf("Failed to create tabs for user %d: %v", user.ID(), err)
6466
return
6567
}
66-
if err := h.tabService.CreateMany(ctxWithUser, tabs); err != nil {
67-
h.logger.Errorf("Failed to create tab for user %d: %v", user.ID(), err)
68-
}
6968
}
7069
}
7170

Diff for: modules/core/module.go

-2
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,11 @@ func (m *Module) Register(app application.Application) error {
6464
services.NewRoleService(roleRepo, app.EventPublisher()),
6565
services.NewPermissionService(permRepo, app.EventPublisher()),
6666
services.NewTabService(persistence.NewTabRepository()),
67-
services.NewTabService(persistence.NewTabRepository()),
6867
services.NewGroupService(persistence.NewGroupRepository(userRepo, roleRepo), app.EventPublisher()),
6968
)
7069

7170
tabHandler := handlers.NewTabHandler(
7271
app,
73-
persistence.NewTabRepository(),
7472
configuration.Use().Logger(),
7573
)
7674
tabHandler.Register(app.EventPublisher())

Diff for: modules/core/presentation/controllers/account_controller.go

-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ func (c *AccountController) Register(r *mux.Router) {
5555

5656
setRouter := r.PathPrefix(c.basePath).Subrouter()
5757
setRouter.Use(commonMiddleware...)
58-
setRouter.Use(middleware.WithTransaction())
5958
setRouter.HandleFunc("", c.Update).Methods(http.MethodPost)
6059
setRouter.HandleFunc("/sidebar", c.PostSettings).Methods(http.MethodPost)
6160
}

Diff for: modules/core/services/tab_service.go

+11-5
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ package services
22

33
import (
44
"context"
5-
65
"github.com/iota-uz/iota-sdk/modules/core/domain/entities/tab"
6+
"github.com/iota-uz/iota-sdk/pkg/composables"
77
)
88

99
type TabService struct {
@@ -46,10 +46,16 @@ func (s *TabService) CreateManyUserTabs(ctx context.Context, userID uint, data [
4646
}
4747
entities = append(entities, entity)
4848
}
49-
if err := s.repo.DeleteUserTabs(ctx, userID); err != nil {
50-
return nil, err
51-
}
52-
if err := s.repo.CreateMany(ctx, entities); err != nil {
49+
err := composables.InTx(ctx, func(txCtx context.Context) error {
50+
if err := s.repo.DeleteUserTabs(txCtx, userID); err != nil {
51+
return err
52+
}
53+
if err := s.repo.CreateMany(txCtx, entities); err != nil {
54+
return err
55+
}
56+
return nil
57+
})
58+
if err != nil {
5359
return nil, err
5460
}
5561
return entities, nil

Diff for: modules/core/services/user_service.go

+19-21
Original file line numberDiff line numberDiff line change
@@ -65,41 +65,39 @@ func (s *UserService) GetPaginatedWithTotal(ctx context.Context, params *user.Fi
6565
}
6666

6767
func (s *UserService) Create(ctx context.Context, data user.User) error {
68-
if err := composables.CanUser(ctx, permissions.UserCreate); err != nil {
69-
return err
70-
}
71-
if err := s.validator.ValidateCreate(ctx, data); err != nil {
72-
return err
73-
}
74-
logger := composables.UseLogger(ctx)
75-
tx, err := composables.BeginTx(ctx)
68+
err := composables.CanUser(ctx, permissions.UserCreate)
7669
if err != nil {
7770
return err
7871
}
79-
defer func() {
80-
if err := tx.Rollback(ctx); err != nil {
81-
logger.WithError(err).Error("failed to rollback transaction")
82-
}
83-
}()
84-
createdEvent, err := user.NewCreatedEvent(ctx, data)
72+
err = s.validator.ValidateCreate(ctx, data)
8573
if err != nil {
8674
return err
8775
}
8876
data, err = data.SetPassword(data.Password())
77+
78+
var createdUser user.User
79+
err = composables.InTx(ctx, func(txCtx context.Context) error {
80+
if err != nil {
81+
return err
82+
}
83+
created, err := s.repo.Create(ctx, data)
84+
if err != nil {
85+
return err
86+
}
87+
createdUser = created
88+
return nil
89+
})
8990
if err != nil {
9091
return err
9192
}
92-
created, err := s.repo.Create(ctx, data)
93+
createdEvent, err := user.NewCreatedEvent(ctx, data)
9394
if err != nil {
9495
return err
9596
}
96-
97-
if err := tx.Commit(ctx); err != nil {
98-
return err
99-
}
100-
createdEvent.Result = created
97+
createdEvent.Result = createdUser
10198
s.publisher.Publish(createdEvent)
102-
return nil
99+
100+
return err
103101
}
104102

105103
func (s *UserService) UpdateLastAction(ctx context.Context, id uint) error {

0 commit comments

Comments
 (0)