diff --git a/Makefile b/Makefile index 4aaf8b8..85e8e06 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,6 @@ run: build docker-compose up build-binary: - GOOS=linux GOARCH=amd64 go build + GOOS=linux GOARCH=amd64 go build -o bins/genityapp -v cmd/genityapp/* -.PHONY: build-binary run build +.PHONY: build-binary run build diff --git a/cmd/genityapp/main.go b/cmd/genityapp/main.go index 8c53afb..22f7c51 100644 --- a/cmd/genityapp/main.go +++ b/cmd/genityapp/main.go @@ -7,7 +7,7 @@ import ( "log" "net/http" - "genityapi" + "domain/genityapp/genityapi" ) var db *sql.DB @@ -32,7 +32,6 @@ func main() { } - func initDb() { config := dbConfig() var err error @@ -54,7 +53,7 @@ func initDb() { func dbConfig() map[string]string { conf := make(map[string]string) - conf[dbhost] = "genitywebapp_db_1" + conf[dbhost] = "genitywebapp_db_1" conf[dbport] = "5432" conf[dbuser] = "root_user" conf[dbpass] = "shahzad12" diff --git a/configs/web.env b/configs/web.env index 35d07fd..e68a234 100644 --- a/configs/web.env +++ b/configs/web.env @@ -1,4 +1,4 @@ -dbhost=genitywebapp_db_1 +dbhost=${COMPOSE_PROJECT_NAME}_db_1 dbport=5432 dbuser=root_user dbpass=shahzad12 diff --git a/go.mod b/go.mod index 45c6723..f3d8b8e 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module genityapi +module domain/genityapp go 1.14 diff --git a/internal/app/genityapp/api.go b/internal/app/genityapp/api.go index 214c42e..789e167 100644 --- a/internal/app/genityapp/api.go +++ b/internal/app/genityapp/api.go @@ -3,6 +3,7 @@ package genityapi import ( "encoding/json" "fmt" + uuid "github.com/nu7hatch/gouuid" "net/http" "time" ) @@ -19,21 +20,38 @@ type Users struct { func UserGetHandler(w http.ResponseWriter, req *http.Request) { if req.Method == "GET" { + + title, ok := req.URL.Query()["title"] + + if !ok || len(title[0]) < 1 { + http.Error(w, "Url Param 'title' is missing", 400) + return + } + + // Query()["key"] will return an array of items, + // we only want the single item. + userTitle := title[0] + users := Users{} - err := queryRepos(&users) + err := queryRepos(&users, userTitle) if err != nil { http.Error(w, err.Error(), 500) return } - out, err := json.Marshal(users.users) - if err != nil { - http.Error(w, err.Error(), 500) - return - } + if len(users.users) > 0 { - fmt.Fprintf(w, string(out)) + out, err := json.Marshal(users.users) + if err != nil { + http.Error(w, err.Error(), 500) + return + } + + fmt.Fprintf(w, string(out)) + } else { + fmt.Fprintf(w, "User does not exist") + } } else { fmt.Fprintf(w, "Sorry, only Get methods are supported for thus api.") } @@ -45,19 +63,26 @@ func UserPostHandler(w http.ResponseWriter, req *http.Request) { fmt.Fprintf(w, "ParseForm() err: %v", err) return } + + uuid, err := uuid.NewV4() + if err != nil { + http.Error(w, err.Error(), 500) + + } + title := req.FormValue("title") sqlInsert := ` -INSERT INTO users (title, created_on) -VALUES ($1, $2) +INSERT INTO users (title, created_on,uuid) +VALUES ($1, $2, $3) RETURNING user_id` if len(title) > 0 { user_id := 0 - row := db.QueryRow(sqlInsert, title, time.Now()) + row := db.QueryRow(sqlInsert, title, time.Now().Format(time.RFC3339), uuid.String()) err := row.Scan(&user_id) if err != nil { panic(err) } - fmt.Fprintf(w, "user creted") + fmt.Fprintf(w, "user created.") } else { fmt.Fprintf(w, "Invalid data") } @@ -66,15 +91,18 @@ RETURNING user_id` } } -func queryRepos(users *Users) error { - rows, err := db.Query(` +func queryRepos(users *Users, userTitle string) error { + query := ` SELECT user_id, title, created_on - FROM users; - `) + FROM users + WHERE title='` + userTitle + `'; + ` + + rows, err := db.Query(query) if err != nil { return err }