97 lines
2.1 KiB
Go
97 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
"strconv"
|
|
"html/template"
|
|
)
|
|
|
|
type rub float64
|
|
|
|
func (r rub) String() string {
|
|
return fmt.Sprintf("%.2f",r)
|
|
}
|
|
|
|
var tmpl *template.Template
|
|
|
|
|
|
func Render(w http.ResponseWriter, req *http.Request) {
|
|
err := tmpl.Execute(w,req)
|
|
if err != nil {
|
|
http.Error(w,err.Error(),http.StatusInternalServerError)
|
|
}
|
|
}
|
|
|
|
type database map[string]rub
|
|
|
|
type List struct {
|
|
Items database
|
|
}
|
|
|
|
func (db *database) list(w http.ResponseWriter, req *http.Request) {
|
|
data := List{
|
|
Items: *db,
|
|
}
|
|
|
|
err := tmpl.ExecuteTemplate(w,"template.html",data)
|
|
if err != nil {
|
|
http.Error(w,err.Error(),http.StatusInternalServerError)
|
|
}
|
|
}
|
|
|
|
func (db *database) price(w http.ResponseWriter,req *http.Request) {
|
|
item := req.URL.Query().Get("item")
|
|
v,ok := (*db)[item]
|
|
if !ok {
|
|
w.WriteHeader(http.StatusNotFound)
|
|
fmt.Fprintf(w,"%s not found in goods list",item)
|
|
return
|
|
}
|
|
fmt.Fprintf(w,"Price of %s is %s",item,v)
|
|
}
|
|
|
|
func (db *database) update(w http.ResponseWriter, req *http.Request) {
|
|
item := req.URL.Query().Get("item")
|
|
price := req.URL.Query().Get("price")
|
|
f,err := strconv.ParseFloat(price,2)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
(*db)[item] = rub(f)
|
|
fmt.Fprintf(w,"item %s and price %s",item,(*db)[item])
|
|
}
|
|
|
|
// func (db database) ServeHTTP(w http.ResponseWriter, r *http.Request ) {
|
|
// switch r.URL.Path {
|
|
// case "/list":
|
|
// for k,v := range db {
|
|
// fmt.Fprintf(w,"%s costs %s rub\n",k,v)
|
|
// }
|
|
// case "/price":
|
|
// item := r.URL.Query().Get("item")
|
|
// v,ok := db[item]
|
|
// if !ok {
|
|
// w.WriteHeader(http.StatusNotFound)
|
|
// fmt.Fprintf(w,"%s not found in goods list",item)
|
|
// return
|
|
// }
|
|
// fmt.Fprintf(w,"Price of %s is %s",item,v)
|
|
// }
|
|
// }
|
|
|
|
func main() {
|
|
db := database{
|
|
"sneakers": 10.0,
|
|
"boots": 20,
|
|
}
|
|
// mux.Handle("/list",http.HandlerFunc(db.list))
|
|
// mux.Handle("/price",http.HandlerFunc(db.price))
|
|
tmpl = template.Must(template.ParseFiles("template.html"))
|
|
http.HandleFunc("/list",db.list)
|
|
http.HandleFunc("/price",db.price)
|
|
http.HandleFunc("/update",db.update)
|
|
log.Fatal(http.ListenAndServe(":9090",nil))
|
|
}
|