作者 tangxvhui

更相

1 -package repository  
2 -  
3 -import (  
4 - "bytes"  
5 - "encoding/gob"  
6 - "fmt"  
7 - "github.com/go-pg/pg/v10/orm"  
8 - "github.com/linmadan/egglib-go/utils/snowflake"  
9 -)  
10 -  
11 -var (  
12 - ERR_EMPTY_TC = fmt.Errorf("transactionContext参数不能为nil")  
13 -)  
14 -  
15 -type Query struct {  
16 - *orm.Query  
17 - queryOptions map[string]interface{}  
18 - AffectRow int  
19 -}  
20 -  
21 -func NewQuery(query *orm.Query, queryOptions map[string]interface{}) *Query {  
22 - return &Query{  
23 - query,  
24 - queryOptions,  
25 - 0,  
26 - }  
27 -}  
28 -  
29 -func (query *Query) SetWhere(condition, key string) *Query {  
30 - if v, ok := query.queryOptions[key]; ok {  
31 - query.Where(condition, v)  
32 - }  
33 - return query  
34 -}  
35 -  
36 -func (query *Query) SetLimit() *Query {  
37 - if offset, ok := query.queryOptions["offset"]; ok {  
38 - offset := offset.(int)  
39 - if offset > -1 {  
40 - query.Offset(offset)  
41 - }  
42 - } else {  
43 - query.Offset(0)  
44 - }  
45 - if limit, ok := query.queryOptions["limit"]; ok {  
46 - limit := limit.(int)  
47 - if limit > -1 {  
48 - query.Limit(limit)  
49 - } else {  
50 - query.Limit(20)  
51 - }  
52 - }  
53 - return query  
54 -}  
55 -  
56 -func (query *Query) SetOrder(orderColumn string, key string) *Query {  
57 - //query.Order(condition...)  
58 - //return query  
59 - if v, ok := query.queryOptions[key]; ok {  
60 - query.Order(fmt.Sprintf("%v %v", orderColumn, v))  
61 - }  
62 - return query  
63 -}  
64 -  
65 -func (query *Query) HandleError(err error, errMsg string) error {  
66 - if err.Error() == "pg: no rows in result set" {  
67 - return fmt.Errorf(errMsg)  
68 - } else {  
69 - return err  
70 - }  
71 -}  
72 -  
73 -func NewSnowflakeId() (int64, error) {  
74 - IdWorker, err := snowflake.NewIdWorker(2)  
75 - if err != nil {  
76 - return 0, err  
77 - }  
78 - id, err := IdWorker.NextId()  
79 - return id, err  
80 -}  
81 -  
82 -//GobModelTransform 模型转换  
83 -func GobModelTransform(dst interface{}, src interface{}) error {  
84 - var data bytes.Buffer  
85 - enc := gob.NewEncoder(&data)  
86 - if err := enc.Encode(src); err != nil {  
87 - return err  
88 - }  
89 - dec := gob.NewDecoder(&data)  
90 - if err := dec.Decode(dst); err != nil {  
91 - return err  
92 - }  
93 - return nil  
94 -}