pg_company_repository.go
3.1 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 repository
import (
"time"
"github.com/go-pg/pg/v10"
pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain"
"gitlab.fjmaimaimai.com/allied-creation/performance/pkg/infrastructure/pg/models"
)
type CompanyRepository struct {
transactionContext *pgTransaction.TransactionContext
}
var _ domain.CompanyRepository = (*CompanyRepository)(nil)
func NewCompanyRepository(tx *pgTransaction.TransactionContext) *CompanyRepository {
return &CompanyRepository{
transactionContext: tx,
}
}
func (repo *CompanyRepository) Insert(u *domain.Company) (*domain.Company, error) {
companyModel := models.Company{
Id: u.Id,
Logo: u.Logo,
Name: u.Name,
Status: u.Status,
ChargeUserIds: u.ChargeUserIds,
UpdatedAt: u.UpdatedAt,
CreatedAt: u.CreatedAt,
DeletedAt: u.DeletedAt,
}
tx := repo.transactionContext.PgTx
_, err := tx.Model(&companyModel).Insert()
if err != nil {
return nil, err
}
u.Id = companyModel.Id
return u, nil
}
func (repo *CompanyRepository) Update(u *domain.Company) (*domain.Company, error) {
companyModel := models.Company{
Id: u.Id,
Logo: u.Logo,
Name: u.Name,
Status: u.Status,
ChargeUserIds: u.ChargeUserIds,
UpdatedAt: u.UpdatedAt,
CreatedAt: u.CreatedAt,
DeletedAt: u.DeletedAt,
}
tx := repo.transactionContext.PgTx
_, err := tx.Model(&companyModel).WherePK().Update()
if err != nil {
return nil, err
}
return u, nil
}
func (repo *CompanyRepository) Remove(u *domain.Company) (*domain.Company, error) {
nowTime := time.Now()
u.DeletedAt = &nowTime
_, err := repo.Update(u)
return u, err
}
func (repo *CompanyRepository) FindOne(queryOptions map[string]interface{}) (*domain.Company, error) {
tx := repo.transactionContext.PgTx
companyModel := models.Company{}
query := tx.Model(&companyModel)
if v, ok := queryOptions["id"]; ok {
query.Where("id=?", v)
}
err := query.First()
if err == pg.ErrNoRows {
return nil, ErrNoRows
}
if err != nil {
return nil, err
}
result := repo.TransformToCompanyDomain(&companyModel)
return result, nil
}
func (repo *CompanyRepository) Find(queryOptions map[string]interface{}) (int, []*domain.Company, error) {
tx := repo.transactionContext.PgTx
companyModel := []models.Company{}
query := tx.Model(&companyModel).
Limit(20)
if v, ok := queryOptions["id"]; ok {
query.Where("id=?", v)
}
if v, ok := queryOptions["limit"]; ok {
query.Limit(v.(int))
}
if v, ok := queryOptions["offset"]; ok {
query.Offset(v.(int))
}
cnt, err := query.SelectAndCount()
if err != nil {
return 0, nil, err
}
arrays := make([]*domain.Company, 0)
for i := range companyModel {
result := repo.TransformToCompanyDomain(&companyModel[i])
arrays = append(arrays, result)
}
return cnt, arrays, nil
}
func (repo *CompanyRepository) TransformToCompanyDomain(m *models.Company) *domain.Company {
return &domain.Company{
Id: m.Id,
Logo: m.Logo,
Name: m.Name,
Status: m.Status,
UpdatedAt: m.UpdatedAt,
CreatedAt: m.CreatedAt,
DeletedAt: m.DeletedAt,
}
}