-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdb.go
More file actions
131 lines (100 loc) · 2.3 KB
/
db.go
File metadata and controls
131 lines (100 loc) · 2.3 KB
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
131
package main
import (
"database/sql"
"errors"
_ "github.com/go-sql-driver/mysql"
)
type redirects struct {
Key string `json:"redirectKey"`
Value string `json:"redirectValue"`
}
const dbURL = "root:secret@tcp(db:3306)/urls"
func getUrlFromKey(redirectKey string) (string, error) {
db, err := sql.Open("mysql", dbURL)
if err != nil {
return "", err
}
defer db.Close()
rows := db.QueryRow(`select redirectURL from links where redirectKey = ?`, redirectKey)
redirectURL := ""
if err := rows.Scan(&redirectURL); err != nil {
return "", err
}
return redirectURL, nil
}
func insertIntoDB(redirectKey, redirectURL string) error {
if isInvalidKey(redirectKey) {
return errors.New("Invalid redirect key!")
}
db, err := sql.Open("mysql", dbURL)
if err != nil {
return err
}
defer db.Close()
_, err = db.Query(`insert into links (redirectKey, redirectURL) values (?, ?)`, redirectKey, redirectURL)
if err != nil {
return err
}
return nil
}
func getAllRedirects() ([]redirects, error) {
db, err := sql.Open("mysql", dbURL)
if err != nil {
return []redirects{}, err
}
defer db.Close()
rows, err := db.Query(`select redirectKey, redirectURL from links`)
if err != nil {
return []redirects{}, nil
}
var allRedirects []redirects
for rows.Next() {
tmp := redirects{}
if err := rows.Scan(&tmp.Key, &tmp.Value); err != nil {
return allRedirects, err
}
allRedirects = append(allRedirects, tmp)
}
return allRedirects, nil
}
func deleteRedirect(key string) error {
db, err := sql.Open("mysql", dbURL)
if err != nil {
return err
}
defer db.Close()
_, err = db.Exec(`delete from links where redirectKey = ?`, key)
if err != nil {
return err
}
return nil
}
func updateRedirect(redirectKey, redirectURL string) error {
db, err := sql.Open("mysql", dbURL)
if err != nil {
return err
}
defer db.Close()
_, err = db.Exec(`update links set redirectURL = ? where redirectKey = ?`, redirectURL, redirectKey)
if err != nil {
return err
}
return nil
}
func seedDB() error {
db, err := sql.Open("mysql", dbURL)
if err != nil {
return err
}
defer db.Close()
_, err = db.Exec(`
create table if not exists links (
id int primary key auto_increment,
redirectURL varchar(255),
redirectKey varchar(128) unique
)`)
if err != nil {
return err
}
return nil
}