Skip to content

Commit c44e9e9

Browse files
committed
chore(multi-tenant): Creating context definition and filters injection on domain
1 parent 285de61 commit c44e9e9

File tree

16 files changed

+169
-106
lines changed

16 files changed

+169
-106
lines changed

cmd/http/handlers/dummy.go

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package handlers
22

33
import (
4+
requestContext "go-skeleton/internal/application/context"
45
"go-skeleton/internal/application/domain/dummy"
56
"go-skeleton/internal/application/providers/filters"
67
"go-skeleton/internal/application/providers/pagination"
@@ -57,8 +58,11 @@ func (hs *DummyHandlers) HandleGetDummy(context echo.Context) error {
5758
return context.JSON(422, errors)
5859
}
5960
tenant := context.Request().Header.Get("Tenant")
61+
request := dummyGet.NewRequest(data)
62+
ctx := requestContext.NewPrepareContext(tenant)
63+
ctx.SetContext(request.Domain)
6064
s.Execute(
61-
dummyGet.NewRequest(data, tenant),
65+
request,
6266
)
6367

6468
response, err := s.GetResponse()
@@ -89,8 +93,11 @@ func (hs *DummyHandlers) HandleCreateDummy(context echo.Context) error {
8993
}
9094

9195
tenant := context.Request().Header.Get("Tenant")
96+
request := dummyCreate.NewRequest(data, hs.validator)
97+
ctx := requestContext.NewPrepareContext(tenant)
98+
ctx.SetContext(request.Domain)
9299
s.Execute(
93-
dummyCreate.NewRequest(data, hs.validator, tenant),
100+
request,
94101
)
95102

96103
response, err := s.GetResponse()
@@ -123,8 +130,11 @@ func (hs *DummyHandlers) HandleEditDummy(context echo.Context) error {
123130
}
124131

125132
tenant := context.Request().Header.Get("Tenant")
133+
request := dummyEdit.NewRequest(id, data, hs.validator)
134+
ctx := requestContext.NewPrepareContext(tenant)
135+
ctx.SetContext(request.Domain)
126136
s.Execute(
127-
dummyEdit.NewRequest(id, data, hs.validator, tenant),
137+
request,
128138
)
129139

130140
response, err := s.GetResponse()
@@ -169,8 +179,11 @@ func (hs *DummyHandlers) HandleListDummy(context echo.Context) error {
169179
f := filters.NewFilters()
170180

171181
tenant := context.Request().Header.Get("Tenant")
182+
request := dummyList.NewRequest(data, f)
183+
ctx := requestContext.NewPrepareContext(tenant)
184+
ctx.SetContext(request.Domain)
172185
s.Execute(
173-
dummyList.NewRequest(data, *f, tenant),
186+
request,
174187
)
175188

176189
response, err := s.GetResponse()
@@ -201,8 +214,11 @@ func (hs *DummyHandlers) HandleDeleteDummy(context echo.Context) error {
201214
}
202215

203216
tenant := context.Request().Header.Get("Tenant")
217+
request := dummyDelete.NewRequest(data)
218+
ctx := requestContext.NewPrepareContext(tenant)
219+
ctx.SetContext(request.Domain)
204220
s.Execute(
205-
dummyDelete.NewRequest(data, tenant),
221+
request,
206222
)
207223

208224
response, err := s.GetResponse()
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package context
2+
3+
type Data interface {
4+
SetClient(client string)
5+
}
6+
7+
type PrepareContext struct {
8+
Tenant string
9+
}
10+
11+
func NewPrepareContext(tenant string) *PrepareContext {
12+
return &PrepareContext{
13+
Tenant: tenant,
14+
}
15+
}
16+
17+
func (ctx *PrepareContext) SetContext(data Data) {
18+
data.SetClient(ctx.Tenant)
19+
}

internal/application/domain/dummy/dummy.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dummy
22

33
import (
4+
"go-skeleton/internal/application/providers/filters"
45
"go-skeleton/internal/application/providers/pagination"
56
"go-skeleton/internal/repositories/base_repository"
67
)
@@ -10,11 +11,22 @@ type Dummy struct {
1011
DummyName string `db:"name"`
1112
Email string `db:"email"`
1213
client string
14+
filters *filters.Filters
1315
}
1416

15-
func (d Dummy) SetClient(client string) Dummy {
17+
func (d *Dummy) SetClient(client string) {
1618
d.client = client
17-
return d
19+
}
20+
21+
func (d *Dummy) SetFilters(filters *filters.Filters) {
22+
d.filters = filters
23+
}
24+
25+
func (d Dummy) GetFilters() filters.Filters {
26+
if d.filters != nil {
27+
return *d.filters
28+
}
29+
return filters.Filters{}
1830
}
1931

2032
func (d Dummy) Schema() string {

internal/application/providers/pagination/pagination.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
package pagination
22

33
import (
4+
"fmt"
45
"go-skeleton/internal/application/services"
56
"go-skeleton/internal/repositories/base_repository"
67
"math"
78
"net/http"
89
)
910

1011
type IPaginationProvider[Row any] interface {
11-
PaginationHandler(row Row, page int, limit int, filters *base_repository.QueryBuilder) (*services.Error, *Pagination[Row])
12+
PaginationHandler(row Row, page int, limit int) (*services.Error, *Pagination[Row])
1213
}
1314

1415
type Pagination[Row any] struct {
@@ -18,8 +19,8 @@ type Pagination[Row any] struct {
1819
}
1920

2021
type IPaginationRepository[Row any] interface {
21-
List(domain Row, limit int, offset int, filters *base_repository.QueryBuilder) (*[]Row, error)
22-
Count(domain Row, filters *base_repository.QueryBuilder) (int64, error)
22+
List(domain Row, limit int, offset int) (*[]Row, error)
23+
Count(domain Row) (int64, error)
2324
}
2425

2526
type Provider[Row base_repository.Domain] struct {
@@ -32,11 +33,11 @@ func NewPaginationProvider[Row base_repository.Domain](repo IPaginationRepositor
3233
}
3334
}
3435

35-
func (pp *Provider[Row]) PaginationHandler(row Row, page int, limit int, filters *base_repository.QueryBuilder) (*services.Error, *Pagination[Row]) {
36+
func (pp *Provider[Row]) PaginationHandler(row Row, page int, limit int) (*services.Error, *Pagination[Row]) {
3637
listData := &[]Row{}
3738
offset := (page - 1) * limit
38-
39-
total, err := pp.repo.Count(row, filters)
39+
fmt.Println(row)
40+
total, err := pp.repo.Count(row)
4041
if err != nil {
4142
return &services.Error{
4243
Status: http.StatusInternalServerError,
@@ -54,7 +55,7 @@ func (pp *Provider[Row]) PaginationHandler(row Row, page int, limit int, filters
5455

5556
totalPages := math.Ceil(float64(total) / float64(limit))
5657
if page <= int(totalPages) {
57-
listData, err = pp.repo.List(row, limit, offset, filters)
58+
listData, err = pp.repo.List(row, limit, offset)
5859
if err != nil {
5960
return &services.Error{
6061
Status: http.StatusInternalServerError,

internal/application/services/dummy/CREATE/request.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dummy
22

33
import (
4+
"go-skeleton/internal/application/domain/dummy"
45
"go-skeleton/internal/application/services"
56
)
67

@@ -11,15 +12,16 @@ type Data struct {
1112

1213
type Request struct {
1314
Data *Data
14-
Client string
15+
Domain *dummy.Dummy
1516
validator services.Validator
1617
}
1718

18-
func NewRequest(data *Data, validator services.Validator, client string) Request {
19-
return Request{
20-
Client: client,
19+
func NewRequest(data *Data, validator services.Validator) *Request {
20+
domain := &dummy.Dummy{}
21+
return &Request{
2122
Data: data,
2223
validator: validator,
24+
Domain: domain,
2325
}
2426
}
2527

internal/application/services/dummy/CREATE/service.go

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,40 +22,36 @@ func NewService(log services.Logger, repository dummy.Repository, idCreator serv
2222
}
2323
}
2424

25-
func (s *Service) Execute(request Request) {
25+
func (s *Service) Execute(request *Request) {
2626
if err := request.Validate(); err != nil {
2727
s.BadRequest(err.Error())
2828
return
2929
}
30-
31-
s.produceResponseRule(request.Data, request.Client)
30+
s.produceResponseRule(request.Data, request.Domain)
3231
}
3332

3433
func (s *Service) GetResponse() (*Response, *services.Error) {
3534
return s.response, s.Error
3635
}
3736

38-
func (s *Service) produceResponseRule(data *Data, client string) {
39-
dummyData := dummy.Dummy{
40-
ID: s.idCreator.Create(),
41-
DummyName: data.DummyName,
42-
Email: data.Email,
43-
}
44-
dummyData = dummyData.SetClient(client)
37+
func (s *Service) produceResponseRule(data *Data, dummyData *dummy.Dummy) {
38+
dummyData.ID = s.idCreator.Create()
39+
dummyData.DummyName = data.DummyName
40+
dummyData.Email = data.Email
4541

4642
tx, txErr := s.repository.InitTX()
4743
if txErr != nil {
4844
s.InternalServerError("error on create", txErr)
4945
return
5046
}
5147

52-
err := s.repository.Create(dummyData, tx, true)
48+
err := s.repository.Create(*dummyData, tx, true)
5349
if err != nil {
5450
s.InternalServerError("error on create", err)
5551
return
5652
}
5753

5854
s.response = &Response{
59-
Data: dummyData,
55+
Data: *dummyData,
6056
}
6157
}

internal/application/services/dummy/DELETE/request.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
11
package dummy
22

3+
import "go-skeleton/internal/application/domain/dummy"
4+
35
type Data struct {
46
ID string `param:"id"`
57
}
68

79
type Request struct {
810
Data *Data
9-
Client string
11+
Domain *dummy.Dummy
1012
}
1113

12-
func NewRequest(data *Data, client string) Request {
14+
func NewRequest(data *Data) Request {
15+
domain := &dummy.Dummy{}
1316
return Request{
1417
Data: data,
15-
Client: client,
18+
Domain: domain,
1619
}
1720
}
1821

internal/application/services/dummy/DELETE/service.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,15 @@ func (s *Service) Execute(request Request) {
2525
s.BadRequest(err.Error())
2626
return
2727
}
28-
s.produceResponseRule(request.Data, request.Client)
28+
s.produceResponseRule(request.Data, request.Domain)
2929
}
3030

3131
func (s *Service) GetResponse() (*Response, *services.Error) {
3232
return s.response, s.Error
3333
}
3434

35-
func (s *Service) produceResponseRule(data *Data, client string) {
36-
dummy := dummy.Dummy{}
37-
dummy = dummy.SetClient(client)
38-
err := s.repository.Delete(dummy, "id", data.ID)
35+
func (s *Service) produceResponseRule(data *Data, domain *dummy.Dummy) {
36+
err := s.repository.Delete(*domain, "id", data.ID)
3937
if err != nil {
4038
s.InternalServerError("error on delete", err)
4139
return

internal/application/services/dummy/EDIT/request.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package dummy
22

33
import (
44
"errors"
5+
"go-skeleton/internal/application/domain/dummy"
56
"go-skeleton/internal/application/services"
67
)
78

@@ -12,17 +13,18 @@ type Data struct {
1213

1314
type Request struct {
1415
ID string
15-
Client string
1616
Data *Data
17+
Domain *dummy.Dummy
1718
validator services.Validator
1819
}
1920

20-
func NewRequest(id string, data *Data, validator services.Validator, client string) Request {
21+
func NewRequest(id string, data *Data, validator services.Validator) Request {
22+
domain := &dummy.Dummy{}
2123
return Request{
2224
Data: data,
2325
ID: id,
2426
validator: validator,
25-
Client: client,
27+
Domain: domain,
2628
}
2729
}
2830

internal/application/services/dummy/EDIT/service.go

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,19 @@ func (s *Service) Execute(request Request) {
2626
return
2727
}
2828

29-
s.produceResponseRule(request.ID, request.Client, request.Data)
29+
s.produceResponseRule(request.ID, request.Data, request.Domain)
3030
}
3131

3232
func (s *Service) GetResponse() (*Response, *services.Error) {
3333
return s.response, s.Error
3434
}
3535

36-
func (s *Service) produceResponseRule(id string, client string, data *Data) {
37-
dummyDomain := dummy.Dummy{
38-
ID: id,
39-
DummyName: data.DummyName,
40-
Email: data.Email,
41-
}
42-
dummyDomain = dummyDomain.SetClient(client)
36+
func (s *Service) produceResponseRule(id string, data *Data, domain *dummy.Dummy) {
37+
domain.ID = id
38+
domain.DummyName = data.DummyName
39+
domain.Email = data.Email
4340

44-
affected, err := s.repository.Edit(dummyDomain, "id", id)
41+
affected, err := s.repository.Edit(*domain, "id", id)
4542
if err != nil {
4643
s.InternalServerError("error on edit", err)
4744
return

0 commit comments

Comments
 (0)