-
Notifications
You must be signed in to change notification settings - Fork 0
/
URL_hw.go
144 lines (132 loc) · 3.79 KB
/
URL_hw.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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package main
import (
"database/sql"
"encoding/json"
"fmt"
"log"
"net/http"
_ "github.com/lib/pq"
)
type srv struct{}
type Page struct {
Articles string `json:"article"`
NextPagekey string `json:"nextPagekey"`
}
func (h srv) ServeHTTP(w http.ResponseWriter, r *http.Request) {
key := r.URL.Query().Get("some-list-key") // get URL param with key "some-list-key"
var keytoStr string
keytoStr = fmt.Sprintf("%v", key) // 將拿到的list-key轉為string
//fmt.Print(keytoStr)
k := GetHead(keytoStr) // 藉由list-key得到第一個Page key
//fmt.Println(k)
p := GetPage(k)
for p.Articles != "" { // 由GetPage一直拿到下一個Page 直到沒有下一個Page為止 並將Page寫到 Response中
//fmt.Println(p)
jsonbytes, _ := json.Marshal(p)
w.Write(jsonbytes)
if p.NextPagekey == "" {
break
}
p = GetPage(p.NextPagekey)
}
}
func GetHead(s string) string {
db, err := sql.Open("postgres", "user=postgres password=1234 dbname=test sslmode=disable") //建立DB連線
if err != nil {
panic(err)
}
defer db.Close()
var nextPagekey string
err = db.QueryRow("SELECT nextPagekey FROM head WHERE list_key=$1", s).Scan(&nextPagekey) //取得第一個pageKey
if err != nil {
log.Fatal(err)
}
//fmt.Print(nextPagekey)
return nextPagekey
}
func GetPage(p string) Page {
page := Page{}
var info []byte
db, err := sql.Open("postgres", "user=postgres password=1234 dbname=test sslmode=disable") //建立DB連線
if err != nil {
panic(err)
}
defer db.Close()
err = db.QueryRow("SELECT info FROM users WHERE pgkey=$1", p).Scan(&info)
if err != nil {
panic(err)
}
err2 := json.Unmarshal(info, &page)
if err2 != nil {
panic(err2)
}
//fmt.Print(page)
return page
}
func SetHead(lt_key string, nPgkey string) {
db, err := sql.Open("postgres", "user=postgres password=1234 dbname=test sslmode=disable") //建立DB連線
if err != nil {
panic(err)
}
defer db.Close()
//建立list-key, nextPagekey的值組
_, err = db.Exec("INSERT INTO head(list_key, nextPagekey) VALUES($1, $2)", lt_key, nPgkey)
if err != nil {
panic(err)
}
}
func SetNextkey(target string, next string) {
db, err := sql.Open("postgres", "user=postgres password=1234 dbname=test sslmode=disable") //建立DB連線
if err != nil {
panic(err)
}
defer db.Close()
//更新指定Page的nextPagekey
_, err = db.Exec(`UPDATE users SET info = jsonb_set("info", '{"nextPagekey"}', to_jsonb($1::text), true)WHERE pgkey = $2`, next, target)
if err != nil {
panic(err)
}
//fmt.Println("JSON value updated successfully.")
}
func SetArticle(target string, artic string) {
db, err := sql.Open("postgres", "user=postgres password=1234 dbname=test sslmode=disable") //建立DB連線
if err != nil {
panic(err)
}
defer db.Close()
//更新指定Page的nextPagekey
_, err = db.Exec(`UPDATE users SET info = jsonb_set("info", '{"article"}', to_jsonb($1::text), true)WHERE pgkey = $2`, artic, target)
if err != nil {
panic(err)
}
//fmt.Println("JSON value updated successfully.")
}
func SetPage(pagekey string) {
db, err := sql.Open("postgres", "user=postgres password=1234 dbname=test sslmode=disable") //建立DB連線
if err != nil {
panic(err)
}
defer db.Close()
//建立list-key, nextPagekey的值組
page := &Page{
Articles: "",
NextPagekey: "",
}
data, err := json.Marshal(page)
if err != nil {
panic(err)
}
_, err = db.Exec("INSERT INTO users(pgkey,info) VALUES($1,$2)", pagekey, data)
if err != nil {
panic(err)
}
}
func main() {
/*http.Handle("/", srv{})
fmt.Println("Listening on port 8080...")
http.ListenAndServe(":8080", nil)*/
/*SetHead("anotherkey", "ghjk")
SetNextkey("zxcv", "vvvv")*/
SetPage("deleteKey")
SetArticle("deleteKey", "Delete Page")
}