pg_project_module_files_repository.go
6.5 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
126
127
128
129
package repository
import (
"fmt"
"github.com/go-pg/pg/v10"
pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
"github.com/tiptok/godevp/pkg/domain"
"github.com/tiptok/godevp/pkg/infrastructure/pg/models"
)
type ProjectModuleFilesRepository struct {
transactionContext *pgTransaction.TransactionContext
}
func (repository *ProjectModuleFilesRepository) nextIdentify() (int64, error) {
return 0, nil
}
func (repository *ProjectModuleFilesRepository) Save(projectModuleFiles *domain.ProjectModuleFiles) (*domain.ProjectModuleFiles, error) {
tx := repository.transactionContext.PgTx
if projectModuleFiles.Identify() == nil {
_, err := repository.nextIdentify()
if err != nil {
return projectModuleFiles, err
}
if _, err := tx.QueryOne(
pg.Scan(&projectModuleFiles.Id, &projectModuleFiles.ProjectModuleId, &projectModuleFiles.ProjectModuleVersion, &projectModuleFiles.FileType, &projectModuleFiles.CodeBlock, &projectModuleFiles.ParentId, &projectModuleFiles.Sort, &projectModuleFiles.Remark, &projectModuleFiles.CreateTime, &projectModuleFiles.UpdateTime, &projectModuleFiles.Path, &projectModuleFiles.Tag),
"INSERT INTO project_module_filess (id, project_module_id, project_module_version, file_type, code_block, parent_id, sort, remark, create_time, update_time, path, tag) VALUES (DEFAULT, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING id, project_module_id, project_module_version, file_type, code_block, parent_id, sort, remark, create_time, update_time, path, tag",
projectModuleFiles.ProjectModuleId, projectModuleFiles.ProjectModuleVersion, projectModuleFiles.FileType, projectModuleFiles.CodeBlock, projectModuleFiles.ParentId, projectModuleFiles.Sort, projectModuleFiles.Remark, projectModuleFiles.CreateTime, projectModuleFiles.UpdateTime, projectModuleFiles.Path, projectModuleFiles.Tag); err != nil {
return projectModuleFiles, err
}
} else {
if _, err := tx.QueryOne(
pg.Scan(&projectModuleFiles.ProjectModuleId, &projectModuleFiles.ProjectModuleVersion, &projectModuleFiles.FileType, &projectModuleFiles.CodeBlock, &projectModuleFiles.ParentId, &projectModuleFiles.Sort, &projectModuleFiles.Remark, &projectModuleFiles.CreateTime, &projectModuleFiles.UpdateTime, &projectModuleFiles.Path, &projectModuleFiles.Tag),
"UPDATE project_module_filess SET project_module_id=?, project_module_version=?, file_type=?, code_block=?, parent_id=?, sort=?, remark=?, create_time=?, update_time=?, path=?, tag=? WHERE id=? RETURNING project_module_id, project_module_version, file_type, code_block, parent_id, sort, remark, create_time, update_time, path, tag",
projectModuleFiles.ProjectModuleId, projectModuleFiles.ProjectModuleVersion, projectModuleFiles.FileType, projectModuleFiles.CodeBlock, projectModuleFiles.ParentId, projectModuleFiles.Sort, projectModuleFiles.Remark, projectModuleFiles.CreateTime, projectModuleFiles.UpdateTime, projectModuleFiles.Path, projectModuleFiles.Tag, projectModuleFiles.Identify()); err != nil {
return projectModuleFiles, err
}
}
return projectModuleFiles, nil
}
func (repository *ProjectModuleFilesRepository) Remove(projectModuleFiles *domain.ProjectModuleFiles) (*domain.ProjectModuleFiles, error) {
tx := repository.transactionContext.PgTx
projectModuleFilesModel := new(models.ProjectModuleFiles)
projectModuleFilesModel.Id = projectModuleFiles.Identify().(int64)
if _, err := tx.Model(projectModuleFilesModel).WherePK().Delete(); err != nil {
return projectModuleFiles, err
}
return projectModuleFiles, nil
}
func (repository *ProjectModuleFilesRepository) FindOne(queryOptions map[string]interface{}) (*domain.ProjectModuleFiles, error) {
tx := repository.transactionContext.PgTx
projectModuleFilesModel := new(models.ProjectModuleFiles)
query := tx.Model(projectModuleFilesModel)
if projectModuleFilesId, ok := queryOptions["projectModuleFilesId"]; ok {
query = query.Where("project_module_files.id = ?", projectModuleFilesId)
}
if err := query.First(); err != nil {
if err.Error() == "pg: no rows in result set" {
return nil, fmt.Errorf("没有此资源")
} else {
return nil, err
}
}
if projectModuleFilesModel.Id == 0 {
return nil, nil
} else {
return repository.transformPgModelToDomainModel(projectModuleFilesModel)
}
}
func (repository *ProjectModuleFilesRepository) Find(queryOptions map[string]interface{}) (int64, []*domain.ProjectModuleFiles, error) {
tx := repository.transactionContext.PgTx
var projectModuleFilesModels []*models.ProjectModuleFiles
projectModuleFiless := make([]*domain.ProjectModuleFiles, 0)
query := tx.Model(&projectModuleFilesModels)
if offset, ok := queryOptions["offset"]; ok {
offset := offset.(int)
if offset > -1 {
query = query.Offset(offset)
}
} else {
query = query.Offset(0)
}
if limit, ok := queryOptions["limit"]; ok {
limit := limit.(int)
if limit > -1 {
query = query.Limit(limit)
}
} else {
query = query.Limit(20)
}
if count, err := query.Order("id DESC").SelectAndCount(); err != nil {
return 0, projectModuleFiless, err
} else {
for _, projectModuleFilesModel := range projectModuleFilesModels {
if projectModuleFiles, err := repository.transformPgModelToDomainModel(projectModuleFilesModel); err != nil {
return 0, projectModuleFiless, err
} else {
projectModuleFiless = append(projectModuleFiless, projectModuleFiles)
}
}
return int64(count), projectModuleFiless, nil
}
}
func (repository *ProjectModuleFilesRepository) transformPgModelToDomainModel(projectModuleFilesModel *models.ProjectModuleFiles) (*domain.ProjectModuleFiles, error) {
return &domain.ProjectModuleFiles{
Id: projectModuleFilesModel.Id,
ProjectModuleId: projectModuleFilesModel.ProjectModuleId,
ProjectModuleVersion: projectModuleFilesModel.ProjectModuleVersion,
FileType: projectModuleFilesModel.FileType,
CodeBlock: projectModuleFilesModel.CodeBlock,
ParentId: projectModuleFilesModel.ParentId,
Sort: projectModuleFilesModel.Sort,
Remark: projectModuleFilesModel.Remark,
CreateTime: projectModuleFilesModel.CreateTime,
UpdateTime: projectModuleFilesModel.UpdateTime,
Path: projectModuleFilesModel.Path,
Tag: projectModuleFilesModel.Tag,
}, nil
}
func NewProjectModuleFilesRepository(transactionContext *pgTransaction.TransactionContext) (*ProjectModuleFilesRepository, error) {
if transactionContext == nil {
return nil, fmt.Errorf("transactionContext参数不能为nil")
} else {
return &ProjectModuleFilesRepository{
transactionContext: transactionContext,
}, nil
}
}