From c03d4772dbf0c52923a0b9050c5f3c7d0d0c307d Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 16:24:48 +0900 Subject: [PATCH 01/31] Create Makefile for Run and Build Golang-code. --- pkg/Makefile | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 pkg/Makefile diff --git a/pkg/Makefile b/pkg/Makefile new file mode 100644 index 0000000..5f26036 --- /dev/null +++ b/pkg/Makefile @@ -0,0 +1,3 @@ +default: + go run main.go + \ No newline at end of file From dd4d34582271c2e7018203d340af59553d29c14d Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 16:25:26 +0900 Subject: [PATCH 02/31] Database module --- pkg/db/db.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 pkg/db/db.go diff --git a/pkg/db/db.go b/pkg/db/db.go new file mode 100644 index 0000000..b2282bf --- /dev/null +++ b/pkg/db/db.go @@ -0,0 +1,34 @@ +package db + +import "database/sql" + +var ( + DB *sql.DB +) + +func initDB() error { + const sql = ` + CREATE TABLE IF NOT EXISTS purchased ( + lottery_id TEXT NOT NULL, + number TEXT NOT NULL, + PRIMARY KEY(lottery_id, number) + ); + ` + if _, err := DB.Exec(sql); err != nil { + return err + } + return nil +} + +func Init() { + db, err := sql.Open("sqlite3", "database.db") + if err != nil { + panic(err) + } + + DB = db + + if err := initDB(); err != nil { + panic(err) + } +} From 8829cdd5ab2951f23267b3e64460fc9771901819 Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 16:25:57 +0900 Subject: [PATCH 03/31] Package module definition. --- pkg/go.mod | 5 +++++ pkg/go.sum | 2 ++ 2 files changed, 7 insertions(+) create mode 100644 pkg/go.mod create mode 100644 pkg/go.sum diff --git a/pkg/go.mod b/pkg/go.mod new file mode 100644 index 0000000..bc5c3a0 --- /dev/null +++ b/pkg/go.mod @@ -0,0 +1,5 @@ +module github.com/stepupgo/stepupgo2-1 + +go 1.13 + +require github.com/mattn/go-sqlite3 v1.11.0 diff --git a/pkg/go.sum b/pkg/go.sum new file mode 100644 index 0000000..fa2a70b --- /dev/null +++ b/pkg/go.sum @@ -0,0 +1,2 @@ +github.com/mattn/go-sqlite3 v1.11.0 h1:LDdKkqtYlom37fkvqs8rMPFKAMe8+SgjbwZ6ex1/A/Q= +github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= From dca7bca078a65b60dd465aa29cb95923fb50093e Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 16:26:27 +0900 Subject: [PATCH 04/31] Main program source code. --- pkg/main.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 pkg/main.go diff --git a/pkg/main.go b/pkg/main.go new file mode 100644 index 0000000..b5298c3 --- /dev/null +++ b/pkg/main.go @@ -0,0 +1,19 @@ +package main + +/* +TODO + * テストコードを足す + * main関数を分ける + * 可読性 + * テスタビリティ + * エラー処理(panicを使わない) +*/ + +import ( + _ "github.com/mattn/go-sqlite3" + "github.com/stepupgo/stepupgo2-1/server" +) + +func main() { + server.Run() +} From 86ee3de22b5ac35c116f6320478804993cd0f0cd Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 16:26:46 +0900 Subject: [PATCH 05/31] View --- pkg/view/template.go | 73 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 pkg/view/template.go diff --git a/pkg/view/template.go b/pkg/view/template.go new file mode 100644 index 0000000..bdf94e4 --- /dev/null +++ b/pkg/view/template.go @@ -0,0 +1,73 @@ +package view + +import "html/template" + +var ListTmpl = template.Must(template.New("list").Parse(` + + + + 宝くじ + + + + +`)) + +var PurchasePageTmpl = template.Must(template.New("purchase_page").Parse(` + + + + Purchase {{.Name}} + + +

{{.Name}}

+

Prizes

+
    + {{range .Prizes}} +
  • {{.Name}} ${{.Amount}}
  • + {{end}} +
+ + {{if .Remain}} +
+ + + + +
+ {{else}} + SOLD OUT + {{end}} + +`)) + +var ResultTmpl = template.Must(template.New("result").Parse(` + + + + Result of {{.Name}} + + + {{range .Prizes}} + {{$winner := index $.Winners .ID}} + {{if $winner }} +

{{.Name}} (${{.Amount}})

+
    + {{range $winner.Numbers }} +
  • {{.}}
  • + {{end}} +
+ {{else}} +

{{.Name}} (${{.Amount}})

+ No winners + {{end}} + {{end}} + +`)) From 73fd810ec6928b3b01ab8c4b8067597e16a461f9 Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 16:27:07 +0900 Subject: [PATCH 06/31] Handler --- pkg/server/handler/purchase.go | 92 ++++++++++++++++++++++++++++++++ pkg/server/handler/result.go | 96 ++++++++++++++++++++++++++++++++++ pkg/server/handler/top.go | 34 ++++++++++++ 3 files changed, 222 insertions(+) create mode 100644 pkg/server/handler/purchase.go create mode 100644 pkg/server/handler/result.go create mode 100644 pkg/server/handler/top.go diff --git a/pkg/server/handler/purchase.go b/pkg/server/handler/purchase.go new file mode 100644 index 0000000..70911a6 --- /dev/null +++ b/pkg/server/handler/purchase.go @@ -0,0 +1,92 @@ +package handler + +import ( + "encoding/json" + "fmt" + "net/http" + "strconv" + + "github.com/stepupgo/stepupgo2-1/db" + "github.com/stepupgo/stepupgo2-1/server/model" + "github.com/stepupgo/stepupgo2-1/view" +) + +func PurchasePage() http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + resp, err := http.Get("https://lottery-dot-tenntenn-samples.appspot.com/lottery?id=" + r.FormValue("id")) + if err != nil { + const status = http.StatusInternalServerError + http.Error(w, http.StatusText(status), status) + return + } + defer resp.Body.Close() + + var l model.Lottery + if err := json.NewDecoder(resp.Body).Decode(&l); err != nil { + const status = http.StatusInternalServerError + http.Error(w, http.StatusText(status), status) + return + } + + data := struct { + model.Lottery + Remain int64 + }{ + Lottery: l, + Remain: l.Num, // TODO: 残りを計算する + } + if err := view.PurchasePageTmpl.Execute(w, data); err != nil { + const status = http.StatusInternalServerError + http.Error(w, http.StatusText(status), status) + return + } + } +} + +func Purchase() http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + id := r.FormValue("id") + num, err := strconv.Atoi(r.FormValue("num")) + if err != nil { + const status = http.StatusInternalServerError + http.Error(w, http.StatusText(status), status) + return + } + // TODO: パラメタのバリデーション + + resp, err := http.Get("https://lottery-dot-tenntenn-samples.appspot.com/lottery?id=" + id) + if err != nil { + const status = http.StatusInternalServerError + http.Error(w, http.StatusText(status), status) + return + } + defer resp.Body.Close() + + var l model.Lottery + if err := json.NewDecoder(resp.Body).Decode(&l); err != nil { + const status = http.StatusInternalServerError + http.Error(w, http.StatusText(status), status) + return + } + + var count int + if err := db.DB.QueryRow("SELECT COUNT(*) FROM purchased WHERE lottery_id = ?", l.ID).Scan(&count); err != nil { + const status = http.StatusInternalServerError + http.Error(w, http.StatusText(status), status) + return + } + + for i := 1; i <= num; i++ { + const sql = "INSERT INTO purchased(lottery_id, number) values (?,?)" + format := fmt.Sprintf(`%%0%dd`, len(strconv.FormatInt(l.Num-1, 10))) + n := fmt.Sprintf(format, count+i) + if _, err := db.DB.Exec(sql, id, n); err != nil { + const status = http.StatusInternalServerError + http.Error(w, http.StatusText(status), status) + return + } + } + + http.Redirect(w, r, "/purchase_page?id="+l.ID, http.StatusFound) + } +} diff --git a/pkg/server/handler/result.go b/pkg/server/handler/result.go new file mode 100644 index 0000000..3ef3160 --- /dev/null +++ b/pkg/server/handler/result.go @@ -0,0 +1,96 @@ +package handler + +import ( + "encoding/json" + "net/http" + + "github.com/stepupgo/stepupgo2-1/db" + "github.com/stepupgo/stepupgo2-1/server/model" + "github.com/stepupgo/stepupgo2-1/view" +) + +func Result() http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + resp1, err := http.Get("https://lottery-dot-tenntenn-samples.appspot.com/result?id=" + r.FormValue("id")) + if err != nil { + const status = http.StatusInternalServerError + http.Error(w, http.StatusText(status), status) + return + } + defer resp1.Body.Close() + + var result model.Result + if err := json.NewDecoder(resp1.Body).Decode(&result); err != nil { + const status = http.StatusInternalServerError + http.Error(w, http.StatusText(status), status) + return + } + + resp2, err := http.Get("https://lottery-dot-tenntenn-samples.appspot.com/lottery?id=" + r.FormValue("id")) + if err != nil { + const status = http.StatusInternalServerError + http.Error(w, http.StatusText(status), status) + return + } + defer resp2.Body.Close() + + var l model.Lottery + if err := json.NewDecoder(resp2.Body).Decode(&l); err != nil { + const status = http.StatusInternalServerError + http.Error(w, http.StatusText(status), status) + return + } + + type winner struct { + Prize *model.Prize + Numbers []string + } + + data := struct { + model.Lottery + Winners map[string]*winner + }{ + Lottery: l, + Winners: map[string]*winner{}, + } + + rows, err := db.DB.Query("SELECT number FROM purchased WHERE lottery_id = ?", l.ID) + if err != nil { + const status = http.StatusInternalServerError + http.Error(w, http.StatusText(status), status) + return + } + for rows.Next() { + var number string + if err := rows.Scan(&number); err != nil { + const status = http.StatusInternalServerError + http.Error(w, http.StatusText(status), status) + return + } + + for i := range result.Winners { + for _, n := range result.Winners[i].Numbers { + if number == n { + prizeID := result.Winners[i].PrizeID + if data.Winners[prizeID] == nil { + for _, p := range l.Prizes { + if p.ID == prizeID { + data.Winners[prizeID] = &winner{ + Prize: p, + } + } + } + } + data.Winners[prizeID].Numbers = append(data.Winners[prizeID].Numbers, n) + } + } + } + } + + if err := view.ResultTmpl.Execute(w, data); err != nil { + const status = http.StatusInternalServerError + http.Error(w, http.StatusText(status), status) + return + } + } +} diff --git a/pkg/server/handler/top.go b/pkg/server/handler/top.go new file mode 100644 index 0000000..d7c01d3 --- /dev/null +++ b/pkg/server/handler/top.go @@ -0,0 +1,34 @@ +package handler + +import ( + "encoding/json" + "net/http" + + "github.com/stepupgo/stepupgo2-1/server/model" + "github.com/stepupgo/stepupgo2-1/view" +) + +func TopPage() http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + resp, err := http.Get("https://lottery-dot-tenntenn-samples.appspot.com/available_lotteries") + if err != nil { + const status = http.StatusInternalServerError + http.Error(w, http.StatusText(status), status) + return + } + defer resp.Body.Close() + + var lotteries []*model.Lottery + if err := json.NewDecoder(resp.Body).Decode(&lotteries); err != nil { + const status = http.StatusInternalServerError + http.Error(w, http.StatusText(status), status) + return + } + + if err := view.ListTmpl.Execute(w, lotteries); err != nil { + const status = http.StatusInternalServerError + http.Error(w, http.StatusText(status), status) + return + } + } +} From 4f8d563e91e61b8126e9983a7cbcbcccd7275cc4 Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 16:27:29 +0900 Subject: [PATCH 07/31] Model for Response body. --- pkg/server/model/types.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 pkg/server/model/types.go diff --git a/pkg/server/model/types.go b/pkg/server/model/types.go new file mode 100644 index 0000000..b307a85 --- /dev/null +++ b/pkg/server/model/types.go @@ -0,0 +1,38 @@ +package model + +import "time" + +type Lottery struct { + ID string `json:"id"` + Name string `json:"name"` + Price int64 `json:"price"` + Num int64 `json:"num"` + Prizes []*Prize `json:"prizes"` + StartAt time.Time `json:"start_at"` + DrawAt time.Time `json:"draw_at"` +} + +type Prize struct { + ID string `json:"id"` + Name string `json:"name` + Num int64 `json:"num"` + Amount int64 `json:"amount"` +} + +type Result struct { + Status DrawStatus `json:"status"` + Winners []*Winner `json:"winners"` +} + +type DrawStatus int64 + +const ( + DrawStatusNotDrawn DrawStatus = 0 + DrawStatusMidDrawn DrawStatus = 1 + DrawStatusDrawn DrawStatus = 2 +) + +type Winner struct { + PrizeID string `json:"prize_id"` + Numbers []string `json:"numbers"` +} From 75d5520de4812aabbf02b24d7f1142f9525c7c2c Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 16:27:55 +0900 Subject: [PATCH 08/31] Routing and Serve. --- pkg/server/server.go | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 pkg/server/server.go diff --git a/pkg/server/server.go b/pkg/server/server.go new file mode 100644 index 0000000..3ac20bb --- /dev/null +++ b/pkg/server/server.go @@ -0,0 +1,32 @@ +package server + +import ( + "net" + "net/http" + "os" + + "github.com/stepupgo/stepupgo2-1/db" + "github.com/stepupgo/stepupgo2-1/server/handler" +) + +func routing() { + http.HandleFunc("/", handler.TopPage()) + http.HandleFunc("/purchase_page", handler.PurchasePage()) + http.HandleFunc("/purchase", handler.Purchase()) + http.HandleFunc("/result", handler.Result()) +} + +func connection() { + port := os.Getenv("PORT") + if port == "" { + port = "8080" + } + addr := net.JoinHostPort("", port) + http.ListenAndServe(addr, nil) +} + +func Run() { + db.Init() + routing() + connection() +} From 11f752ee80e53c72a655105c3f2d64cac7ab57da Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 16:50:59 +0900 Subject: [PATCH 09/31] Remove or Move to other directory. --- go.mod | 5 -- go.sum | 2 - main.go | 238 ---------------------------------------------------- template.go | 73 ---------------- types.go | 38 --------- 5 files changed, 356 deletions(-) delete mode 100644 go.mod delete mode 100644 go.sum delete mode 100644 main.go delete mode 100644 template.go delete mode 100644 types.go diff --git a/go.mod b/go.mod deleted file mode 100644 index bc5c3a0..0000000 --- a/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/stepupgo/stepupgo2-1 - -go 1.13 - -require github.com/mattn/go-sqlite3 v1.11.0 diff --git a/go.sum b/go.sum deleted file mode 100644 index fa2a70b..0000000 --- a/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -github.com/mattn/go-sqlite3 v1.11.0 h1:LDdKkqtYlom37fkvqs8rMPFKAMe8+SgjbwZ6ex1/A/Q= -github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= diff --git a/main.go b/main.go deleted file mode 100644 index 34194b1..0000000 --- a/main.go +++ /dev/null @@ -1,238 +0,0 @@ -package main - -/* -TODO - * テストコードを足す - * main関数を分ける - * 可読性 - * テスタビリティ - * エラー処理(panicを使わない) -*/ - -import ( - "database/sql" - "encoding/json" - "fmt" - "net" - "net/http" - "os" - "strconv" - - _ "github.com/mattn/go-sqlite3" -) - -func main() { - - db, err := sql.Open("sqlite3", "database.db") - if err != nil { - panic(err) - } - - if err := initDB(db); err != nil { - panic(err) - } - - http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - resp, err := http.Get("https://lottery-dot-tenntenn-samples.appspot.com/available_lotteries") - if err != nil { - const status = http.StatusInternalServerError - http.Error(w, http.StatusText(status), status) - return - } - defer resp.Body.Close() - - var lotteries []*Lottery - if err := json.NewDecoder(resp.Body).Decode(&lotteries); err != nil { - const status = http.StatusInternalServerError - http.Error(w, http.StatusText(status), status) - return - } - - if err := listTmpl.Execute(w, lotteries); err != nil { - const status = http.StatusInternalServerError - http.Error(w, http.StatusText(status), status) - return - } - }) - - http.HandleFunc("/purchase_page", func(w http.ResponseWriter, r *http.Request) { - resp, err := http.Get("https://lottery-dot-tenntenn-samples.appspot.com/lottery?id=" + r.FormValue("id")) - if err != nil { - const status = http.StatusInternalServerError - http.Error(w, http.StatusText(status), status) - return - } - defer resp.Body.Close() - - var l Lottery - if err := json.NewDecoder(resp.Body).Decode(&l); err != nil { - const status = http.StatusInternalServerError - http.Error(w, http.StatusText(status), status) - return - } - - data := struct { - Lottery - Remain int64 - }{ - Lottery: l, - Remain: l.Num, // TODO: 残りを計算する - } - if err := purchasePageTmpl.Execute(w, data); err != nil { - const status = http.StatusInternalServerError - http.Error(w, http.StatusText(status), status) - return - } - }) - - http.HandleFunc("/purchase", func(w http.ResponseWriter, r *http.Request) { - id := r.FormValue("id") - num, err := strconv.Atoi(r.FormValue("num")) - if err != nil { - const status = http.StatusInternalServerError - http.Error(w, http.StatusText(status), status) - return - } - // TODO: パラメタのバリデーション - - resp, err := http.Get("https://lottery-dot-tenntenn-samples.appspot.com/lottery?id=" + id) - if err != nil { - const status = http.StatusInternalServerError - http.Error(w, http.StatusText(status), status) - return - } - defer resp.Body.Close() - - var l Lottery - if err := json.NewDecoder(resp.Body).Decode(&l); err != nil { - const status = http.StatusInternalServerError - http.Error(w, http.StatusText(status), status) - return - } - - var count int - if err := db.QueryRow("SELECT COUNT(*) FROM purchased WHERE lottery_id = ?", l.ID).Scan(&count); err != nil { - const status = http.StatusInternalServerError - http.Error(w, http.StatusText(status), status) - return - } - - for i := 1; i <= num; i++ { - const sql = "INSERT INTO purchased(lottery_id, number) values (?,?)" - format := fmt.Sprintf(`%%0%dd`, len(strconv.FormatInt(l.Num-1, 10))) - n := fmt.Sprintf(format, count+i) - if _, err := db.Exec(sql, id, n); err != nil { - const status = http.StatusInternalServerError - http.Error(w, http.StatusText(status), status) - return - } - } - - http.Redirect(w, r, "/purchase_page?id="+l.ID, http.StatusFound) - }) - - http.HandleFunc("/result", func(w http.ResponseWriter, r *http.Request) { - resp1, err := http.Get("https://lottery-dot-tenntenn-samples.appspot.com/result?id=" + r.FormValue("id")) - if err != nil { - const status = http.StatusInternalServerError - http.Error(w, http.StatusText(status), status) - return - } - defer resp1.Body.Close() - - var result Result - if err := json.NewDecoder(resp1.Body).Decode(&result); err != nil { - const status = http.StatusInternalServerError - http.Error(w, http.StatusText(status), status) - return - } - - resp2, err := http.Get("https://lottery-dot-tenntenn-samples.appspot.com/lottery?id=" + r.FormValue("id")) - if err != nil { - const status = http.StatusInternalServerError - http.Error(w, http.StatusText(status), status) - return - } - defer resp2.Body.Close() - - var l Lottery - if err := json.NewDecoder(resp2.Body).Decode(&l); err != nil { - const status = http.StatusInternalServerError - http.Error(w, http.StatusText(status), status) - return - } - - type winner struct { - Prize *Prize - Numbers []string - } - - data := struct { - Lottery - Winners map[string]*winner - }{ - Lottery: l, - Winners: map[string]*winner{}, - } - - rows, err := db.Query("SELECT number FROM purchased WHERE lottery_id = ?", l.ID) - if err != nil { - const status = http.StatusInternalServerError - http.Error(w, http.StatusText(status), status) - return - } - for rows.Next() { - var number string - if err := rows.Scan(&number); err != nil { - const status = http.StatusInternalServerError - http.Error(w, http.StatusText(status), status) - return - } - - for i := range result.Winners { - for _, n := range result.Winners[i].Numbers { - if number == n { - prizeID := result.Winners[i].PrizeID - if data.Winners[prizeID] == nil { - for _, p := range l.Prizes { - if p.ID == prizeID { - data.Winners[prizeID] = &winner{ - Prize: p, - } - } - } - } - data.Winners[prizeID].Numbers = append(data.Winners[prizeID].Numbers, n) - } - } - } - } - - if err := resultTmpl.Execute(w, data); err != nil { - const status = http.StatusInternalServerError - http.Error(w, http.StatusText(status), status) - return - } - }) - - port := os.Getenv("PORT") - if port == "" { - port = "8080" - } - addr := net.JoinHostPort("", port) - http.ListenAndServe(addr, nil) -} - -func initDB(db *sql.DB) error { - const sql = ` -CREATE TABLE IF NOT EXISTS purchased ( - lottery_id TEXT NOT NULL, - number TEXT NOT NULL, - PRIMARY KEY(lottery_id, number) -); -` - if _, err := db.Exec(sql); err != nil { - return err - } - return nil -} diff --git a/template.go b/template.go deleted file mode 100644 index e654236..0000000 --- a/template.go +++ /dev/null @@ -1,73 +0,0 @@ -package main - -import "html/template" - -var listTmpl = template.Must(template.New("list").Parse(` - - - - 宝くじ - - - - -`)) - -var purchasePageTmpl = template.Must(template.New("purchase_page").Parse(` - - - - Purchase {{.Name}} - - -

{{.Name}}

-

Prizes

-
    - {{range .Prizes}} -
  • {{.Name}} ${{.Amount}}
  • - {{end}} -
- - {{if .Remain}} -
- - - - -
- {{else}} - SOLD OUT - {{end}} - -`)) - -var resultTmpl = template.Must(template.New("result").Parse(` - - - - Result of {{.Name}} - - - {{range .Prizes}} - {{$winner := index $.Winners .ID}} - {{if $winner }} -

{{.Name}} (${{.Amount}})

-
    - {{range $winner.Numbers }} -
  • {{.}}
  • - {{end}} -
- {{else}} -

{{.Name}} (${{.Amount}})

- No winners - {{end}} - {{end}} - -`)) diff --git a/types.go b/types.go deleted file mode 100644 index 0f88802..0000000 --- a/types.go +++ /dev/null @@ -1,38 +0,0 @@ -package main - -import "time" - -type Lottery struct { - ID string `json:"id"` - Name string `json:"name"` - Price int64 `json:"price"` - Num int64 `json:"num"` - Prizes []*Prize `json:"prizes"` - StartAt time.Time `json:"start_at"` - DrawAt time.Time `json:"draw_at"` -} - -type Prize struct { - ID string `json:"id"` - Name string `json:"name` - Num int64 `json:"num"` - Amount int64 `json:"amount"` -} - -type Result struct { - Status DrawStatus `json:"status"` - Winners []*Winner `json:"winners"` -} - -type DrawStatus int64 - -const ( - DrawStatusNotDrawn DrawStatus = 0 - DrawStatusMidDrawn DrawStatus = 1 - DrawStatusDrawn DrawStatus = 2 -) - -type Winner struct { - PrizeID string `json:"prize_id"` - Numbers []string `json:"numbers"` -} From 5e163af88020855b7cfdaeded574fa1148f91f3e Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 16:52:24 +0900 Subject: [PATCH 10/31] Separate SQL Query. --- pkg/db/db.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pkg/db/db.go b/pkg/db/db.go index b2282bf..6596df3 100644 --- a/pkg/db/db.go +++ b/pkg/db/db.go @@ -6,7 +6,7 @@ var ( DB *sql.DB ) -func initDB() error { +func createTableSQL() string { const sql = ` CREATE TABLE IF NOT EXISTS purchased ( lottery_id TEXT NOT NULL, @@ -14,6 +14,12 @@ func initDB() error { PRIMARY KEY(lottery_id, number) ); ` + + return sql +} + +func initDB() error { + sql := createTableSQL() if _, err := DB.Exec(sql); err != nil { return err } From 7eae6ee9cb5292d74df802860833655ddf39069b Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 16:53:39 +0900 Subject: [PATCH 11/31] Separate in detail. --- pkg/server/model/types.go | 37 ------------------------------------- 1 file changed, 37 deletions(-) diff --git a/pkg/server/model/types.go b/pkg/server/model/types.go index b307a85..8b53790 100644 --- a/pkg/server/model/types.go +++ b/pkg/server/model/types.go @@ -1,38 +1 @@ package model - -import "time" - -type Lottery struct { - ID string `json:"id"` - Name string `json:"name"` - Price int64 `json:"price"` - Num int64 `json:"num"` - Prizes []*Prize `json:"prizes"` - StartAt time.Time `json:"start_at"` - DrawAt time.Time `json:"draw_at"` -} - -type Prize struct { - ID string `json:"id"` - Name string `json:"name` - Num int64 `json:"num"` - Amount int64 `json:"amount"` -} - -type Result struct { - Status DrawStatus `json:"status"` - Winners []*Winner `json:"winners"` -} - -type DrawStatus int64 - -const ( - DrawStatusNotDrawn DrawStatus = 0 - DrawStatusMidDrawn DrawStatus = 1 - DrawStatusDrawn DrawStatus = 2 -) - -type Winner struct { - PrizeID string `json:"prize_id"` - Numbers []string `json:"numbers"` -} From 153e2ce56242fd919668b7b624314c59834ce79f Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 16:54:18 +0900 Subject: [PATCH 12/31] Add Initialization. --- pkg/server/server.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/server/server.go b/pkg/server/server.go index 3ac20bb..5f5b364 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -6,6 +6,7 @@ import ( "os" "github.com/stepupgo/stepupgo2-1/db" + "github.com/stepupgo/stepupgo2-1/di" "github.com/stepupgo/stepupgo2-1/server/handler" ) @@ -27,6 +28,7 @@ func connection() { func Run() { db.Init() + di.Init() routing() connection() } From 1fffa22f31a15c066e2125e91609e449d9bf4ead Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 16:54:39 +0900 Subject: [PATCH 13/31] Separate in detail. --- pkg/view/template.go | 72 -------------------------------------------- 1 file changed, 72 deletions(-) diff --git a/pkg/view/template.go b/pkg/view/template.go index bdf94e4..ef1189a 100644 --- a/pkg/view/template.go +++ b/pkg/view/template.go @@ -1,73 +1 @@ package view - -import "html/template" - -var ListTmpl = template.Must(template.New("list").Parse(` - - - - 宝くじ - - - - -`)) - -var PurchasePageTmpl = template.Must(template.New("purchase_page").Parse(` - - - - Purchase {{.Name}} - - -

{{.Name}}

-

Prizes

-
    - {{range .Prizes}} -
  • {{.Name}} ${{.Amount}}
  • - {{end}} -
- - {{if .Remain}} -
- - - - -
- {{else}} - SOLD OUT - {{end}} - -`)) - -var ResultTmpl = template.Must(template.New("result").Parse(` - - - - Result of {{.Name}} - - - {{range .Prizes}} - {{$winner := index $.Winners .ID}} - {{if $winner }} -

{{.Name}} (${{.Amount}})

-
    - {{range $winner.Numbers }} -
  • {{.}}
  • - {{end}} -
- {{else}} -

{{.Name}} (${{.Amount}})

- No winners - {{end}} - {{end}} - -`)) From ae3033ca3215b9943d42686c961d57a9a4c1c568 Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 16:55:07 +0900 Subject: [PATCH 14/31] Dipendency Injection. --- pkg/di/di.go | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 pkg/di/di.go diff --git a/pkg/di/di.go b/pkg/di/di.go new file mode 100644 index 0000000..2fb952d --- /dev/null +++ b/pkg/di/di.go @@ -0,0 +1,3 @@ +package di + +func Init() {} From 2e9017bf8e04a41083ef3ff8a7832b82c3657fc3 Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 16:56:31 +0900 Subject: [PATCH 15/31] Git Ignore. --- pkg/.gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 pkg/.gitignore diff --git a/pkg/.gitignore b/pkg/.gitignore new file mode 100644 index 0000000..dbf4200 --- /dev/null +++ b/pkg/.gitignore @@ -0,0 +1 @@ +database.db From e9c9633b588b2e371efe8c13d4ade0cab3e0106a Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 16:56:57 +0900 Subject: [PATCH 16/31] Separate in detail. --- pkg/server/model/definition.go | 9 +++++++++ pkg/server/model/lottery.go | 13 +++++++++++++ pkg/server/model/prize.go | 8 ++++++++ pkg/server/model/result.go | 6 ++++++ pkg/server/model/winner.go | 6 ++++++ 5 files changed, 42 insertions(+) create mode 100644 pkg/server/model/definition.go create mode 100644 pkg/server/model/lottery.go create mode 100644 pkg/server/model/prize.go create mode 100644 pkg/server/model/result.go create mode 100644 pkg/server/model/winner.go diff --git a/pkg/server/model/definition.go b/pkg/server/model/definition.go new file mode 100644 index 0000000..68c24ab --- /dev/null +++ b/pkg/server/model/definition.go @@ -0,0 +1,9 @@ +package model + +type DrawStatus int64 + +const ( + DrawStatusNotDrawn DrawStatus = 0 + DrawStatusMidDrawn DrawStatus = 1 + DrawStatusDrawn DrawStatus = 2 +) diff --git a/pkg/server/model/lottery.go b/pkg/server/model/lottery.go new file mode 100644 index 0000000..373e0e1 --- /dev/null +++ b/pkg/server/model/lottery.go @@ -0,0 +1,13 @@ +package model + +import "time" + +type Lottery struct { + ID string `json:"id"` + Name string `json:"name"` + Price int64 `json:"price"` + Num int64 `json:"num"` + Prizes []*Prize `json:"prizes"` + StartAt time.Time `json:"start_at"` + DrawAt time.Time `json:"draw_at"` +} diff --git a/pkg/server/model/prize.go b/pkg/server/model/prize.go new file mode 100644 index 0000000..b2a038b --- /dev/null +++ b/pkg/server/model/prize.go @@ -0,0 +1,8 @@ +package model + +type Prize struct { + ID string `json:"id"` + Name string `json:"name` + Num int64 `json:"num"` + Amount int64 `json:"amount"` +} diff --git a/pkg/server/model/result.go b/pkg/server/model/result.go new file mode 100644 index 0000000..12f84ac --- /dev/null +++ b/pkg/server/model/result.go @@ -0,0 +1,6 @@ +package model + +type Result struct { + Status DrawStatus `json:"status"` + Winners []*Winner `json:"winners"` +} diff --git a/pkg/server/model/winner.go b/pkg/server/model/winner.go new file mode 100644 index 0000000..4a73431 --- /dev/null +++ b/pkg/server/model/winner.go @@ -0,0 +1,6 @@ +package model + +type Winner struct { + PrizeID string `json:"prize_id"` + Numbers []string `json:"numbers"` +} From 685c45adf0af406b0931c2e14ca26ba65d9bdd80 Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 16:57:08 +0900 Subject: [PATCH 17/31] Separate in detail. --- pkg/view/list.go | 25 +++++++++++++++++++++++++ pkg/view/purchase.go | 35 +++++++++++++++++++++++++++++++++++ pkg/view/result.go | 31 +++++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 pkg/view/list.go create mode 100644 pkg/view/purchase.go create mode 100644 pkg/view/result.go diff --git a/pkg/view/list.go b/pkg/view/list.go new file mode 100644 index 0000000..5761a10 --- /dev/null +++ b/pkg/view/list.go @@ -0,0 +1,25 @@ +package view + +import "html/template" + +var ListTmpl = template.Must(template.New("list").Parse( + ` + + + + + 宝くじ + + + + + + `), +) diff --git a/pkg/view/purchase.go b/pkg/view/purchase.go new file mode 100644 index 0000000..fce2663 --- /dev/null +++ b/pkg/view/purchase.go @@ -0,0 +1,35 @@ +package view + +import "html/template" + +var PurchasePageTmpl = template.Must(template.New("purchase_page").Parse( + ` + + + + + Purchase {{.Name}} + + +

{{.Name}}

+

Prizes

+
    + {{range .Prizes}} +
  • {{.Name}} ${{.Amount}}
  • + {{end}} +
+ + {{if .Remain}} +
+ + + + +
+ {{else}} + SOLD OUT + {{end}} + + + `), +) diff --git a/pkg/view/result.go b/pkg/view/result.go new file mode 100644 index 0000000..b714183 --- /dev/null +++ b/pkg/view/result.go @@ -0,0 +1,31 @@ +package view + +import "html/template" + +var ResultTmpl = template.Must(template.New("result").Parse( + ` + + + + + Result of {{.Name}} + + + {{range .Prizes}} + {{$winner := index $.Winners .ID}} + {{if $winner }} +

{{.Name}} (${{.Amount}})

+
    + {{range $winner.Numbers }} +
  • {{.}}
  • + {{end}} +
+ {{else}} +

{{.Name}} (${{.Amount}})

+ No winners + {{end}} + {{end}} + + + `), +) From 8660a632969756ee3e37399fea4e5d8790acf8cc Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 17:02:14 +0900 Subject: [PATCH 18/31] Makefile --- Makefile | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5f26036 --- /dev/null +++ b/Makefile @@ -0,0 +1,3 @@ +default: + go run main.go + \ No newline at end of file From a0013d47de7d2137f62c9ddc5276f570782f6b8f Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 17:02:35 +0900 Subject: [PATCH 19/31] .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dbf4200 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +database.db From dcda074453620e6e43788f98f2ebbaa10474e247 Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 17:03:16 +0900 Subject: [PATCH 20/31] Package module definition. --- go.mod | 5 +++++ go.sum | 2 ++ 2 files changed, 7 insertions(+) create mode 100644 go.mod create mode 100644 go.sum diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..bc5c3a0 --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module github.com/stepupgo/stepupgo2-1 + +go 1.13 + +require github.com/mattn/go-sqlite3 v1.11.0 diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..fa2a70b --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +github.com/mattn/go-sqlite3 v1.11.0 h1:LDdKkqtYlom37fkvqs8rMPFKAMe8+SgjbwZ6ex1/A/Q= +github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= From 77dc4ab19a8449aee52f53625775429e5b6d46c8 Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 17:03:31 +0900 Subject: [PATCH 21/31] Main source code. --- main.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 main.go diff --git a/main.go b/main.go new file mode 100644 index 0000000..36b417f --- /dev/null +++ b/main.go @@ -0,0 +1,19 @@ +package main + +/* +TODO + * テストコードを足す + * main関数を分ける + * 可読性 + * テスタビリティ + * エラー処理(panicを使わない) +*/ + +import ( + _ "github.com/mattn/go-sqlite3" + "github.com/stepupgo/stepupgo2-1/pkg/server" +) + +func main() { + server.Run() +} From 9a0b62ad98a56a9ea36eb726c26f45ad2f8f4f12 Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 17:04:20 +0900 Subject: [PATCH 22/31] Add detail for application structure. --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 7ec9f3e..efff7d6 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,13 @@ # Step up Go for students 2-1 see: http://bit.ly/devlopwithgo + +## Structure +├── pkg: +│ ├── application: サービスロジック +│ ├── di: 依存性の注入 +│ ├── infra: 外部との通信(API) +│ └── server +│ ├── handler: ハンドラ +│ └── server.go: ルーティング +└── main.go: From b3f35306d91c8d4627ea672a4f774385937ee459 Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 17:05:00 +0900 Subject: [PATCH 23/31] Move to other derectory. --- pkg/.gitignore | 1 - pkg/Makefile | 3 --- pkg/go.mod | 5 ----- pkg/go.sum | 2 -- pkg/main.go | 19 ------------------- 5 files changed, 30 deletions(-) delete mode 100644 pkg/.gitignore delete mode 100644 pkg/Makefile delete mode 100644 pkg/go.mod delete mode 100644 pkg/go.sum delete mode 100644 pkg/main.go diff --git a/pkg/.gitignore b/pkg/.gitignore deleted file mode 100644 index dbf4200..0000000 --- a/pkg/.gitignore +++ /dev/null @@ -1 +0,0 @@ -database.db diff --git a/pkg/Makefile b/pkg/Makefile deleted file mode 100644 index 5f26036..0000000 --- a/pkg/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -default: - go run main.go - \ No newline at end of file diff --git a/pkg/go.mod b/pkg/go.mod deleted file mode 100644 index bc5c3a0..0000000 --- a/pkg/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/stepupgo/stepupgo2-1 - -go 1.13 - -require github.com/mattn/go-sqlite3 v1.11.0 diff --git a/pkg/go.sum b/pkg/go.sum deleted file mode 100644 index fa2a70b..0000000 --- a/pkg/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -github.com/mattn/go-sqlite3 v1.11.0 h1:LDdKkqtYlom37fkvqs8rMPFKAMe8+SgjbwZ6ex1/A/Q= -github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= diff --git a/pkg/main.go b/pkg/main.go deleted file mode 100644 index b5298c3..0000000 --- a/pkg/main.go +++ /dev/null @@ -1,19 +0,0 @@ -package main - -/* -TODO - * テストコードを足す - * main関数を分ける - * 可読性 - * テスタビリティ - * エラー処理(panicを使わない) -*/ - -import ( - _ "github.com/mattn/go-sqlite3" - "github.com/stepupgo/stepupgo2-1/server" -) - -func main() { - server.Run() -} From 556f848a96a6c11d5deb31381b307ce3a03d5dda Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 17:05:26 +0900 Subject: [PATCH 24/31] Change import path. --- pkg/server/handler/purchase.go | 6 +++--- pkg/server/handler/result.go | 6 +++--- pkg/server/handler/top.go | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pkg/server/handler/purchase.go b/pkg/server/handler/purchase.go index 70911a6..e7004e8 100644 --- a/pkg/server/handler/purchase.go +++ b/pkg/server/handler/purchase.go @@ -6,9 +6,9 @@ import ( "net/http" "strconv" - "github.com/stepupgo/stepupgo2-1/db" - "github.com/stepupgo/stepupgo2-1/server/model" - "github.com/stepupgo/stepupgo2-1/view" + "github.com/stepupgo/stepupgo2-1/pkg/db" + "github.com/stepupgo/stepupgo2-1/pkg/server/model" + "github.com/stepupgo/stepupgo2-1/pkg/view" ) func PurchasePage() http.HandlerFunc { diff --git a/pkg/server/handler/result.go b/pkg/server/handler/result.go index 3ef3160..69b13b8 100644 --- a/pkg/server/handler/result.go +++ b/pkg/server/handler/result.go @@ -4,9 +4,9 @@ import ( "encoding/json" "net/http" - "github.com/stepupgo/stepupgo2-1/db" - "github.com/stepupgo/stepupgo2-1/server/model" - "github.com/stepupgo/stepupgo2-1/view" + "github.com/stepupgo/stepupgo2-1/pkg/db" + "github.com/stepupgo/stepupgo2-1/pkg/server/model" + "github.com/stepupgo/stepupgo2-1/pkg/view" ) func Result() http.HandlerFunc { diff --git a/pkg/server/handler/top.go b/pkg/server/handler/top.go index d7c01d3..f753cf6 100644 --- a/pkg/server/handler/top.go +++ b/pkg/server/handler/top.go @@ -4,8 +4,8 @@ import ( "encoding/json" "net/http" - "github.com/stepupgo/stepupgo2-1/server/model" - "github.com/stepupgo/stepupgo2-1/view" + "github.com/stepupgo/stepupgo2-1/pkg/server/model" + "github.com/stepupgo/stepupgo2-1/pkg/view" ) func TopPage() http.HandlerFunc { From 0e432f74a21b307f436ec2d8311fd4cd83c940c7 Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 17:05:34 +0900 Subject: [PATCH 25/31] Change import path. --- pkg/server/server.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/server/server.go b/pkg/server/server.go index 5f5b364..d30aa99 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -5,9 +5,9 @@ import ( "net/http" "os" - "github.com/stepupgo/stepupgo2-1/db" - "github.com/stepupgo/stepupgo2-1/di" - "github.com/stepupgo/stepupgo2-1/server/handler" + "github.com/stepupgo/stepupgo2-1/pkg/db" + "github.com/stepupgo/stepupgo2-1/pkg/di" + "github.com/stepupgo/stepupgo2-1/pkg/server/handler" ) func routing() { From 4cade3febf28cc392dc07914ba731eaec84509b6 Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 17:07:06 +0900 Subject: [PATCH 26/31] README --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index efff7d6..bc00e05 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ see: http://bit.ly/devlopwithgo ## Structure +``` ├── pkg: │ ├── application: サービスロジック │ ├── di: 依存性の注入 @@ -11,3 +12,4 @@ see: http://bit.ly/devlopwithgo │ ├── handler: ハンドラ │ └── server.go: ルーティング └── main.go: +``` From 6535c7e921c641a16b5895715c65e5cd23f014b5 Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 18:10:43 +0900 Subject: [PATCH 27/31] Infra Structure. --- pkg/infra/api/top.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 pkg/infra/api/top.go diff --git a/pkg/infra/api/top.go b/pkg/infra/api/top.go new file mode 100644 index 0000000..06d69d4 --- /dev/null +++ b/pkg/infra/api/top.go @@ -0,0 +1,18 @@ +package api + +import "net/http" + +type top struct{} + +type ITop interface { + GetAvailableLotteries() (*http.Response, error) +} + +func NewITop() ITop { + return &top{} +} + +func (t *top) GetAvailableLotteries() (*http.Response, error) { + resp, err := http.Get("https://lottery-dot-tenntenn-samples.appspot.com/available_lotteries") + return resp, err +} From 16bb4a13a3a591f0896c7173fbadb76a7f9178dd Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 18:11:06 +0900 Subject: [PATCH 28/31] Buisines Logic. --- pkg/application/top.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 pkg/application/top.go diff --git a/pkg/application/top.go b/pkg/application/top.go new file mode 100644 index 0000000..daf489c --- /dev/null +++ b/pkg/application/top.go @@ -0,0 +1,24 @@ +package application + +import ( + "net/http" + + "github.com/stepupgo/stepupgo2-1/pkg/infra/api" +) + +type top struct { + api api.ITop +} + +type ATop interface { + GetAvailable() (*http.Response, error) +} + +func NewTopApp(t api.ITop) ATop { + return &top{t} +} + +func (t *top) GetAvailable() (*http.Response, error) { + resp, err := t.api.GetAvailableLotteries() + return resp, err +} From 34b19f903cb14f461b4d6c9eedcbe902759e056c Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 18:11:47 +0900 Subject: [PATCH 29/31] A bit change. --- pkg/db/db.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pkg/db/db.go b/pkg/db/db.go index 6596df3..ed88dd4 100644 --- a/pkg/db/db.go +++ b/pkg/db/db.go @@ -1,6 +1,9 @@ package db -import "database/sql" +import ( + "database/sql" + "log" +) var ( DB *sql.DB @@ -29,12 +32,12 @@ func initDB() error { func Init() { db, err := sql.Open("sqlite3", "database.db") if err != nil { - panic(err) + log.Println(err) } DB = db if err := initDB(); err != nil { - panic(err) + log.Println(err) } } From f17fef2850e65aeba84534626ef826af8e53b21d Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 18:12:42 +0900 Subject: [PATCH 30/31] Add Initialization for Top-Page. --- pkg/di/di.go | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/pkg/di/di.go b/pkg/di/di.go index 2fb952d..6d39d3b 100644 --- a/pkg/di/di.go +++ b/pkg/di/di.go @@ -1,3 +1,19 @@ package di -func Init() {} +import ( + app "github.com/stepupgo/stepupgo2-1/pkg/application" + "github.com/stepupgo/stepupgo2-1/pkg/infra/api" +) + +var ( + Top app.ATop +) + +func Init() { + initTop() +} + +func initTop() { + t := api.NewITop() + Top = app.NewTopApp(t) +} From b72a226c00350788b5a1f0fd193a939f5609e9d4 Mon Sep 17 00:00:00 2001 From: Miyajima Kenta Date: Sun, 27 Oct 2019 18:13:25 +0900 Subject: [PATCH 31/31] Add resiever. --- pkg/server/handler/top.go | 3 ++- pkg/server/server.go | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/server/handler/top.go b/pkg/server/handler/top.go index f753cf6..624efb5 100644 --- a/pkg/server/handler/top.go +++ b/pkg/server/handler/top.go @@ -4,13 +4,14 @@ import ( "encoding/json" "net/http" + "github.com/stepupgo/stepupgo2-1/pkg/di" "github.com/stepupgo/stepupgo2-1/pkg/server/model" "github.com/stepupgo/stepupgo2-1/pkg/view" ) func TopPage() http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - resp, err := http.Get("https://lottery-dot-tenntenn-samples.appspot.com/available_lotteries") + resp, err := di.Top.GetAvailable() if err != nil { const status = http.StatusInternalServerError http.Error(w, http.StatusText(status), status) diff --git a/pkg/server/server.go b/pkg/server/server.go index d30aa99..564b14a 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -27,8 +27,11 @@ func connection() { } func Run() { + // Initialize db.Init() di.Init() + + // Service routing() connection() }