-
Notifications
You must be signed in to change notification settings - Fork 67
/
Copy pathdao.go
130 lines (106 loc) · 3.4 KB
/
dao.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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package main
import (
"log"
"time"
)
var (
dao *Dao
)
// Dao 数据库转化层
type Dao struct{}
// Note 随想
type Note struct {
ID int `db:"id" json:"id"`
Content string `db:"content" json:"content"`
CreatedAt *time.Time `db:"created_at" json:"-"`
UpdatedAt *time.Time `db:"updated_at" json:"-"`
DeletedAt *time.Time `db:"deleted_at" json:"-"`
}
// Sharing 分享
type Sharing struct {
ID int `db:"id" json:"id"`
Content string `db:"content" json:"content"`
URL string `db:"url" json:"url"`
CreatedAt *time.Time `db:"created_at" json:"-"`
UpdatedAt *time.Time `db:"updated_at" json:"-"`
DeletedAt *time.Time `db:"deleted_at" json:"-"`
}
// GetAllSharing 获取所有分享
func (d *Dao) GetAllSharing() []Sharing {
var sharing []Sharing
if err := db.Select(&sharing, "SELECT * FROM issue ORDER BY updated_at DESC"); err != nil {
log.Printf("failed to get all issue: %s", err)
return nil
}
return sharing
}
// GetSharing 获取分享
func (d *Dao) GetSharing(limit, offset int) []Sharing {
var sharing []Sharing
if err := db.Select(&sharing, "SELECT * FROM issue WHERE content != '' ORDER BY updated_at DESC LIMIT ? OFFSET ?", limit, offset); err != nil {
log.Printf("failed to get latest %d sharing: %s", limit, err)
return nil
}
return sharing
}
// GetSharingWithLimit 获取分享
func (d *Dao) GetSharingWithLimit(limit int) []Sharing {
var sharing []Sharing
if err := db.Select(&sharing, "SELECT * FROM issue WHERE content != '' ORDER BY updated_at DESC LIMIT ?", limit); err != nil {
log.Printf("failed to get latest %d sharing: %s", limit, err)
return nil
}
return sharing
}
// GetAllNotes 获取所有随想
func (d *Dao) GetAllNotes() []Note {
var notes []Note
if err := db.Select(¬es, "SELECT * FROM note ORDER BY updated_at DESC"); err != nil {
log.Printf("failed to get all notes: %s", err)
return nil
}
return notes
}
// GetNotes 获取分享
func (d *Dao) GetNotes(limit, offset int) []Note {
var notes []Note
if err := db.Select(¬es, "SELECT * FROM note ORDER BY updated_at DESC LIMIT ? OFFSET ?", limit, offset); err != nil {
log.Printf("failed to get all notes: %s", err)
return nil
}
return notes
}
// GetLatestSharing 获取最后一条分享
func (d *Dao) GetLatestSharing() (Sharing, error) {
var sharing Sharing
err := db.Get(&sharing, "SELECT * FROM issue ORDER BY updated_at DESC LIMIT 1")
if err != nil {
log.Printf("failed to get latest sharing: %s", err)
}
return sharing, err
}
// AddSharing 增加一条分享
func (d *Dao) AddSharing(url string) error {
tx := db.MustBegin()
now := time.Now()
tx.MustExec("INSERT INTO issue(url, content, created_at, updated_at) VALUES (?, '', ?, ?)", url, now, now)
return tx.Commit()
}
// CommentLatestSharing 评论最近一条分享
func (d *Dao) CommentLatestSharing(comment string) error {
var sharing Sharing
tx := db.MustBegin()
if err := tx.Get(&sharing, "SELECT * FROM issue ORDER BY updated_at DESC LIMIT 1"); err != nil {
log.Printf("failed to get latest sharing: %s", err)
return err
}
tx.MustExec("UPDATE issue SET content=?, updated_at=? WHERE id = ?", comment, time.Now(), sharing.ID)
return tx.Commit()
}
// AddNote 增加一条随想
func (d *Dao) AddNote(content string) error {
now := time.Now()
tx := db.MustBegin()
tx.MustExec("INSERT INTO note(content, created_at, updated_at) VALUES(?, ?, ?)", content, now, now)
return tx.Commit()
}