Skip to content

Instantly share code, notes, and snippets.

@hectorgool
Created September 14, 2015 21:54
Show Gist options
  • Select an option

  • Save hectorgool/482494d67eed6443b12d to your computer and use it in GitHub Desktop.

Select an option

Save hectorgool/482494d67eed6443b12d to your computer and use it in GitHub Desktop.
/*
CREATE TABLE users (
user_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
user_nickname VARCHAR(32) NOT NULL,
user_first VARCHAR(32) NOT NULL,
user_last VARCHAR(32) NOT NULL,
user_email VARCHAR(128) NOT NULL,
PRIMARY KEY (user_id),
UNIQUE INDEX user_nickname (user_nickname)
)
*/
/*
curl http://localhost:8000/api/users --data "name=nkozyra&email=nkozyra@gmail.com&first=nathan&last=nathan"
*/
package main
import (
"database/sql"
"encoding/json"
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/gorilla/mux"
//"log"
"net/http"
)
var database *sql.DB
type Users struct {
Users []User `json:"users"`
}
type User struct {
ID int "json:id"
Name string "json:username"
Email string "json:email"
First string "json:first"
Last string "json:last"
}
func UserCreate(w http.ResponseWriter, r *http.Request) {
NewUser := User{}
NewUser.Name = r.FormValue("user")
NewUser.Email = r.FormValue("email")
NewUser.First = r.FormValue("first")
NewUser.Last = r.FormValue("last")
output, err := json.Marshal(NewUser)
fmt.Println(string(output))
if err != nil {
fmt.Println("Something went wrong!")
}
sql := "INSERT INTO users set user_nickname='" + NewUser.Name +
"', user_first='" + NewUser.First + "', user_last='" +
NewUser.Last + "', user_email='" + NewUser.Email + "'"
q, err := database.Exec(sql)
if err != nil {
fmt.Println(err)
}
fmt.Println(q)
}
func UsersRetrieve(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Pragma", "no-cache")
rows, _ := database.Query("SELECT * FROM users LIMIT 10")
Response := Users{}
for rows.Next() {
user := User{}
rows.Scan( &user.ID, &user.Name, &user.First, &user.Last, &user.Email )
Response.Users = append(Response.Users, user)
}
output, _ := json.Marshal(Response)
fmt.Fprintln(w, string(output))
}
func main() {
//db, err := sql.Open("mysql", "root@/social_network")
db, err := sql.Open("mysql", "hector:asdf@/go")
if err != nil {
fmt.Println(err)
}
database = db
routes := mux.NewRouter()
routes.HandleFunc("/api/users", UserCreate).Methods("POST")
routes.HandleFunc("/api/users", UsersRetrieve).Methods("GET")
http.Handle("/", routes)
http.ListenAndServe(":8000", nil)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment