Advertisement
Guest User

Untitled

a guest
Feb 5th, 2019
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 2.61 KB | None | 0 0
  1. package controllers
  2.  
  3. import (
  4.     "database/sql"
  5.     "encoding/json"
  6.     "net/http"
  7.  
  8.     "github.com/gorilla/mux"
  9. )
  10.  
  11. type Keyword struct {
  12.     Id   int64  `bson:"_id"`
  13.     Name string `json:keyword`
  14. }
  15.  
  16. type Keywords []Keyword
  17.  
  18. // func getKeywords(w http.ResponseWriter, r *http.Request) {
  19. //  db := dbConn()
  20.  
  21. //  selDB, err := db.Query("SELECT * FROM keywords")
  22. //  checkErr(err)
  23.  
  24. //  kwd := Keyword{}
  25.  
  26. //  for selDB.Next() {
  27. //      var uid int
  28. //      var keyword string
  29. //      err = selDB.Scan(&uid, &keyword)
  30. //      checkErr(err)
  31. //      kwd.Id = uid
  32. //      kwd.Keyword = keyword
  33. //  }
  34.  
  35. //  json.NewEncoder(w).Encode(map[string]Keyword{"keywords": kwd})
  36.  
  37. //  defer db.Close()
  38. // }
  39.  
  40. func dbConn() (db *sql.DB) {
  41.     dbDriver := "mysql"
  42.     dbUser := "root"
  43.     dbPass := ""
  44.     dbName := "keywords"
  45.     db, err := sql.Open(dbDriver, dbUser+":"+dbPass+"@/"+dbName)
  46.     if err != nil {
  47.         panic(err.Error())
  48.     }
  49.     return db
  50. }
  51.  
  52. func (c Keyword) Add(w http.ResponseWriter, r *http.Request) {
  53.     db := dbConn()
  54.  
  55.     if r.Method == "POST" {
  56.         params := mux.Vars(r)
  57.         kw := params["keyword"]
  58.  
  59.         sqlStatement := `SELECT id, keyword FROM keywords WHERE keyword=?;`
  60.         var keyword string
  61.         var id int
  62.         // Replace 3 with an ID from your database or another random
  63.         // value to test the no rows use case.
  64.         row := db.QueryRow(sqlStatement, kw)
  65.  
  66.         switch err := row.Scan(&id, &keyword); err {
  67.         case sql.ErrNoRows:
  68.             insForm, err := db.Prepare("INSERT INTO keywords(keyword) VALUES(?)")
  69.             if err != nil {
  70.                 panic(err.Error())
  71.             }
  72.             insForm.Exec(kw)
  73.  
  74.             json.NewEncoder(w).Encode("Added " + kw)
  75.         case nil:
  76.             json.NewEncoder(w).Encode(kw + " already exists.")
  77.         default:
  78.             panic(err)
  79.         }
  80.     }
  81.     defer db.Close()
  82.     http.Redirect(w, r, "/", 301)
  83. }
  84.  
  85. func (c Keyword) GetAll(w http.ResponseWriter, r *http.Request) {
  86.     db := dbConn()
  87.  
  88.     if r.Method == "GET" {
  89.  
  90.         rows, err := db.Query("SELECT id, keyword FROM keywords")
  91.         if err != nil {
  92.             // handle this error better than this
  93.             panic(err)
  94.         }
  95.  
  96.         jsonText := []byte(`[]`)
  97.  
  98.         var keywords []Keyword
  99.  
  100.         err1 := json.Unmarshal(jsonText, &keywords)
  101.  
  102.         if err1 != nil {
  103.             // handle this error better than this
  104.             panic(err1)
  105.         }
  106.  
  107.         defer rows.Close()
  108.         for rows.Next() {
  109.             var id int64
  110.             var keyword string
  111.             err = rows.Scan(&id, &keyword)
  112.             if err != nil {
  113.                 // handle this error
  114.                 panic(err)
  115.             }
  116.  
  117.             keywords = append(keywords, Keyword{Id: id, Name: keyword})
  118.         }
  119.  
  120.         result, err := json.Marshal(keywords)
  121.  
  122.         w.Write(result)
  123.  
  124.         // get any error encountered during iteration
  125.         err = rows.Err()
  126.         if err != nil {
  127.             panic(err)
  128.         }
  129.     }
  130.     defer db.Close()
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement