@@ -13,19 +13,19 @@ import (
13
13
"github.com/volatiletech/sqlboiler/boil"
14
14
"github.com/volatiletech/sqlboiler/queries/qm"
15
15
16
- "github.com/ProgrammingLab/prolab-accounts/app/util"
17
16
"github.com/ProgrammingLab/prolab-accounts/infra/record"
18
17
"github.com/ProgrammingLab/prolab-accounts/infra/store"
19
18
"github.com/ProgrammingLab/prolab-accounts/model"
19
+ "github.com/ProgrammingLab/prolab-accounts/sqlutil"
20
20
)
21
21
22
22
type entryStoreImpl struct {
23
23
ctx context.Context
24
- db * sql .DB
24
+ db * sqlutil .DB
25
25
}
26
26
27
27
// NewEntryStore returns new entry blog store
28
- func NewEntryStore (ctx context.Context , db * sql .DB ) store.EntryStore {
28
+ func NewEntryStore (ctx context.Context , db * sqlutil .DB ) store.EntryStore {
29
29
return & entryStoreImpl {
30
30
ctx : ctx ,
31
31
db : db ,
@@ -55,82 +55,71 @@ func (s *entryStoreImpl) ListPublicEntries(before time.Time, limit int) ([]*reco
55
55
return e [:limit ], e [limit ].PublishedAt , nil
56
56
}
57
57
58
- func (s * entryStoreImpl ) CreateEntries (blog * record.Blog , feed * gofeed.Feed ) (n int64 , err error ) {
58
+ func (s * entryStoreImpl ) CreateEntries (blog * record.Blog , feed * gofeed.Feed ) (int64 , error ) {
59
59
rev := make ([]* gofeed.Item , len (feed .Items ))
60
60
for i , item := range feed .Items {
61
61
rev [len (rev )- 1 - i ] = item
62
62
}
63
63
feed .Items = rev
64
64
65
- tx , err := s .db .Begin ()
66
- if err != nil {
67
- return 0 , errors .WithStack (err )
68
- }
69
- defer func () {
70
- if e := util .ErrorFromRecover (recover ()); e != nil {
71
- _ = tx .Rollback ()
72
- err = e
65
+ var n int64
66
+ err := s .db .Watch (s .ctx , func (ctx context.Context , tx * sql.Tx ) error {
67
+ mods := []qm.QueryMod {
68
+ qm .Select (record .EntryColumns .ID , record .EntryColumns .GUID ),
69
+ qm .Where ("blog_id = ?" , blog .ID ),
73
70
}
74
- }()
75
-
76
- mods := []qm.QueryMod {
77
- qm .Select (record .EntryColumns .ID , record .EntryColumns .GUID ),
78
- qm .Where ("blog_id = ?" , blog .ID ),
79
- }
80
- entries , err := record .Entries (mods ... ).All (s .ctx , tx )
81
- if err != nil {
82
- _ = tx .Rollback ()
83
- return 0 , errors .WithStack (err )
84
- }
85
-
86
- exists := make (map [string ]struct {})
87
- for _ , e := range entries {
88
- exists [e .GUID ] = struct {}{}
89
- }
90
-
91
- n = 0
92
- for _ , item := range feed .Items {
93
- guid , err := getGUID (blog .ID , item .GUID )
71
+ entries , err := record .Entries (mods ... ).All (s .ctx , tx )
94
72
if err != nil {
95
- _ = tx .Rollback ()
96
- return 0 , err
73
+ return errors .WithStack (err )
97
74
}
98
75
99
- _ , ok := exists [ guid ]
100
- if ok {
101
- continue
76
+ exists := make ( map [ string ] struct {})
77
+ for _ , e := range entries {
78
+ exists [ e . GUID ] = struct {}{}
102
79
}
103
80
104
- e := & record.Entry {
105
- Title : item .Title ,
106
- Description : item .Description ,
107
- Content : item .Content ,
108
- Link : item .Link ,
109
- AuthorID : blog .UserID ,
110
- GUID : guid ,
111
- BlogID : blog .ID ,
112
- }
113
- if i := item .Image ; i != nil {
114
- e .ImageURL = i .URL
115
- }
116
- if t := item .PublishedParsed ; t == nil {
117
- e .PublishedAt = time .Now ().In (boil .GetLocation ())
118
- } else {
119
- e .PublishedAt = t .In (boil .GetLocation ())
81
+ n = 0
82
+ for _ , item := range feed .Items {
83
+ guid , err := getGUID (blog .ID , item .GUID )
84
+ if err != nil {
85
+ return err
86
+ }
87
+
88
+ _ , ok := exists [guid ]
89
+ if ok {
90
+ continue
91
+ }
92
+
93
+ e := & record.Entry {
94
+ Title : item .Title ,
95
+ Description : item .Description ,
96
+ Content : item .Content ,
97
+ Link : item .Link ,
98
+ AuthorID : blog .UserID ,
99
+ GUID : guid ,
100
+ BlogID : blog .ID ,
101
+ }
102
+ if i := item .Image ; i != nil {
103
+ e .ImageURL = i .URL
104
+ }
105
+ if t := item .PublishedParsed ; t == nil {
106
+ e .PublishedAt = time .Now ().In (boil .GetLocation ())
107
+ } else {
108
+ e .PublishedAt = t .In (boil .GetLocation ())
109
+ }
110
+
111
+ err = e .Insert (s .ctx , tx , boil .Infer ())
112
+ if err != nil {
113
+ return errors .WithStack (err )
114
+ }
115
+ n ++
120
116
}
121
117
122
- err = e .Insert (s .ctx , tx , boil .Infer ())
123
- if err != nil {
124
- _ = tx .Rollback ()
125
- return 0 , errors .WithStack (err )
126
- }
127
- n ++
128
- }
118
+ return nil
119
+ })
129
120
130
- err = tx .Commit ()
131
121
if err != nil {
132
- _ = tx .Rollback ()
133
- return 0 , errors .WithStack (err )
122
+ return 0 , err
134
123
}
135
124
return n , nil
136
125
}
0 commit comments