Repository navigation
Expand file tree
/
Copy pathBASE_SERVICE.go
More file actions
125 lines (107 loc) · 3.46 KB
/
Copy pathBASE_SERVICE.go
File metadata and controls
125 lines (107 loc) · 3.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package services
import (
"context"
"fmt"
"github.com/hamidgh01/Go-Blog-API/internal/application/service_errors"
d "github.com/hamidgh01/Go-Blog-API/internal/domain"
e "github.com/hamidgh01/Go-Blog-API/internal/domain/entity"
"github.com/hamidgh01/Go-Blog-API/internal/http/generics"
)
func createOrDeleteM2MRelationship[TEntity e.TM2MDBEntities](
ctx context.Context,
serviceName string,
entity *TEntity,
createOrDeleteM2MRelationshipRepo func(ctx context.Context, entity *TEntity) error,
) *service_errors.ServiceError {
if err := createOrDeleteM2MRelationshipRepo(ctx, entity); err != nil {
return service_errors.MapDBErrToServiceErr(err, serviceName)
}
return nil
}
func create[TEntity e.TDBEntities, TOutput generics.OutputTypes](
ctx context.Context,
objectName string,
entity *TEntity,
createRepository func(ctx context.Context, entity *TEntity) (*TEntity, error),
toObjectDetailsDTOFunc func(entity *TEntity) *TOutput,
) (*TOutput, *service_errors.ServiceError) {
//
createdObj, err := createRepository(ctx, entity)
if err != nil {
return nil, service_errors.MapDBErrToServiceErr(err, fmt.Sprintf("create %s", objectName))
}
//
return toObjectDetailsDTOFunc(createdObj), nil
}
func update[TEntity e.TDBEntities](
ctx context.Context,
pk uint64,
objectName string,
entity *TEntity,
updateRepository func(ctx context.Context, pk uint64, entity *TEntity) error,
) *service_errors.ServiceError {
err := updateRepository(ctx, pk, entity)
if err != nil {
return service_errors.MapDBErrToServiceErr(err, fmt.Sprintf("update %s", objectName))
}
return nil
}
func delete(
ctx context.Context,
pk uint64,
objectName string,
deleteRepository func(ctx context.Context, pk uint64) error,
) *service_errors.ServiceError {
err := deleteRepository(ctx, pk)
if err != nil {
return service_errors.MapDBErrToServiceErr(err, fmt.Sprintf("delete %s", objectName))
}
return nil
}
func getByID[TEntity e.TDBEntities, TOutput generics.OutputTypes](
ctx context.Context,
pk uint64,
objectName string,
getByIdRepository func(ctx context.Context, pk uint64) (*TEntity, error),
toObjectDetailsDTOFunc func(entity *TEntity) *TOutput,
) (*TOutput, *service_errors.ServiceError) {
entityObj, err := getByIdRepository(ctx, pk)
if err != nil {
return nil, service_errors.MapDBErrToServiceErr(
err, fmt.Sprintf("get %s by id", objectName),
)
}
return toObjectDetailsDTOFunc(entityObj), nil
}
func getOwnerID(
ctx context.Context,
pk uint64,
objectName string,
getOwnerIdRepository func(ctx context.Context, pk uint64) (uint64, error),
) (uint64, *service_errors.ServiceError) {
ownerID, err := getOwnerIdRepository(ctx, pk)
if err != nil {
return 0, service_errors.MapDBErrToServiceErr(
err, fmt.Sprintf("get %s owner id", objectName),
)
}
return ownerID, nil
}
func getListOfOuterResourceByFK[TEntity e.TDBEntities, TOutputList generics.OutputListTypes](
ctx context.Context,
fk uint64,
page *d.PaginationQueryParams,
serviceName string,
getListOfOuterResourceByFkRepo func(
ctx context.Context, fk uint64, page *d.PaginationQueryParams,
) (*d.PagedList[TEntity], error),
toObjListDtoFunc func([]*TEntity) TOutputList,
) (*generics.PagedList[TOutputList], *service_errors.ServiceError) {
pagedObjectList, err := getListOfOuterResourceByFkRepo(ctx, fk, page)
if err != nil {
return nil, service_errors.MapDBErrToServiceErr(
err, fmt.Sprintf("%s (id=%d)", serviceName, fk),
)
}
return generics.ToPagedList(pagedObjectList, toObjListDtoFunc), nil
}