From 1ace2e978c86073664cadfd70132b7f7d714f89a Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena Date: Sat, 20 Jan 2024 13:02:19 +0530 Subject: [PATCH 1/8] improvements and refactoring --- .idea/.gitignore | 8 ++++++++ .idea/modules.xml | 8 ++++++++ .idea/screening.iml | 9 +++++++++ .idea/vcs.xml | 6 ++++++ api.go | 40 +++++++++++++++++++++++++++++----------- db.go | 36 ++++++++++++++++++++++++++++++++++++ facade.go | 6 ++++++ main.go | 4 +++- 8 files changed, 105 insertions(+), 12 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/modules.xml create mode 100644 .idea/screening.iml create mode 100644 .idea/vcs.xml create mode 100644 db.go create mode 100644 facade.go diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..28c7770 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/screening.iml b/.idea/screening.iml new file mode 100644 index 0000000..5e764c4 --- /dev/null +++ b/.idea/screening.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/api.go b/api.go index cbef2ef..dbffe07 100644 --- a/api.go +++ b/api.go @@ -5,25 +5,43 @@ import ( "net/http" ) -func setupJsonApi() { +func setupJsonApi(d DAO) { http.HandleFunc("/createUser", func(w http.ResponseWriter, r *http.Request) { - // create mysql connection - conn := createConnection() name := r.FormValue("name") email := r.FormValue("email") - query := "INSERT INTO users (name, email) VALUES (" + name + ", " + email + ")" - result, err := conn.Exec(query) - fmt.Println("result ", result, " err ", err.Error()) + if name == "" || email == "" { + w.WriteHeader(http.StatusBadRequest) + w.Write([]byte("Bad Request")) + return + } + err := d.CreateUser(name, email) + if err != nil { + fmt.Println("Error creating user:", err) + w.WriteHeader(http.StatusInternalServerError) + w.Write([]byte("Error creating user")) + return + } + w.WriteHeader(http.StatusCreated) w.Write([]byte("Created user successfully!")) }) http.HandleFunc("/updateUser", func(w http.ResponseWriter, r *http.Request) { - // create mysql connection - conn := createConnection() + name := r.FormValue("name") email := r.FormValue("email") - query := "Update users set name=" + name + ", email=" + email + " where id=" + r.FormValue("id") - result, err := conn.Exec(query) - fmt.Println("result ", result, " err ", err.Error()) + id := r.FormValue("id") + if id == "" || name == "" || email == "" { + w.WriteHeader(http.StatusBadRequest) + w.Write([]byte("Bad Request")) + return + } + err := d.UpdateUser(id, name, email) + if err != nil { + fmt.Println("Error updating user:", err) + w.WriteHeader(http.StatusInternalServerError) + w.Write([]byte("Error updating user")) + return + } + w.WriteHeader(http.StatusOK) w.Write([]byte("User updated successfully!")) }) } diff --git a/db.go b/db.go new file mode 100644 index 0000000..609fef6 --- /dev/null +++ b/db.go @@ -0,0 +1,36 @@ +package main + +import ( + "database/sql" + "fmt" +) + +type dao struct { + db *sql.DB +} + +func NewDAO(db *sql.DB) DAO { + return &dao{db: db} +} + +func (d *dao) CreateUser(name, email string) error { + query := "INSERT INTO users (name, email) VALUES (" + name + ", " + email + ")" + result, err := d.db.Exec(query) + if err != nil { + fmt.Println("error in creating user : ", err) + return err + } + fmt.Println("result ", result, " err ", err.Error()) + return nil +} + +func (d *dao) UpdateUser(id, name, email string) error { + query := "Update users set name=" + name + ", email=" + email + " where id=" + id + ")" + result, err := d.db.Exec(query) + if err != nil { + fmt.Println("error in creating user : ", err) + return err + } + fmt.Println("result ", result, " err ", err.Error()) + return nil +} diff --git a/facade.go b/facade.go new file mode 100644 index 0000000..122131f --- /dev/null +++ b/facade.go @@ -0,0 +1,6 @@ +package main + +type DAO interface { + CreateUser(name, email string) error + UpdateUser(id, name, email string) error +} diff --git a/main.go b/main.go index 18805dd..ec76afe 100644 --- a/main.go +++ b/main.go @@ -5,6 +5,8 @@ import ( ) func main() { - setupJsonApi() + db := createConnection() + mysqlDAO := NewDAO(db) + setupJsonApi(mysqlDAO) http.ListenAndServe(":80", nil) } From c3eb966a9a1d8be7e4f7e3791d31c94d5f44673a Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena Date: Sat, 20 Jan 2024 17:10:35 +0530 Subject: [PATCH 2/8] refactored code --- main.go | 7 ++++++- utils.go | 10 +++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/main.go b/main.go index ec76afe..1502310 100644 --- a/main.go +++ b/main.go @@ -1,11 +1,16 @@ package main import ( + "fmt" "net/http" ) func main() { - db := createConnection() + db, err := createConnection() + if err != nil { + fmt.Println("error in connecting db : ", err) + return + } mysqlDAO := NewDAO(db) setupJsonApi(mysqlDAO) http.ListenAndServe(":80", nil) diff --git a/utils.go b/utils.go index e65cd87..8c9d61d 100644 --- a/utils.go +++ b/utils.go @@ -6,8 +6,12 @@ import ( ) // createConnection creates a connection to mysql database -func createConnection() *sql.DB { +func createConnection() (*sql.DB, error) { db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/test") - fmt.Println("sql open " + err.Error()) - return db + if err != nil { + fmt.Println("sql open " + err.Error()) + return nil, err + } + + return db, nil } From e286fd4a313345564c90e9a8f0c34e7177ab4ae9 Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena Date: Sat, 20 Jan 2024 17:11:30 +0530 Subject: [PATCH 3/8] refactored code --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitignore b/.gitignore index 3b735ec..56639a7 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,8 @@ # Go workspace file go.work + + +# goland ide + +/.idea From 0a7005aef8b8111830c9361f566d6a7fc2240c47 Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena <82103333+UtkarshSaxenautk@users.noreply.github.com> Date: Sat, 20 Jan 2024 17:13:48 +0530 Subject: [PATCH 4/8] Delete .idea/.gitignore --- .idea/.gitignore | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 .idea/.gitignore diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 13566b8..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml From c9e5a5e93c74a554ea3506bce517d9354bd8c3cc Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena <82103333+UtkarshSaxenautk@users.noreply.github.com> Date: Sat, 20 Jan 2024 17:14:11 +0530 Subject: [PATCH 5/8] Delete .idea/modules.xml --- .idea/modules.xml | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 .idea/modules.xml diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 28c7770..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file From ce6a2c5cc2be567e9484dff0fbaeb4d44f7bb81e Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena <82103333+UtkarshSaxenautk@users.noreply.github.com> Date: Sat, 20 Jan 2024 17:14:21 +0530 Subject: [PATCH 6/8] Delete .idea/screening.iml --- .idea/screening.iml | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 .idea/screening.iml diff --git a/.idea/screening.iml b/.idea/screening.iml deleted file mode 100644 index 5e764c4..0000000 --- a/.idea/screening.iml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file From c8605e63231832be0f60a2120ba86e3057a4fc34 Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena <82103333+UtkarshSaxenautk@users.noreply.github.com> Date: Sat, 20 Jan 2024 17:14:35 +0530 Subject: [PATCH 7/8] Delete .idea/vcs.xml --- .idea/vcs.xml | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 .idea/vcs.xml diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1dd..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file From 55b54328e2e41c702e490bfac737852273c8271e Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena Date: Sat, 20 Jan 2024 17:21:06 +0530 Subject: [PATCH 8/8] modified dockerfile --- Dockerfile | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index d1438c5..a5b69f8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,14 +1,16 @@ # docker file for building Go application -FROM ubuntu:latest - -# Install dependencies -RUN sudo apt install -y git go wget - -COPY . /app +FROM golang:1.20 AS builder WORKDIR /app -# Build the application -RUN go build -o main . +COPY . . -CMD [ "main" ] \ No newline at end of file +RUN CGO_ENABLED=0 GOOS=linux go build -o main . + +# Install dependenciesFROM alpine:3.9 as base +FROM alpine:3.9 as base +RUN apk --no-cache add ca-certificates +RUN apk --no-cache add tzdata +WORKDIR /app +COPY --from=builder /app/main . +CMD [ "./main" ] \ No newline at end of file