/
store_subscriptions.go
106 lines (89 loc) · 2.7 KB
/
store_subscriptions.go
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
package storage
import (
"github.com/jmoiron/sqlx"
"github.com/fiwippi/tanuki/internal/platform/dbutil"
"github.com/fiwippi/tanuki/pkg/manga"
)
func (s *Store) setSubscriptionWithTime(tx *sqlx.Tx, sid, title string, uuid dbutil.NullString, t dbutil.Time, ensureNewest bool) error {
sb, err := s.getSubscription(tx, sid)
// Always set if not ensure newest
a := !ensureNewest
// Set if error occurred meaning there is no previous subscription
b := ensureNewest && err != nil
// If there is a previous subscription then set if the time is newer
c := ensureNewest && err == nil && t.After(sb.MdexLastPublishedAt)
if a || b || c {
stmt := `
REPLACE INTO subscriptions
(sid, title, mangadex_uuid, mangadex_last_published_at)
Values
(?, ?, ?, ?)`
if _, err := tx.Exec(stmt, sid, title, uuid, t); err != nil {
return err
}
}
return nil
}
func (s *Store) SetSubscription(sid, title string, uuid dbutil.NullString, ensureNewest bool) error {
return s.SetSubscriptionWithTime(sid, title, uuid, dbutil.Time{}, ensureNewest)
}
func (s *Store) SetSubscriptionWithTime(sid, title string, uuid dbutil.NullString, t dbutil.Time, ensureNewest bool) error {
fn := func(tx *sqlx.Tx) error {
return s.setSubscriptionWithTime(tx, sid, title, uuid, t, ensureNewest)
}
if err := s.tx(fn); err != nil {
return err
}
return nil
}
func (s *Store) getSubscription(tx *sqlx.Tx, sid string) (manga.Subscription, error) {
var sb manga.Subscription
if err := tx.Get(&sb, `SELECT * FROM subscriptions WHERE sid = ?`, sid); err != nil {
return manga.Subscription{}, err
}
return sb, nil
}
func (s *Store) GetSubscription(sid string) (manga.Subscription, error) {
var sb manga.Subscription
fn := func(tx *sqlx.Tx) error {
var err error
sb, err = s.getSubscription(tx, sid)
return err
}
if err := s.tx(fn); err != nil {
return manga.Subscription{}, err
}
return sb, nil
}
func (s *Store) getAllSubscriptions(tx *sqlx.Tx) ([]manga.Subscription, error) {
var sb []manga.Subscription
if err := tx.Select(&sb, `SELECT * FROM subscriptions`); err != nil {
return nil, err
}
return sb, nil
}
func (s *Store) GetAllSubscriptions() ([]manga.Subscription, error) {
var sb []manga.Subscription
fn := func(tx *sqlx.Tx) error {
var err error
sb, err = s.getAllSubscriptions(tx)
return err
}
if err := s.tx(fn); err != nil {
return nil, err
}
return sb, nil
}
func (s *Store) deleteSubscription(tx *sqlx.Tx, sid string) error {
_, err := tx.Exec(`DELETE FROM subscriptions WHERE sid = ?`, sid)
return err
}
func (s *Store) DeleteSubscription(sid string) error {
fn := func(tx *sqlx.Tx) error {
return s.deleteSubscription(tx, sid)
}
if err := s.tx(fn); err != nil {
return err
}
return nil
}