Advertisement
Guest User

Untitled

a guest
Jan 20th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.62 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "github.com/gorilla/mux"
  5. "encoding/json"
  6. "net/http"
  7. "log"
  8. "structs"
  9. "database/sql"
  10. _ "github.com/go-sql-driver/mysql"
  11. "io/ioutil"
  12. "strconv"
  13. //"fmt"
  14. //"os"
  15. //"strings"
  16. //
  17. //"io"
  18. )
  19.  
  20. var categs, recipes = structs.InitAll()
  21. var conf = structs.GetConfig()
  22. var db, err = sql.Open("mysql", conf["login"] + ":" + conf["password"] + "@/" + conf["dbname"])
  23.  
  24. func main() {
  25.  
  26. if err != nil {
  27. panic(err)
  28. }
  29. defer db.Close()
  30.  
  31. r := mux.NewRouter()
  32.  
  33. r.HandleFunc("/", MainHandler)
  34. r.HandleFunc("/categories", CategoriesGetHandler)
  35. r.HandleFunc("/category/{id}", CategRecipeGetHandler)
  36. r.HandleFunc("/recipe/{id}", RecipeGetHandler)
  37. r.HandleFunc("/recipes", RecipesGetHandler)
  38. r.HandleFunc("/recipe/{id}/postcomment", CommentPostHandler)
  39.  
  40. log.Println("Listen port " + conf["port"])
  41. http.ListenAndServe(":" + conf["port"], r)
  42. }
  43.  
  44. func CommentPostHandler(iWrt http.ResponseWriter, iReq *http.Request) {
  45. var resp structs.PostForm
  46. vars := mux.Vars(iReq)
  47.  
  48. id, err := strconv.Atoi(vars["id"])
  49.  
  50. if err != nil {
  51. panic(err)
  52. }
  53.  
  54. body, err := ioutil.ReadAll(iReq.Body)
  55.  
  56. if err != nil {
  57. panic(err)
  58. } else {
  59. err = json.Unmarshal(body, &resp)
  60. if err != nil {
  61. panic(err)
  62. }
  63. }
  64.  
  65. _, err = db.Exec("insert into serverDB.comments (id, text) values (?, ?)", id, resp.Text)
  66.  
  67. if err != nil {
  68. panic(err)
  69. } else {
  70. iWrt.WriteHeader(http.StatusCreated)
  71. }
  72. }
  73.  
  74. func RecipesGetHandler(iWrt http.ResponseWriter, iReq *http.Request) {
  75. var result []structs.Frecipe
  76.  
  77. rows, error := db.Query("select * from " + conf["dbname"] + ".recipe")
  78. if error != nil {
  79. panic(error)
  80. }
  81.  
  82. for rows.Next() {
  83. rec := structs.Frecipe{}
  84. err := rows.Scan(&rec.Recipe_id, &rec.User_id, &rec.Recipe_title, &rec.Time_of_cooking, &rec.Recipe,
  85. &rec.Recipe_image, &rec.Recipe_type, &rec.Calories, &rec.Proteins, &rec.Carbohydrates,
  86. &rec.Portions, &rec.Fats)
  87. if err != nil {
  88. panic(err)
  89. continue
  90. }
  91. result = append(result, rec)
  92.  
  93. }
  94.  
  95. if len(result) == 0 {
  96. iWrt.WriteHeader(http.StatusNotFound)
  97. } else {
  98. outJson, err := json.Marshal(result)
  99.  
  100. if err != nil {
  101. panic(err)
  102. }
  103.  
  104. iWrt.Write(outJson)
  105. }
  106. }
  107.  
  108. func MainHandler(iWrt http.ResponseWriter, iReq *http.Request) {
  109. iWrt.WriteHeader(http.StatusNotFound)
  110. }
  111.  
  112. func RecipeGetHandler(iWrt http.ResponseWriter, iReq *http.Request){
  113. vars := mux.Vars(iReq)
  114.  
  115. recipe := vars["id"]
  116.  
  117. row, err := db.Query("select * from serverDB.recipe where id = " + recipe)
  118.  
  119. if err != nil {
  120. panic(err)
  121. }
  122.  
  123. rec := structs.Frecipe{}
  124.  
  125. err = row.Scan(&rec.Recipe_id, &rec.User_id, &rec.Recipe_title, &rec.Time_of_cooking, &rec.Recipe,
  126. &rec.Recipe_image, &rec.Recipe_type, &rec.Calories, &rec.Proteins, &rec.Carbohydrates,
  127. &rec.Portions, &rec.Fats)
  128.  
  129. if err != nil || rec.Recipe == "" {
  130. iWrt.WriteHeader(http.StatusNotFound)
  131. } else {
  132.  
  133. outJson, _ := json.Marshal(rec)
  134. iWrt.Write(outJson)
  135. }
  136. }
  137.  
  138. func CategoriesGetHandler(iWrt http.ResponseWriter, iReq *http.Request){
  139. var result []structs.Categ
  140.  
  141. rows, err := db.Query("select * from serverDB.recipe_types")
  142.  
  143. if err != nil {
  144. panic(err)
  145. }
  146.  
  147. for rows.Next() {
  148. var categ = structs.Categ{}
  149.  
  150. err = rows.Scan(&categ.Recipe_type, &categ.Type_name, &categ.Type_image)
  151.  
  152. if err != nil {
  153. panic(err)
  154. }
  155.  
  156. result = append(result, categ)
  157. }
  158.  
  159. if len(result) != 0 {
  160. outJson, _ := json.Marshal(result)
  161. iWrt.Write(outJson)
  162. } else {
  163. iWrt.WriteHeader(http.StatusNotFound)
  164. }
  165. }
  166.  
  167. func CategRecipeGetHandler(iWrt http.ResponseWriter, iReq *http.Request){
  168. vars := mux.Vars(iReq)
  169. category := vars["id"]
  170.  
  171. var result []structs.Frecipe
  172.  
  173. rows, err := db.Query("select * from serverDB.recipe")
  174.  
  175. if err != nil {
  176. panic(err)
  177. }
  178.  
  179. for rows.Next(){
  180. rec := structs.Frecipe{}
  181.  
  182. err = rows.Scan(&rec.Recipe_id, &rec.User_id, &rec.Recipe_title, &rec.Time_of_cooking, &rec.Recipe,
  183. &rec.Recipe_image, &rec.Recipe_type, &rec.Calories, &rec.Proteins, &rec.Carbohydrates,
  184. &rec.Portions, &rec.Fats)
  185.  
  186. if err != nil {
  187. panic(err)
  188. }
  189.  
  190. if structs.IntToString(rec.Recipe_id) == category {
  191. result = append(result, rec)
  192. }
  193. }
  194. if len(result) == 0 {
  195. iWrt.WriteHeader(http.StatusNotFound)
  196. } else {
  197. outJson, err := json.Marshal(result)
  198.  
  199. if err != nil {
  200. panic(err)
  201. }
  202.  
  203. iWrt.Write(outJson)
  204. }
  205. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement