/
note.go
115 lines (96 loc) · 2.37 KB
/
note.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
package main
import (
"database/sql"
"fmt"
)
//_, err = db.Exec("CREATE TABLE IF NOT EXISTS notes (id integer AUTO_INCREMENT NOT NULL PRIMARY KEY, user_id integer, title varchar(255), body text)")
// Note stores user note
type Note struct {
ID int
UserID int
Title string
Body string
}
func createNote(user *User, title string, body string) *Note {
stmt, err := db.Prepare("INSERT notes SET user_id=?, title=?, body=?")
if err != nil {
checkErr(err, "prepare create note")
} else {
defer stmt.Close()
}
res, err := stmt.Exec(user.ID, title, body)
checkErr(err, "create note")
noteID, _ := res.LastInsertId()
return findNoteByID(noteID)
}
func findNoteByID(noteID int64) *Note {
var note *Note
rows, err := db.Query("SELECT * FROM notes WHERE id=?", noteID)
if err != nil {
checkErr(err, "findNoteByID")
} else {
defer rows.Close()
}
if rows.Next() {
note = noteFromDbRows(rows)
}
return note
}
func findNotesByUser(user *User, query string) []*Note {
var err error
var rows *sql.Rows
if len(query) == 0 {
rows, err = db.Query("SELECT * FROM notes WHERE user_id=?", user.ID)
} else {
queryFmt := fmt.Sprintf("%%%s%%", query)
rows, err = db.Query(
"SELECT * FROM notes WHERE user_id=? AND (body LIKE ? OR title LIKE ?)",
user.ID,
queryFmt,
queryFmt)
}
if err != nil {
checkErr(err, "findNotesByUser")
} else {
defer rows.Close()
}
var notes []*Note
for rows.Next() {
notes = append(notes, noteFromDbRows(rows))
}
return notes
}
func noteFromDbRows(rows *sql.Rows) *Note {
note := new(Note)
rows.Scan(¬e.ID, ¬e.UserID, ¬e.Title, ¬e.Body)
return note
}
// Update a note in the database
func (n *Note) Update(title string, body string) {
n.Title = title
n.Body = body
stmt, err := db.Prepare("UPDATE notes SET title=?, body=? WHERE id=?")
if err != nil {
checkErr(err, "prepare update note")
} else {
defer stmt.Close()
}
_, err = stmt.Exec(title, body, n.ID)
checkErr(err, "exec update note")
}
// Destroy deletes a Note from the database
func (n Note) Destroy() {
stmt, err := db.Prepare("DELETE FROM notes WHERE id=?")
if err != nil {
checkErr(err, "destroy prepare")
} else {
defer stmt.Close()
}
checkErr(err, "prepare delete note")
_, err = stmt.Exec(n.ID)
checkErr(err, "exec delete note")
}
// Shares returns Shares for Note
func (n Note) Shares() []*Share {
return findSharesByNote(n)
}